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

          這樣的奇技淫巧不可取,切記切記

          共 4000字,需瀏覽 8分鐘

           ·

          2020-11-07 00:43


          之前我們介紹過Python有一個(gè)模塊可以用來檢查代碼風(fēng)格,并且u1s1,檢查得還挺嚴(yán)的,搞得阿醬還挺怕怕的

          就像讀書時(shí)候有一個(gè)嚴(yán)厲的老大哥、啊不對,老師,一直始終盯著你,一旦犯錯(cuò)就會(huì)對你提出嚴(yán)厲的批評,羞得你無地自容。

          上次就是這個(gè)老師,又把阿醬給訓(xùn)了一頓。不過講心里話,老師訓(xùn)得還是有道理的,阿醬雖然口頭上不爽嘟囔兩句,但物理上也還是從善如流的——這肯定不是怕了老師手上的戒尺。

          下面我就給大家好好兒講講我是怎么被訓(xùn)的——

          問題呈現(xiàn)

          作為Python的語法糖之一,想必大家對于列表生成式都已經(jīng)熟悉得不能再熟悉了,甚至現(xiàn)在立馬走出門去,不懂列表生成式都不敢理直氣壯地說自己是個(gè)Pythonista——到了這種程度。

          但是上次坑了阿醬的恰好就是這個(gè)列表生成式,這里也跟大家share一下阿醬的辛酸故事。(類似的話我前兩句是不是才說過來著

          話說那是一個(gè)月黑風(fēng)高的夜晚(程序猿加班很正常對伐?所以這個(gè)描述很合理且應(yīng)景),阿醬當(dāng)時(shí)辛辛苦苦耕耘,碼出了好長一段代碼,然后喜滋滋地例行pylint掃了一下……

          02

          啊咧?什么鬼?

          R1721:?Unnecessary?use?of?a?comprehension

          不需要用列表生成式?

          寫的啥?

          l?=?[n?for?n?in?range(10)]

          有毛病嗎?這有毛病嗎?這***有啥毛病啊?你倒是說啊?我這代碼有什么問題?咋就不該用列表生成式了?那你讓我用啥?用愛嗎?

          03

          冤有頭債有主

          好了到這里卡住了,接下來有請我們永遠(yuǎn)滴神——Google老大爺蹣跚登場

          輸入,搜索,到手!

          04

          讓我們點(diǎn)開看起來更正規(guī)的第二個(gè)鏈接——至于我為什么說第二個(gè)更正規(guī)呢?阿醬當(dāng)然不會(huì)告訴你我已經(jīng)都點(diǎn)開看過了

          翻譯一下,第二個(gè)鏈接標(biāo)題“Enhancement: Add a [unnecessary-comprehension]-checker”,大概是“改進(jìn)點(diǎn):添加[unnecessary-comprehension]檢查器”這么個(gè)意思——

          什么什么?你給我等下。

          感情剛剛困擾我的那個(gè)規(guī)范問題還是打你這兒出來的啊,冤有頭債有主,別怪我不客……咳,讀書人的事,終歸還是講點(diǎn)道理的,咱們還是先把這鏈接的內(nèi)容看完,再不客氣也不遲。

          這位老哥說了啥來著?

          ...

          we could implement a checker that detects list/dict/set-comprehensions that can be replaced by the corresponding list/dict/set-constructors, which is faster and more readable. For example:

          • list(iterable) instead of [x for x in iterable]
          • dict(some_dict) instead of {k: v for k, v in some_dict}
          • set(iterable) instead of {e for e in iterable}

          Although these cases seem trivial/obvious, I think having such a checker would help in cases where longer/more complex variable-names are used.

          ...

          老哥說,他要實(shí)現(xiàn)這么一個(gè)檢查器,檢查出那些可以被list/set/dict構(gòu)造器替換的list/set/dict生成式,使代碼性能更佳、可讀性更好。具體來說有這么些blabla的示例。

          再仔細(xì)一看,嗨,真有道理

          你看看這個(gè)列表生成式,[x for x in iterable],這不是脫了屁股放……啊錯(cuò)了,脫了褲子放屁嗎?一個(gè)個(gè)迭代出來可迭代對象中的元素,然后原封不動(dòng)地組裝成一個(gè)列表;這種弱智活,直接交給內(nèi)置的list不香嗎?還會(huì)有傻*蠢到用列表生成式?哈哈哈哈哈哈,?——

          淦!我TM就是那個(gè)傻*?

          奇技淫巧要慎用

          u1s1,在此之前,我從來沒有想過,一個(gè)簡單的列表生成式還有這么多的講究,壓根兒就沒有考慮過怎么樣才能有效地使用Python的語法糖。

          然而實(shí)際上,事實(shí)證明語法糖畢竟是語法糖,有其適用的場景,當(dāng)然也有其不適用的場景。

          沒有什么東西是萬金油銀彈(這個(gè)修改是阿醬為了顯得與國際接軌),只有用在了對的地方,它才能被稱之為“語法糖”;否則更像是“語法毒藥”,污染好大一片數(shù)字江山。

          包括阿醬在內(nèi)的不少同學(xué),可能學(xué)了一陣兒Python,就沉浸于其中的各種奇技淫巧,每次遇到任何場景,都是不管三七二十一,直接套上一個(gè)trick。

          你以為你是四兩撥千斤,其實(shí)不過是大力出奇跡。

          pylint增加的這個(gè)檢查器能夠檢查的項(xiàng)不止于列表生成式這么一小塊門類,繼續(xù)閱讀之前那個(gè)鏈接我們可以發(fā)現(xiàn)一套很有意義的范例,其中注釋為[unnecessary-comprehension]的代碼行,都是相關(guān)生成式的“壞的實(shí)踐”,值得我們引以為鑒。

          相關(guān)內(nèi)容作為附錄附在本文之后。

          總結(jié)

          本文我們再次(阿醬要哭了)從阿醬遇到的實(shí)際問題說開去,警醒了一些有點(diǎn)飄的同學(xué):我們一定要腳踏實(shí)地,仰望星空;艱苦奮斗,持續(xù)搬磚。

          奇技淫巧可以用,但是一定要分清場景。

          參考資料

          Enhancement: Add a [unnecessary-comprehension]-checker #2905

          附錄

          #?For?name-reference?see?https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries

          #?List?comprehensions
          [x?for?x?in?iterable]??#?[unnecessary-comprehension]
          [y?for?x?in?iterable]??#?expression?!=?target_list
          [x?for?x,y,z?in?iterable]??#?expression?!=?target_list
          [(x,y,z)?for?x,y,z?in?iterable]??#?[unnecessary-comprehension]
          [(x,y,z)?for?(x,y,z)?in?iterable]??#?[unnecessary-comprehension]
          [x?for?x,?*y?in?iterable]??#?expression?!=?target_list
          [x?for?x?in?iterable?if?condition]??#?exclude?comp_if
          [y?for?x?in?iterable?for?y?in?x]??#?exclude?nested?comprehensions

          #?Set?comprehensions
          {x?for?x?in?iterable}??#?[unnecessary-comprehension]
          {y?for?x?in?iterable}??#?expression?!=?target_list
          {x?for?x,y,z?in?iterable}??#?expression?!=?target_list
          {(x,y,z)?for?x,y,z?in?iterable}??#?[unnecessary-comprehension]
          {(x,y,z)?for?(x,?y,?z)?in?iterable}??#?[unnecessary-comprehension]
          {x?for?x,?*y?in?iterable}??#?expression?!=?target_list
          {x?for?x?in?iterable?if?condition}??#?exclude?comp_if
          {y?for?x?in?iterable?for?y?in?x}??#?exclude?nested?comprehensions

          #?Dictionary?comprehensions
          {k:?v?for?k,?v?in?iterable}??#?[unnecessary-comprehension]
          {v:?k?for?k,?v?in?iterable}??#?key?value?wrong?order
          {k:?v?for?(k,?v)?in?iterable}??#?[unnecessary-comprehension]
          {x:?y?for?x,y,z?in?iterable}??#?expression?!=?target_list
          {x[0]:?x[1]?for?*x?in?iterable}??#?[unnecessary-comprehension]
          {x:?y?for?x,?y?in?iterable?if?condition}??#?exclude?comp_if
          {y:?z?for?x?in?iterable?for?y,?z?in?x}??#?exclude?nested?comprehensions


          由于微信平臺(tái)算法改版,公號內(nèi)容將不再以時(shí)間排序展示,如果大家想第一時(shí)間看到我們的推送,強(qiáng)烈建議星標(biāo)我們和給我們多點(diǎn)點(diǎn)【在看】。星標(biāo)具體步驟為:


          (1)點(diǎn)擊頁面最上方“小詹學(xué)Python”,進(jìn)入公眾號主頁。


          (2)點(diǎn)擊右上角的小點(diǎn)點(diǎn),在彈出頁面點(diǎn)擊“設(shè)為星標(biāo)”,就可以啦。


          感謝支持,比心。

          瀏覽 46
          點(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在线观看 | 久久久久久久久免费观看完整版 | 91日韩在线手机在线视频 | 天津人妻第三次3p视频 |