在Python中使用'和'

cer*_*ony 1 python

我正在维护一个庞大的代码库,我在我的python代码中找到了类似这样的东西:

...
foo = bar(a, b, c) and foo
return foo
...
Run Code Online (Sandbox Code Playgroud)

其中foo被赋予一个布尔值,并在这里第一次被声明.这是什么意思/这个目的是什么/这里发生了什么?

Jue*_*gen 5

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

这意味着在"和"情况下,and仅在左侧有效为真时才评估右侧.

所以你的代码大致相当于:

x = bar(a, b, c)
if x:
    foo = foo
else:
    foo = x
return foo
Run Code Online (Sandbox Code Playgroud)

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

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