• 6. 模块

    6. 模块

    如果你从Python解释器退出并再次进入,之前的定义(函数和变量)都会丢失。因此,如果你想编写一个稍长些的程序,最好使用文本编辑器为解释器准备输入并将该文件作为输入运行。这被称作编写 脚本 。随着程序变得越来越长,你或许会想把它拆分成几个文件,以方便维护。你亦或想在不同的程序中使用一个便捷的函数, 而不必把这个函数复制到每一个程序中去。

    为支持这些,Python有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们。这样的文件被称作 模块 ;模块中的定义可以 导入 到其它模块或者 模块(你在顶级和计算器模式下执行的脚本中可以访问的变量集合)。

    模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。在一个模块内部,模块名(作为一个字符串)可以通过全局变量 name 的值获得。例如,使用你最喜爱的文本编辑器在当前目录下创建一个名为 fibo.py 的文件, 文件中含有以下内容:

    1. # Fibonacci numbers module
    2.  
    3. def fib(n): # write Fibonacci series up to n
    4. a, b = 0, 1
    5. while a < n:
    6. print(a, end=' ')
    7. a, b = b, a+b
    8. print()
    9.  
    10. def fib2(n): # return Fibonacci series up to n
    11. result = []
    12. a, b = 0, 1
    13. while a < n:
    14. result.append(a)
    15. a, b = b, a+b
    16. return result

    现在进入Python解释器,并用以下命令导入该模块:

    1. >>> import fibo

    在当前的符号表中,这并不会直接进入到定义在 fibo 函数内的名称;它只是进入到模块名 fibo 中。你可以用模块名访问这些函数:

    1. >>> fibo.fib(1000)
    2. 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
    3. >>> fibo.fib2(100)
    4. [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
    5. >>> fibo.__name__
    6. 'fibo'

    如果你想经常使用某个函数,你可以把它赋值给一个局部变量:

    1. >>> fib = fibo.fib
    2. >>> fib(500)
    3. 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377