使用lambda定义__init__



我知道我们可以定义类函数,比如:

pp = lambda self,v: self.list[v]

但我很难用同样的方式定义构造函数的语法:

__init__ = lambda self: self.list = []

我在谷歌上搜索了一下为什么这不起作用,但似乎没有人疯狂地尝试过。了解python内部结构的人,你能帮我理解为什么这不起作用吗?

有人问我为什么要这样做-仅仅是为了编码的乐趣和更多的知识,如果能以某种方式完成,那将是非常神奇的。

阿克斯回答得很好,我用它来解决一个leetcode问题-https://leetcode.com/problems/min-stack/discuss/2474150/BRUTALLY-OPTMISED-Python-Solution

免责声明:除非你想让你的同事讨厌你,否则这不应该在生产代码中完成

lambda只是一个单行函数,是一个隐式return语句。

因此,您的第一个示例pp = lambda self,v: self.list[v]可以重写为:

def pp(self,v):
return self.list[v]

对于您的第二个示例,__init__ = lambda self: self.list = []将导致以下结果:

def __init__(self):
return self.list = []

这不是有效的python语法,因为self.list = []不是一个表达式,本身没有值。

你可以用setattr()return的事情,None

__init__ = lambda self: setattr(self, 'list', [])

重写为实际方法:

def __init__(self):
return setattr(self, 'list', [])

最新更新