学习
实践
活动
专区
工具
TVP
写文章

Python3中的模块和包

1:模块介绍

在Python中,每一个文件都是一个模块,模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再次利用,同时提供自包含的命名空间以便避免程序出现变量名冲突。模块在导入其他模块之后就可以使用被导入模块中定义的名称。

2:模块的导入方式及过程

2.1:import,from xx  import yy

import:把一个模块整体导入:

import randomprint(random.randint(1,20)) # 也可以取别名# import random as aaa# print(aaa.randint(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 fileBprint('--0002--')from xmodule import fileCprint('--0003--')import fileAprint('--0004--')print(fileA.lst) print('--0005--')import impimp.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-- */

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200804A04P8400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券