V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Wolfsin
V2EX  ›  问与答

为什么方法调用的语句是 uncallable 的?

  •  
  •   Wolfsin · 2019-03-30 18:07:56 +08:00 · 1049 次点击
    这是一个创建于 2073 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类如

    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

    7 条回复    2019-03-30 18:45:09 +08:00
    NeilWang
        1
    NeilWang  
       2019-03-30 18:13:19 +08:00 via Android   ❤️ 1
    callable(func())已经对 func 进行调用了,实际判断的是 func 返回值是否 callable
    guiqiqi
        2
    guiqiqi  
       2019-03-30 18:13:19 +08:00 via iPhone   ❤️ 1
    func()默认返回值是 None,怎么可能 callable 啊,大锅。
    Wolfsin
        3
    Wolfsin  
    OP
       2019-03-30 18:19:34 +08:00
    @NeilWang #1
    @guiqiqi #2
    啊,对哦,原来是在对 func 的返回值进行判断,懂了,之前钻进牛角尖了。那另外问一下 lambda: func()的返回值是什么啊,为什么就可以 callable ?
    huaouo
        4
    huaouo  
       2019-03-30 18:20:58 +08:00 via Android
    @Wolfsin 返回 func() ?
    Wolfsin
        5
    Wolfsin  
    OP
       2019-03-30 18:28:44 +08:00
    @huaouo #4 如果返回 func(),那不就等于 callable(func())了,如果说返回的是 func,那如果 func 带有参数呢?类如 func(a)这个方法
    callable(func) -->true
    callable(func(a)) -->false
    callable(lambda:func(a)) -->true
    guiqiqi
        6
    guiqiqi  
       2019-03-30 18:30:37 +08:00 via iPhone
    @Wolfsin 大锅,lambda 返回匿名函数啊,当然是 callable,如果调用了 lambda 表达式,就不一定了
    Wolfsin
        7
    Wolfsin  
    OP
       2019-03-30 18:45:09 +08:00
    @guiqiqi #6 明白了,又去翻了文档
    https://docs.python.org/zh-cn/3.7/reference/expressions.html#lambda
    def <lambda>(parameters):
    return expression
    lambda 实际上是产生了一个这样的函数里面绑定了参数,理解了,谢谢解释
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2766 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 11:30 · PVG 19:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.