博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「python」from 导入和 import 导入的区别
阅读量:6682 次
发布时间:2019-06-25

本文共 1936 字,大约阅读时间需要 6 分钟。

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 导入

导入的变量全部是全局共享

「python」from 导入和 import 导入的区别

转载地址:http://jbaao.baihongyu.com/

你可能感兴趣的文章
清除img和文字间的空隙【vertical-align的用途】
查看>>
MySql的安装、配置(转)
查看>>
C++虚函数及虚函数表解析
查看>>
限制文本控件输入数据格式
查看>>
1058. 选择题(20)
查看>>
回望2018,计划2019
查看>>
Andriod 第五课----图形界面
查看>>
基于sklearn的常用分类任务指标Python实现
查看>>
一些关于Hibernate延迟加载的误区
查看>>
设计模式之缺省适配模式
查看>>
qsort函数辅助函数compare函数的编写
查看>>
项目选题报告答辩总结模板
查看>>
最小费用最大流
查看>>
uva 10972 RevolC FaeLoN
查看>>
玩转Android之Drawable的使用
查看>>
C#中的单例模式
查看>>
全局变量
查看>>
迷茫的程序员
查看>>
android号码匹配位数修改
查看>>
基于 DirectX11 的 MMDViewer 02-创建一个窗口
查看>>