【发布时间】:2014-01-11 12:04:53
【问题描述】:
我正在尝试创建一个包含已由不同函数处理的数据的列表。下面的代码不起作用,因为a和b这两个函数不在map函数的作用域内
def outer_func():
def a():
return "Something"
def b():
return "Something else"
map(lambda x: eval(x)(), ['a', 'b'])
我尝试将函数包装在一个类中,下面的代码运行良好。
class fcontainer():
def a(self):
return "Something"
def b(self):
return "Something else"
def test():
f = fcontainer()
return map(lambda x: getattr(f, x)(), ['a', 'b'])
现在,我的问题是:
- 为什么 map 函数中不存在 a 和 b?
- 是否有“正确”的方式来做我想做的事情?
- 最后我应该坐下来把头围在装饰器上吗? :)
谢谢!
更新:第一个示例可以通过首先在 outer_func 范围内获取函数,然后使用 map 来工作:
functions = [eval(i) for i in ['a', 'b']]
return map(lambda x: x(), functions)
这可行,但它是两行而不是一行 >:|
【问题讨论】:
标签: python function namespaces