Python:在" lambda"中定义变量。

时间:2014-09-14 04:14:11

标签: python class python-2.7 variables lambda

所以,我试图在这里搜索,找不到任何解决方案:我需要在“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})

1 个答案:

答案 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')