簡體   English   中英

如何在沒有“lambda”關鍵字的情況下將方法作為函數參數傳遞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM