函数的参数
位置参数与关键词参数、强制关键词参数、默认参数、可变位置参数、可变关键词参数、强制位置参数以及综合混搭参数
#小测试
def f(a, b, /, c, d, *, e, f, **kw):
print(a, b, c, d, e, f)
def f(a, b, c, *args, **kw):
print(a, b, c, d, args, kw)
1 位置参数与关键词参数
def calc(a, b, c):
print(a*a + 2*b + c)
calc(3, 5, 8) #位置参数
calc(c=8. b=5, a=3)#关键词参数
位置和关键词参数混搭:先位置,后关键词(!顺序不可改变)
calc(3, 5, c=8)
2 强制关键词参数
*
之后,强制关键词参数
def c2(*, a, b, c):
print(a*a + 2*b + c)
c2(a=3, b=5, c=8)#a,b,c为强制关键词参数
def c21(d, *, a, b, c):
print(a*a + 2*b + c)
c21(6, a=3, b=5, c=8)#d为位置参数,a,b,c为强制关键词参数
3 默认参数
默认参数必须在非默认参数之后:先非默认参数,再默认参数
def c3(a, b, c=8):
print(a*a + 2*b + c)
c3(3, 5, 9)
4 可变参数(位置)
(1)*args
表示可传入多个位置参数;公式中设置*args
可以破元组
(2)混搭:先不可变位置参数,后可变位置参数
>>> def hello(msg, *names):
... print('hello', names, msg)
...
>>> hello('新年好', 'Bob', 'Lily')
hello ('Bob', 'Lily') 新年好
>>> def hello(msg, *names):
... print('hello', *names, msg)#*names表示破元组
...
>>> hello('新年好', 'Bob', 'Lily')
hello Bob Lily 新年好
5 可变参数(关键词)
(1)**kw
表示可传入多个关键词参数;公式中设置*kw
可以破字典,仅保留key
值
(2)混搭:先位置参数,后可变关键词参数
>>> def hello2(msg, **names):
... print('老大是:', names['BOSS'], msg)
... print('老大是:', names['BOSS1'], msg)
...
>>> hello2('新年好', BOSS='Bob', BOSS1='Lily', Guard='Alexia')
老大是: Bob 新年好
老大是: Lily 新年好
6 综合混搭参数
顺序:必选参数,默认参数,可变位置参数,命名关键字参数和可变关键词参数
(默认参数可以放在可变参数或命名关键词参数前面么?)
>>> def f(a, b, c, d, *args, e, f, **kw):
... print(a, b, c, d, e, f)
... print(args)
... print(kw)
...
>>> f(1, 2, 3, 4, 5, 6, 99, e=7, f=8, x=9, y=10, z=11)
1 2 3 4 7 8
(5, 6, 99)
{'x': 9, 'y': 10, 'z': 11}
7 强制位置参数
(1)/
前元素为强制位置参数,不可加关键词
>>> def f(a, b, /, c, d, *, e, f, **kw):
... print(a, b, c, d, e, f)
... print(kw)
...
>>> f(1, 2, 3, 4, e=5, f=6, x=9, y=10, z=11)
1 2 3 4 5 6
{'x': 9, 'y': 10, 'z': 11}
函数的调用
1 开包列表和元组
*
:开包符,列表和元组均可
>>> def hello(msg, name1, name2, name3):
... print('hello', name1, name2, name3, msg)
...
>>> names = ['Bob', 'Lily', 'Alexia']
>>> hello('新年好', *names)
hello Bob Lily Alexia 新年好
>>> def hello(msg, *names):
... print('hello', names, msg)
...
>>> names_param = ['Bob', 'Lily', 'Alexia']
>>> hello('新年好', names_param)
hello (['Bob', 'Lily', 'Alexia'],) 新年好
>>> hello('新年好', *names_param)
hello ('Bob', 'Lily', 'Alexia') 新年好
>>> def hello(msg, *names):
... print('hello', *names, msg)
...
>>> names_param = ['Bob', 'Lily', 'Alexia']
>>> hello('新年好', *names_param)
hello Bob Lily Alexia 新年好
>>> hello('新年好', names_param)
hello ['Bob', 'Lily', 'Alexia'] 新年好
2 开包字典
**
用于字典的开包符
>>> def hello(msg, **names):
... print('老大是:', names['BOSS'], msg)
... print('老大是:', names['BOSS1'], msg)
...
>>> data = {'BOSS': 'Bob', 'BOSS1': 'Lily', 'Guard': 'Alexia'}
>>> hello('新年好', **data)
老大是: Bob 新年好
老大是: Lily 新年好
网友评论