Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 传递一个对象';s函数作为另一个函数的参数_Python - Fatal编程技术网

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