Python 控制台和文本编辑器为 __builtins__ 输出不同的输出
The Python console and text editor output different output for __builtins__
我在 Blender(一种 3D 图形工具)中使用 Python 编写脚本。我最初打算 post 这个关于 blender stack exchange 的主题,但我得出的结论是它更接近 Python 的基础知识,这让我把问题写在这里。如果我上错论坛了请告诉我!
前段时间在Python中使用默认函数名作为变量名的错误,如list = ['a', 'b', 'c', 'd']
。举个更极端的例子,如果我声明了一个像 print = 'a'
.
这样的变量,我代码中的所有打印函数都不会工作。
所以我试着写了一段代码,打印出所有已经保留的变量名。即使我想使用 list
或 print
作为变量名,我也会使用不同的名称,因为我看到 True
返回并且知道这已经在 [=17 中使用了这些名称=].现在我已经在 Python 控制台中对其进行了测试,我转到文本编辑器并 运行 相同的代码,但这次我得到的是 False
而不是 True
。发生了什么事?
我使用 dir()
函数来检查 __builtins__
中的实际值。 Python 控制台的输出按预期在 __builtins__
中包含 print
和 list
,但文本编辑器的输出具有不同的值。仔细检查后,我注意到有 keys
、items
、values
等值,这些值是字典上可用的方法!
这次我使用了type()
函数来打印__builtins__
的类型。 Python 控制台打印 <class 'module'>
,文本编辑器打印 <class 'dict'>
。
我知道 Blender 的 python 控制台和文本编辑器在不同的范围内分开工作,但我不知道具体发生了什么。为什么 __builtins__
的输出不同?
您正在使用 Python 的不同实现,__builtins__
的值在 the docs 中故意未指定。
As an implementation detail, most modules have the name __builtins__
made available as part of their globals. The value of __builtins__
is normally either this module or the value of this module’s __dict__
attribute. Since this is an implementation detail, it may not be used by alternate implementations of Python.
所以 __builtins__
只是特定实现的一种便利机制,通常设置为 builtins
或 builtins.__dict__
。看起来您的 Python 控制台执行前者而 Blender 的版本执行后者。要跨实现以统一的方式执行此操作,您可以执行
import builtins
print(type(builtins)) # <class 'module'>
print(type(builtins.__dict__)) # <class 'dict'>
我在 Blender(一种 3D 图形工具)中使用 Python 编写脚本。我最初打算 post 这个关于 blender stack exchange 的主题,但我得出的结论是它更接近 Python 的基础知识,这让我把问题写在这里。如果我上错论坛了请告诉我!
前段时间在Python中使用默认函数名作为变量名的错误,如list = ['a', 'b', 'c', 'd']
。举个更极端的例子,如果我声明了一个像 print = 'a'
.
所以我试着写了一段代码,打印出所有已经保留的变量名。即使我想使用 list
或 print
作为变量名,我也会使用不同的名称,因为我看到 True
返回并且知道这已经在 [=17 中使用了这些名称=].现在我已经在 Python 控制台中对其进行了测试,我转到文本编辑器并 运行 相同的代码,但这次我得到的是 False
而不是 True
。发生了什么事?
我使用 dir()
函数来检查 __builtins__
中的实际值。 Python 控制台的输出按预期在 __builtins__
中包含 print
和 list
,但文本编辑器的输出具有不同的值。仔细检查后,我注意到有 keys
、items
、values
等值,这些值是字典上可用的方法!
这次我使用了type()
函数来打印__builtins__
的类型。 Python 控制台打印 <class 'module'>
,文本编辑器打印 <class 'dict'>
。
我知道 Blender 的 python 控制台和文本编辑器在不同的范围内分开工作,但我不知道具体发生了什么。为什么 __builtins__
的输出不同?
您正在使用 Python 的不同实现,__builtins__
的值在 the docs 中故意未指定。
As an implementation detail, most modules have the name
__builtins__
made available as part of their globals. The value of__builtins__
is normally either this module or the value of this module’s__dict__
attribute. Since this is an implementation detail, it may not be used by alternate implementations of Python.
所以 __builtins__
只是特定实现的一种便利机制,通常设置为 builtins
或 builtins.__dict__
。看起来您的 Python 控制台执行前者而 Blender 的版本执行后者。要跨实现以统一的方式执行此操作,您可以执行
import builtins
print(type(builtins)) # <class 'module'>
print(type(builtins.__dict__)) # <class 'dict'>