Skip to content

模块化

说明

模块 (Module)

Python 模块可分为三类:

  1. 标准库模块:Python 自带的模块,如 mathsys 等。
  2. 自定义模块:用户自己编写的模块。
  3. 第三方模块:通过包管理工具(如 pip)安装的模块,如 requestsnumpy 等。

包 (Package)

Python 包(Package)概述:

  1. 在 Python 中,【包含 __init__.py 的文件夹】就是一个包。
  2. 通常会把【某个特定功能相关的所有模块】放入一个包中。
  3. 使用包可以进一步提升代码的:可维护性、可复用性,便于管理大型项目。
bash
project/
 ├── package_name/
   ├── __init__.py
   ├── module1.py
   └── module2.py
 └── main.py

Python 包可分为三类:

  1. 标准库包:Python 自带的包,如 osjson 等。
  2. 自定义包:用户自己编写的包。
  3. 第三方包:通过包管理工具(如 pip)安装的包,如 requestsflask 等。

包与模块的关系

  1. 一个模块就是一个 .py 文件 ,包是用来 “管理模块” 的目录(文件夹)。
  2. 一个包中可以有多个模块,也可以有多个子包。

__init__.py 文件

  1. __init__.py 是包的初始化文件,在包被导入时,__init__.py 会被自动调用
  2. __init__.py 中可以编写一些包的初始化逻辑
  3. __init__.py 中所定义的内容,会被 from 包名 import * 形式全部引入
  4. __init__.py 中也可以使用 __all__ 来控制包中的哪些模块可以被 from 包名 import * 引入

定义模块

  1. 创建一个新的 Python 文件,例如 module_name.py

  2. 在文件中定义函数、类或变量。

    py
    # module_name.py
    def function_name():
        pass

__all__

__all__ 是一个可选的列表,定义了当使用 from module_name import * 时,哪些名称会被导入。

py
# module_name.py
__all__ = ['function_name']

def function_name():
    pass

def another_function():
    pass

__name__

__name__ 是一个特殊变量,用于确定模块是被直接运行还是被导入。

  1. 作为主程序运行时,__name__ 的值为 "__main__"
  2. 被导入时,__name__ 的值为模块的名称(不带 .py)。
py
# module_name.py
if __name__ == "__main__":
    print("This module is being run directly")
else:
    print("This module has been imported")

引入模块

从模块中引入

  1. import 模块名

    py
    import module_name
  2. import 模块名 as 别名

    py
    from module_name import function_name
  3. from 模块名 import 具体内容1, 具体内容2, ……

    py
    from module_name import function_name as fn
  4. from 模块名 import 具体内容1 as 别名1, 具体内容2 as 别名2, ……

    py
    from module_name import function_name1 as fn1, function_name2 as fn2
  5. from 模块名 import *

    py
    from module_name import *

从包中引入

  1. import 包名.模块名

    py
    import package_name.module_name
  2. import 包名.模块名 as 别名

    py
    from package_name.module_name import function_name
  3. from 包名.模块名 import 具体内容1, 具体内容2, ……

    py
    from package_name.module_name import function_name as fn
  4. from 包名.模块名 import 具体内容1 as 别名1, 具体内容2 as 别名2, ……

    py
    from package_name.module_name import function_name1 as fn1, function_name2 as fn2
  5. from 包名.模块名 import *

    py
    from package_name.module_name import *
  6. from 包名 import 模块名

    py
    from package_name import module_name
  7. from 包名 import 模块名 as 别名

    py
    from package_name import module_name as mn
  8. from 包名 import *

    py
    from package_name import *
  9. import 包名

    py
    import package_name

补充:若包嵌套包时,可通过以下方式引入模块:

py
import package_name.sub_package.module_name

基于 MIT 许可发布