<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        跟老齊學(xué)Python之大話題小函數(shù)(1)

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 14:31:16
        文檔

        跟老齊學(xué)Python之大話題小函數(shù)(1)

        跟老齊學(xué)Python之大話題小函數(shù)(1):開篇就要提到一個大的話題:編程范型。什么是編程范型?引用維基百科中的解釋: 代碼如下: 編程范型或編程范式(英語:Programming paradigm),(范即模范之意,范式即模式、方法),是一類典型的編程風(fēng)格,是指從事軟件工程的一類典型的風(fēng)格(可以對照方法
        推薦度:
        導(dǎo)讀跟老齊學(xué)Python之大話題小函數(shù)(1):開篇就要提到一個大的話題:編程范型。什么是編程范型?引用維基百科中的解釋: 代碼如下: 編程范型或編程范式(英語:Programming paradigm),(范即模范之意,范式即模式、方法),是一類典型的編程風(fēng)格,是指從事軟件工程的一類典型的風(fēng)格(可以對照方法

        開篇就要提到一個大的話題:編程范型。什么是編程范型?引用維基百科中的解釋:
        代碼如下:


        編程范型或編程范式(英語:Programming paradigm),(范即模范之意,范式即模式、方法),是一類典型的編程風(fēng)格,是指從事軟件工程的一類典型的風(fēng)格(可以對照方法學(xué))。如:函數(shù)式編程、程序編程、面向?qū)ο缶幊獭⒅噶钍骄幊痰鹊葹椴煌木幊谭缎汀?/p>

        編程范型提供了(同時決定了)程序員對程序執(zhí)行的看法。例如,在面向?qū)ο缶幊讨校绦騿T認為程序是一系列相互作用的對象,而在函數(shù)式編程中一個程序會被看作是一個無狀態(tài)的函數(shù)計算的串行。

        正如軟件工程中不同的群體會提倡不同的“方法學(xué)”一樣,不同的編程語言也會提倡不同的“編程范型”。一些語言是專門為某個特定的范型設(shè)計的(如Smalltalk和Java支持面向?qū)ο缶幊蹋鳫askell和Scheme則支持函數(shù)式編程),同時還有另一些語言支持多種范型(如Ruby、Common Lisp、Python和Oz)。

        編程范型和編程語言之間的關(guān)系可能十分復(fù)雜,由于一個編程語言可以支持多種范型。例如,C++設(shè)計時,支持過程化編程、面向?qū)ο缶幊桃约胺盒途幊獭H欢O(shè)計師和程序員們要考慮如何使用這些范型元素來構(gòu)建一個程序。一個人可以用C++寫出一個完全過程化的程序,另一個人也可以用C++寫出一個純粹的面向?qū)ο蟪绦颍踔吝€有人可以寫出雜揉了兩種范型的程序。

        不管看官是初學(xué)者還是老油條,都建議將上面這段話認真讀完,不管理解還是不理解,總能有點感覺的。

        這里推薦一篇文章,這篇文章來自網(wǎng)絡(luò):《主要的編程范型》

        扯了不少編程范型,今天本講要講什么呢?今天要介紹幾個python中的小函數(shù),這幾個函數(shù)都是從函數(shù)式編程借鑒過來的,它們就是:

        filter、map、reduce、lambda、yield

        有了它們,最大的好處是程序更簡潔;沒有它們,程序也可以用別的方式實現(xiàn),只不過麻煩一些罷了。所以,還是能用則用之吧。

        lambda

        lambda函數(shù),是一個只用一行就能解決問題的函數(shù),聽著是多么誘人呀。看下面的例子:
        代碼如下:


        >>> def add(x): #定義一個函數(shù),將輸入的變量增加3,然后返回增加之后的值
        ... x +=3
        ... return x
        ...
        >>> numbers = range(10)
        >>> numbers
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #有這樣一個list,想讓每個數(shù)字增加3,然后輸出到一個新的list中

        >>> new_numbers = []
        >>> for i in numbers:
        ... new_numbers.append(add(i)) #調(diào)用add()函數(shù),并append到list中
        ...
        >>> new_numbers
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

        在這個例子中,add()只是一個中間操作。當(dāng)然,上面的例子完全可以用別的方式實現(xiàn)。比如:
        代碼如下:


        >>> new_numbers = [ i+3 for i in numbers ]
        >>> new_numbers
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

        首先說明,這種列表解析的方式是非常非常好的。

        但是,我們偏偏要用lambda這個函數(shù)替代add(x),如果看官和我一樣這么偏執(zhí),就可以:
        代碼如下:


        >>> lam = lambda x:x+3
        >>> n2 = []
        >>> for i in numbers:
        ... n2.append(lam(i))
        ...
        >>> n2
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

        這里的lam就相當(dāng)于add(x),請看官對應(yīng)一下,這一行l(wèi)ambda x:x+3就完成add(x)的三行(還是兩行?),特別是最后返回值。還可以寫這樣的例子:
        代碼如下:


        >>> g = lambda x,y:x+y #x+y,并返回結(jié)果
        >>> g(3,4)
        7
        >>> (lambda x:x**2)(4) #返回4的平方
        16

        通過上面例子,總結(jié)一下lambda函數(shù)的使用方法:
        •在lambda后面直接跟變量
        •變量后面是冒號
        •冒號后面是表達式,表達式計算結(jié)果就是本函數(shù)的返回值

        為了簡明扼要,用一個式子表示是必要的:
        代碼如下:


        lambda arg1, arg2, ...argN : expression using arguments

        要特別提醒看官:雖然lambda 函數(shù)可以接收任意多個參數(shù) (包括可選參數(shù)) 并且返回單個表達式的值,但是lambda 函數(shù)不能包含命令,包含的表達式不能超過一個。不要試圖向 lambda 函數(shù)中塞入太多的東西;如果你需要更復(fù)雜的東西,應(yīng)該定義一個普通函數(shù),然后想讓它多長就多長。

        就lambda而言,它并沒有給程序帶來性能上的提升,它帶來的是代碼的簡潔。比如,要打印一個list,里面依次是某個數(shù)字的1次方,二次方,三次方,四次方。用lambda可以這樣做:
        代碼如下:


        >>> lamb = [ lambda x:x,lambda x:x**2,lambda x:x**3,lambda x:x**4 ]
        >>> for i in lamb:
        ... print i(3),
        ...
        3 9 27 81

        lambda做為一個單行的函數(shù),在編程實踐中,可以選擇使用。根據(jù)我的經(jīng)驗,盡量少用,因為它或許更多地是為減少單行函數(shù)的定義而存在的。

        map

        先看一個例子,還是上面講述lambda的時候第一個例子,用map也能夠?qū)崿F(xiàn):
        代碼如下:


        >>> numbers
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #把列表中每一項都加3

        >>> map(add,numbers) #add(x)是上面講述的那個函數(shù),但是這里只引用函數(shù)名稱即可
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

        >>> map(lambda x: x+3,numbers) #用lambda當(dāng)然可以啦
        [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

        map()是python的一個內(nèi)置函數(shù),它的基本樣式是:map(func, seq),func是一個函數(shù),seq是一個序列對象。在執(zhí)行的時候,序列對象中的每個元素,按照從左到右的順序,依次被取出來,并塞入到func那個函數(shù)里面,并將func的返回值依次存到一個list中。

        在應(yīng)用中,map的所能實現(xiàn)的,也可以用別的方式實現(xiàn)。比如:
        代碼如下:


        >>> items = [1,2,3,4,5]
        >>> squared = []
        >>> for i in items:
        ... squared.append(i**2)
        ...
        >>> squared
        [1, 4, 9, 16, 25]

        >>> def sqr(x): return x**2
        ...
        >>> map(sqr,items)
        [1, 4, 9, 16, 25]

        >>> map(lambda x: x**2,items)
        [1, 4, 9, 16, 25]

        >>> [ x**2 for x in items ] #這個我最喜歡了,一般情況下速度足夠快,而且可讀性強
        [1, 4, 9, 16, 25]

        條條大路通羅馬,以上方法,在編程中,自己根據(jù)需要來選用啦。

        在以上感性認識的基礎(chǔ)上,在來瀏覽有關(guān)map()的官方說明,能夠更明白一些。

        代碼如下:


        map(function, iterable, ...)

        Apply function to every item of iterable and return a list of the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. If one iterable is shorter than another it is assumed to be extended with None items. If function is None, the identity function is assumed; if there are multiple arguments, map() returns a list consisting of tuples containing the corresponding items from all iterables (a kind of transpose operation). The iterable arguments may be a sequence or any iterable object; the result is always a list.

        理解要點:
        •對iterable中的每個元素,依次應(yīng)用function的方法(函數(shù))(這本質(zhì)上就是一個for循環(huán))。
        •將所有結(jié)果返回一個list。
        •如果參數(shù)很多,則對么個參數(shù)并行執(zhí)行function。

        例如:
        代碼如下:


        >>> lst1 = [1,2,3,4,5]
        >>> lst2 = [6,7,8,9,0]
        >>> map(lambda x,y: x+y, lst1,lst2) #將兩個列表中的對應(yīng)項加起來,并返回一個結(jié)果列表
        [7, 9, 11, 13, 5]

        請看官注意了,上面這個例子如果用for循環(huán)來寫,還不是很難,如果擴展一下,下面的例子用for來改寫,就要小心了:
        代碼如下:


        >>> lst1 = [1,2,3,4,5]
        >>> lst2 = [6,7,8,9,0]
        >>> lst3 = [7,8,9,2,1]
        >>> map(lambda x,y,z: x+y+z, lst1,lst2,lst3)
        [14, 17, 20, 15, 6]

        這才顯示出map的簡潔優(yōu)雅。

        預(yù)告:下一講詳解reduce和filter

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        跟老齊學(xué)Python之大話題小函數(shù)(1)

        跟老齊學(xué)Python之大話題小函數(shù)(1):開篇就要提到一個大的話題:編程范型。什么是編程范型?引用維基百科中的解釋: 代碼如下: 編程范型或編程范式(英語:Programming paradigm),(范即模范之意,范式即模式、方法),是一類典型的編程風(fēng)格,是指從事軟件工程的一類典型的風(fēng)格(可以對照方法
        推薦度:
        標簽: 話題 map lambda
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费一级毛片在线播放| 99ee6热久久免费精品6| 午夜国产精品免费观看| 亚洲AV综合色区无码一区爱AV| 亚洲AV无码专区在线观看成人 | 亚洲最大福利视频| 一级毛片在线免费观看| 亚洲午夜国产精品无码| 天堂亚洲免费视频| 亚洲色偷拍区另类无码专区| 色九月亚洲综合网| 在线观看免费国产视频| 亚洲字幕AV一区二区三区四区| 99久久国产热无码精品免费| 亚洲成a人片77777群色| 3344永久在线观看视频免费首页| 久久久久亚洲AV成人无码| 免费精品一区二区三区在线观看| 国产特级淫片免费看| 亚洲中文无码卡通动漫野外| 在线观看无码AV网站永久免费 | 国产成人 亚洲欧洲| 在线jyzzjyzz免费视频| 亚洲av无一区二区三区| 免费在线观看a级毛片| 永久免费精品影视网站| 中文字幕亚洲激情| 久久香蕉国产线看免费| 亚洲精品福利网站| 欧洲乱码伦视频免费| 亚洲乱码中文字幕在线| 免费观看日本污污ww网站一区| 黄色片网站在线免费观看| 精品亚洲一区二区三区在线观看| 久久不见久久见免费影院www日本| 亚洲乱码精品久久久久..| 欧美日韩亚洲精品| 亚洲高清无码在线观看| 你懂的免费在线观看| 亚洲无限乱码一二三四区| 成人人观看的免费毛片|