下面是一段说明问题本质的简单代码:
class test:
def __init__(self):
self.var = 0
def set(self, val):
self.var = val
print eval('map(lambda x: self.var*x, [1,2,3,4,5])')
f = test()
f.set(10)
它说
NameError: global name 'self' is not defined
我知道很多人不喜欢 eval,但就我而言,我必须使用它,因为它会根据用户在程序执行期间输入的字符串执行数学公式。 非常感谢任何建议!提前致谢!
最佳答案
尝试:
eval('map(lambda x, self=self: self.var*x, [1,2,3,4,5])')
奇怪的 self=self
将创建 self
从外部上下文到内部上下文(lambda 表达式的“主体”)的副本。
关于python - eval 调用 lambda 看不到自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349785/