<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 你可能從未聽說過的5種隱藏技巧

          共 4644字,需瀏覽 10分鐘

           ·

          2021-05-26 14:46

          1. ... 對象

          沒錯(cuò),你沒看錯(cuò),就是 ...

          在Python中...代表著一個(gè)名為 Ellipsis 的對象。根據(jù)官方說明,它是一個(gè)特殊值,通常可以作為空函數(shù)的占位符,或是用于Numpy中的切片操作

          如:

          def my_awesome_function():
              ...


          等同于:

          def my_awesome_function():
              Ellipsis


          當(dāng)然,你也可以使用pass或者字符串作為占位符:

          def my_awesome_function():
              pass


          def my_awesome_function():
              "An empty, but also awesome function"


          他們最終的效果都是相同的。

          接下來講講...對象是如何在Numpy中體現(xiàn)出作用的,創(chuàng)建一個(gè) 3x3x3 的矩陣數(shù)組,然后獲取所有最內(nèi)層矩陣的第二列:

          >>> import numpy as np
          >>> array = np.arange(27).reshape(3, 3, 3)
          >>> array
          array([[[ 0, 1, 2],
                  [ 3, 4, 5],
                  [ 6, 7, 8]],

                 [[ 9, 10, 11],
                  [12, 13, 14],
                  [15, 16, 17]],

                 [[18, 19, 20],
                  [21, 22, 23],
                  [24, 25, 26]]])


          為了獲取最層矩陣的第二列,傳統(tǒng)方法可能是這樣的:

          >>> array[:, :, 1] 
          array([[ 1, 4, 7],
                 [10, 13, 16],
                 [19, 22, 25]])


          如果你會(huì)用...對象,則是這樣的:

          >>> array[..., 1] 
          array([[ 1, 4, 7],
                 [10, 13, 16],
                 [19, 22, 25]])


          不過請注意, ... 對象僅可用于Numpy,不適用于Python內(nèi)置數(shù)組。

          2.解壓迭代對象

          解壓迭代對象是一個(gè)非常方便的特性:

          >>> a, *b, c = range(1, 11)
          >>> a
          1
          >>> c
          10
          >>> b
          [2, 3, 4, 5, 6, 7, 8, 9]


          或者是:

          >>> a, b, c = range(3)
          >>> a
          0
          >>> b
          1
          >>> c
          2


          同理,與其寫這樣的代碼:

          >>> lst = [1]
          >>> a = lst[0]
          >>> a
          1
          >>> (a, ) = lst
          >>> a
          1


          你不如跟解壓迭代對象一樣,進(jìn)行更優(yōu)雅的賦值操作:

          >>> lst = [1]
          >>> [a] = lst
          >>> a
          1


          雖然這看起來有點(diǎn)蠢,但就我個(gè)人來看,比前一種寫法更優(yōu)雅一些。

          3.展開的藝術(shù)

          數(shù)組展開有各種千奇百怪的姿勢,比如說:

          >>> l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
          >>> flattened = [elem for sublist in l for elem in sublist]
          >>> flattened
          [1, 2, 3, 4, 5, 6, 7, 8, 9]


          如果你對reduce和lambda有一定了解,建議使用更優(yōu)雅的方式:

          >>> from functools import reduce
          >>> reduce(lambda x,y: x+y, l)
          [1, 2, 3, 4, 5, 6, 7, 8, 9]


          reduce和lambda組合起來,就能針對 l 數(shù)組內(nèi)的每個(gè)子數(shù)組做拼接操作。

          當(dāng)然,還有更神奇的方式:

          >>> sum(l, [])
          [1, 2, 3, 4, 5, 6, 7, 8, 9]
          >>> # 其實(shí)相當(dāng)于 [] + [1, 2, 3] + [4, 5, 6] + [7, 8, 9]


          沒錯(cuò),這樣對二維數(shù)組做sum操作,就能使二維數(shù)組內(nèi)的每個(gè)元素做“加”法拼接起來。

          同樣的道理,如果你對三位數(shù)組做sum操作,就能使其變?yōu)槎S數(shù)組,此時(shí)再對二維數(shù)組做sum操作,就能展開為一維數(shù)組。

          雖然這個(gè)技巧很出色,但我并不推薦使用,因?yàn)榭勺x性太差了。

          4.下劃線 _ 變量

          每當(dāng)你在Python解釋器,IPython或Django Console中運(yùn)行表達(dá)式時(shí),Python都會(huì)將輸出的值綁定到 _ 變量中:

          >>> nums = [1, 3, 7]
          >>> sum(nums)
          11
          >>> _
          11
          >>>


          由于它是一個(gè)變量,你可以隨時(shí)覆蓋它,或像普通變量一樣操作它:

          >>> 9 + _
          20
          >>> a = _
          >>> a
          20

          5.多種用途的else

          很多人都不知道,else 可以被用于許多地方,除了典型的 if else, 我們還可以在循環(huán)和異常處理里用到它。

          循環(huán)

          如果需要判斷循環(huán)里是否處理了某個(gè)邏輯,通常情況下會(huì)這么做:

          found = False
          a = 0

          while a < 10:
              if a == 12:
                  found = True
              a += 1
          if not found:
              print("a was never found")


          如果引入else,我們可以少用一個(gè)變量:

          a = 0

          while a < 10:
              if a == 12:
                  break
              a += 1
          else:
              print("a was never found")

          異常處理

          我們可以在 try ... except ... 中使用 else 編寫未捕獲到異常時(shí)的邏輯:

          In [13]: try:
              ...: {}['lala']
              ...: except KeyError:
              ...: print("Key is missing")
              ...: else:
              ...: print("Else here")
              ...:
          Key is missing


          這樣,如果程序沒有異常,則會(huì)走else分支:

          In [14]: try:
              ...: {'lala': 'bla'}['lala']
              ...: except KeyError:
              ...: print("Key is missing")
              ...: else:
              ...: print("Else here")
              ...:
          Else here


          如果你經(jīng)常做異常處理,你就會(huì)知道這個(gè)技巧相當(dāng)方便。

          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實(shí)戰(zhàn)教程,請持續(xù)關(guān)注我們。


          推薦閱讀:

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


          干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |


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


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

          瀏覽 70
          點(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>
                  影音先锋一起操 | 先锋影音亚洲无码av | 黄色片免费在线 | 午夜无码操逼逼 | 亚洲成人热区 |