Python:在 "lambda"内定义变量

标签 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'

When it should return a tuple, something like:

('ALPHA', 'BRAVO', 'CHARLIE')

EDIT: Thanks guys, it works now, and is even smaller:

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})

最佳答案

您需要使用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')

关于Python:在 "lambda"内定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830004/

相关文章:

python - 无法使用 Selenium 打开 Instagram 移动版?

python - 如何从 Linux 上当前运行的 Python 进程访问数据结构?

vba - 如何将对象插入作为用户修改类的字段的数组中? VBA

python - 在 Python 中查找 Safari 的高效用户代理正则表达式

python - python 2.7 中来自 googlefinance 的 HTTP 错误 404

python - 标准化具有多个零的像素输入数据

android - 从类里面调用 getString(R.strings....)?

c++ - 使用Raspberry PI GPIO-我是否需要虚拟/抽象/接口(interface)类?

python - TestDome 联赛表 - Python

python - PyDev 交互式控制台未启动