我的交互式控制台的简短记录:
Python 2.7.2 (default, Jun 29 2011, 11:10:00)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True
True
>>> 0 == True
False
>>> 1 == True
True
>>> 2 == True
False
Run Code Online (Sandbox Code Playgroud)
这究竟是为什么呢?
编辑:为了对比起见,请考虑is操作员.
>>> 0 is False
False
>>> 1 is True
False
>>> 0 is 0
True
>>> True is True
True
Run Code Online (Sandbox Code Playgroud)
这使得有很大的意义,因为虽然1和True都意味着同样的事,作为一个条件if语句,他们真的是不一样的东西.
再次编辑:更有趣的后果1 == True:
>>> d = {}
>>> d[True] = "hello"
>>> d[1]
"hello"
Run Code Online (Sandbox Code Playgroud)
Dat*_*jam 35
因为Python中的布尔值是整数的子类型.从文档:
布尔值是两个常量对象False和True.它们用于表示真值(尽管其他值也可以被认为是假或真).在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相似.如果值可以被解释为真值,则内置函数bool()可用于将任何值强制转换为布尔值(请参阅上面的真值测试部分).
http://docs.python.org/library/stdtypes.html#boolean-values
Pab*_*ruz 27
因为实例bool也是intpython中的实例.True碰巧等于整数1.
看看这个例子:
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> isinstance(True, int)
True
>>> int(True)
1
>>>
Run Code Online (Sandbox Code Playgroud)
mac*_*ing 11
它是标准的二进制约定:1为真,0为假.
它就像1表示机器语言中的"on",0表示"off".
因此,bool类型只是intPython中的一个子类型,带有1 == True和0 == False.
但是,任何非零数值都将True在条件语句中进行求值:
>>> if 2: print "ok"
ok
>>> 2 == True
False
Run Code Online (Sandbox Code Playgroud)
相等测试与布尔测试不同:
>>> bool(1)
True
>>> bool(2)
True
>>> bool(-1)
True
>>> bool(0)
False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11799 次 |
| 最近记录: |