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

Python 模块结构

程序员文章站 2022-06-14 15:30:24
...

Python 模块结构

模块是由 Python 代码组成的 .py 文件,任何 Python 文件都可以作为一个模块被引用。

有些模块可通过标准库来获得,因此会随着 Python 一起安装,而其他模块可以用包管理器 pip 来安装。此外,我们还可以根据需要编写属于自己的模块,也就是常说的自定义模块。

1

创建模块

模块的编写相当简单,它可以包含变量、函数和类的定义。一旦模块编写完成,便可以在其他 Python 程序中进行导入,然后使用它里面的定义。

用一个例子来进行说明,创建一个名为 my_module.py 的文件,内容如下所示:

进群:851211580 可获取海量Python学习资料+大牛指导学习

# 定义一个变量
msg = 'I am very happy.'
# 定义一个函数
def hello():
    print("Hello, World!")
# 定义一个类
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def display(self):
        print("My name is {}, i am {} years old.".format(self.name, self.age))

这是一个典型的 Python 模块,它并没有调用任何操作,只是简单地定义了变量 msg、函数 hello() 和类 Person,其代码可以导入并在其他 Python 文件中重用。

2

导入模块

现在,在同一目录下创建一个名为 top_module.py 的文件,然后导入上述模块并访问其中的属性:

import my_module as m
# 调用变量
print(m.msg)
# 调用函数
m.hello()
# 创建对象,并调用方法
p = m.Person('Waleon', 18)
p.display()

这是运行 Python 程序的*脚本,它显式地调用了模块中的函数、对象的方法,并将变量的值打印到屏幕上。

运行该脚本,将得到以下输出:

$ python3 top_module.py
I am very happy.
Hello, World!
My name is Waleon, i am 18 years old.

值得注意的是,一旦模块被导入(导入方式可参考:Python 模块),模块名将成为导入模块中的变量/对象,它里面的所有*代码定义都会成为该变量的属性。

3

模块结构

在绝大多数情况下,Python 程序会被组织在多个文件中,并使用 import 语句相互关联。一般来说,这些文件会分被为三类:

  • ***模块:**Python 脚本,它是程序的主要入口点,运行此文件以启动程序。

  • **自定义模块:**用户自己写的 Python 模块,它往往会提供一些独立的功能,将会被导入到*模块或其他自定义模块中。

  • **标准库模块:**内置于 Python 安装包中的模块(例如:sys、time、json 等),为日常编程中的诸多问题提供了标准的解决方案。

来看一个基本的程序结构,它包含了上面这些模块:

Python 模块结构

在这个图中,top_module.py 是*模块,它导入了模块 my_module1 中定义的内容,但也可以通过 my_module1 访问 my_module2 中的内容,而这两个自定义模块使用了彼此之间的资源,以及标准库中的其他模块。

Tips:导入链可以深入到任何想要的地方:导入文件的数量没有限制,它们可以彼此导入,但要小心循环导入。

实际应用

还是举一个例子吧,来详细说明这一点,先来看 my_module1.py:

from my_module2 import info, square
from math import pi
# 定义一个形状
shape = 'circle'
# 求圆的面积def area(r):
    return pi * square(r)

接着是 my_module2.py:

# 打印一条信息
def info():
    import my_module1
    print('Calculate the area of {}'.format(my_module1.shape))
# 求平方def square(r):
    return r ** 2

你可能注意到了,这里的 import 语句并不在第一行,而是被放入了函数(或者是类)里面,这样做的目的正是为了避免循环导入。

再来看 top_module.py:

import my_module1

my_module1.info()
print(my_module1.area(3))

在这里,top_module.py 是由用户运行的*模块,它通过 my_module1.py 从其他模块导入内容。my_module1 和 my_module2 是用户定义的模块,而 math 模块是从标准 Python 库导入的。

运行*脚本,将得到以下输出:

$ python3 top_module.py
Calculate the area of circle
28.274333882308138

·END·

相关标签: python 程序员