这是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
我将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
它运行没有错误,但显然这些函数被多次调用?我真的不认为我理解为什么会这样。即使没有错误,也不是我想要的
答案 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()