我正在開發一堆具有相同基本結構的函數 - 它們需要兩個列表並使用一個循環爲兩個列表進行成對的特定操作(例如,一個將列表中的每個元素引入權力由第二個列表中的相應元素表示)。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