这只是一个“好的”Pythonic 方法的好奇心问题。
我有一个带有可选参数的函数,即。
def foo( a, b, c='en' ):
print c
有一个包含一堆信息的字典,如果一个特定的键在字典中,我想将它传递给 foo 以覆盖 c 的默认值,但如果键不在字典中,我只是想使用 c 的默认值。
显然这会起作用...
if "SomeKey" in mydict:
foo( val1, val2, mydict[ "SomeKey" ]
else:
foo( val1, val2 )
另一种选择是做类似的事情
params = [ val1, val2 ]
if "SomeKey" in mydict:
params.append( mydict[ "SomeKey" ] )
foo( *params )
但是必须有一种灵活的、更 pythonic 的方式来做到这一点吗?即。
foo( val1, val2, mydict[ "SomeKey" ] if "SomeKey" in mydict else < use default > )
提前致谢!
最佳答案
不要为此使用“真”默认值 - 而是使用占位符值:
def foo( a, b, c=None ):
if c is None:
c = 'en'
print c
然后调用...
foo( val1, val2, mydict.get("SomeKey") )
(.get()
返回 None
如果键不在字典中,默认情况下)
如果你不能修改foo()
,那么你可以做更复杂的可变参数路径:
maybe_c = {'c': mydict["SomeKey"]} if "SomeKey" in mydict else {}
foo( val1, val2, **maybe_c )
关于python - 如果测试失败,让参数的默认值优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091619/