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 等),为日常编程中的诸多问题提供了标准的解决方案。
来看一个基本的程序结构,它包含了上面这些模块:
在这个图中,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·
上一篇: Unity OnGUI实时显示游戏FPS