模块

……

模块相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 模块module:以.py结尾的文件,里面定义变量和函数,可以在其他文件中调用;
# 模块名是全局变量__name__的值。

# 创建模块fibo.py,里面的内容如下:
def fib(n): #
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
# 在解释器或脚本中import即可导入
>>> import fibo
>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'

>>> from fibo import fib, fib2
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

>>> from fibo import * # 引入fibo中所以内容,建议不使用这种方法
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

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

>>> from fibo import fib as fibonacci
>>> fibonacci(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

# 将模块作为脚本执行
python fibo.py <arguments> # 将执行fibo中的内容
# 但是__name__的值变成了"__main__"
# 在模块里面添加如下内容,这样可以作为模块和脚本
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
$ python fibo.py 50
1 1 2 3 5 8 13 21 34
>>> import fibo # import时,上面添加的内容不会被执行
>>>

# 使用dir()函数查看模块里面的内容
>>> import fibo
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> a = [1, 2, 3, 4, 5] # dir()查看当前定义的所有内容
>>> import fibo
>>> fib = fibo.fib
>>> dir()
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 包用来管理模块,模块用来管理函数
# 包是一个目录,目录下一定有一个__init__.py的文件
# __init__.py可以是一个空文件、用来执行初始化代码或者设置变量__all__
# 假设一个包的结构如下
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
import sound.effects.echo
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
# 也可以
from sound.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)
# 或者
from sound.effects.echo import echofilter
echofilter(input, output, delay=0.7, atten=4)

import item.subitem.subsubitem # 注意:import时,除了最后一个前面的必须是包