2

我有以下循环导入的案例(这里非常简化):

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测试工具模块:

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')
4

1 回答 1

4

您提出的答案是一个有效的解决方案。

但是,如果您担心循环依赖,我会说 log_exec_time 将属于它自己的文件,因为它不依赖于 tuti.py 中的任何其他内容。

于 2009-07-29T05:45:20.513 回答