模块
在编写程序的过程中把所有代码都写到一个脚本中肯定不便于维护和使用。
python有一种方法可以把定义放在一个脚本里,并在其他脚本或解释器的交互式实例中使用他们。
这样的脚本被称为模块。
模块中的定义可以导入到其他模块中。
案例:
在当前目录下创建一个名为fibo.py
的文件,文件内容如下:
# 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): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
导入模块
通过关键字import
可以在代码中导入写好的模块,语法如下:
import 模块名
现在,再在当前目录下创建一个名为main.py
的文件。然后编写如下代码:
# main.py
import fibo
fibo.fib(10)
运行后输出:
0 1 1 2 3 5 8
语句import fibo
会在当前脚本中导入变量fibo
,它表示模块fibo
,然后通过fibo.fib
就可以访问模块fibo
中定义好的函数,然后执行。
import
语句有一个变体,它可以把模块中的名称(函数,变量,类名)直接导入到当前模块的变量表里,语法如下:
from 模块名 import 名称
修改main.py
文件里的代码如下:
# main.py
from fibo import fib, fib2
fib2(10)
运行后输出:
[0, 1, 1, 2, 3, 5, 8]
语句from fibo import fib, fib2
,直接将模块fibo
中的函数fib
,fib2
导入到当前模块中,所以在后面的代码中就可以直接通过fib
,fib2
访问模块fibo
中对应的函数。
还有一个变体可以导入定义的所有名称,语法如下:
from 模块名 import *
这会导入模块中所有非以下划线开头的名称。通常不建议使用这个功能,因为它在解释器中引入了一组未知的名称,有可能会覆盖你之前定义过的东西,也会导致代码的可读性差。不过在交互式运行时,为了节省打字可以这么用。
有时,需要导入的定义名称可能和当前模块中的定义重名,可以通过下面的变体自定义导入名称:
import 模块名称 as 新名称
from 模块名称 import 名称 as 新名称
例如:
>>> import fibo as fib
>>> fib.fib(10)
0 1 1 2 3 5 8
>>> from fibo import fib as fibonacci
>>> fibonacci(10)
0 1 1 2 3 5 8