1. import
2. from inport
3. 模块引用中的情况
4. 包
import
如何创建一个模块:
创建一个py文件,给他起一个符合变量命名规则的名字,这个名字就是模块。
导入模块的时候发生了什么?
1.找到模块,判断模块是否被导入过,(import sys >>>>print(sys.模块名))。
2.如果模块没有被导入,就创建一个属于这个模块的命名空间。
3.让模块名指向这个空间,然后执行该模块中的代码。
导入一个模块就是执行了一个模块
import name print(name.name) print(name.read) name.read() 123456 alex hello,word
import name bbb="jeav yang" print(name.bbb) # print(name.read) name.read() print(bbb) 123456 alex hello,word jeav yang
模块的别名:import 模块名 as 新的模块名 如果给模块起了别名,使用这个模块就能使用的别名的应用了
def func(dic, t='json'): if t == 'json': import json as aaa elif t == 'pickle': import pickle as aaa return aaa.dumps(dic)
导入多个模块:
以os模块为例:import os .time>>>>>>>import os as o,time as t
模块的导入顺序:
内置模块>>>>扩展模块>>>>自定义模块
from import
怎么使用from import:需要从哪个文件中使用那个名字,就把这个名字导入进来
egg:from
my_module import name
引入from import 的时候,仍然执行了这个被导入的文件,就是import谁,就执行谁
from my_module import read1 read1() 12345 54321 hello world
当前文件命名空间和模块的命名空间问题:
如果被引用的名字在当前文件中,就执行当前文件的名字
from import 导入的时候发生了什么
1.找到要被导入的模块
2.判断模块是否被导入过
3.若没有被导入就创建一个属于这个模块的命名空间。
4.执行这个文件
5.如果被导入过,找到你要导入的变量,给导入的变量创建一个引用,指向要导入的变量
导入多个名字
from my_module import read1,read2 read1() read2() 12345 54321 hello world in read1 func alex
给导入的名字起别名:避免导入的名字和当前文件中的名字重复:
from my_module import read1 as r1,read2 as r2 def read1(): print('in my read1') r1() r2() read1() 12345 54321 hello world in read1 func alex in my read1
其他操作
from my_module import * 表示执行导入模块的所有内容
from my_module import * name = 'egon' print(name) # egon read1() read2() 12345 54321 egon hello world in read1 func alex
_all_约束*导入的个数 _all_=[谁],就导入谁,只能用来约束
模块引用中的情况
1.模块的循环引用 重点***
模块间不允许循环引用
2.模块的加载和修改
如果已经被导入到的模块发生了修改,是不会被感知到的,想要修改的话就要重启程序
3.把模块当成脚本来使用 贼重要************
if __name__ == '__main__':
代码
写在这里面的代码只有这个文件被当做脚本执行的时候才执行
当一个py文件做脚本的时候,就提供一个功能。当作为模块导入的时候,能调用这个功能,但不能自主交互
一个文件中的_nane_变量:
当文件被当做脚本执行的时候,_name_=="_main_"
当文件被当做模块导入的时候,_name _=="模块的名字"
4.模块搜索路径
被当做脚本执行文件的时候,同目录下的文件可以直接导入,除此之外,其他路径下的模块被导入的时候需要自己修改sys.path列表
不在同一目录下的话:就调用sys模块
import sys
print(sys.path)
path=r"要导入模块的路径'
sys.path.append(path)
然后调用你要导入的模块
import sys print(sys.path) path=r"F:上课作业视频模块的相关知识day21codeday215模块的循环引用" sys.path.append(path) import hhh ['F:\上课作业视频\模块的相关知识\day21\code\day21', 'F:\上课作业视频', 'C:\Python36\python36.zip', 'C:\Python36\DLLs', 'C:\Python36\lib', 'C:\Python36', 'C:\Python36\lib\site-packages', 'C:\Program Files\JetBrains\PyCharm 2018.1.3\helpers\pycharm_matplotlib_backend'] 123456798
包:凡是导入时带点的,点的左边必须是包
什么是包:文件夹中有一个__int__.py文件,也是几个模块的集合
从包中导入模块:
1.import方式
egg:
import glance.api.policy as hhh
hhh.get()
2.from import
from glance.api.import policy
egg:
from glance.api.policy import get
get()