乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      牛逼!Python的判斷、循環(huán)和各種表達(dá)式(長(zhǎng)文系列第2篇)

       liqualife 2020-08-04

      流程控制是python語(yǔ)法很重要的一個(gè)分支,主要包括我們經(jīng)常用到的判斷語(yǔ)句、循環(huán)語(yǔ)句以及各種表達(dá)式,這也是上一篇文章沒(méi)有介紹表達(dá)式的原因,在這篇文章中會(huì)更加系統(tǒng)全面的講解這三方面的基礎(chǔ)知識(shí)。

      判斷語(yǔ)句(if)

      判斷語(yǔ)句中最有名的應(yīng)該就是if-else的組合,并且很多語(yǔ)言都通用這種格式,但是對(duì)于elif而言,不同語(yǔ)言表達(dá)形式可能會(huì)不同:

      In [1]: x = 5
      In [2]: if x>0:
         ...:     print('正整數(shù)')
         ...: elif x<0:
         ...:     print('負(fù)整數(shù)')
         ...: else:
         ...:     print('零')
         ...:
      正整數(shù)

      一組判斷語(yǔ)句可能會(huì)有零到多個(gè) elif 部分,else 是可選的。關(guān)鍵字 elif  是 else if 的縮寫(xiě),由于python對(duì)縮進(jìn)的要求很嚴(yán)格,而這種寫(xiě)法恰巧可以有效地避免過(guò)深的縮進(jìn)。if ... elif ... elif ... 序列用于替代其它語(yǔ)言中的 switch 或 case 語(yǔ)句。

      循環(huán)語(yǔ)句

      1、for循環(huán)

      如果C語(yǔ)言是你最熟悉的需要,要注意python和C語(yǔ)言中的for語(yǔ)句表達(dá)形式完全不同。Python 的 for 語(yǔ)句依據(jù)任意序列(字符串、列表)中的子項(xiàng),按照它們?cè)谛蛄兄械捻樞騺?lái)進(jìn)行迭代。

      In [3]: str1 = 'mao'

      In [4]: for i in str1:
         ...:     print(i)
         ...:
      m
      a
      o

      對(duì)列表的循環(huán)與字符串幾乎一致,只是子項(xiàng)不同。

      In [5]: list1 = ['a','aa','aaa']
      In [6]: for i in list1:
         ...:     print(i,len(i))
         ...:
      1
      aa 2
      aaa 3

      for語(yǔ)句與range函數(shù)結(jié)合是一種很常見(jiàn)的組合,range函數(shù)主要提供一個(gè)數(shù)值序列。

      In [8]: for j in range(len(list1)):
         ...:     print(j,list1[j])
         ...:
      0 a
      1 aa
      2 aaa

      range提供的數(shù)值索引方式可以參考列表的切片,同樣默認(rèn)以0開(kāi)始,且不包括最后一位,上面這種場(chǎng)合利用enumerate()函數(shù)表達(dá)會(huì)更加簡(jiǎn)單。

      In [9]: for i,v in enumerate(list1):
         ...:     print(i,v)
         ...:
      0 a
      1 aa
      2 aaa

      2、while語(yǔ)句

      In [10]: i = 1
      In [11]: list2 = []
      In [12]: while i<=5:
          ...:     list2.append(i)
          ...:     i+=1
      In [14]: list2
      Out[14]: [12345]

      3、break、continue、pass

      break語(yǔ)句的作用就是用來(lái)跳出一個(gè)for或while循環(huán)。

      In [15]: for i in range(0,5):
          ...:     if i == 3:
          ...:         break
          ...:     else:
          ...:         print(i)
      0
      1
      2

      可以看到在for循環(huán)中加了一個(gè)判斷語(yǔ)句,當(dāng)i等于3時(shí)會(huì)跳出for循環(huán),不再繼續(xù)執(zhí)行,輸出與語(yǔ)義符合。

      continue語(yǔ)句的作用就是表示繼續(xù)執(zhí)行下一次迭代,可以結(jié)合判斷語(yǔ)句使用,在什么條件下繼續(xù)執(zhí)行,或者什么條件下跳出循環(huán)。

      In [20]: for i in range(2,7):
          ...:     if i%2==0:
          ...:         print('An even number',i)
          ...:         continue
          ...:     if i>4:
          ...:         print('beyond 4')
          ...:         break
          ...:
      An even number 2
      An even number 4
      beyond 4

      pass語(yǔ)句主要起到一個(gè)占位的作用,而有的語(yǔ)句后面是不能為空的,比如if、for、while,可以利用pass占位,不會(huì)發(fā)生報(bào)錯(cuò)。

      In [1]: while True:
         ...:     pass

      迭代器、生成器

      我們通常接觸到的迭代器有序列,比如字符串、列表等等,利用iter()方法可以構(gòu)建一個(gè)迭代器,與之匹配的next()方法可以迭代返回迭代器內(nèi)的值,并將返回值彈出迭代器。

      In [1]: it = iter('python')
      In [2]: print(it)
      <str_iterator object at 0x00000187ADA75A00>

      In [3]: next(it)
      Out[3]: 'p'
      In [4]: next(it)
      Out[4]: 'y'

      當(dāng)next方法迭代到最后一個(gè)值時(shí),繼續(xù)調(diào)用next方法會(huì)彈出報(bào)錯(cuò)。當(dāng)然也可以利用for循環(huán)迭代輸出:

      In [6]: for i in it:
         ...:     print(i)
      t
      h
      o
      n

      如果你深入了解Python之后會(huì)發(fā)現(xiàn)生成器用起來(lái)會(huì)更加方便,結(jié)合函數(shù)即可。生成器的關(guān)鍵字為yield,生成器也具有next()方法,并且可以利用for循環(huán)迭代輸出。

      In [8]: def reverse(data):
         ...:     for i in range(len(data)-1,-1,-1):
         ...:         yield data[i]
      In [9]: gen = reverse('mao')
      In [10]: print(gen)
      <generator object reverse at 0x00000187AD99FDD0>

      In [11]: next(gen)
      Out[11]: 'o'
      In [12]: for i in gen:
          ...:     print(i)
      a
      m

      用小括號(hào)括起來(lái)的一個(gè)表達(dá)式可以用來(lái)創(chuàng)建一個(gè)生成器,下面將講述如何來(lái)書(shū)寫(xiě)各種的表達(dá)式。

      In [14]: gen2 = (i for i in range(0,5))

      In [15]: print(gen2)
      <generator object <genexpr> at 0x00000187ADA18D60>

      表達(dá)式

      列表表達(dá)式

      各種表達(dá)式為我們創(chuàng)建相關(guān)數(shù)據(jù)類型提供了一種更加簡(jiǎn)單的方法,首先是列表表達(dá)式,普通的方法是通過(guò)將一些操作應(yīng)用于序列的每個(gè)成員并通過(guò)返回的元素創(chuàng)建列表,或者通過(guò)滿足特定條件的元素創(chuàng)建子序列。比如我們想獲取10以內(nèi)的平方數(shù),利用普通方法如下:

      In [16]: squares = []
      In [17]: for i in range(10):
          ...:     squares.append(i ** 2)

      In [18]: squares
      Out[18]: [0149162536496481]

      但一行語(yǔ)句就足以囊括上面的內(nèi)容,可見(jiàn)列表表達(dá)式的簡(jiǎn)潔性。

      In [20]: squares = [x**2 for x in range(10)]

      In [21]: squares
      Out[21]: [0149162536496481]

      上面這個(gè)列表表達(dá)式應(yīng)該是比較簡(jiǎn)單的,我們還可以在表達(dá)式中加入判斷語(yǔ)句作為篩選條件。

      In [22]: list2 = [x*2 for x in range(10if x*2>3]

      In [23]: list2#0和2被過(guò)濾掉了
      Out[23]: [4681012141618]

      進(jìn)一步可以結(jié)合兩個(gè)列表的元素組成一個(gè)列表表達(dá)式:

      In [24]: list3 = [(x,y) for x in [1,2for y in [2,3]if x!=y]

      In [25]: list3
      Out[25]: [(12), (13), (23)]

      在復(fù)雜一點(diǎn)的列表表達(dá)式就是嵌套類型的,但是這樣的表達(dá)式缺點(diǎn)就是可讀性不太好,因?yàn)槟阈枰ニ伎妓囊恍┘?xì)節(jié),比如將一個(gè)23的矩陣轉(zhuǎn)變?yōu)?2的矩陣。

      In [28]: mat = [[1,2,3],[4,5,6]]
      In [29]: list3 = [[row[i] for row in mat] for i in range(3)]

      In [31]: list3
      Out[31]: [[14], [25], [36]]

      集合表達(dá)式

      集合表達(dá)式與列表表達(dá)式有兩處不同:

      • 1、集合表達(dá)式需要用{}
      • 2、集合表達(dá)式返回的是集合,所以會(huì)對(duì)元素去重

      In [32]: set1 = {i for i in 'abcdddddd' if i not in 'abc'}

      In [33]: set1
      Out[33]: {'d'}

      可以看到for語(yǔ)句中的字符串原本有很多d,經(jīng)過(guò)條件過(guò)濾和集合去重最后只剩下了一個(gè)。

      當(dāng)然也可以通過(guò)set()方法將一個(gè)列表表達(dá)式轉(zhuǎn)換為集合的形式。

      In [34]: set2 = set([(x,y) for x in range(2for y in range(2)])

      In [35]: set2
      Out[35]: {(00), (01), (10), (11)}

      字典表達(dá)式

      字典是python中很常用的一種數(shù)據(jù)類型,所以字典表達(dá)式也顯得尤為重要。字典表達(dá)式同樣也用{}構(gòu)建,只不過(guò)表達(dá)式還要用(key:value對(duì))的形式。

      In [36]: dict1 = {x:x**2 for x in range(1,4)}
      In [37]: dict1
      Out[37]: {112439}

      字典表達(dá)式也可以結(jié)合一些方法、語(yǔ)句實(shí)現(xiàn)更多的功能。

      In [38]: dict2 = {x:len(x) for x in ['aa','bb','ccc']}
      In [39]: dict2
      Out[39]: {'aa'2'bb'2'ccc'3}

      利用items()方法很容易實(shí)現(xiàn)鍵值對(duì)轉(zhuǎn)換,不過(guò)需要注意字典的鍵需要唯一。

      In [40]: dict3 = {v:k for k,v in dict2.items()}
      In [41]: dict3
      Out[41]: {2'bb'3'ccc'}

      通過(guò)上面幾個(gè)例子可以看到,表達(dá)式是由包含一個(gè)表達(dá)式的括號(hào)組成,表達(dá)式后面會(huì)跟一個(gè)for語(yǔ)句,之后還可以跟零或者多個(gè)for或if語(yǔ)句,結(jié)果最終會(huì)返回一個(gè)指定的數(shù)據(jù)類型,其中的元素是通過(guò)表達(dá)式依據(jù)后面的for和if語(yǔ)句計(jì)算而得出的。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多