import module与from module import * 两种模块导入有何区别

#原创,转载请留言联系spa

  • 区别1

import module 引用共享变量时,要使用module.变量名。code

而from module import * 直接使用变量名便可blog

  • 区别2(有点绕)

import module方式操做module的变量时,本地不会建立新变量,操做的是目标模块的变量!内存

from module import *方式操做module变量时,实质上是在本地建立一个与目标模块相同的变量名,而且默认与目标模块变量指向同一个内存空间。开发

看似功能同样,可是在开发中稍不注意可能会排bug排到头皮发麻!class

用一个小示例说明!import

先创建一个module.py,里面就一个公共变量,a = []。变量

而后咱们用import module方式先操做module的变量,再打印,看下有没变化。module

import module module.a = [1,2,3] print(module.a) from module import a print(a) 输出: [1, 2, 3] [1, 2, 3]

看似很日常,正常操做,可是,继续看!引用

from module import a a = [1,2,3] print(a) import module print(module.a) 输出: [1, 2, 3] # 结果不一样了! []

怎么调一下位置,就输出不同了?

由于!from module import 方式是本身建立了一个本身的变量a指向module.a的内存空间。当执行命令a = [1,2,3]时,变量a赋值了,从新分配了内存空间。并非module文件里的a变量从新分配空间,因此odule文件里的a变量的值没有变化!

而import module方式是操做module文件里面a的变量,即便进行了赋值,从新分配了内存空间,可是他仍是module里面的变量。因此当别人导入module的时候,module.a的值就是[1,2,3]了!

 

*建议!开发中,若是有操做公共变量的状况,必定要所有都用import module方式!