函数

定义、作用、及使用方式

函数是一种工具,可以被重复调用。

使用函数可精简重复代码,减少冗余,增加代码的可读性。

函数要先构造函数,然后调用函数。

构造及调用函数的语法结构

关键字def  函数名def_name( 形参1,形参2) :

  ''' 函数的功能描述'''

  函数体

---------------调--------------用-------------------

函数名def_name(实参1,实参2)

示例如下:

def def_name(a, b, *args):
''' 这里是函数的功能描述'''
print('这里是函数体', a, b)
return def_name('你', '好') # 这里是函数体 你 好

  函数名的命名规范与变量名一样,在做实际项目的时候,把将要实现的功能用函数逐个列举出来,函数体暂时先用pass替代,设计好架构之后可以进行代码编写。

函数可分为三种:空函数、无参函数、有参函数。

空函数:

def func1( ):
pass # 函数体只有pass

无参函数:

def func2( ):  # 括号里面没有形参
print('这里是函数体') # 函数体的代码,不依赖外界的值

有参函数

def func3(x,y):  # 有形参
sum1 = x + y # 函数体的代码依赖形参
print(sum1)

  

从返回值return角度看,有三大类:(函数体在执行过程中遇到return会立即终止,并跳出函数)

第一种:不写return,只写return,者写return None

return是函数结束的标志,不写return会在函数体执行完之后,默认返回None,只写return和写return None的效果一样。

第二种:return一个值

return返回的值可作为变量使用

def func3(x, y):  # 有形参
sum1 = x + y # 函数体的代码依赖形参
return sum1 toatal = func3(7, 8)
print(type(toatal), toatal) # <class 'int'> 15

  

第三种:return多个值

return多个值的时候,这多个值默认以元组形式返回,也可以自己制定返回数据的类型。

def func4(x, y):  # 有形参
sum1 = x + y # 函数体的代码依赖形参
sub1 = x - y
return sum1, sub1 subtraction = func4(9, 6)
print(type(subtraction), subtraction) # <class 'tuple'> (15, 3)

  也可以改变返回值类型,举例将默认的元组变成列表:

def func4(x, y):
sum1 = x + y
sub1 = x - y
return sum1, sub1 subtraction = list(func4(9, 6)) # 将元组转为列表
print(type(subtraction), subtraction) # <class 'list'> [15, 3]

  

在调用有参函数时,需向函数传递参数,有五种传参的方式:

位置参数

调用时,按照形参的位置,直接在调用时按照形参顺序,对应传递相应的值。上文例子中调用函数均使用位置参数的方式。

关键字参数

调用时,在实参前面表标上形参的名字,此时就不用按照顺序传值。

def func3(x, y):
sum1 = x + y
return sum1 toatal = func3(y=7, x=8)

默认参数

在定义函数时,在形参后面直接赋值,作为函数的默认参数。如果在调用函数时如果不传值,则函数体默认使用默认参数。

def func3(x=1, y=1):
sum1 = x + y
return sum1 print(func3()) # 2

  

可变长参数

*args 在定义函数时,预留的用于接收溢出的位置参数的形参。

**kwargs 在定义函数时,预留的用于接收溢出的关键字参数的形参。  溢出的值都存入字典。

【*】号在形参中用于聚合,在实参时用于打散。

*kwargs表示打散字典,取key。

如果位置参数和关键字参数混用,位置参数一定要放在关键字参数前面。

# _*_ coding: gbk _*_
# @Author: Wonder
def find(w, z, *args):
sum1 = w + z
print(args) # (4, 5)
return sum1 eee = find(2, 3, 4, 5, ) def find2(w, z, **args):
sum1 = w + z
print(*args) # q p
print(args) # {'q': 4, 'p': 5}
return sum1 r = find2(w=2, z=3, q=4, p=5, )

  

