我得到了以下循环导入的案例(这里大大简化了):
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 测试 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')
请您参考如下方法:
您得出的答案是有效的解决方案。
但是,如果您担心循环依赖,我会说 log_exec_time 应该属于它自己的文件,因为它不依赖于 tuti.py 中的任何其他内容。
