什么是模块
为了让代码方便维护,我们将代码进行分类,分别放到不同的文件里。这样,所有的代码都按照一定的规则分布在各个文件里,需要使用的时候只要导入相应的文件即可。在 Python 中,这样的文件被称之为模块(Module)
Python 提前帮我们把一些常用的函数和变量写到了内置模块中,比如数学计算中常用的开根号方法——math.sqrt()
方法,圆周率 π 的数值——math.pi
等
导入模块
当我们需要使用模块的时候,只需使用 import
语句导入对应的模块即可。我们来看一个例子,这个例子中有两个模块,一个是 other.py 文件,另一个是 main.py 文件。
# other.py
print('带你打开编程世界的大门')
# main.py
import other # 导入 other 模块
# 输出:带你打开编程世界的大门
其实在执行 import other
后,import other
被替换成 other.py 里的代码
上面的代码是为了让你理解 import
的作用,其实一般模块里的代码大都是定义好的变量和函数等。我们再来看一个例子:
# other.py
pi = 3.14159265359
def half(x):
return x / 2
# main.py
import other # 导入 other 模块
print(other.pi)
# 输出:3.14159265359
print(other.half(4))
# 输出:2.0
我们可以看到,当导入模块后,要使用模块中的变量、函数,需要通过 模块名.变量名
和 模块名.函数名()
的方式。.
表明了从属关系,表示某个模块里面的某个变量或函数。
import
语句还有一种用法是 import ... as ...
,比如我们觉得 other 这个模块名太长,就可以用 import other as o
,相当于给 other 取了一个别名为 o
,之后我们就可以使用 o
来替代 other
。
# other.py
pi = 3.14159265359
def half(x):
return x / 2
# main.py
import other as o # 导入 other 模块
print(o.pi)
# 输出:3.14159265359
print(o.half(4))
# 输出:2.0
拓展:数据分析常用的 pandas 和 numpy 常被简写成 pd 和 np,所以你会看到 import pandas as pd
和 import numpy as np
这样的写法
导入部分模块
import
语句一次性将整个模块导入进来,我们还可以使用 from ... import ...
语句只导入我们需要的变量、函数等。举个例子:
# other.py
pi = 3.14159265359
def half(x):
return x / 2
# main.py
from other import pi, half # 从 other 模块导入 pi 和 half
print(pi)
# 输出:3.14159265359
print(half(4))
# 输出:2.0
可以看到,执行 from other import pi, half
后可以直接使用 other.py 里的 pi 和 half,不再需要在前面加 other.
。并且同时导入多个变量或函数时,两两之间要用逗号隔开。
需要注意的是:使用 from ... import ...
的方式导入就不能再用 模块名.变量名
和 模块名.函数名
的方式访问模块内的变量或函数了,否则代码将会报错
程序入口
程序入口,指的就是你 直接运行 的那个 .py
文件。举个例子,main.py
中导入了其他的模块 other.py
,接着,我们将 main.py
直接运行,这时 main.py
就是作为程序入口直接运行的,而 other.py
则是以导入的形式运行的。
程序入口的功能,是指明模块中某一段代码在何时才会被运行。如果想让 代码块 B 仅在 abc.py
作为程序入口时才能运行,那就可以在代码中这样写:
# abc.py
代码块 A
if __name__ == '__main__':
代码块 B
上面代码的意思是当 __name__
的值为 '__main__'
时执行 代码块 B
,那这里的 __name__
和 '__main__'
又都是什么呢?请听我慢慢道来:
__name__
这个东西看起来很奇怪,但它的本质其实就是一个 变量。它是 Python 里一个特殊的内置变量,默认值是 模块名。
但当模块作为程序入口时,__name__
的值会被改为 '__main__'
,总结对比一下:
- 如果
abc.py
以导入的方式被运行,那abc.py
中的__name__
值就是'abc'
; - 如果
abc.py
被直接运行,那abc.py
中__name__
的值会被改为'__main__'
。