我最近是reading some code online,并看到了以下信息:
if 'True' not in globals():
globals()['True'] = not None
globals()['False'] = not True
这是怎么回事?为什么True
永远不会出现在全局变量中?在作为专业python程序员的大约10年中,我从未遇到过类似的事情!
答案 0 :(得分:16)
该代码具有极高的历史意义,旨在与Python 2.2兼容。 Back before Python 2.3,没有bool
类型,也没有内置True
或False
。您还可以在顶部看到一个from __future__ import generators
将来的语句,因为2.2中存在生成器,但是语法为had to be turned on explicitly,因为Python开发团队不想引入新的关键字({{1 }}),没有过渡期。
顺便说一句,此代码的作者误解了兼容性逻辑。内置的yield
应该位于__builtin__
模块中,而不是True
模块中,因此此代码将检查错误的位置。幸运的是,只要您不执行类似globals()
的操作,就不会为True
和False
到globals()
添加多余的绑定而产生的后果很小。 Python 2)。