这里主要总结学习python的函数时的一些参数问题
函数参数
参数调用时传入的参数要和定义的个数相匹配(可变参数例外)
位置参数
def f(x, y, z) 调用使用 f(1, 3, 5)
按照参数定义顺序传入实参
关键字参数
def f(x, y, z) 调用使用 f(x=1, y=3, z=5)
使用形参的名字来出入实参的方式,如果使用了形参名字,那么传参顺序就可和定义顺序不同
传参
f(z=None, y=10, x=[1])
f((1,), z=6, y=4.1)
f(y=5, z=6, 2) #
要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的
可变参数
- 位置参数的可变参数
有多个数,需要累加求和:
>>> def add(*nums):
sum = 0
print(type(nums))
for x in nums:
sum += x
print(sum)
>>> add(3, 6, 9) # 调用
在形参前使用*表示该形参是可变参数,可以接收多个实参
收集多个实参为一个tuple
- 关键字参数的可变参数
>>> def showconfig(**kwargs):
for k,v in kwargs.items():
print('{} = {}'.format(k, v))
>>> showconfig(host='127.0.0.1',port='8080',username='wayne',password='magedu')
形参前使用**符号,表示可以接收多个关键字参数
收集的实参名称和值组成一个字典
参数解构
给函数提供实参的时候,可以在集合类型前使用*或者**,把集合类型的结构解开,提取出所有元素作为函数的实参
非字典类型使用*解构成位置参数
字典类型使用**解构成关键字参数
提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配
例1:
>>> def add(x, y):
return x+y
>> add(*(4,5)) | add(*[4,5]) | add(*{4,6})
>>> d = {'x': 5, 'y': 6}
>>> add(**d) | add(**{'a': 5, 'b': 6})
11
>>> add(*{'a':5,'b':6})
'ab'
例2:
>>> def add(*iterable):
result = 0
for x in iterable:
result += x return result
>>> add(1,2,3) | add(*[1,2,3]) | add(*range(10))