listen1001 发表于 2009-09-05 23:16

import module和from module import ... 的区别。

新学python,遇到了一个很疑惑的地方
有一个自定的module a.py

foo='abc'
def show():
      print 'foo from a:',foo,id(foo)

现在在python解释器里
>>> import a
>>> id(a.foo)
3084447168L
>>> a.show()
foo from imptee: abc 3084447168
>>> a.foo='123'
>>> a.show()
foo from imptee: 123 3084447616

换一种方式
>>> from a import foo,show
>>> id(foo)
3084447616L
>>> show()
foo from imptee: 123 3084447616
>>> foo='aaa'
>>> show()
foo from imptee: 123 3084447616
>>> id(foo)
3084447168L

我想不明白为什么这两种方式不同。请高手指点下。

9命怪猫 发表于 2009-09-07 13:58

尝试着给你解释一下:

from a import foo,show
foo, show 被直接导入到局部名字空间去了,所以它们可以直接使用,而不需要加上模块名的限定。对比一下两段代码可知 :)
LZ可以导入独立的项或使用 from module import * 来导入所有东西。

如果需要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,建议使用 from module import;
如果需要有选择地导入某些属性和方法,而不想要其它的,使用 from module import;
如果模块包含的属性和方法与你的某个模块同名,你必须使用 import module 来避免名字冲突!

如果是多人合作的软件,怪猫建议尽量还是用import module,判定一个的函数或属性是从哪来的会一目了然,会避免很多麻烦。

sandermansxj 发表于 2009-09-08 10:40

这个问题以前我也困惑过,现在有点明白了,呵呵

shadowkimi 发表于 2014-04-03 17:27

我也是新手,今天遇到了同样的问题。个人认为这是因为show()函数的调用会返回到show()函数所在的命名空间(也就是module a)中去,从而在show()函数中访问的是module a命名空间中的foo变量。
页: [1]
查看完整版本: import module和from module import ... 的区别。