将lambda函数添加到类的符号表中

时间:2017-06-24 17:54:54

标签: python lambda

我正在尝试将lambda函数添加到类的符号表中:

class B:
    def __init__(self):
        func = lambda self, x: x*x  # <-- Adding 'self' produces error
        self.__dict__['test1'] = func
        print(self.test1(2))
        print(self.test2(2))

    def test2(self, b):
        return b*b*b

b = B()

但这会产生错误(使用python t.py运行脚本):

Traceback (most recent call last):
  File "./t.py", line 14, in <module>
    b = B()
  File "./t.py", line 8, in __init__
    print(self.test1(2))
TypeError: <lambda>() missing 1 required positional argument: 'x'

但是,如果我删除self作为Lambda函数的参数,它可以正常工作。

为什么self不需要作为Lambda函数的参数?

2 个答案:

答案 0 :(得分:1)

类方法'调用:

instance.method(arg1, arg2, ..., argn)

在内部绑定到:

instance_class.method(instance, arg1, ..., argn)

其中,instance显然是self

您将lambda存储为实例属性,不会将其视为实例方法。这就是为什么self不会作为第一个参数自动传递的原因。

答案 1 :(得分:1)

lambda函数是匿名函数,它们不绑定到类,因此在这种情况下,您将创建一个包含2个参数的lambda(selfx)。该错误清楚地告诉您,当您调用lambda函数时,您只是传递一个绑定到self的参数,因此您缺少x