Skip to main content
 首页 » 编程设计

python之如果测试失败,让参数的默认值优先

2025年05月04日9qlqwjy

这只是一个“好的”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 )