内置命名空间

python 解释器启动后就可以直接使用一些函数,常量,类型,异常等。保存这些数据的空间统称内置命名空间。

内置命名空间中包含的数据如下:

对于内置命名空间中最常用的就是内置函数。

内置函数

Python 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要import就可以使用。Python 解释器一旦启动,所有的内置函数都生效。

内置常量

python对于变量的查找,模块的查找顺序是LEGB

L: Local 局部命名空间

E: Enclosing 内嵌命名空间

G: Golbal 全局命名空间

B: Builtin 内置命名空间

所以内置命名空间是查找的最后一道屏障,如果这里也没有,那这个变量就是没有定义。

>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

python 标准库

Python 标准库相当于解释器的外部扩展,它并不会随着解释器的启动而启动,要想使用这些外部扩展,必须提前导入。

Python 标准库非常庞大,包含了很多模块,要想使用某个函数,必须提前import对应的模块,否则函数是无效的。

和内置命名空间的关系:

  1. 内置命名空间中的函数,变量,类型,异常都是标准库的一部分
  2. 内置空间在python解释器启动时加载内存,标准库有部分模块会记载到内存
  3. 内置空间不需要import就能使用模块,标准库需要import之后才能使用

特征

Python 标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的。这个库包含了多个内置模块 (以 C 编写),Python 程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Python 编写的模块,提供了日常编程中许多问题的标准解决方案。其中有些模块经过专门设计,通过将特定平台功能抽象化为平台中立的 API 来鼓励和加强 Python 程序的可移植性。

python标准库有200多个模块和包,具体可见上一篇博客 python标准库

加载到内存中的模块

在介绍内置命名空间时我们知道内置函数,变量,类型,异常都随着解释器的启动加载到内存中。那么能不能看到所有加载到内存中的模块呢?

sys.modules 模块就是查找所有内存中的模块的方法。

sys.modules

Python中所有加载到内存的模块都放在sys.modules。sys.modules是一个全局字典

功能

字典sys.modules对于加载模块起到了缓冲的作用,当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。如果没有加入则将模块加入到当前空间,并且也加入到sys.modules中。再次import模块则不会在加在到内存中。

使用

sys.modules 是一个字典,key就是模块的名字, value是模块的对象。

sys.modules.keys()

