模块
如果退出 Python 解释器并再次进入,你所做的定义(函数和变量)将消失。因此,如果你想写一些更长的程序,你最好使用文本编辑器为解释器准备输入,然后以这个文件作为输入运行程序。这也称为创建脚本。随着你的程序变长,你可能希望将其拆分为多个文件以便于管理。你可能还想在多个程序中直接使用该函数,而无需在每个程序中复制函数定义。
为了支持这个特性,Python 可以将定义放在一个文件中,并在脚本或交互式解释器实例中使用它。该文件称为模块,模块中的定义可以导入其他模块或主模块(你可以在顶层和计算器模式下执行的脚本中访问的变量集合)。
模块是包含 Python 定义和声明的文件。该文件是带有 .py 后缀的模块名称。在一个模块中,可以通过全局变量__name__获取模块名称(字符串类型)。例如,使用你喜欢的文本编辑器在当前目录下创建一个名为fibo.py的文件,该文件包含以下内容
# 斐波那契数模块
def fib(n): # 打印斐波那契数直到 n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # 返回到 n 的斐波那契数
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
现在进入Python解释器,通过以下命令导入这个模块
>>> import fibo
这样做不会直接导入当前环境中定义在fibo中的函数名,只会导入名为fibo的模块。可以使用模块名称获取模块中定义的函数:
>>> fibo.fib(1000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'
如果你打算经常使用一个函数,你可以将它分配给一个局部变量
>>> fib = fibo.fib
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
模块进阶
模块可以包含可执行声明,包括函数定义。这些声明用于初始化模块。它们仅在第一次导入模块时执行。 [1](如果文件作为脚本运行,它们也会被执行)
每个模块都有其私有的符号表,模块中定义的所有函数将这个符号表作为全局符号表。因此,一个模块的作者可以在模块中使用全局变量而无需担心与其他模块的全部变量冲突。另一方面,如果你知道你在干什么,你同样可以使用 模块.变量 的方式来获取一个模块的全局变量。
模块可以导入其他模块。将所有 import 语句放在模块(或者脚本,如果这个问题重要的话)的开头不是必须的,但习惯如此。被导入的模块名被放置于当前模块的全局符号表中。
import 声明的一种变体可以把一个模块中的变量直接导入当前模块的符号表中。例如:
>>> from fibo import fib, fib2
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
这样做不会将模块名称导入本地符号表(因此在上面的示例中,未定义 fibo)
还有一种 import 语句的变体,它导入模块中定义的所有变量:
>>> from fibo import *
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
这将导入模块中的所有名称,但以下划线 (_) 开头的名称除外。大多数时候 Python 程序员不使用这种机制,因为它向解释器引入了一系列与位置无关的变量,可能会覆盖你已经定义的一些变量。
请注意,一般来说,使用 import * 导入模块或包是不受欢迎的,因为这通常会降低代码可读性。但在使用交互型解释器为了减少打字而使用它是允许的。
如果模块名后紧跟 as, 那么 as 后的变量名会与被导入的模块名绑定。
>>> import fibo as fib
>>> fib.fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
这与 import fibo 的导入方式相同,除了模块现在命名为 fib 而不是 fibo。
使用 from 时可以使用这个机制达到相同的效果:
模块搜索路径
当导入名为 spam 的模块时,解释器首先查找同名的内置模块。如果没有找到同名的内置模块,解释器将在 sys.path 提供的路径列表中查找名为 spam.py 的文件。 sys.path 从这些位置初始化:
包含输入脚本的目录(如果未指定文件,则为当前目录)
PYTHONPATH 一个目录的列表,语法与 shell 的 PATH 变量相同。
安装依赖默认路径。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python中如何判断一个变量是否为列表10/05
- ♥ python字符串中变量的使用09/09
- ♥ python中的OrderedDict模块是什么?12/15
- ♥ 如何在python中清除数组元素10/18
- ♥ python如何确定复数09/17
- ♥ python中的np是什么意思08/28
内容反馈