我正在尝试将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函数的参数?
答案 0 :(得分:1)
类方法'调用:
instance.method(arg1, arg2, ..., argn)
在内部绑定到:
instance_class.method(instance, arg1, ..., argn)
其中,instance
显然是self
。
您将lambda存储为实例属性,不会将其视为实例方法。这就是为什么self
不会作为第一个参数自动传递的原因。
答案 1 :(得分:1)
lambda
函数是匿名函数,它们不绑定到类,因此在这种情况下,您将创建一个包含2个参数的lambda(self
和x
)。该错误清楚地告诉您,当您调用lambda函数时,您只是传递一个绑定到self
的参数,因此您缺少x
。