Ipython notebook:导入的脚本函数的名称错误

时间:2014-07-16 10:23:30

标签: python ipython ipython-notebook nameerror

我有两个脚本sources.pynest.py。他们是这样的

sources.py

import numpy as np
from nest import *

def make_source():
    #rest of the code

def detect():
    Nest = nest()
    Nest.fit() 

if __name__=='main':
    detect()

nest.py

import numpy as np
from sources import *

class nest(object):

    def _init_(self):
        self.source = make_source()

    def fit(self):
        #rest of the code

当我运行像python sources.py这样的脚本时,它运行正常。

但是在Ipython笔记本环境中,如果我执行以下操作

In [1]: from sources import *

In [2]: detect()

我收到以下错误

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-e9c378341590> in <module>()
---->  detect()

C:\sources.pyc in detect()
--> 7 Nest = nest()

C:\nest.pyc in _init_()
--> 7 self.source = make_source()

NameError: global name 'make_source' is not defined

我很担心为什么会这样。你能否告诉我两种情况如何不同以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

事情是

之间存在差异
import something

from something import *

关于命名空间。

如果你有递归导入,最好永远不要做“从某些东西导入*”或“导入东西作为某种东西”

你在这里得到一个完整的解释:

Circular (or cyclic) imports in Python