欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python模块化编程

程序员文章站 2022-03-07 14:16:24
...

写博客能更好的梳理知识体系,整理思路。

导入模块

方法一:

import 模块名称1 [as 别名1],模块名称2[as 别名2],...
# 此时会导入模块所有成员(变量、函数、类),使用时要加前缀模块名(或者别名)

方法二:

from 模块名称 import 成员名1 [as 别名1],成员名2[as 别名2],... # 此时只会导入模块中的指定成员,使用时不加前缀,直接使用。
from 模块名称 import  * #导入模块所有成员 (不推荐,如果同时导入两个模块,且都存在一个同名函数,那么将造成混乱)

自定义模块

通常情况下,为了检验我们自定义的模板中代码的正确性,我们往往需要为其设计一段测试代码。

这就造成一个比较尴尬的局面:比如我们创建了一个my.py的文件,并作为模块导入一个名叫test.py的文件,然后运行test.py,则my.py中的测试代码会运行。
这显然不是我们想要的效果。正常的效果应该是,只有直接运行模板文件时,测试代码才会被执行;反之,如果是其它程序以引入的方式执行模板文件,则测试代码不应该被执行。

实现这个效果,可以借助 Python 内置的 name 变量。当直接运行一个模块时,name 变量的值为 main;而将模块被导入其他程序中并运行该程序时,处于模块中的 name 变量的值就变成了模块名。因此,如果希望测试函数只有在直接运行模块文件时才执行,则可在调用测试函数时增加判断,即只有当 name ==‘main’ 时才调用测试函数。比如:

if __name__=='__main__':
	demo() #假设为测试函数

这也是下面这个语句的来龙去脉:

if __name__=='__main__':

说明文档:
在定义函数或者类时,可以为其添加说明文档,以方便用户清楚的知道该函数或者类的功能。自定义模块也不例外。为自定义模块添加说明文档,和函数或类的添加方法相同,即只需在模块开头的位置定义一个字符串即可。
示例:

‘’‘
这是一个示例程序
’‘’
......

可以通过模板的__doc__属性来访问模块的说明文档。如下:

import my #自定义模块名
print(my.__doc__)

如果模块中包含空格或者以数字开头,就需要使用 Python 提供的 import() 内置函数引入模块。
示例:

__import__('my best')
__import__('666my')

python模块ModuleNotFoundError: No module named

当使用 import 语句导入模块后,Python 会按照以下顺序查找指定的模块文件:

  1. 在当前目录,即当前执行的程序文件所在目录下查找;
  2. 到 PYTHONPATH(环境变量)下的每个目录中查找;
  3. 到 Python默认的安装目录下查找。

以上所有涉及到的目录,都保存在标准模块 sys 的 sys.path 变量中,通过此变量我们可以看到指定程序文件支持查找的所有目录。换句话说,如果要导入的模块没有存储在 sys.path 显示目录中,那么导入该模块并运行程序时,Python 解释器会抛出ModuleNotFoundError(未找到模块)异常。

三种解决方法:

  1. 向 sys.path 中临时添加模块文件存储位置的完整路径;
import sys
sys.path.append('模块的完整路径')  
# 注意一:在添加完整路径中,路径中的 '\' 需要使用 \ 进行转义,或者使用反斜杠‘/’  否则会导致语法错误。
# 注意二:通过该方法添加的目录,只能在执行当前文件的窗口中有效,窗口关闭后即失效。
  1. 将模块放在 sys.path 变量中已包含的模块加载路径中;
    安装某些通用性模块,比如复数功能支持的模块、矩阵计算支持的模块、图形界面支持的模块等,这种模块应该直接安装在 Python 内部,以便被所有程序共享,此时就可借助于 Python 默认的模块加载路径。
# 通常来说,我们默认将 Python 的扩展模块添加在 lib\site-packages 路径下,它专门用于存放 Python 的扩展模块和包,这样任何 Python 程序都可使用该模块。
  1. 设置path 系统环境变量。
    PYTHONPATH 环境变量的值是很多路径组成的集合,Python 解释器会按照 path 包含的路径进行一次搜索,直到找到指定要加载的模块。
# 对于普通用户来说,设置用户 path 变量和系统 path 变量的效果是相同的,但 Python 在使用 path 变量时,会先按照系统 path 变量的路径去查找,然后再按照用户 path 变量的路径去查找。

设置环境变量如下:
找到桌面上的“计算机” ,并点击鼠标右键,单击“属性”。此时会显示“控制面板\系统和安全\系统”窗口,单击该窗口左边栏中的“高级系统设置”菜单,出现“系统属性”对话框,进入环境变量,单击新建按钮,在“变量名”文本框内输入环境变量名称;在“变量值”文本框内输入

 .;"此处填写你的模块所在路径"# 点(.),表示当前路径,当运行 Python 程序时,Python 将可以从当前路径加载模块;
 # 后面的表示你自己设置的模块路径。

模块导入注意事项:
1.导入的模块1中如果有输出函数,在导入到模块2并运行模块2,将会自动执行模块1中的输出函数。
2.使用“import my_module”导入模块的本质就是,将 my_module.py 中的全部代码加载到内存并执行,然后将整个模块内容赋值给与模块同名的变量,该变量的类型是 module,而在该模块中定义的所有程序单元都相当于该 module 对象的成员。
3.在导入模块之后,Python 会为每个模块都生成一个 *.cpython-36.pyc 文件,该文件是 Python 为模块编译生成的字节码,用于提升该模块的运行效率。
4.如果导入同一个模块很多次,python将只会执行一次。

python的__all__变量:
该变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称。通过在模块文件中设置 all 变量,当且仅当其它文件以“from 模块名 import *”的形式导入该模块时,该文件中只能使用 all 列表中指定的成员。
python模块化编程

相关标签: 杂谈