我可以使用OR来检查我的默认值是否必要吗?

时间:2014-07-10 22:02:23

标签: python coding-style

而不是

if foo is None:
    foo = 'my-default'

我写

foo = foo or 'my-default'

因为它更短。后者是针对某些建议还是使用OR运算符来保存一行可能会遇到严重问题?还是真的难以理解?还是其他什么真正的坏或邪恶?

我认为它更具可读性,特别是如果你有

if not foo:
    foo = 1
if not bar:
    bar = 2
if not uhj:
    uhj = 3

我只是写

foo = foo or 1
bar = bar or 2
uhj = uhj or 3

我认为,这更容易

2 个答案:

答案 0 :(得分:1)

请注意声明

foo = foo or 'my-default'

默认值是foo的每个false值,不仅是None。如果这是合适的话,我认为这个单线程比'if'更好。如果你把它看作一种自然语言,那听起来也很难理解。

答案 1 :(得分:1)

这两个不等价,因为第一个选择值None,而第二个执行一般真值测试。例如,对于foo=0foo=[],只有第二个会将其替换为'my-default'。你可以使第一个相当于第二个:

if not foo:
    foo = 'my-default'

除此之外,我认为两者都很好。有些人主张反对第二种选择,因为它可能会使初学者感到困惑。但恕我直言,它是python中的常见模式,它可以更具可读性,所以我认为这是一个不错的选择。