类如
func():
pass
callable(func) -->true
callable(func()) -->false
不知道应该怎么理解,另外
callable(lambda: func()) -->true
这又是为什么?
P.S. 问这个问题的原因:
写 pyqt 信号槽的时候,PushButton.clicked.connect(self.func)
这个语句后面的 func 如果需要传值,则要改成PushButton.clicked.connect(lambda: self.func(a))
看 stack overflow 解释说是 clicked.connect()里需要一个 callable 的参数。
stack overflow 原文: https://stackoverflow.com/questions/45793966/clicked-connect-error
1
NeilWang 2019-03-30 18:13:19 +08:00 via Android 1
callable(func())已经对 func 进行调用了,实际判断的是 func 返回值是否 callable
|
2
guiqiqi 2019-03-30 18:13:19 +08:00 via iPhone 1
func()默认返回值是 None,怎么可能 callable 啊,大锅。
|
3
Wolfsin OP |
5
Wolfsin OP @huaouo #4 如果返回 func(),那不就等于 callable(func())了,如果说返回的是 func,那如果 func 带有参数呢?类如 func(a)这个方法
callable(func) -->true callable(func(a)) -->false callable(lambda:func(a)) -->true |
6
guiqiqi 2019-03-30 18:30:37 +08:00 via iPhone
@Wolfsin 大锅,lambda 返回匿名函数啊,当然是 callable,如果调用了 lambda 表达式,就不一定了
|
7
Wolfsin OP @guiqiqi #6 明白了,又去翻了文档
https://docs.python.org/zh-cn/3.7/reference/expressions.html#lambda def <lambda>(parameters): return expression lambda 实际上是产生了一个这样的函数里面绑定了参数,理解了,谢谢解释 |