Python—是否可以将变量设置为运算符?
我正在开发一系列具有相同基本结构的函数-它们采用两个列表,并使用循环对两个列表执行特定的操作(例如,一个将列表中的每个元素提升到第二个列表中相应元素所表示的幂) 由于所有这些函数只因一个运算符而不同,我想知道-是否可以将变量设置为运算符?例如,你能做(类似于): 我知道这是行不通的,但是有没有类似的方法可以起到类似的作用呢?试试下面的方法:Python—是否可以将变量设置为运算符?,python,variables,operation,Python,Variables,Operation,我正在开发一系列具有相同基本结构的函数-它们采用两个列表,并使用循环对两个列表执行特定的操作(例如,一个将列表中的每个元素提升到第二个列表中相应元素所表示的幂) 由于所有这些函数只因一个运算符而不同,我想知道-是否可以将变量设置为运算符?例如,你能做(类似于): 我知道这是行不通的,但是有没有类似的方法可以起到类似的作用呢?试试下面的方法: >>> op = lambda a, b: a + b >>> result = op(5, 7) >>&g
>>> op = lambda a, b: a + b
>>> result = op(5, 7)
>>> result
12
对!!您需要
操作符
模块,该模块“将Python的内部操作符公开为高效函数”
正如@falsetru指出的,lambda也很方便;operator
中的函数将稍微快一点,不过:
from timeit import timeit
print timeit("add(5, 7)", "add = lambda x, y: x+y") # about 0.176 OMM
print timeit("add(5, 7)", "from operator import add") # about 0.136 OMM
@KevinMills,您可以在lambda体中使用一个二进制表达式(
lambda,b:(a+b)*2
)。但是正如@kindall所提到的,如果你只是简单地添加,operator.add
更简洁,也许更快。这比简单地定义和传递一个子函数好吗?@KevinMills,如果你有多个语句要执行,你必须定义一个函数。如果只有一个表达式,则没有区别。您可以通过导入dis查看;dis.dis(lambda,b:a+b)
;所以你喜欢用哪一种。看见
import operator
op = operator.add
var = op(5, 7)
from timeit import timeit
print timeit("add(5, 7)", "add = lambda x, y: x+y") # about 0.176 OMM
print timeit("add(5, 7)", "from operator import add") # about 0.136 OMM