日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

这样的奇技淫巧不可取,切记切记

發布時間:2024/9/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这样的奇技淫巧不可取,切记切记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前我們介紹過Python有一個模塊可以用來檢查代碼風格,并且u1s1,檢查得還挺嚴的,搞得阿醬還挺怕怕的

就像讀書時候有一個嚴厲的老大哥、啊不對,老師,一直始終盯著你,一旦犯錯就會對你提出嚴厲的批評,羞得你無地自容。

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

下面我就給大家好好兒講講我是怎么被訓的——

問題呈現

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

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

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

02

啊咧?什么鬼?

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

不需要用列表生成式?

寫的啥?

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

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

03

冤有頭債有主

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

輸入,搜索,到手!

04

讓我們點開看起來更正規的第二個鏈接——至于我為什么說第二個更正規呢?阿醬當然不會告訴你我已經都點開看過了

翻譯一下,第二個鏈接標題“Enhancement: Add a [unnecessary-comprehension]-checker”,大概是“改進點:添加[unnecessary-comprehension]檢查器”這么個意思——

什么什么?你給我等下。

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

這位老哥說了啥來著?

...

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.

...

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

再仔細一看,嗨,真有道理

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

淦!我TM就是那個傻*?

奇技淫巧要慎用

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

然而實際上,事實證明語法糖畢竟是語法糖,有其適用的場景,當然也有其不適用的場景。

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

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

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

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

相關內容作為附錄附在本文之后。

總結

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

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

參考資料

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 由于微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:(1)點擊頁面最上方“小詹學Python”,進入公眾號主頁。 (2)點擊右上角的小點點,在彈出頁面點擊“設為星標”,就可以啦。 感謝支持,比心。

總結

以上是生活随笔為你收集整理的这样的奇技淫巧不可取,切记切记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。