Python lambda函数返回false

Python lambda函数返回false,python,lambda,pyqt,Python,Lambda,Pyqt,我有一个pyqt中的python程序,其中有一个按钮,上面有以下内容: this=[1,k] button.clicked.connect(lambda x=this:self.testFunction(str(x))) 当我按下按钮时,我得到testFunction(False)而不是testFunction(str([1,k])。你知道为什么吗?提前感谢。原因是您误解了lambda的工作原理。Lambda返回一个匿名函数,其中包含您给定的定义。通过说lambda x=this:您是说

我有一个pyqt中的python程序,其中有一个按钮,上面有以下内容:

this=[1,k]   
button.clicked.connect(lambda x=this:self.testFunction(str(x)))

当我按下按钮时,我得到
testFunction(False)
而不是
testFunction(str([1,k])
。你知道为什么吗?提前感谢。

原因是您误解了
lambda
的工作原理。Lambda返回一个匿名函数,其中包含您给定的定义。通过说
lambda x=this:
您是说如果对该函数的调用没有
x
参数,则默认使用该参数

注意:

l = lambda x=3: x*2
print l(10)  # Prints 20
print l()    # Prints 6
如果我们检查文档中是否有,就会看到它使用布尔参数激发

因此,在这一行:

button.clicked.connect(lambda x=this:self.testFunction(str(x)))
lambda函数始终会获得一个参数,该参数是从
QPushButton.clicked()
传递的,它将是
True
False
。因此,从不使用默认的
。作为替代方案,您可以使用:

button.clicked.connect(lambda x:self.testFunction(str(this)))
但这可能不是您想要的,因为它总是将数组的字符串变量传递给函数。另一方面,这:

button.clicked.connect(lambda x:self.testFunction(str(this[x])))

将通过其
1
k
的字符串转换,这取决于传递的参数是
True
还是
False

如果在两行上都将
this
更改为
this
,问题是否仍然存在?(这将解决问题,或者推翻有人将第一行和第二行之间的
This
设置为
False
的假设。)我使用了以下命令:self.connect(按钮,QtCore.SIGNAL(“clicked()”),lambda x=This:self.testFunction(str(x)))我从未使用过qt,但我猜:用于事件绑定的lambda的第一个参数应该是
event
button.clicked.connect(lambda event,x=this:self.testFunction(str(x)))
缺少一项(非常有用)答案:您可以使用:
button.clicked.connect完全忽略布尔值(lambda ignore,x=this:self.testFunction(str(x))
。布尔值被指定给
ignore
(并被忽略),并且
x
(即
this
)被正确用作函数的参数。