【发布时间】:2020-10-24 12:23:01
【问题描述】:
检查参数是按位置还是按关键字传入的更简洁的方法是什么?
在某些情况下,我正在克隆和覆盖函数。被覆盖函数的签名可能会随着时间的推移而增长,所以我想要一些我以后不必更改的东西,我可以用它来提取我关心的几个参数并忽略所有其他参数。
例如,函数调用可能如下所示:
foo("bar", "baz")
foo(arg1="bar", arg2="baz")
两者都有效。如果我使用args 和kwargs 来捕获所有参数,我必须弄清楚它最终在哪个参数中。到目前为止,我正在这样做:
def foo(*args, **kwargs):
arg1 = kwargs["arg1"] if "arg1" in kwargs else args[0]
arg2 = kwargs["arg2"] if "arg2" in kwargs else args[1]
我觉得必须有一种更清洁的方法来做到这一点。
【问题讨论】:
-
如果你用
def foo(arg1, arg2):定义你的函数,两种调用方式都可以工作 -
看来您实际上并不想在这里使用
args或kwargs但打算期待一个名为arg1和arg2的参数 - 所以你应该包括它们
标签: python parameter-passing args keyword-argument