Python中的静态Lambda [英] Static lambdas in python

查看:65
本文介绍了Python中的静态Lambda的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在python中有这样的课程

I have class in python like this

 import numpy as np
 class BackPropogationNetwork:
        # Static lambdas
        sigmoid = lambda x : 1/(1+np.exp(-x))
        sigmoid_prime = lambda sigmoid: sigmoid(1-sigmoid)

这是建设者

 def __init__(self):
    self.some_attr = self.sigmoid(2) 

我收到此错误

TypeError: <lambda>() takes exactly 1 argument (2 given)

如果我这样打

self.some_attr = ClassName.sigmoid()

我收到此错误

TypeError: unbound method <lambda>() must be called with BackPropogationNetwork instance as first argument (got int instance instead)

推荐答案

您需要将lambda包装在 staticmethod对象:

You need to wrap the lambdas in staticmethod objects:

class BackPropogationNetwork:
    sigmoid = staticmethod(lambda x : 1/(1+np.exp(-x)))
    sigmoid_prime = staticmethod(lambda sigmoid: sigmoid(1-sigmoid))

lambda表达式仍会生成函数对象,只是使用不同的(有限的)语法.相同的规则适用于在类中定义函数.如果您希望它是一个静态方法,那么您仍然需要将它们包装起来.

lambda expressions still produce function objects, just using different (limited) syntax. The same rules apply as defining functions in a class; if you want it to be a static method then you still need to wrap them.

这篇关于Python中的静态Lambda的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