Python 2.7 如何在python中为属性指定数学表达式?
我想在python中为属性指定一个数学表达式(或函数)。但到目前为止,我只知道如何分配硬参数,如Int、Double或Boolean。在下面的代码中,我想要的是某种相似的东西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”,当我执行函数
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!我不明白,当你说“获取输入”时,你的意思是像使用函数的参数一样?。我实际上使用的是“虚假和不安全的解决方案”,但我想知道你说的“不安全”是什么意思。