我正在开发一堆具有相同基本结构的函数 - 它们需要两个列表并使用一个循环为两个列表进行成对的特定操作(例如,一个将列表中的每个元素引入权力由第二个列表中的相应元素表示)。Python - 是否可以为操作员设置变量?
由于所有这些功能只有运营商不同,我想知道 - 是否有可能为运营商设置一个变量?例如,你可以做(类似的东西):
var = +
var2 = 5 var 7 #var2 is now 12
我知道,特别是不行的,但有什么相似,它同样工作的?
我正在开发一堆具有相同基本结构的函数 - 它们需要两个列表并使用一个循环为两个列表进行成对的特定操作(例如,一个将列表中的每个元素引入权力由第二个列表中的相应元素表示)。Python - 是否可以为操作员设置变量?
由于所有这些功能只有运营商不同,我想知道 - 是否有可能为运营商设置一个变量?例如,你可以做(类似的东西):
var = +
var2 = 5 var 7 #var2 is now 12
我知道,特别是不行的,但有什么相似,它同样工作的?
尝试以下操作:
>>> op = lambda a, b: a + b
>>> result = op(5, 7)
>>> result
12
@KevinMills,你可以使用拉姆达体内abitrary表达('拉姆达A,B:(A + B) * 2')。但正如@kindall提到的,如果你只是简单地添加,'operator.add'更简洁,可能更快。 – falsetru
这是比简单定义和传递子功能更好吗? – Kevin
@KevinMills,如果你有多个语句要执行,你必须定义一个函数。如果只有一个表达式,则没有区别。你可以通过'import dis; dis.dis(lambda a,b:a + b)'。 ;所以这是你的偏好,你使用哪一个。请参阅http://ideone.com/AHc6JQ – falsetru
是的!您需要operator
模块,它“将Python的内在运算符公开为高效函数”。
import operator
op = operator.add
var = op(5, 7)
正如@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
'进口operator' – Doorknob