- 论坛徽章:
- 0
|
下面是我在网上找的一个例子(复制过来有行号,不好意思):
- 01 class People:
- 02 age=0
- 03 gender='male'
- 04
- 05 def __init__(self, age, gender):
- 06 self.age = age
- 07 self.gender = gender
- 08 def toString(self):
- 09 return 'Age:'+str(self.age)+'\tGender:'+self.gender
- 10
- 11 List=[People(21,'male'),People(20,'famale'),People(34,'male'),People(19,'famale')]
- 12 print 'Befor sort:'
- 13 for p in List:
- 14 print p.toString()
- 15
- 16 List.sort(lambda p1,p2:cmp(p1.age,p2.age))
- 17 print '\nAfter ascending sort:'
- 18 for p in List:
- 19 print p.toString()
- 20
- 21 List.sort(lambda p1,p2:-cmp(p1.age,p2.age))
- 22 print '\nAfter descending sort:'
- 23 for p in List:
- 24 print p.toString()
复制代码
看print格式这是第二版的,所以我改了,不过在sort那里遇到问题,如下:
Traceback (most recent call last):
File "D:\PythonDev\test.py", line 24, in <module>
List.sort(lambda p1,p2:cmp(p1.age,p2.age))
TypeError: must use keyword argument for key function
后来我搜索,发现时sort的参数已经和第二版不一样了,只有一个参数,而我排序的并不是简单类型,而是一个自己定义的类,所以必须指定keyword,
这里我不知道该怎么指定了,用People.age会提示age不可读,这个问题应该很简单,但是对于我这个新手来说有点难度,希望大家帮忙!!谢谢了
===================================================================
已经解决了,看了官方文档,然后通过自己的不断尝试,解决办法如下:
在People类中定义一个方法:
def Age(self):
return self.age
然后将sort(****)改为sort(key=People.Age) 这里有个很关键的是Age不能写成Age(),非常崩溃
这样就解决了
感慨一下,学python的貌似很少,学python3的貌似就少之又少了...
[ 本帖最后由 zuii 于 2009-11-27 14:35 编辑 ] |
|