在没有'lambda'关键字的情况下,如何将方法作为函数参数传递?

2024-09-27 00:15:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是否可以在不使用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)


Tags: lambdaself示例mapsizereturndef情况
2条回答

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_2;的回答一样^例如,{}在需要函数作为函数参数时非常有用

# 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]

相关问题 更多 >

    热门问题