这里要描述一个复杂的问题:
我想要一个函数 AB(),它通过一个中间值将一个输入映射到另一个输入。更具体地说,该函数由两个函数组成,我们调用 A() 和 B(),它们都返回字典(即 A[B[input]] --> result)
这是我当前文件目录的示例:
packageX/
__init__.py
get_part_of_B_expensively.py
something_that_will_use_convert.py
convert.py
packageA/
__init__.py
get_the_entirety_of_A_expensively.py
在我的 convert.py 中,我有以下内容:
import get_part_of_B_expensively
from packageA import get_the_entirety_of_A_expensively
dict_A = packageA.get_the_entirety_of_A_expensively()
def get_B():
result = {}
result = get_part_of_B_expensively() # this is a very expensive operation
result += get_rest_of_B_inexpensively() # shorthand for adding two dictionaries
return result # returns a dictionary
dict_B = get_B() # hence why i call it once outside, and not inside AB()
def AB(input):
return dictA[dictB[input]]
不要认为这是正确的,因为我无法在定义 get_B() 之前初始化 dict_B,并且我希望 AB() 的唯一参数是input
,因为我想抽象它的实现。但是,我在全局范围内引入了一些变量,主要是 dict_B 和 dictA,我不确定这是否是最好的方法。我可以将 get_B() 分离到它自己的包中,但我仍然会在全局框架中的某个地方调用它们。不知道这应该是什么方法,我想尽可能少地调用 A() 和 B(),它们调用同一个包中的文件),但抽象函数 AB()。