网站首页 > 教程分享 正文
from 和 import 导入的区别
- import 导入一定能实现变量的全局共享
- from 导入不一定能实现变量的全局共享,只有定义的是可变类型才能全局共享,不变类型无法全局共享,类似于全局变量和局部变量
- 在实际开发中,应该选择使用 from xx import yy 这种精准的导入方式
- 不推荐使用 from xx import * 这种导入方式
- 缺点一 :如果导入的模块变量太多则会占用大量内存,程序运行性能会降低
- 缺点二 :变量太多容易导致自己定义的变量和导入的变量重名,会出现bug。
- import导入的使用场景 :导入系统模块,或者导入需要进行全局共享的模块
通过自定义模块来验证两者的区别
from 导入
- 定义公共模块 common
RECV_DATA_LIST = list() HANDLE_FLAG = False
- 定义接收数据和处理数据模块 recv_msg, handle_msg
from common import RECV_DATA_LIST from common import HANDLE_FLAG def recv_msg(): """模拟接收到数据,然后添加到common模块中的列表中""" print("--->recv_msg") for i in range(5): RECV_DATA_LIST.append(i) def test_recv_data(): """测试接收到的数据""" print("--->test_recv_data") print(RECV_DATA_LIST) def recv_msg_next(): """已经处理完成后,再接收另外的其他数据""" print("--->recv_msg_next") if HANDLE_FLAG: print("------发现之前的数据已经处理完成,这里进行接收其他的数据(模拟过程...)----") else: print("------发现之前的数据未处理完,等待中....------") from common import RECV_DATA_LIST from common import HANDLE_FLAG def handle_data(): """模拟处理recv_msg模块接收的数据""" print("--->handle_data") for i in RECV_DATA_LIST: print(i) global HANDLE_FLAG HANDLE_FLAG = True def test_handle_data(): """测试处理是否完成,变量是否设置为True""" print("--->test_handle_data") if HANDLE_FLAG: # False # if common.HANDLE_FLAG: # True print("=====已经处理完成====") else: print("=====未处理完成====")
- 定义 main 模块
from recv_msg import * from handle_msg import * def main(): """测试 from 导入模块""" recv_msg() test_recv_data() recv_msg_next() handle_data() test_handle_data() recv_msg_next() if __name__ == "__main__": main()
- 打印结果
--->recv_msg --->test_recv_data [0, 1, 2, 3, 4] --->recv_msg_next ------发现之前的数据未处理完,等待中....------ --->handle_data 0 1 2 3 4 --->test_handle_data =====已经处理完成==== --->recv_msg_next ------发现之前的数据未处理完,等待中....------
此时 common 模块里的 RECV_DATA_LIST,HANDLE_FLAG 导入到模块 recv_msg 和 handle_msg 中会有差别
RECV_DATA_LIST为列表是可变类型,故会全局共享,所以打印结果为 [0, 1, 2, 3, 4]
HANDLE_FLAG 为 bool 类型是不可变类型,故不会全局共享,可通过 关键字 global 实现全局共享
import 导入
导入的变量全部是全局共享
猜你喜欢
- 2024-09-09 彻底告别python第三方包import问题!只需要7行代码(码住)
- 2024-09-09 python每日一练之如何copy(python copy)
- 2024-09-09 你知道import Vue from 'vue' 吗?
- 2024-09-09 spring中的@import/@ImportResource注解
- 2024-09-09 Spring中@Import注解详解(spring import注解原理)
- 2024-09-09 python首行代码import *,from * import * 解析
- 2024-09-09 Import注解的理解(java @import注解)
- 2024-09-09 link与@import的区别和分别对应的例子
- 2024-09-09 第五章 import导入第三方库或者模块
- 2024-09-09 ES6模块化一缕(export、import)(es6模块化引入)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)