Python · 模块和包

模块

模块(Modules):重用代码是函数,重用函数是模块,以 .py 为扩展名就可以是一个模块,可以避免函数命名冲突。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# module1.py
def foo():
print('hello, world!')

# module2.py
def foo():
print('goodbye, world!')

# test.py
import module1 as m1
import module2 as m2

m1.foo() # 输出hello, world!
m2.foo() # 输出goodbye, world!

Warning:一般来说,你应该尽量避免使用 from...import 语句,而去使用 import 语句。这是为了避免在你的程序中出现名称冲突,同时也为了使程序更加易读。

__name__ :是 Python 中一个隐含的变量,它代表了模块的名字,只有被 Python 解释器直接执行的模块的名字才是 __main__

示例module_using_name.py

1
2
3
4
5
6
7
8
9
10
11
12
13
if __name__ == '__main__':
print('This program is being run by itself')
else:
print('I am being imported from another module')

输出:
$ python module_using_name.py
This program is being run by itself

$ python
>>> import module_using_name
I am being imported from another module
>>>

包(Packages):是指一个包含模块与一个特殊的 __init__.py 文件的文件夹,能够方便地组织模块的层次结构。

1
2
3
4
5
6
7
8
mycompany
├─ web
│ ├─ __init__.py
│ ├─ utils.py
│ └─ www.py
├─ __init__.py
├─ emploees.py
└─ utils.py

总结:如同函数是程序中的可重用部分那般,模块是一种可重用的程序,包是用以组织模块的另一种层次结构。Python 所附带的标准库就是这样一组有关包与模块的例子。