5 python lambda static-methods
我像这样在python中上课
import numpy as np
class BackPropogationNetwork:
# Static lambdas
sigmoid = lambda x : 1/(1+np.exp(-x))
sigmoid_prime = lambda sigmoid: sigmoid(1-sigmoid)
Run Code Online (Sandbox Code Playgroud)
这是构造函数
def __init__(self):
self.some_attr = self.sigmoid(2)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
TypeError: <lambda>() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
如果我这样打电话
self.some_attr = ClassName.sigmoid()
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
TypeError: unbound method <lambda>() must be called with BackPropogationNetwork instance as first argument (got int instance instead)
Run Code Online (Sandbox Code Playgroud)
您需要将lambda包装在staticmethod对象中:
class BackPropogationNetwork:
sigmoid = staticmethod(lambda x : 1/(1+np.exp(-x)))
sigmoid_prime = staticmethod(lambda sigmoid: sigmoid(1-sigmoid))
Run Code Online (Sandbox Code Playgroud)
lambda表达式仍然使用不同(有限的)语法生成函数对象。相同的规则适用于在类中定义函数。如果您希望它是一个静态方法,则仍然需要包装它们。