给出一个项目列表,以及从谓词函数到“值”函数的映射,以下代码将“值”函数应用于满足相应谓词的项目: 有没有办法让这段代码更简洁?
my_re0 = re.compile(r'^([a-z]+)$')
my_re1 = re.compile(r'^([0-9]+)$')
my_map = [
(my_re0.search, lambda x: x),
(my_re1.search, lambda x: x),
]
for x in ['abc','123','a1']:
for p, f in my_map:
v = p(x)
if v:
print f(v.groups())
break
有没有一种方法可以用一个单一的声明?
如果我不必将谓词返回的值传递给“value”函数,那么我可以做
for x in ['abc','123','a1']:
print next((f(x) for p, f in my_map if p(x)), None)
对于上面的代码可以做类似的事情吗?我知道,也许最好留下这些嵌套循环,但我只是好奇它是否可能。
它总是会是'lambda x:x'吗?似乎有点毫无意义。 –
当然不是。这只是一个例子:) – akonsu