十三、模块与包
13.1 模块
模块定义:保存一些列数据、函数、类的文件,通常以**.py**结尾
模块其实就是文件。
- 思考:1个项目正常是1个团队完成,那这样肯定不能只有一台电脑,所以站在团队开发的角度下想,一个项目的代码不可能全部到放在一个py文件里面,所以团队可能是动态开发。各自写各自的模块去实现功能。那文件和文件之间就需要互相调用
13.1.1 导入模块
第一种方式import 模块名使用:模块名.成员 成员:函数,变量作用:将某模块整体导入到当前模块中本质: 使用变量名关联模块地址 第二种方式from 模块名 import 成员1,成员2,成员3使用:直接使用成员本质:将指定的成员导入到当前作用域中第三种方式from 模块名 import * # * 表示全部本质:将指定模块的所有成员导入到当前模块作用域中
-
注意: 使用放2/方法3的时候,不要与当前模块成员 或者 其他导入模块的成员 名称相同,如果相同则就近原则
from m1 import f1 from m2 import f1f1() # 就近原则,使用m2的
from m1 import f1f1() # 使用 m1的f1def f1():print("f1,,,")f1() # 使用当前的f1
-
难道大家都有f1,我就不能同时用吗?利用取别名法
from m1 import f1 m1f1 = f1 from m2 import f1 m2f1 = f1m1f1() m2f1()# 但是这样改名,太麻烦
- 简洁语法
from m1 import f1 as m1f1 # f1按照名字为m1f1导入作用域 from m2 import f1 as m2f1 # f1按照名字为m2f1导入作用域取别名:成员 as 别名m1f1() m2f1()
-
三种导入到底用哪种?
用哪个都行,看实际情况来,看习惯来
13.1.2 隐藏成员
指模块中以 下划线开头命名的成员,这种不会被 * 导入,可以称为隐藏成员
module01.py
def f1():print('模块1中的f1')
def _f2():print('模块1中的f2')
module02.py
from module01 import *
f1() # 可以
_f2() # 导入失败
注意:隐藏成员只对 * 隐藏,其他的指定形式可以调用
13.1.3 模块变量
locals(): 查看当前作用域中的 变量字典
其实python变量就是保存在一个字典中的
输出locals()查看当前作用域中的变量,可以发现全局作用域中很多已经存在的变量,这些变量其实就是模块变量。介绍2个常用的
-
__file__ : 输出当前执行模块的 本地路径
-
__name__ :模块自身的名字,可以判断是否为主模块
当py文件是作为模块被导入的时候执行__name__: 真名
当py文件是作为主模块来启动的时候
name: main
-
特点
主模块叫做:main
非主模块叫做:真名- 当模块作为入口(主程序运行时) __name__的值是 main
-
当模块仅仅被导入时运行(模块运行时)__name__的值是 真名
-
标准语法
main的标准语法:if __name__ == '__main__':print('作为程序执行的')
-
### 13.1.4 分类模块的分类1. 内置模块:解析器内部可以直接使用的```pythonprint()input()type()... 这些内置函数,都是通过内置模块导入的,这个模块了解即可
-
标准库模块:安装python时一起下载的,可以直接导入使用
import time import os import random .... 可以直接导入使用
-
第三方模块:通常是开源的,需要自己利用PIP下载