0


Python的参数列表

一、参数列表中的/与*

如有函数定义

deff(pos1, pos2,/, pos_or_kwd,*, kwd1, kwd2):
  • pos1pos2只能以位置的形式传参,而不能以关键字的形式传参。
  • pos_or_kwd可以以位置和关键字的形式传参
  • kwd1kwd2只能以关键字的形式传参
deff(pos1, pos2,/, pos_or_kwd,*, kwd1, kwd2):print(pos1,pos2,pos_or_kwd,kwd1,kwd2)

f(pos1=2,pos2=3,pos_or_kwd=4,kwd1=5,kwd2=6)
f(2,3,4,5,6)
f(1,2,pos_or_kwd=3,kwd1=4,kwd2=5)
f(1,2,3,kwd1=4,kwd2=5)
  1. 第一个f语句会显示f() got some positional-only arguments passed as keyword arguments: 'pos1, pos2'错误,表示pos1pos2只能以位置传入
  2. 第二个f语句会显示f() takes 3 positional arguments but 5 were given错误,说明位置参数只有3个(pos1,pos2和pos_or_kwd)确传入了5个。
  3. 第三个和第四个是正确的,最后的结果都为1 2 3 4 5

二、参数列表中的**

参数中的**指传入的是字典,字典前面要加

**

,诸如

deff(name,**args):print([{k,v}for k,v in args.items()])

f('n',**{'1':"name",'2':'age'})

上式输出

[{'name', '1'}, {'age', '2'}]

存在的问题

args

中不能有

name

的key,即args中的key不能存在f函数的形参。即不能传入

f('n',**{'name':"1",'age':'2'})

上式会报

f() got multiple values for argument 'name'

错误,但如果非要如此写,则可以这样定义

deff(name,/,**args):

这样第一个参数值不能以关键字传入,即可避免与args中的key冲突。
最后的结果为

deff(name,/,**args):print([{k,v}for k,v in args.items()])

f('n',**{'name':"1",'age':'2'})

输出

[{'1', 'name'}, {'age', '2'}]

三、参数列表中的*

函数中的剩余的若干参数会被当成一个列表处理,在它之前可以有0个或多个普通变量,而在它之后的变量只能以关键字的形式传入。
下面的代码将最后一行中的"1",“2”,"c:"分别传给了arg1,arg2和arg3,然后才传给了args。最后的结果为

workspace.sos.3.4
defconcat(arg1,arg2,arg3,*args, sep="/"):return sep.join(args)print(concat("1","2","c:","workspace","sos","3","4",sep='.'))
标签: python

本文转载自: https://blog.csdn.net/wzj_sxpi/article/details/119283304
版权归原作者 贱贱的剑 所有, 如有侵权,请联系我们删除。

“Python的参数列表”的评论:

还没有评论