Python 学习笔记之 模块
Contents
要点概括:
1.模块
在使用 Python 解释器来编程时,如果从 Python 解释器退出再进入,那么之前定义的所有的方法和变量就都消失了。
Python 提供了一种方法,它可以把这些定义存放在文件中,为一些脚本或者交互式的解释器使用,这个文件被称为模块。
模块是一个包含所有定义的函数和变量的文件,其后缀名是.py
。模块可以被别的程序引入,以使用该模块中的函数等功能。
这里有一个使用 Python 标准库中模块的例子,如下所示:
|
|
用命令行运行,如下所示:
|
|
说明:
import sys
用于引入Python标准库中的sys.py
模块,这是引入某一模块的方法。sys.argv
是一个包含命令行参数的列表。sys.path
包含了一个Python解释器自动查找所需模块的路径的列表。
2.import语句
语法格式如下:
|
|
当解释器遇到import
语句时,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。
现在我们创建一个support.py
文件,键入代码:
|
|
再创建一个test.py
文件,键入如下代码:
|
|
运行test.py
文件,输出结果如下:
|
|
一个模块只会被导入一次,不管执行了多少次import
。这样可以防止导入模块被一遍又一遍地执行。
但是,当我们使用import
语句的时候,Python 解释器是怎样找到对应的文件的呢?
这就涉及到 Python 的搜索路径,搜索路径是由一系列目录名组成的,Python 解释器就依次从这些目录中去寻找所引入的模块。
3.from…import语句
Python 的from
语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
|
|
首先新建fibo.py
文件,键入如下代码:
|
|
再创建test.py
文件,键入如下代码:
|
|
运行test.py
文件,输出结果如下所示:
|
|
注意:因为我们只使用了fib
函数,所以导入的模块不会把所有内容全部导入到当前的命名空间,只会将fib
函数引入进来。
4.from…import * 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,语法格式如下:
|
|
这种声明不该被过多地使用。因为如果将一个模块的所有函数名导入当前命名空间中,假如不同模块包含了相同的函数名,或者是与自己编写得函数名相同,在调用的过程中将会导致混乱,而且在debug
时还不容易发现。所以不推荐使用这种方法,它会引入其他来源的命名,很可能覆盖已有的定义。
5.__name__
属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__
属性来使该程序块仅在该模块自身运行时执行。
新建using_name.py
文件,键入如下代码:
|
|
运行该文件,输出结果如下:
|
|
然后创建test.py
文件,键入如下代码:
|
|
然后运行此文件,输出结果如下:
|
|
可见,每个模块都有一个__name__
属性,当其值是__main__
时,表明该模块自身在运行,否则是被引入。