仔细检查 Python 中的任意关键字参数
Double check about Arbitrary Keyword Arguments in Python
我是 Python 的新手,我正在研究一个用 Python 编写的开源框架。我正在尝试更深入地研究源代码。我不明白为什么 this line of code 中需要“Arbitrary Arguments”和“Arbitrary Keyword Arguments”:
observerCallback = lambda *args, **kwargs: self.pushRender(realViewId)
基本上是因为,最后,它们没有在 "called" method:
中使用
def pushRender(self, vId, ignoreAnimation = False):
...
所以,再一次:在这里使用 *args 和 **kwargs 的目的是什么?我知道这可能看起来像一个愚蠢的问题,但我现在才知道这个“特殊运算符”的含义,在花了几天时间探索这个源代码之后,我的大脑几乎无法工作。如果有人能帮助我更好地理解一点,我当然非常感激。
observerCallback
的 caller 可能正在向函数传递一些参数,因此函数需要接受它们。否则会发生这种情况:
>>> observerCallback = lambda: self.pushRender(realViewId)
>>> observerCallback('foo', bar='baz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() got an unexpected keyword argument 'bar'
这个特定的 observerCallback
只是选择 ignore/not 使用任何传递的参数。按照惯例,您应该使用 _
而不是 "args
" 和 "kwargs
" 作为您将忽略这些参数的指示符:
lambda *_, **__: ...
我是 Python 的新手,我正在研究一个用 Python 编写的开源框架。我正在尝试更深入地研究源代码。我不明白为什么 this line of code 中需要“Arbitrary Arguments”和“Arbitrary Keyword Arguments”:
observerCallback = lambda *args, **kwargs: self.pushRender(realViewId)
基本上是因为,最后,它们没有在 "called" method:
中使用def pushRender(self, vId, ignoreAnimation = False):
...
所以,再一次:在这里使用 *args 和 **kwargs 的目的是什么?我知道这可能看起来像一个愚蠢的问题,但我现在才知道这个“特殊运算符”的含义,在花了几天时间探索这个源代码之后,我的大脑几乎无法工作。如果有人能帮助我更好地理解一点,我当然非常感激。
observerCallback
的 caller 可能正在向函数传递一些参数,因此函数需要接受它们。否则会发生这种情况:
>>> observerCallback = lambda: self.pushRender(realViewId)
>>> observerCallback('foo', bar='baz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() got an unexpected keyword argument 'bar'
这个特定的 observerCallback
只是选择 ignore/not 使用任何传递的参数。按照惯例,您应该使用 _
而不是 "args
" 和 "kwargs
" 作为您将忽略这些参数的指示符:
lambda *_, **__: ...