10.1 模块
你已知道如何创建和执行程序(或脚本),还知道如何使用import将函数从外部模块导入到程序中。
import math
math.sin(0)
# 0.0
10.1.1 模块就是程序
任何Python程序都可作为模块导入。假设有一个简单的模块,如下所示
# hello.py
print("Hello, world!")
导入这个模块时,就执行了其中的代码。
import hello
# Hello, world!
但如果再次导入它,什么事情都不会发生。
这次为何没有执行代码呢?因为模块并不是用来执行操作(如打印文本)的,而是用于定义 变量、函数、类等。鉴于定义只需做一次,因此导入模块多次和导入一次的效果相同。
10.1.2 模块是用来下定义的
让模块值得被创建的原因在于 它们像类一样,有自己的作用域。这意味着在模块中定义的类和函数以及对其进行赋值的变量都 将成为模块的属性。
1. 在模块中定义函数
# 只包含一个函数的简单模块
# hello2.py
def hello():
print("Hello, world!")
现在就可以这样导入它:
import hello2
hello2.hello()
# Hello, world!
为何要这样做呢?为何不在主程序 中定义一切呢?
主要是为了重用代码。通过将代码放在模块中,就可在多个程序中使用它们。
2. 在模块中添加测试代码
模块用于定义函数和类等,但在有些情况下(实际上是经常),添加一些测试代码来检查情 况是否符合预期很有用。
关键是检查模块是作为程序运行还是被导入另一个 程序。为此,需要使用变量__name__。
在主程序中(包括解释器的交互式提示符),变量__name__的值是’main’,而 在导入的模块中,这个变量被设置为该模块的名称。
# hello4.py
def hello():
print("Hello, world!")
def test():
hello()
if __name__ == '__main__':
test