在Python

时间:2015-06-13 19:55:39

标签: python

我正在维护一个庞大的代码库,我在我的python代码中找到了类似的内容:

...
foo = bar(a, b, c) and foo
return foo
...

其中为foo分配了一个布尔值,并在此处首次声明。这意味着什么/这个目的是什么/这里发生了什么?

2 个答案:

答案 0 :(得分:5)

Python像C一样进行短路评估。

这意味着在"和"如果左侧有效,则仅评估and的右侧。

所以你的代码大致等同于:

x = bar(a, b, c)
if x:
    foo = foo
else:
    foo = x
return foo

当然,区别在于不使用变量x(因为不需要)。

这里需要注意的重要事实是,例如,如果将foo设置为" stringval"和bar(a,b,c)返回的东西可以被解释为True,而不是" stringval"将被退回。因此,与其他语言不同,布尔表达式可以具有非布尔结果。

答案 1 :(得分:-2)

与此相同:

if bar(a, b, c) and foo:
    foo = True
else:
    foo = False
return foo