TLDR:使用前,您必须导入每个模块,除外
builtins。
就Python而言,有两种不同的“ builtin”:
事物可以是1的一部分,而不能是2的一部分,反之亦然。例如,
help是纯Python函数,并且
os.chmod是
os模块的一部分。但是,出于实际原因,2中的大多数内容也属于1中的一部分:
builtins经常使用,并且编译后的对象通常具有更好的性能。
内置对象可以代表任何类型的模块,功能或对象。语言规范并未真正定义内置对象和内置对象。具体细节因实现而异:例如,CPython使用编译的C结构和函数,而PyPy使用编译的RPython对象。
根据经验,“ Python代码未定义的所有内容”都是内置的。但是,这并非 完全
正确:内置对象可以访问解释器以创建常规Python对象。所有内建函数的共同点是它们看起来像常规的Python对象,但是其内部结构可以遵循任意规则。
注意,内建器不一定内置在解释器中。CPython提供了一个C
API,PyPy通过cpyext对其进行仿真,从而允许共享库由解释器加载和使用。许多第三方库使用已编译的Cython对象和函数来提供自定义的内置程序。但是,可以使用任何可以产生与C
API兼容的共享库的语言。
该
builtins模块是 名为
的实际模块
builtins。该模块的所有名称在所有其他模块中始终可用:
builtins只要在当前作用域,其包含的作用域或当前模块中找不到名称,就会搜索该名称。
这与每个模块中都有一个相似,但 并不 相同
from builtins import *:如果
builtins更改,则内置名称会反映出这一点。
>>> int(5)5>>> import builtins>>> builtins.int = float>>> int(5)5.0
例如,
_在交互式Python会话中,是的一部分
builtins。只要运行命令,它就会更改。
免责声明: 这仅用于演示。修改
builtins自己是一个非常非常糟糕的主意。
虽然只有from
builtins的名称可用而无需导入,但是Python通常在启动时会导入几个模块。
$ python3 -c 'import sys;print(sys.modules.keys())'dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'precs', '_precs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'sitecustomize', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg'])
其中一些是解释器的高级部分的一部分,例如
sys和
importlib。在
sitecustomize与
usercustomize模块允许准备环境-
例如,改变交互式解释看,在设置搜索路径
os.environment,以及类似的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)