python 3 : __builtins__. 无 : Invalid syntax?

标签 python python-3.x

我正在探索 REPL,我注意到了 __builtins__ 模块。

我进去了

>>> __builtins__.

然后点击 Tab,然后 Python REPL 向我展示了一个内置标识符列表,包括abslenzipTrueFalseNone

第一个测试毫无疑问地通过了:

>>> __builtins__.zip is zip
True

但是第二个没有:

>>> __builtins__.None is None
   File "<stdin>", line 1
    __builtins__.None is None
                    ^
SyntaxError: invalid syntax

为什么?

最佳答案

None 是关键字。因此,它不能与点符号一起使用,就像 __builtins__.True__builtins__.class__builtins__.def 一样语法错误。

这可以通过使用 getattr 绕过:

print(getattr(__builtins__, 'None') is None)
# True
print(getattr(__builtins__, 'False') is False)
# True
print(getattr(__builtins__, 'True') is True)
# True

不同于abslenzip等(顶级函数),NoneTrueFalse 是 Python 3 中的关键字(参见 https://docs.python.org/3/reference/lexical_analysis.html#keywords )。

在 Python 2 中,TrueFalse 不是关键字(只是内置名称/常量)(参见 https://docs.python.org/2/reference/lexical_analysis.html#keywords ),因此您可以重新分配给它们。如上所述,这在 Python 3 中是不可能的,因为它们已成为关键字。

另请参阅此问题:True=False assignment in Python 2.x

话虽如此,人们仍然可以在 Python 3 中使用 __builtins__.True,但它不会影响实际的 True,因为它曾经在 Python 2 中:

print(getattr(__builtins__, 'True'))
# True
setattr(__builtins__, 'True', False)
print(getattr(__builtins__, 'True'))
# False
print(True)
# True

关于 python 3 : __builtins__. 无 : Invalid syntax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49628308/

相关文章:

python - 将 NaN 添加到集合时行为不一致的原因

python - 机器人框架 : UnboundLocalError: local variable 'cellValue' referenced before assignment

python - Python 中的 2D 局部最大值和最小值

python - 无法使用 Pipenv 缓存 Github Actions 上的依赖项

python Pandas : How do I create a column given a condition based on another column?

python - 有没有更 Pythonic 的方法来获取 Linux 上可用磁盘设备名称的列表?

python - django cms自定义应用程序页面无限重定向

python - Ipython 在命令提示符下工作,但在浏览器中不工作

php - 在 Laravel 中运行 python 脚本,脚本运行但未完全执行?

python - 插入空白行 Pandas 数据框