習(xí)題講解:
可以看到函數(shù)正常調(diào)用的是時(shí)候锨天,結(jié)果沒(méi)有問(wèn)題终息,當(dāng)時(shí)當(dāng)使用默默參數(shù)的時(shí)候?第二個(gè)結(jié)果不是我們想要得到的
原因解釋如下:
Python函數(shù)在定義的時(shí)候送漠,默認(rèn)參數(shù)L的值就被計(jì)算出來(lái)了活鹰,即[]分冈,因?yàn)槟J(rèn)參數(shù)L也是一個(gè)變量,它指向?qū)ο骩]偎血,每次調(diào)用該函數(shù)诸衔,如果改變了L的內(nèi)容盯漂,則下次調(diào)用時(shí),默認(rèn)參數(shù)的內(nèi)容就變了笨农,不再是函數(shù)定義時(shí)的[]了就缆。
定義默認(rèn)參數(shù)要牢記一點(diǎn):默認(rèn)參數(shù)必須指向不變對(duì)象!
要修改上面的例子磁餐,我們可以用None這個(gè)不變對(duì)象來(lái)實(shí)現(xiàn):
高階函數(shù)
Python內(nèi)建了map()
(1)map()函數(shù)
(2)sorted排序
排序也是在程序中經(jīng)常用到的算法脾还。無(wú)論使用冒泡排序還是快速排序伴箩,排序的核心是比較兩個(gè)元素的大小。如果是數(shù)字鄙漏,我們可以直接比較嗤谚,但如果是字符串或者兩個(gè)dict呢?直接比較數(shù)學(xué)上的大小是沒(méi)有意義的怔蚌,因此巩步,比較的過(guò)程必須通過(guò)函數(shù)抽象出來(lái)
Python內(nèi)置的sorted()函數(shù)就可以對(duì)list進(jìn)行排序:
它還可以接收一個(gè)key函數(shù)來(lái)實(shí)現(xiàn)自定義的排序,例如按絕對(duì)值大小排序:
默認(rèn)情況下籍胯,對(duì)字符串排序竟闪,是按照ASCII的大小比較的,由于'Z' < 'a'杖狼,結(jié)果炼蛤,大寫(xiě)字母Z會(huì)排在小寫(xiě)字母a的前面
我們給sorted傳入key函數(shù),即可實(shí)現(xiàn)忽略大小寫(xiě)的排序:
要進(jìn)行反向排序蝶涩,不必改動(dòng)key函數(shù)理朋,可以傳入第三個(gè)參數(shù)reverse=True:
對(duì)字典進(jìn)行排序:
所以我們應(yīng)該傳進(jìn)入去的是?m.items()
或者我們采用key?方法