Shi*_*ond 1 python args dereference kwargs python-3.x
我需要将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)
Run Code Online (Sandbox Code Playgroud)
这是一个示例函数签名:
def foo(a, b, *args, **kwargs):
Run Code Online (Sandbox Code Playgroud)
这里*args 表示后面的参数a和b不需要的参数,像'非命名'参数(foo(1, 2, 3, 4, 5))一样传递,函数将它们作为一个名为args:的元组args == (3, 4, 5).
**kwargs表示不需要的参数,由name(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使用值5和6函数foo.
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |