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

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

  •  
  •   Wolfsin · 201 天前 · 398 次点击
    这是一个创建于 201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类如

    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
        1
    NeilWang   201 天前 via Android   ♥ 1
    callable(func())已经对 func 进行调用了,实际判断的是 func 返回值是否 callable
        2
    guiqiqi   201 天前 via iPhone   ♥ 1
    func()默认返回值是 None,怎么可能 callable 啊,大锅。
        3
    Wolfsin   201 天前
    @NeilWang #1
    @guiqiqi #2
    啊,对哦,原来是在对 func 的返回值进行判断,懂了,之前钻进牛角尖了。那另外问一下 lambda: func()的返回值是什么啊,为什么就可以 callable ?
        4
    huaouo   201 天前 via Android
    @Wolfsin 返回 func() ?
        5
    Wolfsin   201 天前
    @huaouo #4 如果返回 func(),那不就等于 callable(func())了,如果说返回的是 func,那如果 func 带有参数呢?类如 func(a)这个方法
    callable(func) -->true
    callable(func(a)) -->false
    callable(lambda:func(a)) -->true
        6
    guiqiqi   201 天前 via iPhone
    @Wolfsin 大锅,lambda 返回匿名函数啊,当然是 callable,如果调用了 lambda 表达式,就不一定了
        7
    Wolfsin   201 天前
    @guiqiqi #6 明白了,又去翻了文档
    https://docs.python.org/zh-cn/3.7/reference/expressions.html#lambda
    def <lambda>(parameters):
    return expression
    lambda 实际上是产生了一个这样的函数里面绑定了参数,理解了,谢谢解释
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4302 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 02:27 · PVG 10:27 · LAX 19:27 · JFK 22:27
    ♥ Do have faith in what you're doing.