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

#原创,转载请留言联系

  • 区别1

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

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

  • 区别2(有点绕)

import module方式操作module的变量时,本地不会创建新变量,操作的是目标模块的变量!

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

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

用一个小示例说明!

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

然后我们用import 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方式!

 

posted @ 2018-09-10 11:12  苦瓜爆炒牛肉  阅读(13625)  评论(0编辑  收藏  举报