我正在使用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
时使用它吗?