关于python:将lambda函数添加到类的符号表中

Adding lambda functions to a symbol table of a class

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
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运行脚本):

1
2
3
4
5
6
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'

但是,如果我删除EDOCX1[1]作为lambda函数的参数,它就可以正常工作。

为什么这里不需要EDOCX1[1]作为lambda函数的参数?


lambda函数是匿名函数,它们不绑定到类,因此在本例中,您创建的lambda有两个参数(selfx)。错误很明显地告诉您,当调用lambda函数时,您只是传递一个绑定到self的参数,因此缺少x


类方法的调用:

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

内部绑定到:

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

其中,显然,instanceself

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