Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,有没有一种方法可以将类方法作为关键参数(sort/min/)指定?_Python_Key - Fatal编程技术网

在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')