Python 函数参数相关
自己做的笔记,初学python,难免有错误。
一、关键字参数
在调用函数时,位置参数只能用在关键字参数之前。使用了关键字参数,之后的参数只能用关键字参数。关键字参数顺序可以打乱。
def test(a, b, c):
pass
tes(5, b=10, c=15)
二、参数默认值
定义函数时,使用参数默认值,要放在形参列表的最后(虽然也可以放在一星参数的前面但是没有意义)。如果形参列表有收集关键字参数,则收集关键字参数放在最后。
def test(x, y, z=10, **scores):
pass
def test(x, y, z=10,*book, **scores): # 这样使用不会报错,但没有意义
pass #因为调用时,z还必须得传入值。
三、参数收集(个数可变的参数)
1.一星参数可以放在形参列表任意位置。调用函数时,一星参数前面的参数必须用位置参数,后面的必须用关键字参数。
def test(a, *b, c):
print(a, b,c)
test(1,2,3,c=4) # 输出结果 1 (2,3) 4
2.二星参数(收集关键字参数)必须放在形参列表的最后。
四、逆向参数收集
逆向收集,可以用列表、元组、字典的方式给函数传入参数。列表、元组需要在变量前面加一个星,字典加俩星。
1、列表、元组
def foo(a, *b, c): # 上面说过, 因为c在*b收集参数之后
print(a, b, c) # 调用时必须用关键字参数传入参数
my = (1, 2, 3)
foo(*my, c=4) # 输出 1 (2, 3) 4
foo(1, *my, c=4) # 输出 1 (1, 2, 3) 4
2、字典
def bar(book, price, desc):
pass
my_dict = {'price': 90, 'book': 'python', 'desc': '不错' }
bar(**my_dict) #字典中指定参数的顺序可以打乱
如果字典只指定了部分参数,剩余的以字典指定的参数(下面例子中的book)为分界线,前面的可以用位置参数或关键字,后面的必须用关键字参数。
def bar(start, book, middle, price, desc, end):
pass
my_dict = {'price': 90, 'book': 'python讲义', 'desc': '不错' }
bar('开始', **my_dict,middle='中间', end='结束')