map() 函數(shù)接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象(Iterable), map 將傳入的函數(shù)依次作用到可迭代對(duì)象的每一個(gè)元素,并把結(jié)果作為迭代器(Iterator)返回。
安國網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
舉例說明,有一個(gè)函數(shù) f(x)=x^2 ,要把這個(gè)函數(shù)作用到一個(gè)list [1,2,3,4,5,6,7,8,9] 上:
運(yùn)用簡單的循環(huán)可以實(shí)現(xiàn):
運(yùn)用高階函數(shù) map() :
結(jié)果 r 是一個(gè)迭代器,迭代器是惰性序列,通過 list() 函數(shù)讓它把整個(gè)序列都計(jì)算出來并返回一個(gè) list 。
如果要把這個(gè)list所有數(shù)字轉(zhuǎn)為字符串利用 map() 就簡單了:
小練習(xí):利用 map() 函數(shù),把用戶輸入的不規(guī)范的英文名字變?yōu)槭鬃帜复髮懫渌懙囊?guī)范名字。輸入 ['adam', 'LISA', 'barT'] ,輸出 ['Adam', 'Lisa', 'Bart']
reduce() 函數(shù)也是接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象, reduce 將傳入的函數(shù)作用到可迭代對(duì)象的每個(gè)元素的結(jié)果做累計(jì)計(jì)算。然后將最終結(jié)果返回。
效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
舉例說明,將序列 [1,2,3,4,5] 變換成整數(shù) 12345 :
小練習(xí):編寫一個(gè) prod() 函數(shù),可以接受一個(gè) list 并利用 reduce 求積:
map() 和 reduce() 綜合練習(xí):編寫 str2float 函數(shù),把字符串 '123.456' 轉(zhuǎn)換成浮點(diǎn)型 123.456
filter() 函數(shù)用于過濾序列, filter() 也接受一個(gè)函數(shù)和一個(gè)序列, filter() 把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是 True 還是 False 決定保留還是丟棄該元素。
舉例說明,刪除list中的偶數(shù):
小練習(xí):用 filter() 求素?cái)?shù)
定義一個(gè)篩選函數(shù):
定義一個(gè)生成器不斷返回下一個(gè)素?cái)?shù):
打印100以內(nèi)素?cái)?shù):
python內(nèi)置的 sorted() 函數(shù)可以對(duì)list進(jìn)行排序:
sorted() 函數(shù)也是一個(gè)高階函數(shù),還可以接受一個(gè) key 函數(shù)來實(shí)現(xiàn)自定義排序:
key 指定的函數(shù)將作用于list的每一個(gè)元素上,并根據(jù) key 函數(shù)返回的結(jié)果進(jìn)行排序.
默認(rèn)情況下,對(duì)字符串排序,是按照ASCII的大小比較的,由于'Z' 'a',結(jié)果,大寫字母Z會(huì)排在小寫字母a的前面。如果想忽略大小寫可都轉(zhuǎn)換成小寫來比較:
要進(jìn)行反向排序,不必改動(dòng)key函數(shù),可以傳入第三個(gè)參數(shù) reverse=True :
小練習(xí):假設(shè)我們用一組tuple表示學(xué)生名字和成績: L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 。用sorted()對(duì)上述列表分別按c成績從高到低排序:
運(yùn)用匿名函數(shù)更簡潔:
==================================================
前面定義函數(shù)greet_user()時(shí),要求給變量username指定一個(gè)值,調(diào)用這個(gè)函數(shù)并提供這種信息(人名)時(shí),它將打印相應(yīng)的問候語。
在函數(shù)greet_user()種,變量username是一個(gè)形參,函數(shù)完成其工作所需要的一項(xiàng)信息。在代碼greet_user('da ming')中,值'da ming'是一個(gè)實(shí)參。實(shí)參時(shí)調(diào)用函數(shù)時(shí)傳遞給函數(shù)的信息。
在調(diào)用函數(shù)時(shí),將要讓函數(shù)使用的信息放在括號(hào)內(nèi),在greet_user('da ming')中,將實(shí)參'da ming'傳遞給函數(shù)greet_user(),這個(gè)值被存貯在形參username中。
鑒于函數(shù)定義中可能包含多個(gè)形參,因此函數(shù)調(diào)用中也可能包含多個(gè)實(shí)參。
向函數(shù)傳遞實(shí)參的方式有很多,可使用位置實(shí)參,這要求實(shí)參的順序與形參的順序相同;也可使用關(guān)鍵字實(shí)參,其中每個(gè)實(shí)參都由變量名和值組成;還可以使用列表和字典
這里來給大家演示一下,函數(shù)的定義或構(gòu)造,并調(diào)用函數(shù)來實(shí)現(xiàn)封裝后的效果。
首先我們來看看想實(shí)現(xiàn)下面的這個(gè)效果,如果不使用函數(shù)應(yīng)該怎么實(shí)現(xiàn)。
以上兩種返回結(jié)果都是1-9這幾個(gè)數(shù)字。
以上兩種方法,第一種代碼重復(fù)率太高,代碼美觀效果太差,雖然能實(shí)現(xiàn)效果,但是因?yàn)閿?shù)量比較少,還能手工打出來這幾行代碼,如果是打印1-100000就很難實(shí)現(xiàn)了。這時(shí)候for循環(huán)還是可以實(shí)現(xiàn)的,但是for循環(huán)只能實(shí)現(xiàn)類似的數(shù)字和變量循環(huán),無法進(jìn)行復(fù)雜的功能開發(fā)。鑒于此,函數(shù)這個(gè)概念就被python引入了,下面先來看看函數(shù)是怎么實(shí)現(xiàn)上面的效果的,還是兩種方法。
這時(shí)候如果想實(shí)現(xiàn)上面的打印結(jié)果就直接使用函數(shù)名+小括號(hào)調(diào)用函數(shù)就可以了,這種類型的語法,不僅可以反復(fù)使用,而且封裝后的代碼更美觀。
當(dāng)前文章:python制作函數(shù) 用python繪制各種函數(shù)
轉(zhuǎn)載源于:http://jinyejixie.com/article16/hepjgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)