【Python】第六章 模块

本文详细介绍了Python中的模块管理,包括import、reload()和__import__()的用法,以及模块的导入机制。讨论了如何导入不同路径的文件,以及双下划线属性的作用,特别是__pycache__目录的功能,强调了它在提升模块加载速度方面的重要性。
摘要由CSDN通过智能技术生成

该文章内容整理自《Python编程:从入门到实践》、《流畅的Python》、以及网上各大博客

模块

Python 提供了强大的模块(Modules)支持,不仅 Python 标准库中包含了大量的模块(即标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块。通过这些强大的模块可以极大地提高开发者的开发效率。模块可以理解为是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个 .py 文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突

import

import用于导入模块,其具体用法为

  1. import 模块名1 [as 别名1], 模块名2 [as 别名2],…:使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)。当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错
  2. from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…:使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。也可以导入指定模块中的所有成员,即使用 form 模块名 import *,但此方式不推荐使用。因为这种用法在导入后使用模块中的成员时无需以模块名为前缀,这有可能与本文件中的已有成员名产生冲突

reload()

默认情况下,模块在第一次被导入之后,其他的导入都不再有效。如果此时在另一个窗口中改变并保存了模块的源代码文件,也无法更新该模块。这样设计的原因在于,导入是一个开销很大的操作(导入必须找到文件,将其编译成字节码,并且运行代码),以至于每个文件、每个程序运行不能够重复多于一次
若此时使用import导入模块后模块发生变化,而需要重新导入新的模块,则可以通过reload()进行重新加载。重新加载包括最初导入模块时应用的分析过程和初始化过程。这样就允许在不退出解释器的情况下重新加载已更改的Python模块。但是注意

  1. 如果模块在语法上是正确的,但在初始化过程中失败,则导入过程不能正确地将模块的名字绑定到符号表中。这时,必须在模块能被重新加载之前使用__import__()函数加载该模块
  2. 重新加载的模块不删除最初旧版本模块在符号表中的登记项
  3. 如果模块利用 from…import… 方式从另一模块导入对象,reload()函数不重新定义导入的对象,可利用 import… 形式避免这个问题
  4. 提供类的重新加载模块不影响所提供类的任何已存实例,已存实例将继续使用原来的方法定义,只有该类的新实例使用新格式
  5. reload()函数希望获得的参数是一个已经加载了的模块对象的名称,所以如果在重载之前,需要确保已经成功地导入了这个模块

在 Python2 中reload()是内置函数,能够直接使用。但是 Python3 把reload()内置函数移到了imp标准库模块中,因而使用前需要从imp中导入

__import__()

import语句结合了两个操作:先搜索指定名称的模块,然后将搜索结果绑定到当前作用域中的名称。而内置函数__import__()只搜索指定名称的模块,并且,import语句执行过程中是调用__import__()来完成模块检索的

import语句属于静态导入,而__import__()函数用于动态加载模块。一般形式如下,它返回导入的模块,一般会赋值给变量,以便后期使用
__import__(name, globals=None, locals=None, fromlist=(), level=0)
其中

  • name:模块名。一方面,在使用import导入模块时,模块名中不能含有空格或者是以数字开头,因为在import语法中空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值