我開始欣賞lambda表達式在Python中的價值,特別是當涉及到函數式編程,map
,functions returning functions等等。但是,我也一直在函數內命名lambda,因爲:pythonic是否pythonic:命名lambdas
- 我需要幾次相同的功能並且不想重複代碼。
- 該功能是特定於它出現的功能;其他地方不需要。
當我遇到滿足上述條件的情況時,我一直在編寫一個命名的lambda表達式,以實現DRY和狹義範圍的功能。例如,我正在編寫一個可以在一些numpy
數組上運行的函數,並且我需要對傳遞給該函數的所有數組進行適度繁瑣的索引(這可以輕鬆地放在一行中)。我寫了一個名爲lambda表達式的索引,而不是在整個函數定義中編寫整個其他函數或複製/粘貼索引。
def fcn_operating_on_arrays(array0, array1):
indexer = lambda a0, a1, idx: a0[idx] + a1[idx]
# codecodecode
indexed = indexer(array0, array1, indices)
# codecodecode in which other arrays are created and require `indexer`
return the_answer
這是濫用python的lambdas嗎?我應該把它吸起來並定義一個單獨的函數嗎?
編輯
也許值得鏈接function inside function。
不,它不是Python的。根據定義,lambda是匿名函數,用於簡化函數作爲參數的使用(就像在'sort()'中),你可以命名它,但你最好使用已知的'def',這更容易理解。 – Delgan