<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python中堪稱神仙的6個內(nèi)置函數(shù)

          共 3669字,需瀏覽 8分鐘

           ·

          2022-05-17 04:07

          人生苦短,菜鳥學(xué)Python!

          我是菜鳥哥,今天,咱們就來了,我們會一次性分享6個堪稱神仙的內(nèi)置函數(shù)。在很多計(jì)算機(jī)書籍中,它們也通常作為高階函數(shù)來介紹。而我自己在日常工作中,經(jīng)常使用它們來使代碼更快,更易于理解。

          Lambda 函數(shù)

          Lambda函數(shù)用于創(chuàng)建匿名函數(shù),即沒有名稱的函數(shù)。它只是一個表達(dá)式,函數(shù)體比def簡單很多。當(dāng)我們需要創(chuàng)建一個函數(shù)來執(zhí)行單個操作并且可以在一行中編寫時,就可以用到匿名函數(shù)了。

          lambda?[arg1?[,arg2,.....argn]]:expression

          lambda的主體是一個表達(dá)式,而不是一個代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。例如:

          lambda?x:?x+2

          如果我們也想像def定義的函數(shù)隨時調(diào)用,可以將lambda函數(shù)分配給這樣的函數(shù)對象。

          add2?=?lambda?x:?x+2
          add2(10)

          輸出結(jié)果:

          利用Lambda函數(shù),可以將代碼簡化很多,具體再舉個例子。

          如上圖所示,結(jié)果列表newlist是使用lambda函數(shù)用一行代碼生成的。

          Map 函數(shù)

          map()函數(shù)會將一個函數(shù)映射到一個輸入列表的所有元素上。

          map(function,iterable)

          比如我們先創(chuàng)建了一個函數(shù)來返回一個大寫的輸入單詞,然后將此函數(shù)應(yīng)有到列表colors中的所有元素。

          def?makeupper(word):
          ????return?word.upper()

          colors=['red','yellow','green','black']
          colors_uppercase=list(map(makeupper,colors))
          colors_uppercase

          輸出結(jié)果:

          此外,我們還可以使用匿名函數(shù)lambda來配合map函數(shù),這樣可以更加精簡。

          colors=['red','yellow','green','black']
          colors_uppercase=list(map(lambda?x:?x.upper(),colors))
          colors_uppercase

          如果我們不用Map函數(shù)的話,就需要使用for循環(huán)。

          如上圖所示,在實(shí)際使用中Map函數(shù)會比for循環(huán)依次列表元素的方法快1.5倍

          Reduce函數(shù)

          當(dāng)需要對一個列表進(jìn)行一些計(jì)算并返回結(jié)果時,reduce()是個非常有用的函數(shù)。舉個例子,當(dāng)需要計(jì)算一個整數(shù)列表所有元素的乘積時,即可使用reduce函數(shù)實(shí)現(xiàn)。[1]

          它與函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個參數(shù),而map接收一個參數(shù)。

          reduce(function,?iterable[,?initializer])?

          接下來我們用實(shí)例來演示reduce()的代碼執(zhí)行過程。

          from?functools?import?reduce
          def?add(x,?y)?:???#?兩數(shù)相加
          ????return?x?+?y
          numbers?=?[1,2,3,4,5]
          sum1?=?reduce(add,?numbers)???#?計(jì)算列表和

          得到結(jié)果sum1 = 15,其代碼執(zhí)行過程如下方動圖所示。

          ▲代碼執(zhí)行過程動圖

          結(jié)合上圖我們會看到,reduce將一個相加函數(shù)add()作用在一個列表[1,2,3,4,5]上,映射函數(shù)接收了兩個參數(shù),reduce()把結(jié)果繼續(xù)和列表的下一個元素做累加計(jì)算

          此外,我們同樣可以使用匿名函數(shù)lambda來配合reduce函數(shù),這樣可以更加精簡。

          from?functools?import?reduce
          numbers?=?[1,2,3,4,5]
          sum2?=?reduce(lambda?x,?y:?x+y,?numbers)

          得到輸出sum2= 15,與之前結(jié)果保持一致。

          需要注意:Python3.x開始reduce()已經(jīng)被移到functools模塊里[2],如果我們要使用,需要用from functools import reduce導(dǎo)入.

          enumerate 函數(shù)

          enumerate()函數(shù)用于將一個可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中。它的語法如下所示:

          enumerate(iterable,?start=0)

          它的兩個參數(shù),一個是序列、迭代器或其他支持迭代對象;另一個是下標(biāo)起始位置,默認(rèn)情況從0開始,也可以自定義計(jì)數(shù)器的起始編號。

          colors?=?['red',?'yellow',?'green',?'black']
          result?=?enumerate(colors)

          如果我們有一個存放colors的顏色列表,運(yùn)行后就會得到一個enumerate(枚舉) 對象。它可以直接在for循環(huán)中使用,也可以轉(zhuǎn)換為列表,具體用法如下所示。

          for?count,?element?in?result:
          ????print(f"迭代編號:{count},對應(yīng)元素:{element}")

          Zip 函數(shù)

          zip()函數(shù)用于將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個個元組,然后返回由這些元組組成的列表[3]

          我們還是用兩個列表作為例子演示:

          colors?=?['red',?'yellow',?'green',?'black']
          fruits?=?['apple',?'pineapple',?'grapes',?'cherry']
          for?item?in?zip(colors,fruits):
          ????print(item)

          輸出結(jié)果:

          當(dāng)我們使用zip()函數(shù)時,如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同。

          prices?=[100,50,120]
          for?item?in?zip(colors,fruits,prices):
          ????print(item)

          Filter 函數(shù)

          filter()函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表,其語法如下所示[4]

          filter(function,?iterable)

          比如舉個例子,我們可以先創(chuàng)建一個函數(shù)來檢查單詞是否為大寫,然后使用filter()函數(shù)過濾出列表中的所有奇數(shù):

          def?is_odd(n):
          ????return?n?%?2?==?1

          old_list?=?[1,?2,?3,?4,?5,?6,?7,?8,?9,?10]

          new_list?=?filter(is_odd,?old_list)
          print(newlist)

          輸出結(jié)果:


          今天分享的這6個內(nèi)置函數(shù),在使用 Python 進(jìn)行數(shù)據(jù)分析或者其他復(fù)雜的自動化任務(wù)時非常方便。

          如果喜歡本文,歡迎給右下角點(diǎn)贊??

          參考資料

          [1]

          書籍: 機(jī)械工業(yè)出版社-《Python編程基礎(chǔ)》

          [2]

          菜鳥教程: https://www.runoob.com/python/python-func-reduce.html

          [3]

          菜鳥教程: https://www.runoob.com/python/python-func-zip.html

          [4]

          towardsdatascience: https://towardsdatascience.com/




          推薦閱讀:

          入門:?最全的零基礎(chǔ)學(xué)Python的問題? |?零基礎(chǔ)學(xué)了8個月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》?|?38年NBA最佳球員分析?|? ?從萬眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!


          AI:?會做詩的機(jī)器人?|?給圖片上色?|?預(yù)測收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水印!?|?一鍵把html網(wǎng)頁保存為pdf!|??再見PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r機(jī)票提示器!?|60行代碼做了一個語音壁紙切換器天天看小姐姐!



          年度爆款文案

          點(diǎn)閱讀原文,看B站我的視頻!

          瀏覽 63
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  野外打野不雅视频在线播放 | 国产精品久久久久久久久久中字幕 | 操操操操操操操操操操 | 水蜜桃视频在线观看免费 | 国产永久免费无遮挡被操裸体美女 |