我知道我们可以定义类函数,比如:
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', [])