python 3.4.3 的版本中已經沒有cmp函數(shù),被operator模塊代替,在交互模式下使用時,需要導入模塊。
成都創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都網站設計、做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元紅安做網站,已為上家服務,為紅安各地企業(yè)和個人服務,聯(lián)系電話:028-86922220
在沒有導入模塊情況下,會出現(xiàn):
相關推薦:《Python視頻教程》
看下面給的內置函數(shù):
這幾個函數(shù)就是用來替換之前的cmp的,之前使用cmp的同胞們,咱們以后就換上面這些函數(shù)咯。
先簡單說下這幾個函數(shù)的意思吧。
lt(a,b) 相當于 ab 從第一個數(shù)字或字母(ASCII)比大小
le(a,b) 相當于a=b
eq(a,b) 相當于a==b 字母完全一樣,返回True
ne(a,b) 相當于a!=b
gt(a,b) 相當于ab
ge(a,b) 相當于 a=b
函數(shù)的返回值是布爾類型。
Python3自帶了解決方案,在functools包中有一個把按cmp方式的寫的函數(shù)轉換成key方式函數(shù)的函數(shù),用法如下
from?functools?import?cmp_to_key
print(sorted(['bob','Bob','about','Zoo','Credit'],?key=cmp_to_key(cmp_ignore_case)))
對你這個排序需求實際上用key方式完全可以達到求。
比如要先按每個單詞的第2個字母排序再按第3個字母排序。
from?operator?import?itemgetter
sorted(['bob','Bob','about','Zoo','Credit'],?key=itemgetter(1,2))
['about',?'bob',?'Bob',?'Zoo',?'Credit']
3開始沒這個函數(shù)了,官方文檔是這么寫的
The cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. Use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (If you really need the cmp() functionality, you could use the expression (a b) - (a b) as the equivalent for cmp(a, b).)
大意就是cmp()函數(shù)已經“離開”了,如果你真的需要cmp()函數(shù),你可以用表達式(a b) - (a b)代替cmp(a,b)
numbers.sort這種用法是錯誤的,如果你想要排序,則用如下語句:
num_sort=sorted(numbers,key=None,reverse=False)
新的list
num_sort才是一個排序后的列表。然后,你自定義的cmp過程只能對比兩個數(shù)字,而能對比列表中的各個元素,python3解釋器不知道你要做什么,所以才會出錯。