可以在不导入的情况下使用Python的标准库的Python写模块吗?

可以在不导入的情况下使用Python的标准库的Python写模块吗?,第1张

可以在不导入的情况下使用Python的标准库的Python写模块吗?

TLDR:使用前,您必须导入每个模块,除外

builtins


就Python而言,有两种不同的“ builtin”:

  1. 编译的内置对象,例如
    int
    os.chmod
  2. builtins
    包含基本对象集(例如
    int
    和)的模块
    help

事物可以是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
,以及类似的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5654313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存