我正在探索 REPL,我注意到了 __builtins__
模块。
我进去了
>>> __builtins__.
然后点击 Tab,然后 Python REPL 向我展示了一个内置标识符列表,包括abs
、len
、zip
和 True
、False
、None
等
第一个测试毫无疑问地通过了:
>>> __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
不同于abs
、len
、zip
等(顶级函数),None
、True
和 False
是 Python 3 中的关键字(参见 https://docs.python.org/3/reference/lexical_analysis.html#keywords )。
在 Python 2 中,True
和 False
不是关键字(只是内置名称/常量)(参见 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/