>>> sys.modules.keys()
dict_keys(['sys', 'builtins', '_frozen_importlib', '_imp', '_thread',
'_warnings', '_weakref', 'zipimport', '_frozen_importlib_external',
'_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases',
'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io',
'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath',
'os.path', '_collections_abc', '_sitebuiltins', 'sitecustomize', 'readline',
'atexit', 'rlcompleter'])
>>> sys.modules.values()
dict_values([<module 'sys' (built-in)>, <module 'builtins' (built-in)>,
<module '_frozen_importlib' (frozen)>, <module '_imp' (built-in)>,
<module '_thread' (built-in)>, <module '_warnings' (built-in)>,
<module '_weakref' (built-in)>, <module 'zipimport' (built-in)>,
<module '_frozen_importlib_external' (frozen)>, <module 'io' (built-in)>,
<module 'marshal' (built-in)>, <module 'posix' (built-in)>,
<module 'encodings' from '/usr/lib/python3.7/encodings/__init__.py'>,
<module 'codecs' from '/usr/lib/python3.7/codecs.py'>,
<module '_codecs' (built-in)>,
<module 'encodings.aliases' from '/usr/lib/python3.7/encodings/aliases.py'>,
.......

对于sys.modules中的模块是可以直接使用的。通过sys.modules找到该模块就可以直接使用内存中的模块

如不需要import os 就可以直接使用 os 模块

>>> sys.modules['os'].getcwd()
'/home/ljk'

但是如果直接使用os.getcwd()就会报错。

>>> os.getcwd()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined

如果再imports os,os模块也不会再次加载到内存中,因为内存中已经存在该模块对象了。

>>>sys.modules['os']
<module 'os' from '/usr/lib/python3.7/os.py'>

再次导入在内存中会创建一个变量 os 指向内存中的 os模块对象。

>>> import os
>>>
>>> sys.modules['os'] is os
True

缓存功能

当import 一个模块之后,就会在sys.modules中保存模块,在全局范围中,如果再次导入该模块,则不会重复加载到内存。

>>> import sys
>>>
>>> 'a' in sys.modules.keys()
False
>>>
>>> import a
>>>
>>> 'a' in sys.modules.keys()
True
>>>
>>> sys.modules.get('a')
<module 'a' from '/home/ljk/Desktop/a.py'>
>>>

python 内置命名空间、标准库、模块相关概念的更多相关文章

  1. python学习笔记(七)- 递归、python内置函数、random模块

    1.函数的不固定参数: #参数不是必填的.没有限制参数的个数.返回参数组的元组 def syz(*args): #参数组,不限制参数个数 #‘args’参数的名字可以随便命名 print(args) ...

  2. Python 内置的GUI库tkinter方法在py2和py3中的更改

    参考资料:   https://docs.python.org/3.4/library/tkinter.html#tkinter-moduleshttps://docs.python.org/2.7/ ...

  3. Python学习15之python内置六大标准类型

    1.六大标准类型:数值型,str,list,set,tuple,dic 2.数值型:int,float,bool,complex 3.区别: 1)数值型和str,tuple都是不可变类型 而list, ...

  4. Python内置标准模块

    time 模块 1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # t ...

  5. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  6. 【python标准库模块一】时间模块time学习

    本文介绍python的标准库模块time的常见用法 时间模块time 导入时间模块 import time 得到时间戳,这是统计从1970年1月1日0点0分到现在经过了多少秒,一般用于加减法一起用,比 ...

  7. Python内置的urllib模块不支持https协议的解决办法

    Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内 ...

  8. Python内置的操作系统模块(os)与解释器交互模块(sys)

    Python内置的操作系统模块(os)与解释器交互模块(sys) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本片博客只介绍Python调用操作系统的模块即os模块,以及Pyth ...

  9. Python内置OS模块用法详解

    大家好,从今天起早起Python将持续更新由小甜同学从初学者的角度学习Python的笔记,其特点就是全文大多由新手易理解的代码与注释及动态演示.刚入门的读者千万不要错过! 很多人学习python,不知 ...

  10. Python标准库模块之heapq – 堆构造

    Python标准库模块之heapq – 堆构造 读前福利:几百本经典书籍https://www.johngo689.com/2158/ 原文链接:https://www.johngo689.com/2 ...

随机推荐

  1. Util应用框架基础(六) - 日志记录(三) - 写入 Seq

    本文是Util应用框架日志记录的第三篇,介绍安装和写入 Seq 日志系统的配置方法. 安装 Seq Seq是一个日志管理系统,对结构化日志数据拥有强大的模糊搜索能力. Util应用框架目前主要使用 S ...

  2. UVA529 加成序列

    传送门 题目分析 一道 dfs,迭代加深 我们可以很快的猜出来最终 \(m\) 的长度必然是小于 \(10\) 的. 而这种浅深度的问题正好适用于迭代加深. 之后考虑剪枝 优化搜索顺序 : 我们要让序 ...

  3. 计算机网络之防火墙和Wlan配置

    一.防火墙 防火墙(firewall)是一种安全设备,它的位置一般处于企业网络边界与外网交界的地方,用于隔离不信任的数据包 准确点讲,它就是隔离外网和内网的一道屏障,用于保护内部资源信息安全的一种策略 ...

  4. 手机成绩分析软件排行榜TOP10下载

    随着智能手机的普及和移动应用的快速发展,手机成绩分析软件越来越受到学生.家长和教育机构的关注.这些软件可以帮助用户方便地记录.分析和管理学生成绩,提供个性化的学习指导和反馈.在本文中,将详细介绍202 ...

  5. VScode 中利用virtualenv建立 Python 虚拟环境

    ! https://zhuanlan.zhihu.com/p/638114885 VScode 建立 Python 虚拟环境 主要目的:创建一个与默认 python 版本不同的 python 虚拟环境 ...

  6. Head First Java学习:第八章-接口和抽象类

    第八章:接口和抽象类 深入多态 1.抽象类:有些类不应该被初始化 在类声明前面加上抽象类的关键字,abstract. 防止类被初始化,即不能被"new"创建该类的实例(要求) 还是 ...

  7. v0.12.0-敏感词/脏词词标签能力进一步增强

    拓展阅读 敏感词工具实现思路 DFA 算法讲解 敏感词库优化流程 java 如何实现开箱即用的敏感词控台服务? 各大平台连敏感词库都没有的吗? v0.10.0-脏词分类标签初步支持 v0.11.0-敏 ...

  8. PTA数组及排序查找题解与解题思路

    PTA数组及排序查找题解与解题思路 函数题目 函数题目为平台提供的裁判程序调用所完成的函数进行判题,题目规定语言为C语言 6-1 求出二维数组的最大元素及其所在的坐标 本题较为简单,考察的是如何遍历一 ...

  9. Android动态数字输入框

    基础view如下: 具体的思路实现: 1:展示textview实现 2: 顶层使用透明的edittext.获取焦点/删除文字等. public class BaseVerificationCodeVi ...

  10. 笔记本安装linux

    下载 桌面版 Ubuntu 镜像 服务器版 Ubuntu 镜像 使用 Balena Etcher 制作系统安装盘 (1)官方网站下载: 点我下载 (2)下载完毕软件之后,打开软件,选择我们下载好的系统 ...