当前位置:   article > 正文

Python的参数列表_python 接口参数列表

python 接口参数列表

一、参数列表中的/与*

如有函数定义

def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
  • 1
  • pos1pos2只能以位置的形式传参,而不能以关键字的形式传参。
  • pos_or_kwd可以以位置和关键字的形式传参
  • kwd1kwd2只能以关键字的形式传参
def f(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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  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

二、参数列表中的**

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

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

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

上式输出[{'name', '1'}, {'age', '2'}]

存在的问题

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

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

上式会报f() got multiple values for argument 'name'错误,但如果非要如此写,则可以这样定义

def f(name,/,**args):
  • 1

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

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

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

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

三、参数列表中的*

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

def concat(arg1,arg2,arg3,*args, sep="/"):
    return sep.join(args)

print(concat("1","2","c:","workspace","sos","3","4",sep='.'))
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/261415
推荐阅读
相关标签
  

闽ICP备14008679号