Python中的模块是什么?如何编写一个模块

模块允许您组织Python代码。 将逻辑上相关代码分组到一个模块中,使代码更易于理解和使用。

模块是由Python代码组成的文件。 模块中可以定义函数、类和变量等。

一个简单的例子

假如有一个文件名为first.py,其中的代码如下例所示:

age = 1

def say():
    print('it\'s my first module.')

Python中包含三种类型的块:

  1. 使用Python编写的模块。
  2. 内置模块他们都已经包含在解释器中了。
  3. 用C语言编写的在运行时动态加载的模块。

导入模块

我们可以使用import语句将模块中定义的函数、类导入到当前的执行环境中来。

import moduleName

当解释器遇到import语句时,将在搜索路径中查找模块,它就会导入该模块。 搜索路径是解释器为导入模块而搜索的目录列表。

搜索路径包括:

  1. 运行脚本的目录或当前目录(如果解释器以交互方式运行)。
  2. 环境变量PYTHONPATH设置的目录列表,(PYTHONPATH的格式取决于操作系统,但它的格式与PATH环境变量的格式相同。)
  3. 与安装目录相关的,在安装Python时配置的目录列表。

生成的搜索路径可在Python变量sys.path中访问,该变量在名为sys的模块下面:

>>> import sys
>>> sys.path
['C:\\Users\\userName\\AppData\\Local\\Programs\\Python\\Python310\\python310.zip', 'C:\\Users\\userName\\AppData\\Local\\Programs\\Python\\Python310\\DLLs', 'C:\\Users\\userName\\AppData\\Local\\Programs\\Python\\Python310\\lib', 'C:\\Users\\userName\\AppData\\Local\\Programs\\Python\\Python310', 'C:\\Users\\userName\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages']

导入如上定义的first模块:

import first

print(first.age)

first.say()

输出:

1
it's my first module.

from import语句

Python的from语句允许您从模块导入特定属性或函数,而不是将整个模块一起导入。

# 从math模块导入常量pi和幂函数pow
from math import pi, pow

#打印常量pi,前面不需要加math.
print(pi)

#2的5次方
print(pow(2,5))

输出

3.141592653589793
32.0

使用from import *语句,导入所有名称

from import语句结合*符号用于将模块中的所有名称导入当前命名空间。

使用*很方便,有它的优势,但如果您知道需要的是那些变量或函数,不见意使用*

# 从math模块导入所有变量和函数
from math import pi, pow

print(pi)

print(pow(2,5))

输出

3.141592653589793
32.0

重命名模块

使用as关键字可以在导入模块时重命名该模块。

# 导入math模块并将模块重命名为myMath
import math as myMath

print(myMath.pi)

print(myMath.pow(2,5))

输出

3.141592653589793
32.0

查看模块内部包含的内容

使用dir()函数可以查看模块内部定义了那些属性:

>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']