模块
模块是Python 程序架构的一个核心概念
-
模块好比是 工具包,要想使用这个工具包中的工具,需要使用 import 这个关键字进行导入这个工具包
-
每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
-
在模块中定义的 全局变量、函数 都是模块能够提供给外界直接使用的工具
模块示例
先定义一个模块 cal.py ,里面一个add 方法和 reduce 方法,以及一个变量name
在hello3.py 文件中调用刚创建的模块
打印结果如下:
小结
-
可以在一个 Python 文件中定义变量 或者函数,然后在 另外一个文件中使用 import 导入这个模块
-
导入之后,使用 模块名.变量 / 模块名.函数 的方式,进行调用
-
模块可以让代码方便的被 复用
模块名也是一个标识符
-
标示符可以由 字母、下划线 和数字组成
-
不能以数字开头
-
不能与关键字重名
注意:如果在给 Python 文件起名时,以数字开头 是无法在 Pycharm 中导入这个模块的
Pyc文件(c 指 compiled 编译过 的意思)
-
浏览程序目录会发现一个 __pycache__ 的目录,目录下有一个 cal.cpython-38.pyc 文件, cpython-38 表示Python解释器的版本
-
这个 pyc 文件是由 Python 解释器将 模块的源码 转换为 字节码
-
Python 这样保存 字节码 是作为一种启动 速度的优化
-
字节码
-
Python 在解释源程序时是分成两人步骤的
-
首先处理源代码,编译生成一个二进制 字节码
-
再对 字节码 进行处理,才会生成 CPU 能够识别的 机器码
-
-
有了模块的字节码文件之后,下一次运行程序时,如果在上次保存字节码之后 没有修改过源代码 Python 将会加载 .pyc文件并跳过编译这个步骤
-
如果又修改了源代码,下次程序运行时,字节码将自动重新创建
from ... import ...
模块提供了类似名字空间的限制,允许 Python 从模块中导入指定的符号(变量、函数、类等)到当前模块。导入后,这些符号就可以直接使用,而不需要前缀模块名。
示例: 还是在 hello3.py 文件中导入刚刚的cal 模块
包
-
包 是一个 包含多个模块的 特殊目录
-
目录下有一个 特殊的文件 __init__.py
-
包名的 命名方式 和变量名一致,小写字母+ _
好处:使用 import 包名,可以一次性导入包 中所有的模块
常见的包结构
pakageName
-------__init__.py
-------moduleName1.py
-------moduleName2.py
------- ...
注:包路径下必须存在 __init__.py 文件
示例: 建立一个名为 ani 包,手动创建一个名为 __init__.py 的空文件, 创建cat 模块和 dog 模块,并分别写一个 eat 函数
然后在 hello3.py 文件中调用 (方式一)
然后在 hello3.py 文件中调用 (方式二)
注:导包建议采用此种方式,代码简洁,明了。包中需要导入的模块越多 或者 名称越长,此种方法效果越好
程序猿与投资生活实录已改名为 程序猿知秋,WX同款,欢迎关注!