<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>

          實(shí)用炫酷!這樣寫Python代碼四兩撥千斤!

          共 2319字,需瀏覽 5分鐘

           ·

          2021-05-19 22:10

          63861e33236a89fe619d35390002b317.webp


          這是「進(jìn)擊的Coder」的第 416?篇技術(shù)分享作者:閑歡來(lái)源:Python 技術(shù)「ID: pythonall」

          閱讀本文大概需要 5 分鐘。


          68cb1d7d4a0df8383e0ce068f956c1c8.webp

          判斷一個(gè)程序員水平的高低,不能光看他的發(fā)量,也不能光看他的代碼量,還要看他代碼蘊(yùn)含的思想,代碼的質(zhì)量。代碼蘊(yùn)含的思想主要體現(xiàn)在各種設(shè)計(jì)模式的運(yùn)用上,而代碼的質(zhì)量就既要實(shí)現(xiàn)需求,又要保證代碼的簡(jiǎn)潔優(yōu)雅。保證代碼質(zhì)量是需要長(zhǎng)期積累,養(yǎng)成良好的編程習(xí)慣,不斷思考優(yōu)化的。

          今天就給大家介紹一種實(shí)用的保證代碼簡(jiǎn)潔的武功—— Python 推導(dǎo)四式。

          什么是推導(dǎo)式

          推導(dǎo)式 comprehensions(又稱解析式),是 python 的一種獨(dú)有特性。推導(dǎo)式是可以從一個(gè)數(shù)據(jù)序列構(gòu)建另一個(gè)新的數(shù)據(jù)序列。

          看定義很抽象,下面我們來(lái)看看具體的例子,通過(guò)例子來(lái)學(xué)習(xí)這四種推導(dǎo)式。

          列表推導(dǎo)式

          我們先來(lái)看一個(gè)需求:

          快速創(chuàng)建一個(gè)包含元素 1-9 的平方的列表

          面對(duì)這個(gè)需求,我們通常的實(shí)現(xiàn)方式是這樣的:

          lis?=?[]
          for?i?in?range(1,?10):
          ????lis.append(i*i)
          print(lis)?#?[1,?4,?9,?16,?25,?36,?49,?64,?81]

          用列表推導(dǎo)式怎么實(shí)現(xiàn)呢?你只需要一行代碼:

          lis?=?[x?*?x?for?x?in?range(1,?10)]
          print(list)?#?[1,?4,?9,?16,?25,?36,?49,?64,?81]

          這就是推導(dǎo)式。我們可以看到列推導(dǎo)式的語(yǔ)法是這樣的:

          變量名 = [表達(dá)式 for 變量 in 列表]

          再來(lái)一個(gè)復(fù)雜點(diǎn)的:

          list?=?[x?*?y?for?x?in?range(1,?10)?for?y?in?range(1,?10)]
          print(lis)
          #?[1,?2,?3,?4,?5,?6,?7,?8,?9,?2,?4,?6,?8,?10,?12,?14,?16,?18,?3,?6,?9,?12,?15,?18,?21,?24,?27,?4,?8,?12,?16,?20,?24,?28,?32,?36,?5,?10,?15,?20,?25,?30,?35,?40,?45,?6,?12,?18,?24,?30,?36,?42,?48,?54,?7,?14,?21,?28,?35,?42,?49,?56,?63,?8,?16,?24,?32,?40,?48,?56,?64,?72,?9,?18,?27,?36,?45,?54,?63,?72,?81]

          這個(gè)是多個(gè)變量的類型,因此我們可以擴(kuò)展上面的語(yǔ)法:

          變量名 = [表達(dá)式 for 變量 in 列表 for 變量 in ?xxx]

          當(dāng)然,還有一種帶條件的列推導(dǎo)式,它的語(yǔ)法是這樣的:

          變量名 = [表達(dá)式 for 變量 in 列表 if 條件]

          我們來(lái)看一個(gè)需求:快速創(chuàng)建一個(gè)包含 1-10 之間所有偶數(shù)的列表。

          lis?=?[i?for?i?in?range(1,?11)?if?i?%?2?==?0]
          print(lis)?#?[2,?4,?6,?8,?10]

          字典推導(dǎo)式

          字典推導(dǎo)式的形式和列表推導(dǎo)式類似,語(yǔ)法也是類似的,只不過(guò)字典推導(dǎo)式返回的結(jié)果是字典。

          變量名 = {key: value表達(dá)式}

          我們來(lái)看一個(gè)例子:

          dic = {x: x/2 for x in range(1,11) if x % 2 == 0}
          print(dic) # {2: 1.0, 4: 2.0, 6: 3.0, 8: 4.0, 10: 5.0}

          如果這里我寫成下面這種方式,返回的結(jié)果是什么呢?

          dic = {'half': x/2 for x in range(1,11) if x % 2 == 0}
          print(dic)

          大家可以自己嘗試運(yùn)行一下,看跟你想的結(jié)果是不是一樣的。

          集合推導(dǎo)式

          看了前面兩個(gè)推導(dǎo)式,想必你已經(jīng)知道集合推導(dǎo)式怎么寫了。語(yǔ)法如下:

          變量名 = {表達(dá)式 for 變量 in 列表 for 變量 in ?xxx}

          或者

          變量名 = {表達(dá)式 for 變量 in 列表 if 條件}

          來(lái)一個(gè)實(shí)際的例子:創(chuàng)建一個(gè)存儲(chǔ)10個(gè)偶數(shù)的集合。

          set1?=?{x?for?x?in?range(10)?if?x?%?2?==?0}
          print(set1)?#?{0,?2,?4,?6,?8}

          元組推導(dǎo)式

          我們先來(lái)看一個(gè)例子:

          tup=(x?for?x?in?range(1,10))
          print(tup)?#?<generator?object?<genexpr>?at?0x1101fade0>

          看到這個(gè)結(jié)果打印是不是有點(diǎn)懵?

          上面的代碼返回的變量其實(shí)是一個(gè)生成器,并不是一個(gè)元組。其實(shí)沒(méi)有真正的元組推導(dǎo)式,我們只能用一個(gè)類似的方法來(lái)生成元組,暫且叫做“偽元組推導(dǎo)式”吧。

          上面的例子我們來(lái)改進(jìn)一下:

          tup=tuple(x?for?x?in?range(1,10))
          print(tup)?#?(1,?2,?3,?4,?5,?6,?7,?8,?9)

          在前面加上 tuple 來(lái)顯式進(jìn)行類型轉(zhuǎn)換就行了。

          總結(jié)

          這里介紹了四種 python 的推導(dǎo)式,主要是用來(lái)簡(jiǎn)化 循環(huán)的代碼,生成不同的數(shù)據(jù)結(jié)構(gòu)用的。當(dāng)然,從這些基礎(chǔ)的表達(dá)式語(yǔ)法出發(fā),還可以運(yùn)用到復(fù)雜的推導(dǎo)式,大家在寫代碼時(shí)留心使用就會(huì)發(fā)現(xiàn)它的強(qiáng)大之處。這種一行代碼既簡(jiǎn)潔明了,又可以在新手面前炫技,用起來(lái)不要太爽!

          4b9066809f78cf7eace7d689184054db.webp

          End

          「進(jìn)擊的Coder」專屬學(xué)習(xí)群已正式成立,搜索「CQCcqc4」添加崔慶才的個(gè)人微信或者掃描下方二維碼拉您入群交流學(xué)習(xí)。


          看完記得關(guān)注@進(jìn)擊的Coder
          及時(shí)收看更多好文
          ↓↓↓



          b2f05593a7cd82cfed6409c63e5ce48f.webp

          點(diǎn)個(gè)在看你最好看

          39459c3b5f7592b587930db817752b82.webp
          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  婷婷黄色 | 北条麻妃九九九在线视频 | 91久久久精品视频 | 丁香婷婷综合激情五月色 | 18禁裸体美女 |