使用运算符在Python中进行加法操作

4

请考虑以下内容:

operator.add(a, b)

我不太明白这个是做什么的。操作符是像+-*/这样的东西,那么operator.add(a, b)是做什么的?在程序中如何使用它?

1
你看过文档了吗? - Padraic Cunningham
2
@PadraicCunningham 是的,我花了大约20分钟来看它并尝试将其应用于一个简单的程序,但它对我来说就是无法理解。 - malabeh
5个回答

13

运算符函数允许您动态地选择操作。

它们执行与运算符相同的操作,因此operator.add(a, b)a + b完全相同,但现在可以在抽象中使用这些运算符。

例如:

import operator, random

ops = [operator.add, operator.sub]
print(random.choice(ops)(10, 5))

上述代码将随机执行两个数字的加法或减法。由于运算符可以以函数形式应用,因此您还可以将这些函数存储在变量(列表、字典等)中,并根据您的代码间接使用它们。您可以将它们传递给map()reduce()partial等函数进行使用。


1
你是指 operator.sub 吗? - Padraic Cunningham
谢谢,我一直以为单词“operator”只是一个模板而不是代码的一部分,所以我没有导入操作符。 - malabeh
是的,他确实是人。啊哈!机器人@MartijnPieters终究还是人类! - Cory Kramer
@PadraicCunningham 我认为你的声望已经足够了,你本可以自己编辑它,但我已经为你修复了。 - Duncan
1
@Cyber: +++黄瓜错误除法。请重新安装宇宙并重启+++ - Martijn Pieters
@PadraicCunningham:是的,我时间不多了,要赶上我的火车。这并没有帮助我回忆起operator函数的名称。 - Martijn Pieters

4

operator.add是一个函数,您可以向其传递参数。它适用于无法使用a+d这样的语句的情况,例如mapitertools.imap函数。为了更好地理解,请参考以下示例:

>>> import operator
>>> from itertools import imap
>>> list(imap(operator.add,[1,3],[5,5]))
[6, 8]

3

这个函数与Python operator模块中的运算符相同。它返回结果,因此您可以像这样使用它:

result = operator.add(a, b)

这与以下功能在功能上是等效的
result = a + b

2
你能举个例子吗?谢谢。 - malabeh

3

这实际上就是+运算符的定义。看下面的例子:

class foo():
    def __init__(self, a):
        self.a = a
    def __add__(self, b):
        return self.a + b

>>> x = foo(5)
>>> x + 3
8
+ 运算符实际上只是调用类的 __add__ 方法。
对于原生的 Python 类型也是同样的情况。
>>> 5 + 3
8
>>> operator.add(5,3)
8

请注意,由于我定义了__add__方法,因此我还可以执行以下操作。
>>> operator.add(x, 3)
8

1
对于您问题的第一部分,请查看operator.add的源代码。它正如您所预期的那样,将两个值相加。
对于您问题的第二部分,答案有点棘手。
当您直到运行时才知道需要哪个运算符时,它们可能很有用。例如,当您读取的数据文件包含操作以及值时:
# warning: nsfw
total = 0
with open('./foo.dat') as fp:
    for line in fp:
        operation, first_val, second_val = line.split()
        total += getattr(operator, operation)(first_val, second_val)

此外,您可能希望通过使用操作函数和内置的map来使您的代码更加简洁或高效(主观),正如Python文档中所示的示例。
orig_values = [1,2,3,4,5]
new_values = [5,4,3,2,1]
total = sum(map(operator.add, orig_values, new_values))

这些都是复杂的例子,通常情况下你可能只会在非常特殊的情况下使用它们。在使用之前,你应该真正了解需要使用这些函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接