模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py
比如将以下函数定义在fibo.py中:
#斐波那契数列模块
def fib1(n):#打印斐波那契数列
a,b = 0,1
while(b<n):
print(b)
a,b = b,a+b
print()
def fib2(n):#返回斐波那契数列列表
result = [0]
a,b = 0,1
while(b<n):
result.append(b)
a,b = b,a+b
return result
然后进入python解释器,使用以下命令导入这个模块:
import fibo
这样做并没有把定义在fibo中的函数名称写入到当前符号表里,只是把模块fibo的名字写到了那里。
可以使用模块名称来访问函数:
fibo.fib2(10)
>>[0, 1, 1, 2, 3, 5, 8]
如果你打算经常使用一个函数,你可以把它赋给一个本地的名称:
fib2 = fibo.fib2
fib2(10)
>>[0, 1, 1, 2, 3, 5, 8]
from … import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
from fibo import fib1
fib1(10)
>>1
1
2
3
5
8
from … import * 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from fibo import *
fib2(10)
>>[0, 1, 1, 2, 3, 5, 8]
__name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
比如在using_name.py文件中定义__name__属性:
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
run using_name.py
>>程序自身在运行
import using_name
>>我来自另一模块
dir() 函数
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
dir(fibo)
>>['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'fib1',
'fib2']