所以,我试图在这里搜索,找不到任何解决方案:我需要在“lambda”中定义一个变量。
我有那段代码:
def z(t,s):exec("t=s")
r = type('', (), {
'__init__': lambda t,*s: z("t.c",s),
's': lambda t: (lambda t,*s: [t[::-1] for t in s])(*t.c),
'l': lambda t: (lambda t,*s: list(s[::-1]))(*t.c),
'd': lambda t: t.c
})
w = ["APPLE", "BEACH", "CITRUS"]
print r(*w).s()
print r(*w).l()
print r(*w).d()
没有任何作用,因为它应该工作...当我调用函数“d”时,它返回给我这个错误:
AttributeError: '' object has no attribute 'c'
什么时候应该返回一个元组,如:
('ALPHA', 'BRAVO', 'CHARLIE')
编辑:谢谢大家,它现在有效,甚至更小:
r=type('',(),{'__init__':lambda t,*s:setattr(t,'c',s),'s':lambda t:[t[::-1] for t in t.c],'l':lambda t:list(t.c[::-1]),'d':lambda t:t.c})
答案 0 :(得分:2)
您需要使用setattr
来设置属性:(如果您想要self.c = s
)
'__init__': lambda t,*s: setattr(t, 'c', s),
>>> r = type('', (), {
... '__init__': lambda t,*s: setattr(t, 'c', s),
... 's': lambda t: (lambda t,*s: [t[::-1] for t in s])(*t.c),
... 'l': lambda t: (lambda t,*s: list(s[::-1]))(*t.c),
... 'd': lambda t: t.c
... })
>>>
>>> w = ["APPLE", "BEACH", "CITRUS"]
>>> print r(*w).s()
['HCAEB', 'SURTIC']
>>> print r(*w).l()
['CITRUS', 'BEACH']
>>> print r(*w).d()
('APPLE', 'BEACH', 'CITRUS')