获取传递给函数的所有参数和值

117

我有一个名为 fetch_data 的 Python 函数,它访问远程API获取数据,并将其包装在响应对象中返回。它的代码类似于下面这样:

def fetch_data(self, foo, bar, baz, **kwargs):
    response = Response()
    # Do various things, get some data
    return response

现在,响应数据可能会显示“我有更多的数据,请使用增加的page参数调用我以获取更多数据”。因此,我想要将“方法调用”(函数、参数)存储在响应对象中,这样我就可以使用Response.get_more()来查看存储的函数和参数,然后再次调用该函数,几乎使用相同的参数返回一个新的Response

如果fetch_data被定义为fetch_data(*args, **kwargs),我只需要在response中存储(fetch_data, args, kwargs)。但是,我需要考虑selffoobarbaz - 我可以只存储(fetch_data, foo, bar, baz, kwargs),但那是非常不可取的重复。

实际上,我正在尝试找出如何从函数内部获取完全填充的*args**kwargs,包括函数的命名参数。


为什么不将foo,bar,baz和kwargs传递给Response()构造函数,以便稍后调用response.get_more()已经具有这些值? - kurosch
因为那并没有解决问题-如果我改变了fetch_data的签名,我仍然需要更改Response - Kristian Glass
11个回答

0

试试这个:

def my_func(a, *args, **kwargs):
    v = locals()
    allargs = [v[i] for i in my_func.__code__.co_varnames if i in v and i not in ('args','kwargs')]
    allargs.extend(args)
    return allargs, kwargs

列出所有参数,包括必需和可选参数。代码必须放置在函数开头,至少v = locals()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接