1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python3.10發(fā)布,這個(gè)特性愛了

        共 3220字,需瀏覽 7分鐘

         ·

        2021-10-14 01:38

        最近Python社區(qū)有兩件大事

        Python登頂

        在最新一期的TIOBE榜單中,Python登頂TIOBE,排名第一,結(jié)束了Java和C多年的霸榜。?

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


        3.10正式版發(fā)布

        Python在幾天前發(fā)布了正式版3.10,雖然你不一定會(huì)馬上應(yīng)用到生產(chǎn)環(huán)境,不過還是建議有條件的可以升級體驗(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è)右花括號,運(yùn)行代碼時(shí),在之前的版本中直接提示語法錯(cuò)誤:

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

        不仔細(xì)檢查代碼你還真的沒法一眼看出來到底哪里語法錯(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)式中如果忘記加圓括號時(shí),之前一言不合直接提示語法錯(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ì)告訴你,是不是忘記加圓括號了。

        >>>?{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 ?終于來了

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

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

        來看個(gè)例子

        這是用3.10的 match case 語法

        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 _ ?類似于其它語言中的 default ,當(dāng)其他條件都不符合就執(zhí)行這行。

        用普通的if ... else 語法來寫

        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、支持括號的上下文管理器

        在之前的老版本中,多個(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中,我們可以用括號將多個(gè)管理器放在多行,這樣代碼看起來整潔一些。

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

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

        在之前版本中,對于函數(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è)新的語法糖“|”,叫聯(liá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ā)者問到Python是否還會(huì)有Python4.0的時(shí)候,Python之父直言不要對 Python 4.0 抱有希望。假如真的哪天發(fā)布了Python4.0,也不會(huì)重走2.x過度到3.0的老路。同時(shí),我們也別指望Python的GIL能夠去掉,不是沒嘗試過,而是去掉GIL之后更慢了。如果你的項(xiàng)目對性能非常敏感,不妨試試pypy,python的一個(gè)分支。

        - EOF -


        回復(fù)關(guān)鍵字“簡明python ”,立即獲取入門必備書籍簡明python教程》電子版

        回復(fù)關(guān)鍵字爬蟲”,立即獲取爬蟲學(xué)習(xí)資料

        點(diǎn)擊關(guān)注【python入門與進(jìn)階】,閱讀更多精彩內(nèi)容
        ??????

        推薦

        瀏覽 56
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一起撸一起射网站 | 超碰香蕉| 操大香蕉| 大尺度做爰戏 | 夜夜春欧美 | 欧美污网站 | 91黄色小网站 | 精品欧美久久 | 久久99精品久久久久久园产越南 | 午夜美女国产毛片福利视频 |