类和d内部python lambda函数的区别

2024-09-30 10:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码。在

class SomeClass:

    a = lambda self: self.b()

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

s = SomeClass()
s.a()

它告诉我“TypeError:()只接受1个参数(给定0)”。我想知道为什么。

我的解释:

  • 类方法,所以s.a()equalsSomeClass.a(s)

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

    So在a = lambda self: self.b()中,b的参数丢失。

    我说得对吗?

    p.S.这是封闭效应吗?在

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

Tags: 对象方法lambda代码selfnonedata参数
1条回答
网友
1楼 · 发布于 2024-09-30 10:40:40

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

举个简单的例子:

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

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

>>> 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中测试过的东西可能有稍微不同的名字

相关问题 更多 >

    热门问题