我正在维护一个庞大的代码库,我在我的python代码中找到了类似这样的东西:
...
foo = bar(a, b, c) and foo
return foo
...
Run Code Online (Sandbox Code Playgroud)
其中foo被赋予一个布尔值,并在这里第一次被声明.这是什么意思/这个目的是什么/这里发生了什么?
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".因此,与其他语言不同,布尔表达式可以具有非布尔结果.