为什么用此代码在全局变量中设置True和False?

时间:2019-06-17 14:28:31

标签: python

我最近是reading some code online,并看到了以下信息:

if 'True' not in globals():
    globals()['True'] = not None
    globals()['False'] = not True

这是怎么回事?为什么True永远不会出现在全局变量中?在作为专业python程序员的大约10年中,我从未遇到过类似的事情!

1 个答案:

答案 0 :(得分:16)

该代码具有极高的历史意义,旨在与Python 2.2兼容。 Back before Python 2.3,没有bool类型,也没有内置TrueFalse。您还可以在顶部看到一个from __future__ import generators将来的语句,因为2.2中存在生成器,但是语法为had to be turned on explicitly,因为Python开发团队不想引入新的关键字({{1 }}),没有过渡期。

顺便说一句,此代码的作者误解了兼容性逻辑。内置的yield应该位于__builtin__模块中,而不是True模块中,因此此代码将检查错误的位置。幸运的是,只要您不执行类似globals()的操作,就不会为TrueFalseglobals()添加多余的绑定而产生的后果很小。 Python 2)。