- 3
- 0
- 约7.07千字
- 约 14页
- 2020-04-19 发布于江苏
- 举报
看了这篇你就会了所有的python 模
块使用
如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都
会丢失。因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个
文本编辑器会更好,并以那个文件替代作为输入执行。这就是传说中的 脚本。
随着你的程序变得越来越长,你可能想要将它分割成几个更易于维护的文件。
你也可能想在不同的程序中使用顺手的函数,而不是把代码在它们之间中拷来
拷去。
为了满足这些需要,Python 提供了一个方法可以从文件中获取定义,在脚本
或者解释器的一个交互式实例中使用。这样的文件被称为 模块;模块中的定义
可以 导入 到另一个模块或 主模块 中(在脚本执行时可以调用的变量集位于
最高级,并且处于计算器模式)。
模块是包括 Python 定义和声明的文件。文件名就是模块名加上 .py 后缀。
模块的模块名(做为一个字符 串)可以由全局变量 __name__ 得到。例如,
你可以用自己惯用的文件编辑器在当前目录下创建一个叫 fibo.py 的文件,录
入如下内容:
现在进入 Python 解释器并使用以下命令导入这个模块:
这样做不会直接把 fibo 中的函数导入当前的语义表;它只是引入了模块名
fibo 。你可以通过模块名按如 下方式访问这个函数:
如果打算频繁使用一个函数,你可以将它赋予一个本地变量:
深入模块
除了包含函数定义外,模块也可以包含可执行语句。这些语句一般用来初始化
模块。他们仅在 第一次 被导入的地方执行一次。
每个模块都有自己私有的符号表,被模块内所有的函数定义作为全局符号表使
用。因此,模块的作者可以在模块内部使用全局变量,而无需担心它与某个用
户的全局变量意外冲突。从另一个方面讲,如果你确切的知道自己在做什么,
你可以使用引用模块函数的表示法访问模块的全局变量,
modname.itemname。
模块可以导入其他的模块。一个(好的)习惯是将所有的 import 语句放在模
块的开始(或者是脚本),这并非强制。被导入的模块名会放入当前模块的全
局符号表中。 小编为大家推荐一个学习交流群:308754087,群里有人都
快满了~大家遇到啥问题都可以在里面交流!是一个非常好的学习交流地方~欲
进从速欧~各种 PDF 等你来下载,全部免费,只为帮助大家快速入门。
import 语句的一个变体直接从被导入的模块中导入命名到本模块的语义表
中。例如
这样可以导入所有除了以下划线( _ )
开头的命名。 需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导
入所有,因为这样会让代码变得很难读。不 过,在交互式会话中这样用很方便
省力。
***出于性能考虑,每个模块在每个解释器会话中只导入一遍。因
此,如果你修改了你的模块,需要重启解释器;或者,如果你就
是想交互式的测试这么一个模块,可以用 imp.reload() 重新加
载,例如 import imp; imp.reload(modulename)。
作为脚本来执行模块
当你使用以下方式运行 Python 模块时,模块中的代码便会被执行
python fibo.py arguments
模块中的代码会被执行,就像导入它一样,不过此时 __name__ 被设置为
__main__ 。这相当于,如果你在 模块后加入如下代码:
if __name__ == __main__:
import sys
fib(int(sys.argv[1]))
就可以让此文件像作为模块导入时一样作为脚本执行。此代码只有在模块作为
“main” 文件执行时才被调用:
$ python fibo.py
501 1 2 3 5 8 13 21 34
如果模块被导入,不会执行这段代码:
import fibo
这通常用来为模块提供一个便于测试的用户接口(将模块作为脚本执行测试需
求)。
模块的搜索路径
导入一个叫 spam 的模块时,解释器先在当前目录中搜索名为 spam.py 的
文件。如果没有找到的话,接着 会到
sys.path 变量中给出的目录列表中查找。 sys.path 变量的初始值来自如下:
输入脚本的目录(当前目录)。
环境变量 PYTHONPATH 表示的目录列表中搜索
(这和 shell
原创力文档

文档评论(0)