我有一个循环导入的例子(这里严格简化):
array2image.py
转换模块:
import tuti
@tuti.log_exec_time # can't do that, evaluated at definition time
def convert(arr):
'''Convert array to image.'''
return image.fromarray(arr)
tuti.py
test utils模块:
import array2image
def log_exec_time(f):
'''A small decorator not using array2image'''
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')
NameError失败了。这对我来说并不合适,因为那里确实没有循环依赖。我正在寻找一种整洁的方式来避免这种情况或解释......在写这个问题的一半时间我找到了它。
移动import
中装饰器下方的tuti.py
可解析NameError:
def log_exec_time(f):
'''A small decorator not using array2image'''
import array2image
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')
答案 0 :(得分:4)
您提出的答案是有效的解决方案。
但是,如果您担心循环依赖,我会说log_exec_time属于自己的文件,因为它不依赖于tuti.py中的任何其他内容。