在python中,有没有一种方法可以将类方法作为关键参数(sort/min/)指定?
像这样做是很常见的在python中,有没有一种方法可以将类方法作为关键参数(sort/min/)指定?,python,key,Python,Key,像这样做是很常见的 min(my_list, key=lambda x: abs( x - 5)) foo(my_list, key=lambda x,y: abs(x-y)) 假设我的_列表是一些MyClass对象的列表,我想知道是否可以在MyClass中定义键函数,并在调用min或foo时使用它 编辑 我应该说得更清楚 有没有办法使用MyClass方法而不是在这里使用lambda来实现以下目标 foo(my_list, key=lambda x,y: abs(x.value-y.val
min(my_list, key=lambda x: abs( x - 5))
foo(my_list, key=lambda x,y: abs(x-y))
假设我的_列表是一些MyClass对象的列表,我想知道是否可以在MyClass中定义键函数,并在调用min或foo时使用它
编辑
我应该说得更清楚
有没有办法使用MyClass方法而不是在这里使用lambda来实现以下目标
foo(my_list, key=lambda x,y: abs(x.value-y.value))
更新
>>> class MyClass:
... def __init__(self, value):
... self.value = value
... def __repr__(self):
... return 'MyClass({0.value})'.format(self)
... def delta(self, other):
... return abs(self.value - other.value)
...
>>> def foo(a_list, key):
... return [key(a, b) for a, b in zip(a_list, a_list[1:])]
...
>>> my_list = [MyClass(1), MyClass(10), MyClass(100)]
>>> print foo(my_list, key=lambda x, y: abs(x.value - y.value)) # Using lambda
[9, 90]
>>> print foo(my_list, key=MyClass.delta) # Using unbound method
[9, 90]
更新
>>> class MyClass:
... def __init__(self, value):
... self.value = value
... def __repr__(self):
... return 'MyClass({0.value})'.format(self)
... def delta(self, other):
... return abs(self.value - other.value)
...
>>> def foo(a_list, key):
... return [key(a, b) for a, b in zip(a_list, a_list[1:])]
...
>>> my_list = [MyClass(1), MyClass(10), MyClass(100)]
>>> print foo(my_list, key=lambda x, y: abs(x.value - y.value)) # Using lambda
[9, 90]
>>> print foo(my_list, key=MyClass.delta) # Using unbound method
[9, 90]
对。下面是一个示例,其中
MyClass==str
:
L = 'a', 'B', 'c'
print(min(L)) # -> B
print(min(L, key=str.lower)) # -> a
对。下面是一个示例,其中
MyClass==str
:
L = 'a', 'B', 'c'
print(min(L)) # -> B
print(min(L, key=str.lower)) # -> a
假设我进行聚类,需要一个函数来比较两个值来对它们进行分组。哇,令人惊讶的是,第一个参数被分配给self,第二个参数被分配给下一个方法paraemter。我将尝试使用我正在使用的函数。这是一个未绑定的方法。例如,
'abc'.find('b')
相当于str.find('abc','b')
。假设我进行聚类,需要一个函数来比较两个值以对它们进行分组。哇,令人惊讶的是,第一个参数被分配给self,第二个参数被分配给下一个方法paraemter。我将尝试使用我正在使用的函数。这是一个未绑定的方法。例如'abc'.find('b')
相当于str.find('abc','b')
。