仔细检查Python中的任意关键字参数

问题描述

我对Python还是很陌生,我正在研究一个用Python编写的开源框架。我正在尝试对源代码进行更深入的研究。我不明白为什么this line of code中需要“ 任意参数”和“ 任意关键字参数”:

observerCallback = lambda *args,**kwargs: self.pushRender(realViewId)

主要是因为最后在"called" method中未使用它们:

def pushRender(self,vId,ignoreAnimation = False):
    ...

那么,再次:在这里使用* args和** kwargs的目的是什么?我知道这看起来像是一个愚蠢的问题,但是我现在才刚刚了解到这种“特殊运算符”的含义,花了数天时间探索该源代码后,我的大脑几乎没工作了。如果有人可以帮助我更好地理解,那我当然会很感激。

enter image description here

解决方法

observerCallback调用方可能正在向函数传递一些参数,因此函数需要接受它们。否则会发生:

>>> 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只是选择忽略/不使用任何传递的参数。按照惯例,您应该使用_而不是“ args和” kwargs“来表示您将忽略这些参数:

lambda *_,**__: ...