相互引用的Python关键字参数
当我尝试以下操作时,我得到一个错误相互引用的Python关键字参数,python,keyword-argument,Python,Keyword Argument,当我尝试以下操作时,我得到一个错误 def test_func(key1=2.7, key2=key1*3.5): print(key1, key2) NameError: name 'key1' is not defined 我的解决办法是 def test_func(key1=2.7, key2=None): if not key2: key2 = key1*3.5 print(key1, key2) 但我觉得这有点难看。有谁有更好的解决办法吗
def test_func(key1=2.7, key2=key1*3.5):
print(key1, key2)
NameError: name 'key1' is not defined
我的解决办法是
def test_func(key1=2.7, key2=None):
if not key2:
key2 = key1*3.5
print(key1, key2)
但我觉得这有点难看。有谁有更好的解决办法吗
编辑:
所以我的最终解决方案是
def test_func(key1=2.7, key2=None):
if key2 is not None:
key2 = key1*3.5
print(key1, key2)
谢谢您的所有回答不,没有更好的解决方案了 函数参数定义可以是表达式,但它们只计算一次(有时会让人感到惊讶,请参见)。我的解决方案是:
def t(key1=1, **kwargs):
key2 = kwargs.get('key2', key1*2.7)
从kwargs获取key2并使用默认的key1*2.7从中获取数据也许您甚至应该将其更改为显式的
is key2 is not None
,否则用户将无法将0
作为第二个参数传递。这些数字只是一个示例,我使用的函数看起来非常不同,但您是对的。我没有想到这一点。这样做的缺点是,如果用户传递一个意外的参数,比如key3
,则不会出现错误。它只会默默地忽略它。