颠倒黑白的Python
2012-01-30最近偶尔翻翻python 的书,但总有一些小的惊喜:
我说,python 可以颠倒黑白,缘起下面这段不可思议的代码,运行结果让我出乎意料。稍微有编程经验的人会知道,”if true” 后面的代码必然要执行,而这样的常理在python 却遭到了驳斥。
def foo():
if True:
print 'true'
else:
print 'false'
True , False = False, True
foo()
运行结果:

没有执行True 后面的代码,反而执行了False 后的代码。
事后分析,包括c++, java 等在内的编程语言通常将true, false 这样的值作为一个不可变的常量。而在python 里True, False 均为布尔类型的对象。当程序员对这样的2个对象进行置换操作时,会使得他们所指向的“值”发生变化(换句话说,True、False在python里均为可变的对象)。if 的判断依据并不是对象,而是对象所指的值(0或非0)。哈哈,这个分析不一定对,但至少目前我说服了我自己。
如果这个不算BUG,那么反思Python 设计者的世界观可能会是这样:世间不存在客观的真理,而只有主观的判断。所以即使是”true” 也不一定要执行。执行与否的关键在个人(程序员)。值得一提的是,使用某些IDE 编写代码的时候,会给予警告:“Assignment to reserved built-in symbol: True”。虽然可以运行通过,但至少会大大减少“意外”结果的概率了。