Python 2.7 如何在python中为属性指定数学表达式?

Python 2.7 如何在python中为属性指定数学表达式?,python-2.7,constructor,functional-programming,Python 2.7,Constructor,Functional Programming,我想在python中为属性指定一个数学表达式(或函数)。但到目前为止,我只知道如何分配硬参数,如Int、Double或Boolean。在下面的代码中,我想要的是某种相似的东西 class MyClass: def __init__(self, mathExp): self.Expression=mathExp def evalExp(self,param) return self.Expression(param) 我想要的是mathExp类似于“1+2x”,当我执行函数

我想在python中为属性指定一个数学表达式(或函数)。但到目前为止,我只知道如何分配硬参数,如Int、Double或Boolean。在下面的代码中,我想要的是某种相似的东西

class MyClass:

def __init__(self, mathExp):

    self.Expression=mathExp

def evalExp(self,param)
    return self.Expression(param)
我想要的是mathExp类似于“1+2x”,当我执行函数evalExp时,我可以输入一个类似于5的参数,这样返回值类似于1+2*5=11


谢谢你的帮助

您需要将输入(字符串)解析为python可以处理的内容。也就是说,如果你没有导入一个可以为你做这类事情的库,比如

如果你想自己做这件事,你需要用更简单的表达式来构建你的数学语言,这样在解析完你的示例输入之后,你可以有一个列表/树/。。。比如:

[1, add, [ 2, mul, 'x']]
然后可以一步一步地进行评估。可以肯定地说,这不是最容易完成的任务

真正的解决办法 如果您使用反向波兰符号,即从“1+2x”更改为“12 x*+”,这将更容易,因为令牌列表可能如下所示:

[1, 2, x, mul, add]
然后你可以在阅读代币时进行计算:

  • 1
    –将数字推到堆栈上
  • 2
    –将另一个数字推到堆栈上
  • x
    –获取一个输入,并将其推到堆栈上
  • mul
    –从堆栈中获取两个数字,相乘,然后在堆栈上推回。也就是说,对于
    x=5
    ,将
    2*5=10
    推回到堆栈上
  • add
    –从堆栈中获取两个数字,即
    1、10
    ,然后将它们添加到堆栈中,并向后推堆栈
现在,输入令牌列表为空,堆栈有一个值
11
。为下一次计算做好准备

虚假和不安全的解决方案 但是,如果将安全和安保问题放在一边,您可以走这条路:

expression = "1 + 2*x"      # The '*' needs explicitly to be there
x = 5
result = eval(expression)
print result                # Will output '11'

换句话说,在将的整个表达式发送到
eval
之前,搜索字母/单词的存在,并使用
raw\u input
进行设置。但是,使用
eval
会打开很多陷阱,因为它可以评估所有代码。

这可能会有帮助:谢谢!,真的很有用谢谢你的回答holroy!我不明白,当你说“获取输入”时,你的意思是像使用函数的参数一样?。我实际上使用的是“虚假和不安全的解决方案”,但我想知道你说的“不安全”是什么意思。