1.对于power(x)函数,参数x就是一个位置参数;power(x, n)函数有两个参数:x和n,这两个参数都是位置参数。
2.默认参数:第二个参数n的默认值设定为2:
def power(x, n=2):
2.1必选参数在前,默认参数在后;变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
2.2默认参数必须指向不变对象! def add_end(L=None):
3.可变参数:可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
def calc(*numbers):
4.关键字参数:关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def person(name, age, **kw):
print(‘name:’, name, ‘age:’, age, ‘other:’, kw)
>>> person(‘Michael’, 30)
name: Michael age: 30 other: {}
>>> person(‘Bob’, 35, city=’Beijing’)
name: Bob age: 35 other: {‘city’: ‘Beijing’}
4.1
到底传入了哪些关键字参数,需要在函数内部通过kw检查。
def person(name, age, **kw):
if ‘city’ in kw:
# 有city参数
pass
5.命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。调用方式如下:
>>> person(‘Jack’, 24, city=’Beijing’, job=’Engineer’)
Jack 24 Beijing Engineer
5.1
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)
5.2
命名关键字参数可以有缺省值,从而简化调用:
def person(name, age, *, city=’Beijing’, job):
print(name, age, city, job)
由于命名关键字参数city具有默认值,调用时,可不传入city参数:
>>> person(‘Jack’, 24, job=’Engineer’)
Jack 24 Beijing Engineer
使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数。
6.参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。