Python:通过名称和 kwargs 传递参数

标签 python function arguments keyword-argument pass-by-name

在python中我们可以这样做:

def myFun1(one = '1', two = '2'):
    ...

然后我们可以调用函数并通过它们的名字传递参数:

myFun1(two = 'two', one = 'one')

另外,我们可以这样做:

def myFun2(**kwargs):
    print kwargs.get('one', 'nothing here')

myFun2(one='one')

所以我想知道是否可以将这两种方法结合起来,例如:

def myFun3(name, lname, **other_info):
    ...

myFun3(lname='Someone', name='myName', city='cityName', otherInfo='blah')

一般我们可以做哪些组合?

感谢并为我的愚蠢问题感到抱歉。

最佳答案

大体思路是:

def func(arg1, arg2, ..., kwarg1=default, kwarg2=default, ..., *args, **kwargs):
    ...

您可以根据需要使用任意数量的这些。 *** 将“吸收”任何未以其他方式计算的剩余值。

位置参数(没有默认提供)不能由关键字给出,非默认参数不能跟在默认参数之后。

注意 Python 3 还添加了通过在 * 之后指定仅关键字参数的功能:

def func(arg1, arg2, *args, kwonlyarg=default):
    ...

您也可以单独使用 * (def func(a1, a2, *, kw=d):),这意味着不捕获任何参数,但之后的任何内容仅限关键字。

所以,如果你在 3.x 中,你可以产生你想要的行为:

def myFun3(*, name, lname, **other_info):
    ...

这将允许使用 namelname 作为关键字调用。

请注意,这是一个不寻常的界面,可能会让用户感到烦恼 - 我只会在非常特定的用例中使用它。

在 2.x 中,您需要手动解析 **kwargs

关于Python:通过名称和 kwargs 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074821/

相关文章:

python - 停止 JVM 后,无法再次启动它

python - 打印时出现UnicodeEncodeError

python - 使用 python 动态读取和/或覆盖 Excel 文件,而不会出现覆盖警报

javascript - JS : Return Values Between Functions - Scope

c++ - 链接器 2001 错误和成员变量的未定义标识符

在 IDA Pro 中传递给函数的参数

python - 在 Python 3 中动态传递函数参数

java - Matlab安装(LD_LIBRARY_PATH)把其他库文件弄乱了

Sql Server 确定性用户定义函数

C++ 参数堆与堆栈