【发布时间】:2019-02-14 00:55:22
【问题描述】:
我有一个接收 kwargs 的函数。我想按名称使用 kwargs 参数,而不必将每个参数显式声明为参数或变量。有没有办法通过传入 kwargs 来使用 my_var_key,而不必在函数调用中专门定义它,或者是使用 kwargs[ "my_var_key" ] 的唯一方法?
例如我想要类似的东西
def func(**kwargs):
print(my_var_key)
相对
def func(my_var_key, **kwargs):
print(my_var_key)
或
def func(**kwargs):
print(kwargs[ "my_var_key" ])
如果密钥不存在,我可以破坏它。
【问题讨论】:
-
你为什么不直接传入一本字典并在该字典上工作?
-
您可以通过将代码包装在
try ... except NameError中来捕获NameError、parse theNameErrorerror message to extract the variable name,然后在kwargs中查找提取的名称...易碎,我不确定那会给你带来什么。除了减少打字之外,还有其他动机吗? -
@jamesdlin 为了激励,假设(这是为了说明的极端情况)你有五个函数,每个函数都接受 100 个参数。假设这些参数中的大多数将是相同的关键字,但某些参数将存在,而其他参数不存在。这些功能也以非常不同的方式使用它们。我不想明确声明 100 个变量五次,但是有太多独特的参数使得做一个公共子集也值得。最好的办法是拥有一个包含所有常用参数和唯一参数的 kwargs 字典,默认为空值,并将其传递给每个函数。
-
我可能会尝试使用装饰器来减少样板。
标签: python function dictionary parameters keyword-argument