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

          Python3.10發(fā)布,愛了!

          共 3168字,需瀏覽 7分鐘

           ·

          2021-10-14 17:07


          二條:太肝了!字節(jié)跳動(dòng)數(shù)據(jù)分析師學(xué)習(xí)筆記。

          三條:Python實(shí)現(xiàn)行轉(zhuǎn)列,超簡(jiǎn)單,趕快get起來(lái)!

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


          Python作為一門動(dòng)態(tài)腳本語(yǔ)言可以說(shuō)相當(dāng)成熟,深受開發(fā)者青睞。無(wú)論是易用性、還是社區(qū)提供的第三方庫(kù)的豐富程度上,只能讓其它語(yǔ)言望塵莫及。盡管總有一些不同的聲音拿Python運(yùn)行慢來(lái)說(shuō)事,不過(guò)真正在用Python的又有多少人care呢。


          3.10正式版發(fā)布

          Python在幾天前發(fā)布了正式版3.10,雖然你不一定會(huì)馬上應(yīng)用到生產(chǎn)環(huán)境,不過(guò)還是建議有條件的可以升級(jí)體驗(yàn)以下,沒條件直接看我這篇文章就可以了,我列了幾個(gè)開發(fā)者可能比較感興趣的特性,看看哪個(gè)是你最期待的特性。

          1、更友好的錯(cuò)誤提示

          expected?=?{9:?1,?18:?2,?19:?2,?27:?3,?28:?3,?29:?3,?36:?4,?37:?4,
          ????????????38:?4,?39:?4,?45:?5,?46:?5,?47:?5,?48:?5,?49:?5,?54:?6,
          some_other_code?=?foo()

          比如這段代碼如果你不小心漏掉一個(gè)右花括號(hào),運(yùn)行代碼時(shí),在之前的版本中直接提示語(yǔ)法錯(cuò)誤:

          File?"example.py",?line?3
          ????some_other_code?=?foo()
          ????????????????????^
          SyntaxError:?invalid?syntax

          不仔細(xì)檢查代碼你還真的沒法一眼看出來(lái)到底哪里語(yǔ)法錯(cuò)誤。而在python3.10中,提示變得非常友好而且具體, 直接告訴你 "{"沒有關(guān)閉,這樣定位錯(cuò)誤就很快了。

          File?"example.py",?line?1
          ????expected?=?{9:?1,?18:?2,?19:?2,?27:?3,?28:?3,?29:?3,?36:?4,?37:?4,
          ???????????????^
          SyntaxError:?'{'?was?never?closed

          類似地,還有推導(dǎo)式中如果忘記加圓括號(hào)時(shí),之前一言不合直接提示語(yǔ)法錯(cuò)誤

          >>>?{x,y?for?x,y?in?zip('abcd',?'1234')}
          ??File?"",?line?1
          ????{x,y?for?x,y?in?zip('abcd',?'1234')}
          ?????????^
          SyntaxError:?invalid?syntax

          而現(xiàn)在會(huì)告訴你,是不是忘記加圓括號(hào)了。

          >>>?{x,y?for?x,y?in?zip('abcd',?'1234')}
          ??File?"",?line?1
          ????{x,y?for?x,y?in?zip('abcd',?'1234')}
          ?????^
          SyntaxError:?did?you?forget?parentheses?around?the?comprehension?target?

          嗯,這才人性化。

          2、match ... case ?終于來(lái)了

          match ... case 語(yǔ)法是我比較期待的功能,它不是什么多高級(jí)的功能,類似于其它語(yǔ)言中的 switch ... case 語(yǔ)法,在多條件判斷時(shí)比用 if ... elif 代碼更簡(jiǎn)潔。很難想象,這個(gè)語(yǔ)法現(xiàn)在才加進(jìn)來(lái),當(dāng)然, 一開始Python之父是不愿意加這個(gè)語(yǔ)法特性的,好在這個(gè)語(yǔ)法最終還是回歸了,而且換了個(gè)名字。

          我在想,干嘛和自己過(guò)不去,統(tǒng)一都叫 switch ... case 不好嗎?也許這就是Python讓人著迷的地方吧。

          來(lái)看個(gè)例子

          這是用3.10的 match case 語(yǔ)法

          def?http_error(status):
          ????match?status:
          ????????case?400:
          ????????????return?"Bad?request"
          ????????case?404:
          ????????????return?"Not?found"
          ????????case?418:
          ????????????return?"I'm?a?teapot"
          ????????case?_:
          ????????????return?"Something's?wrong?with?the?internet"

          case _ ?類似于其它語(yǔ)言中的 default ,當(dāng)其他條件都不符合就執(zhí)行這行。

          用普通的if ... else 語(yǔ)法來(lái)寫

          def?http_error(status):
          ????if?status?==?400:
          ????????return?"Bad?request"
          ????elif?status?==?404:
          ????????return?"Not?found"
          ????elif?status?==?418:
          ????????return?"I'm?a?teapot"
          ????else:
          ????????return?"Something's?wrong?with?the?internet"

          3、支持括號(hào)的上下文管理器

          在之前的老版本中,多個(gè)上下文管理器必須放在一行或者用轉(zhuǎn)義符“\”換行

          with?open("xxx.py",?mode="w")?as?f1,?open("yyy.py",?mode="w")?as?f2:
          ????pass

          #?或者

          with?open("xxx.py",?mode="w")?as?f1,?\
          ????????open("yyy.py",?mode="w")?as?f2:
          ????pass

          在3.10中,我們可以用括號(hào)將多個(gè)管理器放在多行,這樣代碼看起來(lái)整潔一些。

          with?(
          ????open("xxx.py",?mode="w")?as?f1,
          ????open("yyy.py",?mode="w")?as?f2
          ):
          ????pass

          4、新的類型聯(lián)合操作符

          在之前版本中,對(duì)于函數(shù)參數(shù)如果希望類型支持多種,例如同時(shí)支持int和float,需要用Union:

          from?typing?import?Union


          def?foo(number:?Union[?int,?float])?->?Union[int,?float]:
          ????return?number?**?2

          現(xiàn)在有個(gè)新的語(yǔ)法糖“|”,叫聯(lián)合操作符,可以讓代碼更簡(jiǎn)潔

          def?square(number:?int?|?float)?->?int?|?float:
          ????return?number?**?2

          該操作符在函數(shù) isinstance()issubclass() 也可以支持

          #?python3.10
          >>>?isinstance(1,?int?|?str)
          True

          #?python3.7
          >>>?isinstance(1,?(int,float))
          True


          最后

          當(dāng)開發(fā)者問(wèn)到Python是否還會(huì)有Python4.0的時(shí)候,Python之父直言不要對(duì) Python 4.0 抱有希望。假如真的哪天發(fā)布了Python4.0,也不會(huì)重走2.x過(guò)度到3.0的老路。同時(shí),我們也別指望Python的GIL能夠去掉,不是沒嘗試過(guò),而是去掉GIL之后更慢了。如果你的項(xiàng)目對(duì)性能非常敏感,不妨試試pypy,python的一個(gè)分支。

          推薦閱讀

          1. 分享幾個(gè)很全面的數(shù)分實(shí)戰(zhàn)案例,寫進(jìn)簡(jiǎn)歷一定加分!

          2. 140篇!Python 數(shù)據(jù)科學(xué)實(shí)戰(zhàn)項(xiàng)目總結(jié).pdf

          3. 人人都要學(xué) Python 的時(shí)代過(guò)去了!

          4. 知乎:電腦長(zhǎng)時(shí)間不關(guān)機(jī)會(huì)縮短電腦壽命嗎?



          瀏覽 91
          點(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>
                  人人草大香蕉 | 国产微拍精品 | 色天天综合网 | 天天5G天天爽麻豆视频 | 唐嫣一区二区三区在线 |