【问题标题】:How to call expressions and assign them values如何调用表达式并为其赋值
【发布时间】:2018-11-28 12:37:29
【问题描述】:

我有一个包含许多表达式的字典,例如

g={'asd':x+y,'sss':x-y}

我想定义两个函数 aa 和 bb,它们返回这些表达式的计算值。

g={'asd':x+y,'sss':x-y}
def aa(x,y):
    return g['asd']
def bb(x,y):
    return g['sss']
aa(2,3)

但是,我无法使它正确。

有谁知道如何在 python 中做到这一点?

此外,实际上我有很多变量,而不仅仅是x,y,而是像x1、x2、x3...x100这样的变量。 我也有很多功能。

如果这样做:

g = { 'asd': lambda x, y: math.exp(x)**y, 'sss': lambda x, y: x - y }
def aa(x,y):
    return g['asd'](x,y)
def bb(x,y):
    return g['sss'](x,y)
bb(2,3)

我将不得不复制 x1,x2,x3...x100 100 次。这太大了。

【问题讨论】:

  • 你需要一个函数的字典,而不是表达式。例如。 g = {'asd': (lambda x, y: x + y), 'sss': (lambda x, y: x - y)},然后是 def aa(x, y): return g['asd'](x, y)def bb(x, y): return g['sss'](x, y)

标签: python expression call


【解决方案1】:

字典存储值,而不是表达式。

你能做的最接近的事情就是存储函数:

g = { 'asd': lambda x, y: x + y, 'sss': lambda x, y: x - y }

然后您可以稍后调用它们:

print(g['asd'](2, 3))  # 5

【讨论】:

  • 我把问题修改了一下,请你看一下。
【解决方案2】:

你可以使用 eval:

g={'asd':'x+y','sss':'x-y'}
def aa(x,y):
    return eval(g['asd'])
def bb(x,y):
    return g['sss']
aa(2,3)

【讨论】:

  • 变量调用时名称不同。
  • 只需使用 lambda 方法并传入一个数组,其中数组的每个元素都是不同的变量
  • 如果我有很多变量和很多函数,比如问题中正在修改呢?
猜你喜欢
  • 2019-09-06
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 2011-10-12
  • 1970-01-01
相关资源
最近更新 更多