什么是模块
在Python中,一个.py文件就被称之为一个模块
模块的调用
模块一旦被调用,即相当于执行另外一个另外一个py文件中的代码,多次import导入同一个模块,只会执行一次。
模块的导入 – import
1 | # demo.py |
1 | # func.py |
模块导入流程
- 先从sys.modules里查看是否已经被导入
- 如果没有被导入就依据sys.path路径去寻找模块
- 找到了就导入,没有找到就报错
- 创建这个模块的命名空间
- 执行文件,把文件中的名字都放到命名空间中
- sys.modules会加入这个模块,当这个模块再被impoet时就不会被重复导入
1 | import sys |
导入模块的顺序
- 内置模块 time,re
- 扩展模块 pip3安装的 django
- 自定义模块 demo
单独导入 – from…import…
1 | from time import sleep |
1 | from demo import read,money |
查看结果
1. 如果本地有read()方法则优先调用本地的。
2. 即使导入了money这个变量也无法替代本地变量,会发生冲突。
为什么要使用 from…import?
1. import是导入了模块里面的所有名字 比较占用内存。
2. 导入一个变量进来,占用的内容较少,只要不用重名即可。
1 | # 导入多个名字 |
1 | # 导入全部* 配合 __all__ |
把模块当做脚本执行
我们可以通过模块的全局变量name来查看模块名:1
2
3
4
5# demo2
print(__name__) # __main__
# func
import demo2 # demo2
- 当我在文件中import demo2的时候,demo2中的
print(__name__)
执行返回的是demo2
- 当我在demo模块中
print(__name__)
的时候返回的是__main__
- 在哪个页面页面上点的run 在哪个页面上就是
__main__
- 如果不在本页面上执行,在其他页面上调用模块名导入执行,那么就返回
模块名
if name == ‘main‘: 作用:用来控制.py文件在不同的应用场景下执行不同的逻辑1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# demo2
def login():
print('正在执行登录程序')
if __name__ == '__main__':
print('in demo2.py') # in demo2.py
ret = login() # 正在执行登录程序
print(ret) # None
# func
import demo2
ret = demo2.login() # 正在执行登录程序
print(ret) # None
# 这样就符合了:模块导入的时候什么都不执行,所有想做的都放在模块里面去,在执行程序的时候就不会受影响,也能调用模块中想要的名字