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

标签 python python-2.7

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

相关文章:

python - 改变读取文件的方向?

python - 为什么我的实例变量不在 __dict__ 中?

在从文本文件加载列表中找不到 Python 列表索引

python - 是python2不愿意释放内存吗?

python - Python 参数中的等号

python - 使用 Python OpenCV 从图像裁剪/旋转/调整扑克牌大小

python - 时间戳未显示在 Python 的 yfinance 包中

python - 具有较少参数和可选参数的函数

python - 将列表切片到给定元素

python - 在 Python 中使用 functools.partial 重构 lambda 函数