python中的静态lambdas

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)

Mar*_*ers 6

您需要将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表达式仍然使用不同(有限的)语法生成函数对象。相同的规则适用于在类中定义函数。如果您希望它是一个静态方法,则仍然需要包装它们。