目录
1:模块介绍
在Python中,每一个文件都是一个模块,模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再次利用,同时提供自包含的命名空间以便避免程序出现变量名冲突。模块在导入其他模块之后就可以使用被导入模块中定义的名称。
2:模块的导入方式及过程
2.1:import,from xx import yy
import:把一个模块整体导入:
-
import random
-
print(random.randint(
1,
20))
-
-
# 也可以取别名
-
# import random as aaa
-
# print(aaa.randint(1,20))
from :从一个模块中获得特定的名称
-
# 导入模块中的多个个属性,方法等,
-
from random
import randint,randrange
-
print(randint(
1,
20))
-
-
#也可以取别名
-
# from random import randint as aaa
-
# print(aaa(1,20))
2.2:imp.reload 动态导入
在不终止Python程序的情况下,重新载入模块文件代码的方法。
2.3:模块导入过程
import和from都是隐式的赋值语句:
import将整个模块对象赋值给一个单独的名称。
from将一个或多个名称赋值给另一个模块中的同名对象。
每个进程中的单个模块(文件)只做一次导入:模块在第一次import或from时被载入并执行,在第二次及以后的导入时不会加载及运行,但会进行赋值操作。模块在每次导入时会先去sys.modules中查找被导入的模块是否存在于sys.modules中,如果存在说明已经导入过,不会做加载及运行操作,如果不存在,则对导入的模块进行加载,并创建模块中的对象,运行模块中的调用的方法,完了之后把模块信息写入sys.modules中。因此模块中的变量是全局的,可以在不同的模块中进行共享,不会在每次导入中创建一个副本。
下面来验证下:
fileA.py
-
lst = [
1,
2,
3,
4]
-
print(
"in fileA.py")
fileB.py :导入模块fileA
-
import fileA
-
-
fileA.lst.append(
"fileB")
-
print(
"in fileB.py")
fileC.py :导入模块fileA
-
import fileA
-
-
fileA.lst.append(
"fileC")
-
print(
"in fileC.py")
test.py
-
print(
'--0001--')
-
from xmodule
import fileB
-
print(
'--0002--')
-
from xmodule
import fileC
-
print(
'--0003--')
-
import fileA
-
print(
'--0004--')
-
print(fileA.lst)
-
-
print(
'--0005--')
-
import imp
-
imp.reload(fileA)
-
print(
'--0006--')
-
print(fileA.lst)
-
print(
'--0007--')
-
-
/*
-
# 输出结果:
-
-
-0001--
# 导入模块B,模块B中又导入模块A,模块A是本进程中第一次导入,故输出如下:
-
in fileA.py
-
in fileB.py
-
-
-0002--
# 导入模块C,模块C中又导入模块A,但模块A已被导入,故输出如下:
-
in fileC.py
-
-
-0003--
# 导入模块A,但模块A已被导入,故没有输出;还是会给fileA赋值,
-
-
-0004--
# 打印 fileA.lst
-
[
1,
2,
3,
4,
'fileB',
'fileC']
-
-
-0005--
# imp.reload(fileA) 重新加载模块fileA,lst被重新赋值
-
in fileA.py
-
-
-0006--
# 重新加载之后,lst被重新赋值
-
[
1,
2,
3,
4]
-
-
-0007--
-
-
*/
3:Python中的包
Python代码的目录被称为包,除模块名之外,导入还可以指定目录路径,因此这样的导入就称之为包导入。
导入格式:
import dir1.dir2.mod1
from dir1.dir2.mod1 import a
其中目录dir1,dir2下需要有__init__.py文件
转载:https://blog.csdn.net/ixusy88/article/details/106164661