我有一个 Python 函数,fetch_data
,它会访问远程 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)
我可以只存储 (fetch_data, args, kwargs)
在响应
中。但是我有 self
、foo
、bar
和 baz
需要担心 - 我可以只存储 ( fetch_data, foo, bar, baz, kwargs)
但这是非常不希望的重复量。
基本上,我正在尝试研究如何从函数中获取完全填充的 *args
和 **kwargs
,包括函数的命名参数.
最佳答案
Essentially, I'm trying to work out how to, from within a function, get a completely populated *args and **kwargs, including the function's named parameters.
在函数开头通过locals()
保存参数怎么样?
def my_func(a, *args, **kwargs):
saved_args = locals()
print("saved_args is", saved_args)
local_var = 10
print("saved_args is", saved_args)
print("But locals() is now", locals())
my_func(20, 30, 40, 50, kwarg1='spam', kwarg2='eggs')
它给出了这个输出:
saved_args is {'a': 20, 'args': (30, 40, 50), 'kwargs': {'kwarg1': u'spam', 'kwarg2': u'eggs'}}
saved_args is {'a': 20, 'args': (30, 40, 50), 'kwargs': {'kwarg1': u'spam', 'kwarg2': u'eggs'}}
But locals is now {'a': 20, 'saved_args': {...}, 'args': (30, 40, 50), 'local_var': 10, 'kwargs': {'kwarg1': u'spam', 'kwarg2': u'eggs'}}
关于python - 获取传递给函数的所有参数和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724495/