请考虑以下内容:
operator.add(a, b)
我不太明白这个是做什么的。操作符是像
+-*/
这样的东西,那么operator.add(a, b)
是做什么的?在程序中如何使用它?请考虑以下内容:
operator.add(a, b)
+-*/
这样的东西,那么operator.add(a, b)
是做什么的?在程序中如何使用它?运算符函数允许您动态地选择操作。
它们执行与运算符相同的操作,因此operator.add(a, b)
与a + b
完全相同,但现在可以在抽象中使用这些运算符。
例如:
import operator, random
ops = [operator.add, operator.sub]
print(random.choice(ops)(10, 5))
上述代码将随机执行两个数字的加法或减法。由于运算符可以以函数形式应用,因此您还可以将这些函数存储在变量(列表、字典等)中,并根据您的代码间接使用它们。您可以将它们传递给map()
或reduce()
或partial
等函数进行使用。
operator.sub
吗? - Padraic Cunninghamoperator
函数的名称。 - Martijn Pietersoperator.add
是一个函数,您可以向其传递参数。它适用于无法使用a+d
这样的语句的情况,例如map
或itertools.imap
函数。为了更好地理解,请参考以下示例:
>>> import operator
>>> from itertools import imap
>>> list(imap(operator.add,[1,3],[5,5]))
[6, 8]
这个函数与Python operator模块中的运算符相同。它返回结果,因此您可以像这样使用它:
result = operator.add(a, b)
result = a + b
这实际上就是+
运算符的定义。看下面的例子:
class foo():
def __init__(self, a):
self.a = a
def __add__(self, b):
return self.a + b
>>> x = foo(5)
>>> x + 3
8
+
运算符实际上只是调用类的 __add__
方法。>>> 5 + 3
8
>>> operator.add(5,3)
8
__add__
方法,因此我还可以执行以下操作。>>> operator.add(x, 3)
8
# 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))
这些都是复杂的例子,通常情况下你可能只会在非常特殊的情况下使用它们。在使用之前,你应该真正了解需要使用这些函数。