位置参数
定义
def functionName(a, b)
...
return
默认参数
定义
def functionName(..., 形参=形参值):
...
return
使用默认参数的好处:降低调用函数的难度
def powerWithDefault(x, n=2):
s = 1
while n > 0:
n -= 1
s *= x
return s
print(powerWithDefault(5)) // => 25
print(powerWithDefault(5, 3)) // => 125
注意: 默认参数必须指向不变对象
错误写法
def add_end(L=[])
L.append('END')
return L
print(add_end()) // => ['END']
print(add_end()) // => ['END', 'END']
print(add_end()) // => ['END', 'END', 'END']
正确写法
def add_end(L=None)
if L is None:
L = []
else:
L.append('END')
return L
print(add_end()) // => ['END']
print(add_end()) // => ['END']
print(add_end()) // => ['END']
可变参数
定义
传入的参数可以是0个或多个
说明
在可变函数内部, 可变参数的类型是tuple
默认参数形式
def calc_sum(nums):
s = 0
for n in nums:
s = s + n * n
return s
print(calc_sum([1, 2, 3])) // => 14
print(calc_sum((1, 2, 3))) // => 14
可变参数形式
def calc_sum_with_variable_parameters(*nums):
s = 0
for n in nums:
s = s + n * n
return s
print(calc_sum_with_variable_parameters(1, 2, 3)) // => 14
如果列表已经定义, 可使用*将列表转成可变参数
mlist = [1, 2, 3]
print(calc_sum_with_variable_parameters(*mlist)) // => 14
关键字参数
定义
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def person(name, age, **kv):
print('name:', name, 'age:', age, 'other', kv)
person('xiaoming', 27) // => name: xiaoming age: 27 other {}
person('xiaohong', 28, city='Beijing') // => name: xiaohong age: 28 other: {'city': 'Beijing'}
person('xiaoqiang', 29, gender='M', job='Engineer') // => name: xiaoqiang age: 29 other: {'gender': 'M', 'job': 'Engineer'}
命名关键字参数
定义
命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
def person(name, age, *, city, job):
...
return ...
说明
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。
def person(name, age, **kv):
print('name:', name, 'age:', age, 'other', kv)
person('Jack', 24, city='Beijing', addr='Chaoyang', zipcode=123456)
如果要限制关键字参数的名字,就可以用命名关键字参数
命名关键字参数可以有缺省值, 比如
def personWithDefaultNamedKeyword(name, age, *, city='Shanghai', job):
print(name, age, city, job)
personWithDefaultNamedKeyword('Jack', 24, job='Engineer')
参数组合
定义函数, 可以随意组合必选参数、默认参数、可变参数、关键字参数和命名关键字参数,但是参数定义的顺序是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数