模块概念
Posted fyq-ss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块概念相关的知识,希望对你有一定的参考价值。
1、模块是python程序架构的一个核心概念
2、每一个以扩展名py结尾的python源代码文件都是一个模块
3、模块名同样也是一个标识符,需要符合标识符的命名规则:①字母、下划线、数字组成 ②不能数字开头 ③不能与关键字重名
4、在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具
5、开发原则:每一个模块都应该是可以被导入的
1.1 模块导入的方式
模块导入应该统一写在代码的顶部,更容易及时发现冲突,顺序:内置模块,扩展模块,自定义模块
如果两个模块,存在同名的函数,那么后导入模块的函数,会覆盖掉先导入的函数
一旦发现冲突,可以使用as关键字给其中一个工具起一个别名
1) import 模块名:一次性把模块中所有工具全部导入
import 模块名1,模块名2 ----- 不推荐使用,不符合EP8 python编码规范要求
----- 在导入模块时,每个导入应该独占一行
使用as指定模块的别名:import 模块名 as 模块别名
模块别名应该符合大驼峰命名法
可以提高代码的兼容性
2) from 模块名 import 某一个工具 --- 从某一个模块中,导入部分工具
导入之后不需要通过 模块名. ,可以直接使用模块提供的工具
from 模块名 import * 可以从模块导入所有工具,并且导入后可以直接使用工具。
但是不推荐使用,因为函数重名并没有任何的提示,出现问题不好排查。
与all方法搭配使用,通过__all__=【“变量名1”,“变量名2”】可以只导入all列表中的变量
1.2 模块的搜索顺序
python解释器在导入模块时,会搜索当前目录指定模块名的文件,如果有就直接导入。如果没有,再搜索系统目录。
文件的起名,不要和系统的模块文件重名
python中每一个模块都有一个内置属性__file__可以查看模块的完整路径
1.3 __name__属性
__name__属性可以做到,测试模块的代码只在测试情况下在模块内被运行,而在被导入时不会被执行
__name__属性是python的一个内置属性,记录着一个字符串
如果是被其他文件导入的,__name__就是模块名,如果是当前执行的程序,__name__是__main__
# 在代码的最下方
def main():
pass
if __name__ == “__main__”: # 根据__name__判断是否执行下方代码
main()
1.4 pyc文件(compiled编译)
python在解释源程序时,首先处理源代码,编译生成一个二进制字节码,再对字节码进行处理,才会生成CPU能够识别的机器码
pyc文件是由python解释器将 模块的源码 转换为 字节码 ,python这样保存字节码是作为一种启动速度的优化
有了模块的字节码文件后,下一次运行程序时,如果在上次保存字节码之后没有修改过源代码,python将会加载.pyc文件并跳过编译这个步骤
当python重编译时,它会自动检查源文件和字节码文件的时间戳,如果你又修改了源代码,下次程序运行时,字节码将自动重新创建
以上是关于模块概念的主要内容,如果未能解决你的问题,请参考以下文章