我有以下代码我想了解:
>>> class DistanceFrom(object):
def __init__(self, origin):
self.origin = origin
def __call__(self, x):
return abs(x - self.origin)
>>> nums = [1, 37, 42, 101, 13, 9, -20]
>>> nums.sort(key=DistanceFrom(10))
>>> nums
[9, 13, 1, 37, -20, 42, 101]
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这是如何工作的?据我所知,__call__调用时object()调用的是 - 将对象作为函数调用.
我不明白的是如何nums.sort(key=DistanceFrom(10)).这是如何运作的?有人可以解释一下这行吗?
谢谢!
__call__在python中允许一个类运行,就像它是一个函数一样.您可以手动尝试:
>>> dis = DistanceFrom(10)
>>> print dis(10), dis(5), dis(0)
0 5 10
>>>
Run Code Online (Sandbox Code Playgroud)
对于列表中的每个项目调用该函数是什么类型,并使用返回的值作为排序键.在这个示例中,您将获得一个列表,其中第一个项目最接近10,而另一个项目更靠近末尾.
在这里,我定义了一个函数DistanceFrom(),它可以以类似于你的类的方式使用,但可能更容易理解
>>> def DistanceFrom(origin):
... def f(x):
... retval = abs(x - origin)
... print "f(%s) = %s"%(x, retval)
... return retval
... return f
...
>>> nums = [1, 37, 42, 101, 13, 9, -20]
>>> nums.sort(key=DistanceFrom(10))
f(1) = 9
f(37) = 27
f(42) = 32
f(101) = 91
f(13) = 3
f(9) = 1
f(-20) = 30
>>> nums
[9, 13, 1, 37, -20, 42, 101]
Run Code Online (Sandbox Code Playgroud)
所以你看到,返回的对象DistanceFrom被称为针对每个项目一次nums,然后nums是根据返回的值返回的有序
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |