<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種隱藏技巧

          共 2945字,需瀏覽 6分鐘

           ·

          2020-12-05 18:55

          1. ... 對(duì)象

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

          在Python中...代表著一個(gè)名為?Ellipsis?的對(duì)象。根據(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"


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

          接下來講講...對(duì)象是如何在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ì)用...對(duì)象,則是這樣的:

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


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

          2.解壓迭代對(duì)象

          解壓迭代對(duì)象是一個(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


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

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


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

          3.展開的藝術(shù)

          數(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]


          如果你對(duì)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組合起來,就能針對(duì) 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ò),這樣對(duì)二維數(shù)組做sum操作,就能使二維數(shù)組內(nèi)的每個(gè)元素做“加”法拼接起來。

          同樣的道理,如果你對(duì)三位數(shù)組做sum操作,就能使其變?yōu)槎S數(shù)組,此時(shí)再對(duì)二維數(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)教程,請(qǐng)持續(xù)關(guān)注Python實(shí)用寶典。

          有任何問題,可以在公眾號(hào)后臺(tái)回復(fù):加群,回答相應(yīng)紅字驗(yàn)證信息,進(jìn)入互助群詢問。

          原創(chuàng)不易,希望你能在下面點(diǎn)個(gè)贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點(diǎn)擊下方閱讀原文可獲得更好的閱讀體驗(yàn)

          Python實(shí)用寶典?(pythondict.com)
          不只是一個(gè)寶典
          歡迎關(guān)注公眾號(hào):Python實(shí)用寶典

          瀏覽 37
          點(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>
                  丝袜足交诱惑 | 揄拍 | 男女操逼视频在线播放 | 国产成人精品AV在线观 | 高清无码在线免费视频 |