a = 5
b = -1
c = 2
print((c) and (b<0) and (a>0))
以下代码的输出为True
。但是,(c) and (b<0)
和and
不是用于or
是整数的布尔型变量的含义吗?
答案 0 :(得分:2)
在诸如C之类的语言中,没有布尔类型或值。而是使用整数代替它们。零为假,其他所有整数为真。
Python将其概括为 all 个值。的确,有一个布尔类型,但是它是int
的子类,并且True
和False
在字面上是1
和{{ 1}}。通过调用0
,可以将任何值转换为布尔值。
bool
值的“真实性”取决于它的类型,但是粗略地说,零和空的类似于容器的值是False,而其他所有值都是True。此外,>>> bool(5)
True
>>> bool(0)
False
>>> bool("foo"), bool([1,2,3])
True, True
>>> bool(""), bool([])
False, False
和and
不一定返回布尔值:
or
x and y == y if bool(x) else x
x or y == x if bool(x) else y
用于确定bool
是否正确,但结果是两个实际值x
或x
之一。
使用与y
的等价关系,我们可以将您的表达式评估为
and
我没有一次全部替换c and b<0 and a>0 == (b < 0 if bool(c) else c) and a > 0
== b < 0 if bool(2) else c) and a > 0
== (b < 0 if True else c) and a > 0
== b < 0 and a > 0
== a > 0 if bool(b < 0) else b < 0
== a > 0 if bool(-1 < 0) else b < 0
== a > 0 if bool(True) else b < 0
== a > 0 if True else b < 0
== a > 0
== 5 > 0
== True
,a
和b
的值,因为c
,and
和条件表达式是全部 lazy ;除非绝对必要,否则它们不会评估操作数,我们稍后将对此进行介绍。
如果更改or
,则评估过程将产生c = 0
的值,而不是c
的布尔值。请注意,我们需要查看c
的值,因为从未评估过a
。
a > 0
答案 1 :(得分:1)
在python中,可以测试任何对象的真值。对于数字类型,任何非零值都被视为true。您可以看到不同类型here的真值。
答案 2 :(得分:1)
当变量不是布尔变量并且您检查它是True
还是False
时,python检查此变量是否为None。
例如:
a = 'any_value'
print(a == True)
此语句显示True
。
但是:
b = None
print(a == True)
结果为False
。