目录
函数定义、调用
- def语句定义函数
def 函数名(参数列表):
函数体(代码块)
[return 返回值]- 函数名就是标识符,命名要求一样
- Python的函数没有return语句,隐式会返回一个None值
- 定义中的参数列表成为形式参数,只是一种符号表达,简称形参
- 调用
- 调用的方式,就是函数名加上小括号,括号内写上参数
- 调用时写的参数是实际参数,是实实在在传入的值,简称实参
函数参数传参
- 位置参数传参
- 按照函数的形参个数,就行实参传递;形参的个数要与实参的个数匹配,不然函数回报错TypeError:
def est_qw(a,b,c): print(a) print(b) print(c) est_qw(1,2,3) 结果: 1 2 3
- 按照函数的形参个数,就行实参传递;形参的个数要与实参的个数匹配,不然函数回报错TypeError:
- 关键词参数传参
- 使用形参的名字来出入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同
def est_qw(a,b,c): print(a) print(b) print(c) est_qw(c=1,b=3,a=2) 结果: 2 3 1
- 使用形参的名字来出入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同
- 默认值参数传参
- 参数的默认值可以在未传入足够的实参的时候,对没有给定的参数赋值为默认值
- 参数非常多的时候,并不需要用户每次都输入所有的参数,简化函数调用
- 位置形参要放到,默认参数之后
def est_qw(c,a=1,b=2,): print(a) print(b) print(c) est_qw(4) 结果: 1 2 4
函数参数可变参数传参
- 位置参数的可变参数
- 在形参前使用【 * 】表示该形参是可变参数,可以接收多个实参
- 收集多个实参为一个tuple
def est_qw(*args): print(args) for i in args: print(i) est_qw(1,2,3,4,5) 结果: (1, 2, 3, 4, 5) 1 2 3 4 5
- 关键字参数的可变参数
- 形参前使用**符号,表示可以接收多个关键字参数
- 收集的实参名称和值组成一个字典
def est_qw(**kwargs): print(kwargs) for k,v in kwargs.items(): print(f"key:{k},valuee:{v}") est_qw(a=1,b="ji") 结果: {'a': 1, 'b': 'ji'} key:a,valuee:1 key:b,valuee:ji
- 有位置可变参数和关键字可变参数
- 位置可变参数在形参前使用一个星号*
- 关键字可变参数在形参前使用两个星号**
- 位置可变参数和关键字可变参数都可以收集若干个实参,位置可变参数收集形成一个tuple,关 键字可变参数收集形成一个dict
- 混合使用参数的时候,可变参数要放到参数列表的最后,普通参数需要放到参数列表前面,位 置可变参数需要在关键字可变参数之前【 位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数】
例子
- 位置可变参数后有位置参数【相当于关键字传参】
- 在一个星号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的 参数了,而是【关键字】参数
def fn(*args, x): print(x) print(args) 结果: fn(3,5) #错误传参 fn(3,5,7) #错误传参 fn(3,5,x=7)
- 在一个星号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的 参数了,而是【关键字】参数
- 位置可变参数后有位置参数【相当于关键字传参】
- 直接报语法错误;可以理解为kwargs会截获所有的关键字参数,就算你写了x=5,x也永远得不到这个值,所以语法 错误
def(**kwargs, x): print(x) print(kwargs)
- 直接报语法错误;可以理解为kwargs会截获所有的关键字参数,就算你写了x=5,x也永远得不到这个值,所以语法 错误
- 关键字传参的另一种方式
- *号之后,普通形参都变成了必须给出的关键字参数
def fn(*, x,y): print(x,y) 结果: # fn(5, 6) #错误示例 fn(x=5,y=6)
- *号之后,普通形参都变成了必须给出的关键字参数
- 参数一般顺序是,普通参数、缺省参数、可变位置参数、keyword-only参数(可带缺 省值)、可变关键字参数
def fn(x, y, z=3, *arg, m=4, n, **kwargs): print(x,y,z,m,n) print(args) print(kwargs)
参数解构
- 参数解构
- 给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有 元素作为函数的实参
- 非字典类型使用*解构成位置参数
- 字典类型使用**解构成关键字参数
- 提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配
def add(x, y): return x+y print(add(*(4,5)) ) d = {'x': 5, 'y': 6} print(add(**d)) print(add(**{'a': 5, 'b': 6})) #a,b关键字参数不存在,会报错 print(add(**{'x': 5, 'y': 6}))
- 参数解构和可变参数
- 给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有 元素作为函数的实参
def add(*iterable): for x in iterable: print(x) 结果 # add(4,2,3) # add(*[4,2,3]) add(*range(10))
- 给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有 元素作为函数的实参
本文详细介绍了Python中函数的定义与调用,重点解析了各种参数传参方式,包括位置参数、关键词参数、默认值参数、可变参数及参数解构。通过实例解析了参数传参的规则和注意事项,帮助读者掌握Python函数参数的灵活运用。
327

被折叠的 条评论
为什么被折叠?