CSIC_716_20191109【函数的语法,以及函数的分类,可变长参数*args】的更多相关文章

  1. go实例—函数或方法的可变长参数

    支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表的函数. 需要注意的是,可变长参数应该是函数定义的最右边的参数,即最后一个参数 package ...

  2. python基础语法5 函数定义,可变长参数

    函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...

  3. python 函数可变长参数

    python中的可变长参数有两种: 一种是非关键字参数(*元组),另一种是关键字参数(**字典) 非关键字可变长参数: """ 非关键字可变参数,一个星号作为元组传入函数 ...

  4. Noah的学习笔记之Python篇:函数“可变长参数”

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  5. [转]深度探索C语言函数可变长参数

    转自:http://www.cnblogs.com/chinazhangjie/archive/2012/08/18/2645475.html 一.基础部分 1.1 什么是可变长参数 可变长参数:顾名 ...

  6. Python中函数的参数传递与可变长参数

    转自旭东的博客原文 Python中函数的参数传递与可变长参数 Python中传递参数有以下几种类型: (1)像C++一样的默认缺省函数 (2)根据参数名传参数 (3)可变长度参数 示例如下: (1)默 ...

  7. 【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域

    可变长参数 一.形参 位置形参 默认形参 二.实参 位置实参 关键字实参 三.可变长参数之* def func(name,pwd,*args): print('name:',name,'pwd:',p ...

  8. C语言开发具有可变长参数的函数的方法

    学习交流可加 微信读者交流①群 (添加微信:coderAllen) 程序员技术QQ交流①群:736386324 --- 前提:ANSI C 为了提高可移植性, 通过头文件stdarg.h提供了一组方便 ...

  9. C++ 系列:函数可变长参数

    一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...

随机推荐

  1. sublimeText3的安装及插件的配置使用

    这里主要记录一些关于sublime text的配置,并且参照了别人的博客归纳的. 一.下载sublime text   http://www.sublimetext.com/3二.安装Package ...

  2. spring boot Swagger2(version=2.7.0) 注解@ApiImplicitParam的属性dataType值为”自定义泛型“应用

    注解: @ApiImplicitParams @ApiImplicitParam    name="需注解的API输入参数", value="接收参数的意义描述" ...

  3. win查看所有wifi密码

    for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | finds ...

  4. 微信小程序之评分页面

    首先给大家看看做好的效果图: 一.接下来我们说一下评分这个功能: 实际上就是一个简单的js,首先我们遍历出小星星,此时默认给的五星好评,在给他们一个点击事件,当点击时,我们获取到当前点击的是第几颗:代 ...

  5. codeforces1175E Minimal Segment Cover 倍增

    题目传送门 题意:给出n条平行于x轴的线段,q次询问,每次询问一个区间最少要几条线段来覆盖,若不能覆盖则输出-1. 思路:先考虑贪心,必定是先找到,所有左端点小于等于$x$的线段的右端点最大在哪里,然 ...

  6. could not load the tomcat server configuration ...

    参考文档:  https://blog.csdn.net/u013381651/article/details/51567758 问题解决. 原因是你把项目里的tomcat的server项目也关闭了, ...

  7. Android开发 MediaPlayer播放本地视频完善的demo(只是代码记录)

    xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.w ...

  8. Oracle 、MySql 数据库表被锁的原因分析

    记录一次准备给客户预演示出现的问题 事故的背景: 当所以功能开发完成后,开发人员在本地进行了测视已经没问题了.就把所有开发的功能模块合并到 dev 分支,进行打包,发布到预演示的线上环境.当在给相关人 ...

  9. Zabbix-server及zabbix-web安装手册(centos7)

    注:本实验环境在centos7mini下实验,具体相关软件版本最好一致,避免依赖关系缺失. 当然也可以新建用户zabbix(不使用root,避免安全隐患),在zabbix下执行操作,加sudo提升权限 ...

  10. 使用JS实现快速排序

    大致分三步: 1.找基准(一般是以中间项为基准) 2.遍历数组,小于基准的放在left,大于基准的放在right 3.递归 function quickSort(arr){ //如果数组<=1, ...