繁体   English   中英

类和def中的python lambda函数之间的区别

[英]Difference between python lambda functions inside class and def

我有以下代码。

class SomeClass:

    a = lambda self: self.b()

    def __init__(self):
        self.b = lambda self: None

s = SomeClass()
s.a()

它给我“TypeError :()正好取1个参数(0给定)”。 我想了解原因。

我的解释:

  • a - 类方法,所以sa() equlas SomeClass.a(s)

  • b - 对象的属性(不是方法,只是一个函数),这就是为什么self.b()不等于SomeClass.b(self)

    所以在a = lambda self: self.b()缺少b a = lambda self: self.b()参数。

    我对吗?

    PS是关闭效应吗?

     class SomeClass: a = lambda self: self.b() def __init__(self): self.data = 12 self.b = lambda: self.data s = SomeClass() print sa() #12 s.data = 24 print sa() #24 

这里你的问题是绑定方法和函数之间的区别

有一个更简单的例子:

class Someclass(object):
    bound = lambda *args: "bound method got {}".format(args)
    def __init__(self):
        self.unbound = lambda *args: "function got {}".format(args)
>>> c = Someclass()

如果仔细观察,这两个函数的类型不同:

>>> c.bound
<bound method Someclass.<lambda> of <__main__.Someclass object at 0x...>>
>>> c.unbound
<function Someclass.__init__.<locals>.<lambda> at 0x...>

结果,当我们称呼它们时,它们会得到不同的论据:

>>> c.bound(1, 2, 3)
'bound method got (<__main__.Someclass object at 0x...>, 1, 2, 3)'
>>> c.unbound(1, 2, 3)
'unbound got (1, 2, 3)'

请注意,只有“bound”函数传入了一个self参数。

在3.5 - 2.7中测试的东西可能略有不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM