模块
py文件--脚本
导入模块
import 模块文件名(一个文件名)
一个模块不会被多次导入,就算导入多次,也只会执行一次
调用方法
文件名.方法名
导入模块的顺序
内置模块
需要安装的扩展模块
自己写的模块
导入模块的规则:不要在同一行导入多个模块,
模块的命名空间
模块有自己的命名空间
首次导入模块my_module时会做三件事:
1.为源文件(my_module模块)创建新的名称空间,在my_module中定义的函数和方法若是使用到了global时访问的就是这个名称空间。
2.在新创建的命名空间中执行模块中包含的代码,见初始导入import my_module
3.创建名字my_module来引用该命名空间
给模块,或者模块里的方法,名字等重命名
imoprt 原名 as 新名
从模块中导入一个方法
from 文件名 import 方法名
同名的时候:from 文件名 import 同名方法名 as 新名
三种方法导入模块
1.大量使用模块里的方法时(常用)
import 模块名 ---导入整个模块,调用时模块名.方法名,不能用as改名字
2.from 模块名 import * ---没有重复的方法名的时候,这样可以直接调用模块里的方法
3.如果导入的模块过大,但是要用的功能很少时(常用)
from 文件名 import 方法名1 as 重命名,方法名2,变量....---调用多个方法名,可以改方法名
模块与模块之间,只要一次导入,就可以使用,模块里的模块也是可以引用
一次导入后,后面的模块也可以引用模块名
在模块里设置__all__= [字符串数据类型的名字],只跟*有关系
__all__=["方法名1","方法名2",...]--这个是和*是相通的,这里写几个方法,*就导几个方法过去
sys.modules---返回一个字典,字典里放的都是导入的模块名
import importlib #--即时修改模块的里的内容
importlib.reload(模块名) #---就能修改该模块里的东西,并打印出来
pyc文件---执行import就自动生成---python文件的编译文件
第一次导入模块的时候会消耗一点时间
强行生成 python -m my_module.py
import sys
print(sys.path) #是一个列表, 放的是导入模块的时候依据的路径列表,
# 一般在lib文件下,site-packages放了后装的模块
重点
print(__name__) # 文件作为脚本去执行的时候默认是__main__
当文件作为模块被导入时,再去执行时时候,就是模块名
当不希望作为模块被调用时,就去执行一些东西时,用以下方法
if __name__ == "__main__":
print("此时是脚本文件")
print(dir(模块名)) #--打印模块中的所有名字
import builtins #查看所有内置名
print(dir(builtins))
包---里面有__init__.py文件
导入包
from 包.包 import 文件名,文件名
from 包.包.文件名 import 方法名
文件名.get()
绝对路径导入:不是很好
from 包.包 import 文件名,文件名
相对路径导入:---在同一级文件里去调用其他包的时候
" ." --表示当前的目录,
" .." --表示上一级的目录,
如果在同一级文件执行,就会报错
from . import 文件名,文件名
如果自己写包,模块和模块之间没有关系时,不用去关心绝对路径和相对路径
当从自己写的包里,模块和模块之间存在引用关系时,有两种方式:
绝对路径:缺点--导入的路径随着包与文件之间的变化而变化 优点--在包内部外部都可以执行
相对路径:优点--一次写好的模块的导入的关系,不需要关心模块和文件之间的关系 缺点--只能在包的外部执行
相对路径只能是往上一级找,同级和下一级没法找,会报错
__init__.py文件
当导入一个包的时候,先执行__init__.py文件,