调用不带括号的Python lambda函数



我有一个字典,每个值都是一个带有类getter函数的lambda函数。

class test:
def __init__(
self,
filename: str,        
):
self.filename = filename        
@property
def read_file(self):
return read_file(self.filename) # Return pandas dataframe

func_1 = test(filename_1)
func_2 = test(filename_2)
ret = {}
ret ["key_1"] = lambda: func_1.read_file
ret ["key_2"] = lambda: func_2.read_file

我想用";key_ 1";不使用((如果调用func.read_file,我可以这样做(因为@property(其主要思想是创建字典而不实际调用";read_file"功能

当我用一个特定的键调用字典时,只有一个";read_file"呼叫发生。

df = ret ["key_2"]

但现在我必须使用括号

df = ret ["key_2"]()

您可以继承python的dict,并使用自定义getter创建自己的dict。它会像:

class another_dict(dict):
def __getitem__(self, key):
_item = dict.__getitem__(self, key)
if hasattr(_item, '__call__'):
_item()
return _item
d = another_dict()
d['func1'] = lambda: print('lambda called')
d['func1']

我使用AMIR解决方案作为灵感,但我发现了使用functools.partiallambda:更好的方法(针对我的问题:(

def read_file(filename):
return pd.read_csv(filename)
class MyClass:
def __init__(self):
self._dict = {}

def __setitem__(self, key, value):
self._dict[key] = value
def __getitem__(self, key):
return self._dict[key]()
my_class = MyClass()
my_class[key] = partial(read_file, file_name)
df = my_class[key] # This is the first time when read_file happened with a unique filename.

相关内容

  • 没有找到相关文章

最新更新