2013-10-04 39 views
2

我正在开发一堆具有相同基本结构的函数 - 它们需要两个列表并使用一个循环为两个列表进行成对的特定操作(例如,一个将列表中的每个元素引入权力由第二个列表中的相应元素表示)。Python - 是否可以为操作员设置变量?

由于所有这些功能只有运营商不同,我想知道 - 是否有可能为运营商设置一个变量?例如,你可以做(​​类似的东西):

var = + 
var2 = 5 var 7  #var2 is now 12 

我知道,特别是不行的,但有什么相似,它同样工作的?

+1

'进口operator' – Doorknob

回答

2

尝试以下操作:

>>> op = lambda a, b: a + b 
>>> result = op(5, 7) 
>>> result 
12 
+0

@KevinMills,你可以使用拉姆达体内abitrary表达('拉姆达A,B:(A + B) * 2')。但正如@kindall提到的,如果你只是简单地添加,'operator.add'更简洁,可能更快。 – falsetru

+0

这是比简单定义和传递子功能更好吗? – Kevin

+0

@KevinMills,如果你有多个语句要执行,你必须定义一个函数。如果只有一个表达式,则没有区别。你可以通过'import dis; dis.dis(lambda a,b:a + b)'。 ;所以这是你的偏好,你使用哪一个。请参阅http://ideone.com/AHc6JQ – falsetru

7

是的!您需要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 
相关问题