Python函数的参数混搭开包
一、位置参数def calc(a, b, c): print(a*a + 2*b +c)calc(3, 5, 8) #27
位置参数适合参数少的情况,当参数较多时,位置容易存错。 二、关键词参数def calc(a, b, c): print(a*a + 2*b +c)calc(3, 5, 8) #27 位置参数calc(c=8, a=3, b=5) #27 关键词参数
关键词参数适合参数较多时,通过指定关键词来存。 三、混搭def calc(a, b, c): print(a*a + 2*b +c)calc(3, b=5, c=8) #27 混搭calc(a=3, b=5, 8) #出错,语法错误
混搭时应注意先放位置参数后放关键词参数,否则会出现语法错误。语法上允许混搭,但尽量不要采用。 四、强制关键词参数def c2(d, *, a, b, c): print(a*a + 2*b +c -d)c2(6, a=3, b=5, c=8) #21c2(6, 3, b=5, c=8) #出错,只接受一个不带关键词的
d在*的前面,可以作为位置参数,不用指定关键词,*后面必须指定关键词,可以混搭。 五、默认参数def c3(a, b, c=0): print(a * a + 2 * b + c)c3(3,5) #19 def c3(a, b=5, c=8): print(a * a + 2 * b + c)c3(3,5,9) #28 def c3(a=3, b, c=8): print(a * a + 2 * b + c)c3(3,5,9) #出错,非默认参数放在了默认参数之后
一旦设置默认值,可以不传它;但也可以继续传入,传了多少就是多少。默认参数需要注意,现房非默认参数再放默认参数。 六、可变参数(位置)def hello(msg, name1, name2): print("Hello",name1,name2,msg)hello("新年好","zhang","li") #Hello zhang li 新年好 def hello(msg, *names): print("Hello",names,msg)hello("新年好","zhang","li") #Hello ("zhang", "li") 新年好hello("新年好") #Hello () 新年好 def hello(msg, *names): print("Hello",*names,msg)hello("新年好","zhang","li") #Hello zhang li 新年好
当参数是多个时,可以在变量前面加*,表示零到无穷多个位置参数,传入的参数会被合并为一个元组,若需要破开元组,只需要在元组前面加上*。注意要先固定参数再可变参数。 七、可变参数(关键词)def hello(msg,**names): print("老大是:",names["Boss"],msg) print("老二是:", names["Boss2"], msg)hello("新年好",Boss="张",Boss2="李",Guard="王") # 老大是: 张 新年好 老二是: 李 新年好
在变量前加**,表示可变参数是关键词参数,在调用时必须用键值对来调用。 八、进一步混搭def f(a,b,c,d,*args,e,f,**kwargs): print(a,b,c,d,e,f) print(args) print(kwargs)f(1,2,3,4,5,99,e=6,f=7,x=8,y=9)#1 2 3 4 6 7(5, 99){"x": 8, "y": 9}
顺序必须是:必选参数、默认参数、可变位置参数、命名关键字参数和可变关键字参数。 九、强制位置参数def f(a,b,/,c,d,*,e,f,**kwargs): print(a,b,c,d,e,f)f(3,4,5,6,e=7,f=8,z=9,w=10) #3,4,5,6,7,8
/ 前面一定为位置参数 十、函数调用--开包列表和元组def hello(msg, *names): print("Hello", *names, msg)names_param = ["张","李","王"]hello("您好",*names_param) #Hello 张 李 王 您好十一、函数调用--开包字典#传统方法def hello(msg,**names): print("老大是:",names["Boss"],msg) print("老二是:", names["Boss2"], msg)data = {"Boss":"张","Boss2":"李","Guard":"王"}hello("新年好",Boss=data["Boss"],Boss2=data["Boss2"],Guard=data["Guard"])#老大是: 张 新年好#老二是: 李 新年好 #简单方法hello("新年好",**data)#老大是: 张 新年好#老二是: 李 新年好
文章知识点与官方知识档案匹配,可进一步学习相关知识!!!