如何在另一个文件中移动一个函数

时间:2014-03-10 22:43:42

标签: python

这是myfunction.py

def a():
  print 'function a'
  b()

def c():
  print 'function c'

from otherfunction import b

a()

这是otherfunction.py

def b():
  print 'function b'
  c()

预期输出

function a
function b
function c

相反,我得到

function a
function b

Traceback (most recent call last):
  File "/path/myfunction.py", line 10, in <module>
    a()
  File "/path/myfunction.py", line 3, in a
    b()
  File "/path/otherfunction.py", line 3, in b
    c()
NameError: global name 'c' is not defined

这只是一个片段,但我的实际功能很长,而且我想将它移动到一个不同的文件中,只是一个函数,而不是所有其余的,因为这意味着要重新格式化很多代码。 / p>

那么,正确的做法是什么?

修改

如果我将otherfunction.py更改为

from myfunction import c
def b():
    print 'function b'
    c()

我得到了这个输出:

Traceback (most recent call last):
  File "/path/myfunction.py", line 8, in <module>
    from otherfunction import b
  File "/path/otherfunction.py", line 1, in <module>
    from myfunction import c
  File "/path/myfunction.py", line 8, in <module>
    from otherfunction import b
ImportError: cannot import name b

编辑2

我将otherfunction.py更改为

def b():
    from myfunction import c
    print 'function b'
    c()

Ant这是输出

function a
function a
function b
function c
function b
function c

它运行没有错误,但显然这些函数被多次调用?我真的不认为我理解为什么会这样。即使没有错误,也不是我想要的

3 个答案:

答案 0 :(得分:1)

你没有在其他函数中导入c(),所以它不知道它。尝试:

from myfunction import c

def b():
  print 'function b'
  c()

但一般来说,创建这样的循环引用是个坏主意,将c()函数移动到另一个文件会更好

答案 1 :(得分:0)

你需要把

from myfunction import c
otherfunction.py中的

这将确保otherfunction.py中的代码可以看到c函数,就像from otherfunction import b中的myfunction.py一样。

此外,Python将处理循环依赖,因此您不必担心这一点。

答案 2 :(得分:0)

像这样更改'otherfunction.py':

def b():
    from myfunction import c
    print 'function b'
    c()