0%

Python - Theme 5 Module and Package

1. 模块和包

1
2
3
4
5
6
7
8
9
10
11
12
13
#1.模块和包能大大减少代码的管理维护成本且便于阅读
#2.模块可以避免函数名\变量名的冲突, 但切记避免和内置函数同名.

(venv3.7) ➜ testproject tree
.
├── a.py
├── database #包: Package;
│ └── __init__.py
├── method
│ └── __init__.py
└── web
├── __init__.py #表示这是一个包,而不是普通目录.
└── b.py #b模块, testproject.web.b;

2. 模块的使用

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
#内置模块只要安装完毕即可使用, 也可自行创建模块.举例如下:
#testmodule.py
----------------

#!/usr/bin/env python
# -*- coding : utf-8 -*-


"""This is a python file to demonstrate how to use Module and Package in python""" #注释内容, 可以调用__doc__显示

__all__ = ["greeting","string"] #当使用from xx import *时候, 会导入这些.

__author__ = "xxx@email" #作者


import sys

string = "I'm a test program"

#以_或者__开头的被认为是内部函数, 不希望被调用;但是由于python没有这层限制, 因此只是人为约束
def _private_hello():
return 'Hello, World!'


def __private_hi(name):
return 'Hi, %s' % name


def greeting():
args = sys.argv
if len(args) == 1:
return _private_hello()
elif len(args) == 2:
return __private_hi(args[1])
else:
print('Too many arguments!')


if __name__ == '__main__': #在作为模块使用时,不执行; 因此一般用于运行测试.
result = greeting()
print(result)

# 命令行输出
(venv3.7) ➜ testpackage python testmodule.py
Hello, World!
(venv3.7) ➜ testpackage python testmodule.py Aaron
Hi, Aaron

#python交互环境
>>> import testmodule
>>> testmodule.greeting()
'Hello, World!'
>>> testmodule.string
"I'm a test program"
>>> testmodule.__all__
['greeting', 'string']
>>> testmodule.__doc__
'This is a python file to demonstrate how to use Module and Package in python'
>>> testmodule._private_hello()
'Hello, World!'