Python自定义模块

2024-07-28 17:18:54 浏览数 (2)

一、什么是自定义模块?

Python中虽然内置了许多实用的模块,但有时我们需要根据特定需求创建个性化的模块。这就可以通过自定义模块来实现,也就是自己编写一个模块。

注意:

每个Python文件都可以作为一个模块,模块的名字就是文件的名字,也就是说自定义模块名必须要符合标识符命名规则

二、自定义模块的导入

①导入自定义模块

在Pycharm中新建一个名为my_module1的python文件,并定义test函数。

②导入不同模块的同名功能

在 Python 中导入多个模块时,如果模块内有同名的功能,那么调用这个同名功能的时候,后导入的会覆盖先导入的

三、自定义模块的测试

在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,开发人员通常会在.py文件中添加一些测试信息。

例如,在my_module1.py文件中添加测试代码test(1,2)

代码语言:python代码运行次数:0复制
def test(a,b):
    print(a b)

test(1,2)

输出结果:

3

问题

在模块中添加测试代码后,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行test函数的调用。

代码语言:python代码运行次数:0复制
from my_module1 import test

输出结果:

3

解决方案

使用if __name__ == '__main__':判断模块是否直接运行。

每个 Python 模块都有一个内置的属性 __name__,这个属性的值根据模块的使用方式而不同。

  • 直接运行模块: 如果 Python 解释器直接运行该文件,__name__的值为 '__main__'__name__ == '__main__'为真,紧随其后的代码会被执行
  • 导入模块: 如果该文件被另一个模块导入,__name__ 的值则是这个模块的名称, '__main__'__name__ == '__main__'为假,紧随其后的代码不会被执行。
代码语言:python代码运行次数:0复制
def test(a,b):
    print(a b)

if __name__ == '__main__':
    test(1,2)

输出结果:

3

代码语言:python代码运行次数:0复制
from my_module1 import test

输出结果为空

四、自定义模块的封装

__all__是一个列表,定义了从模块中使用 from module import * 导入的名称。列表中包含的名称会被导入,而未在列表中列出的名称不会被导入。

如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素

这种机制有助于封装模块的接口,确保用户只能访问特定的功能,增强模块的安全性和可维护性。

0 人点赞