我正在使用rpy2通过此模块提供的importr函数将R库(Python中的模块)包装在python中。

问题是importr在运行时可能会非常昂贵(调用时会做很多事情),我想只调用一次(对于每个importr调用,我都有使用其结果的多个函数,并且同时我不能只是将所有内容放在模块顶部,否则会大大降低导入时间)。

当前,对于我使用importr的每个模块,我都会:

myrlib = None

def do_stuff_with_r(param):
    global myrlib
    if myrlib is None:
        myrlib = importr(myrlib)


我想归纳一下,因为我在许多不同的模块中都进行了这种操作,因此这些行都重复了。

但是我不确定如何执行此操作:this solution在第一次调用后返回None,这并不是我真正想做的。假设这是可行的,如何确保特定参数的importr()仅被调用一次?

最佳答案

您可以编写自己的包装器函数来缓存导入结果:

def import_r(lib, cache={}):
    if lib not in cache:
        cache[lib] = importr(lib)
    return cache[lib]


并在每次要使用importr时使用它吗?

10-07 20:24