![](/img/trans.png)
[英]How can I pass an object attribute to lambda function, as function parameter?
[英]How can I pass method as function parameter without 'lambda' keyword?
我可以在不使用lambda
關鍵字的情況下以某種方式引用方法嗎?
假設我們有以下示例代碼:
class AbstractDummy:
def size(self):
raise NotImplementedError
class Dummy1(AbstractDummy):
def size(self):
return 10
class Dummy2(AbstractDummy):
def size(self):
return 20
如果我有我的示例對象:
dummies1 = [Dummy1(), Dummy1(), Dummy1()]
dummies2 = [Dummy2(), Dummy2()]
然后,如果我想map
它們,我可以使用提取的函數參數來實現,以節省一些字符:
f = lambda x : x.size()
map(f, dummies1)
map(f, dummies2)
問題在這里:我可以以某種方式避免這個臨時的f
和/或lambda
關鍵字嗎?
為了做一個小的比較,在 Java 中可以引用AbstractDummy::size
,因此調用看起來有點像print(map(AbstractDummy::size, dummies1)
。
operator
模塊為此提供了方法methodcaller
程序。
from operator import methodcaller
f = methodcaller('size')
results1 = [f(x) for x in dummies1]
results2 = [f(x) for x in dummies2]
盡管[x.size() for x in ...]
更簡單,就像在 C_Z_ 的答案中一樣。 methodcaller
,當您需要一個函數作為函數參數時, methodcaller
很有用
# Sort some_list_of_objects on return value of each object's `a` method.
sorted_list = sorted(some_list_of_objects, key=methodcaller('a'))
在這種情況下,您可能想要使用列表理解
[x.size() for x in dummies1]
[x.size() for x in dummies2]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.