gpt4 book ai didi

python - 我什么时候使用 **kwargs vs kwargs (*args vs args)?

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:45 24 4
gpt4 key购买 nike

我需要将 args 和 kwargs 都存储在一个元组中以便稍后调用,那么在这种情况下元组中的适当值是 *args 还是 args?换句话说,这行得通吗:

def __init__(self, *args, **kwargs):
self._buildCalls = [
(self.__init__, args, kwargs)
]
self._building = False

def __getattr__(self, attr):
if self.building():
if hasmethod(self, attr):
return lambda *args, **kwargs: self.argSaver(attr, *args, **kwargs)
else:
return super().__getattr__(attr)

def argSaver(self, method, *args, **kwargs):
self._buildCalls.append((method, args, kwargs))
return method(*args, **kwargs)

最佳答案

这是一个示例函数签名:

def foo(a, b, *args, **kwargs):

在这里*args 代表 a 之后的参数和 b不需要的,像“未命名”参数( foo(1, 2, 3, 4, 5) )一样传递,函数将它们作为一个名为 args 的元组获取: args == (3, 4, 5) .

**kwargs表示不需要的参数,按名称 ( foo(1, 2, foo=3, bar=4) ) 传递,函数将它们作为名为 kwargs 的字典获取: kwargs == {'foo': 3, 'bar': 4} .

当您在函数定义之外使用星号时,它会尝试从元组或字典中提取数据,例如*(1, 2, 3)为您提供从元组中提取的三个独立值 *{'foo': 5}将提取字典的所有键,但是 foo(**{'foo': 5, 'bar': 6})将尝试传递两个名为 foo 的参数和 bar具有值 56分别给函数foo .

关于python - 我什么时候使用 **kwargs vs kwargs (*args vs args)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564841/

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