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