将运算符分配给python中的变量?

Posted

技术标签:

【中文标题】将运算符分配给python中的变量?【英文标题】:assign operator to variable in python? 【发布时间】:2011-02-28 07:33:37 【问题描述】:

将数学应用于变量的常用方法是

a * b

它能够像这样计算和操作两个操作数吗?

a = input('enter a value')
b = input('enter a value') 
op = raw_input('enter a operand')

那我如何连接 op 和两个变量 ab? 我知道我可以将 op 与 +-%$ 进行比较,然后分配和计算....

但是我可以做类似a op b 的事情吗,如何告诉编译器 op 是一个运算符?

【问题讨论】:

【参考方案1】:

您可以使用运算符模块和字典:

import operator
ops = 
    "+": operator.add,
    "-": operator.sub,
    "*": operator.mul,
    "/": operator.div
   
op_char = input('enter a operand')
op_func = ops[op_char]
result = op_func(a, b)

【讨论】:

对于 python 3.x,应使用 operator.truedivoperator.floordiv 代替 docs.python.org/3/library/operator.html 另外,以这种方式使用 op_func 是行不通的。由于此答案的编辑队列已满,我已在下面的答案中修复了这些错误(假设此答案仍然 ACCEPTED w/76 upvotes...) @RobertHoughton:你认为这个答案“不起作用”是什么? (我也不知道你所说的“编辑队列”是什么意思,但这可能只是我没有看到的东西。)【参考方案2】:

运算符模块http://docs.python.org/library/operator.html 公开了与几乎所有 Python 运算符相对应的函数。您可以将运算符符号映射到这些函数以检索正确的函数,然后将其分配给您的 op 变量并计算 op(a, b)。

【讨论】:

【参考方案3】:

您需要手动将用户输入的字符串与您的操作数列表进行比较。这里没有 int() 的类似物,因为运算符是语言中的关键字而不是值。

将输入字符串与操作数列表进行比较并确定其对应的运算符后,您可以使用 Python 标准库的 operator module 来计算将运算符应用于两个操作数的结果。

【讨论】:

【参考方案4】:

我知道这是一个非常古老的线程,但我相信当时人们并不知道 eval 函数(也许它是 Python 3 附带的)。所以这里是这个问题的更新答案

a = input('enter a value')
b = input('enter a value') 
op = input('enter an operand')
expression = a + op + b # simple string concatenation
result = eval(expression)

如果不希望输入始终有效,则可以使用 ast.literal_eval 代替。如果输入不是有效的 Python 数据类型,则会引发异常,因此如果不是,则不会执行代码。 例如。如果 abop 分别为 5、10、+ 则 result 是 15

【讨论】:

应该是表达式 = a + c + b 。顺便说一句,使用 eval 进行用户输入是一个坏主意。 ast.literal_eval 更好。 @SilentGuy 你说的非常对!我已经更新了答案 eval 对 Python 3 并不陌生。人们不建议这样做的原因是因为在用户输入上使用它是不安全的。它可以执行某人输入的任何 Python 表达式(具有任何副作用)。此外,literal_eval 仅评估文字。它不能计算像 '5+10' 这样的算术表达式。【参考方案5】:

您可以使用 operator 模块来创建字典。来自该模块的Python 3 documentation:

"算子模块导出一组高效函数 对应于 Python 的内在运算符。例如, operator.add(x, y) 等价于表达式 x+y。"

import operator
ops = 
    "+": operator.add,
    "-": operator.sub,
    "*": operator.mul,
    "/": operator.truediv
   
op_char = input('enter a operand')
a = 1
b = 2
result = ops[op_char](a,b)
print(result)

【讨论】:

以上是关于将运算符分配给python中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

Liquid:如何将运算符的输出分配给变量?

你不可能还不会python变量的类型吧?

Python:如何使用字典将运算符的字符串表示形式分配给数学运算符?

Python变量类型

python和java中的三目运算符

python和java中的三目运算符