首页 > 解决方案 > 仔细检查 Python 中的任意关键字参数

问题描述

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

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

基本上是因为,最后,它们没有在“被调用”方法中使用:

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

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

在此处输入图像描述

标签: pythonargskeyword-argumentvtk.js

解决方案


调用者可能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 *_, **__: ...

推荐阅读