Python逻辑表达式中的奇怪转换

我注意到Python 2.7逻辑表达式的一种奇怪行为:


>>> 0和False

0

>>>错误和0

错误的

>>> 1和False

错误的

>>>错误和1

错误的

并用True代替False


>>> 0和True

0

>>> True和0

0

>>> 1和True

真的

>>> True和1

1个

Python将逻辑语句转换为整数时,有任何规则吗?为什么有时显示0插入False和1插入True?


更何况它为什么会返回这个?


>>>“测试”或“测试”

'测试'


胡说叔叔
浏览 189回答 3
3回答

慕姐4208626

什么都没有被转换;Python布尔逻辑运算符反而会短路。请参阅布尔运算符文档:表达式x and y首先求值x; 如果x为false,则返回其值;否则为false。否则,y将求值并返回结果值。表达式x or y首先求值x; 如果x为true,则返回其值;否则为false。否则,y将求值并返回结果值。此外,等于的数字0以及空的字符串和容器都被认为是错误的。引用同一文档:在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值将解释为false:False,,None所有类型的数字零以及空字符串和容器(包括字符串,元组,列表,字典,集合和Frozensets)。结合这两种行为意味着,对于0 and False,会0被视为false并在评估False表达式之前返回。对于表达式True and 0,True被求值并发现它是一个真值,因此0将其返回。就ifandwhile和其他布尔运算符而言,该结果0也被认为是错误的。您可以使用它来提供默认值,例如:foo = bar or 'default'要将非布尔值真正转换为布尔值,请使用bool()type;它使用与布尔表达式相同的规则来确定输入的布尔值:>>> bool(0)False>>> bool(0.0)False>>> bool([])False>>> bool(True and 0)False>>> bool(1)True为了使图片更完整,在布尔上下文中不被视为false的值将被视为true,包括任何自定义类。您可以通过在类上实现一个.__nonzero__()特殊的方法来更改它。如果未定义此类方法,.__len__()则也请参考。使用这两种方法中的任何一种,您都可以发出信号,表明您的类型是数字,并且True如果非零,则应考虑该类型;或者,它是一个容器,并且True如果不为空(长度超过0),则应考虑该类型。

婷婷同学_

那是因为0它本身就是虚假的价值。>>> bool(0)False>>> bool(1)True0 and True是0因为0是Falsy,AND条件一旦找到第一个falsy值便立即停止执行并返回该值。如果所有值均为True,则返回最右边的值。OR将继续检查值,直到True找不到first为止,否则它将返回最后一个值。来自docs:可以测试任何对象的真值,以在if或while条件中使用,或用作以下布尔运算的操作数。以下值被认为是错误的:没有错误的任何数字类型的零,例如0, 0L, 0.0, 0j。任何空序列,例如'', (), []。任何空映射,例如{}。用户定义的类的实例,如果该类定义了 __nonzero__()或__len__()方法,则该方法返回整数零或布尔值False时。所有其他值都被认为是真实的-因此许多类型的对象总是真实的。除非另有说明,否则具有布尔结果的操作和内置函数始终返回0或False表示false,返回1或True表示true。(重要的例外:布尔运算符or和and始终返回其操作数之一。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python