gpt4 book ai didi

python - 你能从函数、args 和 kwargs 中确定变量将如何分配吗?

转载 作者:行者123 更新时间:2023-12-03 20:45:21 24 4
gpt4 key购买 nike

我有一些样板逻辑,我想包装几个具有相同可选关键字的函数。现在它看起来像下面的代码。但是,这仅处理 opt_key 作为关键字传递的情况,而不是按位置传递。解决这个问题的一种方法是知道如何解决参数分配。
是否有一些元函数接受一个函数、args 和 kwargs,并返回一个字典,该字典提供从变量名称到值的映射?所以对于下面,meta_function(g,1,2,3)会返回 {"x" : 1, "y" : 2, "opt_key" : 3}meta_function(g,1,2,opt_key=3)也会返回 {"x" : 1, "y" : 2, "opt_key" : 3}

def g(x,y,opt_key = None):
return something

def h(z,opt_key = None):
return something else

def wrap(f,*args,**kwargs):
if kwargs["opt_key"] is None:

#Do some stuff to get default opt_key

kwargs["opt_key"] = default_opt_key
v = f(args,kwargs)

#Do some stuff to dispose default opt_key

return v
else:
return f(args,kwargs)

wrap(g,x,y,opt_key = None)
wrap(h,x,opt_key = None)

最佳答案

是的,您要使用 inspect.signature并与 Signature 一起工作对象,这将允许您 .bind *args 和 **kwargs:

In [1]: import inspect

In [2]: args = 'a', 'b', 'c'

In [3]: kwargs = {}

In [4]: def g(x,y,opt_key = None):
...: return something
...:
...: def h(z,opt_key = None):
...: return something_else
...:

In [5]: g_signature = inspect.signature(g)

In [6]: g_signature.bind(*args, **kwargs)
Out[6]: <BoundArguments (x='a', y='b', opt_key='c')>
注意,这个 BoundArguments对象充当映射:
In [7]: bound_arguments = g_signature.bind(*args, **kwargs)

In [8]: bound_arguments.arguments['opt_key']
Out[8]: 'c'

关于python - 你能从函数、args 和 kwargs 中确定变量将如何分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65905885/

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