Bar*_*ach 6 python evaluation boolean-logic python-2.7
我注意到Python 2.7逻辑表达式的奇怪行为:
>>> 0 and False 0 >>> False and 0 False >>> 1 and False False >>> False and 1 False
并用True代替False
>>> 0 and True 0 >>> True and 0 0 >>> 1 and True True >>> True and 1 1
Python将逻辑语句转换为整数时是否有任何规则?为什么有时会显示0为假,1为真?
更重要的是,为什么会归还这个?
>>>"test" or "test" 'test'
什么都没有被改变; Python布尔逻辑运算符而不是短路.
请参阅布尔运算符文档:
表达式
x and y首先评估x; 如果x为false,则返回其值; 否则,y将评估并返回结果值.表达式
x or y首先评估x; 如果x为真,则返回其值; 否则,y将评估并返回结果值.
此外,等于的数字0被认为是假的,空字符串和容器也是如此.引自同一文件:
在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false :
False,None所有类型的数字零,以及空字符串和容器(包括字符串,元组,列表,字典,集合)和frozensets).
将这两种行为结合起来意味着,在评估表达式之前0 and False,将0其视为 false并返回False.对于表达式True and 0,True进行求值并发现它是一个真值,因此0返回.至于if和while等布尔运算符而言,这一结果,0被认为是假的为好.
您可以使用它来提供默认值,例如:
foo = bar or 'default'
Run Code Online (Sandbox Code Playgroud)
要将非布尔值真正转换为布尔值,请使用bool()类型 ; 它使用与布尔表达式相同的规则来确定输入的布尔值:
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool([])
False
>>> bool(True and 0)
False
>>> bool(1)
True
Run Code Online (Sandbox Code Playgroud)
要完成图片,布尔上下文中不被视为false的值将被视为true,包括任何自定义类.您可以通过在类上实现.__nonzero__()特殊方法来更改它.如果没有定义这样的方法,.__len__()也请参考.使用这些方法中的任何一种,您都可以发信号通知您的类型是数字,True如果非零,则应该考虑它,或者它是一个容器,True如果不是空的话,应该考虑它(长度超过0).
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |