gpt4 book ai didi

python - 你能列出函数接收的关键字参数吗?

转载 作者:IT老高 更新时间:2023-10-28 21:08:02 25 4
gpt4 key购买 nike

我有一个字典,我需要将键/值作为关键字参数传递..例如..

d_args = {'kw1': 'value1', 'kw2': 'value2'}
example(**d_args)

这很好用,但是如果 d_args dict 中有不被 example 函数接受的值,它显然会死掉。说,如果示例函数定义为 def example(kw2):

这是一个问题,因为我不控制 d_argsexample 函数的生成。它们都来自外部模块,并且 example 只接受字典中的一些关键字参数..

理想情况下我会这样做

parsed_kwargs = feedparser.parse(the_url)
valid_kwargs = get_valid_kwargs(parsed_kwargs, valid_for = PyRSS2Gen.RSS2)
PyRSS2Gen.RSS2(**valid_kwargs)

我可能会从有效的关键字参数列表中过滤字典,但我想知道:有没有办法以编程方式列出特定函数采用的关键字参数? p>

最佳答案

比直接检查代码对象并计算变量更好一点的是使用检查模块。

>>> import inspect
>>> def func(a,b,c=42, *args, **kwargs): pass
>>> inspect.getargspec(func)
(['a', 'b', 'c'], 'args', 'kwargs', (42,))

如果你想知道它是否可以用一组特定的参数调用,你需要没有指定默认值的参数。这些可以通过:

def get_required_args(func):
args, varargs, varkw, defaults = inspect.getargspec(func)
if defaults:
args = args[:-len(defaults)]
return args # *args and **kwargs are not required, so ignore them.

然后一个函数来告诉你从你的特定字典中缺少什么是:

def missing_args(func, argdict):
return set(get_required_args(func)).difference(argdict)

同样,要检查无效参数,请使用:

def invalid_args(func, argdict):
args, varargs, varkw, defaults = inspect.getargspec(func)
if varkw: return set() # All accepted
return set(argdict) - set(args)

如果它是可调用的,那么一个完整的测试是:

def is_callable_with_args(func, argdict):
return not missing_args(func, argdict) and not invalid_args(func, argdict)

(这仅在 python 的 arg 解析方面是好的。任何运行时检查 kwargs 中的无效值显然无法检测到。)

关于python - 你能列出函数接收的关键字参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/196960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com