Tuesday, August 07, 2007

python中递归import的问题

见《learning Python》第2版18章288页的描述
个人感觉from在import中最好避免使用,虽然可以少敲几个字符,可是带来麻烦的可能性却非常高:1,递归 2,污染namespace,容易引起混淆
对于下述的例子:
recur1.py:
x=1
import recur2
y=2
print 'hello!'

recur2.py:
from recur1 import x
print 'hello from recur2!'
from recur1 import y

直接import recur1和直接运行recur2.py都会报错
直接import recur2和直接运行recur1.py却不会

记住:
  • 无论import还是from都会触发对尚未执行的该module的执行,python可以容忍一个尚未完整的namespace,却绝对不能容忍对一个不完整namespace中未运行的变量的引用:这就是import和from为什么会因为递归而可能产生冲突的原因
  • 运行一个程序和在该程序里面由于嵌套获递归的原因而重新import它是不同的,后者仍然需要被执行

0 comments: