python - eval 调用 lambda 看不到自己

标签 python

下面是一段说明问题本质的简单代码:

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/

相关文章:

python - 如何使用 python-selenium 从日历中选择特定日期?

python - 从Python的图片中获取所需的部分,然后找到该部分中的缺陷像素

python - "pip install --user ..."的目的是什么?

python - 如何将一列乘以另一列乘以该月第一天的值

python - 对所有列中缺失日期和前向填充值的行重新采样,但一列除外

python - 使用循环返回字符串出现的次数

python - 如果是数字,如何提取行的最后一个

python - 如何使用 tkinter 在图像顶部绘制坐标系?

python - 如何查询具有 ENUM 列的表并保留 ENUM 类型?

python - 将整数集转换为位数组以进行内存高效查找