Cod*_*ist 28 python arguments function pass-by-name kwargs
在python中我们可以这样做:
def myFun1(one = '1', two = '2'):
...
Run Code Online (Sandbox Code Playgroud)
然后我们可以调用函数并按名称传递参数:
myFun1(two = 'two', one = 'one')
Run Code Online (Sandbox Code Playgroud)
此外,我们可以这样做:
def myFun2(**kwargs):
print kwargs.get('one', 'nothing here')
myFun2(one='one')
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否可以将两种方法结合起来:
def myFun3(name, lname, **other_info):
...
myFun3(lname='Someone', name='myName', city='cityName', otherInfo='blah')
Run Code Online (Sandbox Code Playgroud)
一般来说,我们可以做什么组合?
谢谢,对不起我的愚蠢问题.
Gar*_*tty 29
一般的想法是:
def func(arg1, arg2, ..., kwarg1=default, kwarg2=default, ..., *args, **kwargs):
...
Run Code Online (Sandbox Code Playgroud)
您可以根据需要使用尽可能多的人.在*和**将"吸收"任何剩余价值,未列入.
无法通过关键字给出位置参数(不带默认值),非默认参数不能遵循默认参数.
注意Python 3还增加了通过以下方式指定仅限关键字参数的功能*:
def func(arg1, arg2, *args, kwonlyarg=default):
...
Run Code Online (Sandbox Code Playgroud)
您也可以使用*alone(def func(a1, a2, *, kw=d):),这意味着不会捕获任何参数,但之后的任何内容都只是关键字.
所以,如果你在3.x中,你可以产生你想要的行为:
def myFun3(*, name, lname, **other_info):
...
Run Code Online (Sandbox Code Playgroud)
哪个允许使用name和lname仅作为关键字调用.
请注意,这是一个不寻常的界面,可能会让用户烦恼 - 我只会在非常具体的用例中使用它.
在2.x中,您需要通过解析手动完成此操作**kwargs.