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

标签 python

我有一个 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)响应中。但是我有 selffoobarbaz 需要担心 - 我可以只存储 ( 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'}}

帽子提示:https://stackoverflow.com/a/3137022/2829764

关于python - 获取传递给函数的所有参数和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724495/

相关文章:

python - 从多个 pandas 系列创建数据框

python - 如何在 Python 中进行 HTML 转义?

python - 使用 multiprocessing.pool map() 时,pyparsing.asDict 出现 MaybeEncodingError

python - 访问 SQLAlchemy 的外键项

python - 如果数字大于或等于 772000000000000,为什么我的 python 代码会产生无限循环?

python - 在 Django 中使用 ManyToMany 插入对象

python - 在 Python 中将 STDOUT 十六进制输出转换为字符串

python - 在python中自动给出用户输入是/否

python - Fudge mock datetime.now

python - 打印 pandas 列之间的增量差异