Python 传递一个对象';s函数作为另一个函数的参数
我有一个函数,它将从缓存中获取数据,如果数据存在,否则它将查询数据库并将其保存在缓存中Python 传递一个对象';s函数作为另一个函数的参数,python,Python,我有一个函数,它将从缓存中获取数据,如果数据存在,否则它将查询数据库并将其保存在缓存中 def get_ref_from_cache_or_db(obj, key, duration=60): data = get_routes_from_cache(key=key) if data: response = json.loads(data) else: response = obj.fetch().to_dict() set_routes_to_cache(key=key
def get_ref_from_cache_or_db(obj, key, duration=60):
data = get_routes_from_cache(key=key)
if data:
response = json.loads(data)
else:
response = obj.fetch().to_dict()
set_routes_to_cache(key=key, duration=duration, value=json.dumps(response))
return response
有时我必须从同一个对象返回不同的结果,例如,我需要调用
response = obj.fetch().to_dict()
或
如果它是一个简单的函数调用,我的代码就是:
def get_ref_from_cache_or_db(func, key, duration=60):
data = get_routes_from_cache(key=key)
if data:
response = json.loads(data)
else:
response = func()
set_routes_to_cache(key=key, duration=duration, value=json.dumps(response))
return response
但是在这种情况下,我不知道如何传递将从另一个函数返回的对象调用的函数,也就是说,我想调用类似这样的
get\u ref\u from\u cache\u或\u db(obj.fetch.to\u dict,key,duration)
。我不想事先调用fetch()
,因为它总是从数据库中获取数据。如果只想在需要时调用fetch()
,可以使用lambda:get\u ref\u from\u cache\u或\u DB(lambda:obj.fetch().to\u dict(),key,duration)
您能详细解释一下它是如何工作的吗?lambda是一个单行函数定义,所以在这里您创建了一个调用您的函数的函数。我建议多读一些关于兰博达斯的书。
def get_ref_from_cache_or_db(func, key, duration=60):
data = get_routes_from_cache(key=key)
if data:
response = json.loads(data)
else:
response = func()
set_routes_to_cache(key=key, duration=duration, value=json.dumps(response))
return response