print() 中使用辅助函数短路 [复制]

Short-circuiting with helper function in print() [duplicate]

提问人:pfan 提问时间:9/25/2022 最后编辑:pfan 更新时间:9/25/2022 访问量:28

问:

有人可以解释为什么以下代码在控制台中显示为“极客”吗?

def check():
    return "geeks"

print(0 or check() or 1)

我假设 Python 识别布尔运算符,从而处理 0 == False?

那么,这是否意味着每次使用布尔运算符时,参数都会被视为 True/False 值?

python 布尔 短路

评论

1赞 CryptoFool 9/25/2022
什么?在不知道是什么的情况下,没有办法回答你的问题,只有你在这里显示的代码会产生.geeksgeeksNameError: name 'geeks' is not defined
0赞 pfan 9/25/2022
@CryptoFool只是一个字符串。我已经更正了。geeks
0赞 Ignatius Reilly 9/25/2022
每次使用 时,您都会要求 python 评估 / 条件。因此,它需要将它们视为布尔值。它与功能无关。您作为参数传递给的任何内容都将在打印之前进行评估。然后是“极客”(见建议的重复),因此 print 语句可以简化为orTrueFalseprintprint0 or "geeks" or 1print("geeks")

答:

1赞 CryptoFool 9/25/2022 #1

“极客”将被打印的原因是定义如下:or

Python 运算符返回计算结果为 true 的第一个对象 或表达式中的最后一个对象,无论其真值如何。

当返回字符串“geeks”时,该值的计算结果为,因为它是一个非空字符串。然后,该值是表达式中计算结果为 的第一个项,因此该值是整个表达式的结果,打印的内容也是如此。check()TrueorTrue

评论

0赞 pfan 9/25/2022
上面答案的问题是“0 是否总是计算为 ”。我不小心删除了它。False
1赞 CryptoFool 9/25/2022
是的,没错。任何空集合的计算结果也为 False。任何非空集合的计算结果均为 True。字符串是字符的集合,因此空字符串的计算结果为 False,非空字符串的计算结果为 True。请注意,这里的“计算结果”只是讨论确定如何计算带有布尔运算符的表达式时会发生什么。更正确的是说任何表达式要么是“真实的”,要么是“非真实的”,因为正如你从这个例子中看到的那样,最终的“geeks”字符串被“评估”为一个字符串。因此,非空字符串始终是“真实”的。