Python3 模块
在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
下面是一个使用 python 标准库中模块的例子。
# 用sys模块 获取文件路径 和 python的全路径 调用参数c1\c2
import sys
for i in sys.argv:
print(i)
print('\n\npython的路劲为:',sys.path)
运行结果:
- 1、import sys 引入 python 标准库中的 sys.py 模块;这是引入某一模块的方法。
- 2、sys.argv 是一个包含命令行参数的列表。
- 3、sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。
Import 语句
想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:
import module1,module2,…,modulen
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 CaseModule_1,需要把命令放在脚本的顶端:
# 文件名 CaseModule_1
# 模块
def Print_name(var):
print('Hello',var)
return
Casetest.py 引入 CaseModule_1 模块:
#导入 CaseModile_1 模块
import CaseModile_1
CaseModile_1.Print_name('python')
运行结果:
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?
这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。
这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。
搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量,做一个简单的实验,在交互式解释器中,输入以下代码:
sys.path 输出是一个列表,其中第一项是空串’’,代表当前目录(若是从一个脚本中打印出来的话,可以更清楚地看出是哪个目录),亦即我们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)。
因此若像我一样在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉。
了解了搜索路径的概念,就可以在脚本中修改sys.path来引入一些不在搜索路径中的模块。
现在,在解释器的当前目录或者 sys.path 中的一个目录里面来创建一个fibo.py的文件,代码如下:
# 斐波那契(fibonacci)数列模块
def fib(n): #定义到n的斐波那契数列
a,b = 0,1
while b < n:
print(b,end=' ')
a,b = b,a+b
print()
def fib2(n): #返回到n的斐波那契数列
fiblist = []
a,b = 0,1
while b < n:
fiblist.append(b)
a,b = b,a+b
return fiblist
新建py文件,然后进入文件编辑页面,使用下面的代码导入这个模块:
import fibo
这样做并没有把直接定义在fibo中的函数名称写入到当前符号表里,只是把模块fibo的名字写到了那里。
可以使用模块名称来访问函数:
fibo.fib(1000)
print("-----------------------")
fibolist = []
fibolist = fibo.fib2(1000)
print(fibolist)
print("-----------------------")
print(fibo.__name__)
print("-----------------------")
运行结果:
如果你打算经常使用一个函数,你可以把它赋给一个本地的名称:
fib = fibo.fib
fib(1000)
运行结果: