Stackoverflow上百萬的Python問題|最火的十個
菜鳥學Python的第141篇原創文章
閱讀本文大概需要4分鐘
Stackoverflow應該是每個碼農耳熟能詳的網站,上面有大量的問題,基本上你遇到的編程的也好,環境安裝也好,調試出錯也好,都有大牛在上面回答!年前我做個爬蟲爬取了Stackoverflow上近90萬的數據,想後面寫一篇可視化的分享報告!今天我們先看一下投票最多的問題,看看你能回答幾道?
1.What does the 「yield」 keyword do?
投票人數:7700 圍觀人數:1,591,544
- 看來大家對Python裡面最yield 這個用法都非常好奇,確實這個用法一開始學的時候非常彆扭,一頭霧水,別的語言根本沒有這個。
- yield跟Python裡面的生成器緊密相關,剛開始看的時候覺得很彆扭,尤其是帶有yield的生成器函數用法和邏輯怪怪的,比如用scrapy框架的時候,看到yield頭大呢,因為scrapy爬取數據的時候大量的用yield處理。
- 但是當你用習慣之後,會發現這種用法非常Python之美
2.What are metaclasses in Python?
投票人數:4232 圍觀人數:565,158
- metaclass其實就是元類,元類到底是啥,有啥用呢!Python裡面有幾個非常難懂的概念,比如上面的yield,還有裝飾器,初學者可能已經比較頭疼了,這裡還有更複雜的是元類!
- 我個人覺得元類算是Python裡面最晦澀難懂的概念,比較冷門!要懂元類需要對類非的內部結構和邏輯非常了解,而且在多個類之間繼承封裝的時候,會考慮用到.
- 我個人比較喜歡用設計模式來化解,青菜蘿蔔各有所愛,但是元編程的技巧,卻是非常值得學Python的同學好好研究一下。
3.How to check whether a file exists?
投票人數:3592 圍觀人數:2,553,760
- 這個問題看上去很簡單啊,為啥這麼多都在問。有的小夥伴說os.path.exist(path)不就搞定啦,但是點開看看裡面展開了激烈的討論.
- 也有人用os.path.isfile(path),也有人用pathlib庫,還有人用os.access()等等,各抒己見,讓我長見識了!
4.Does Python have a ternary conditional operator?
投票人數:3590 圍觀人數:1,209,596
三目運算,很多有c,c++基礎的同學對這個一定不陌生,那麼Python裡面到底有沒有三目運算呢,答案是有的,比如:
#way11 if a > b else -1#way2(falseValue, trueValue)[test == True]#way3a=1b=2print ({True: 100, False: 200}[a > b])
上面3種三目運算的寫法是不是讓你腦洞大開,還能這樣。是的,尤其是在做狀態機的時候會用到,歷史文章裡面有一篇"Google面試演算法題,兩桶水"就用到了這招。
5.What does if __name__ == 「__main__」: do?
投票人數:3590 圍觀人數:1,209,596
- 所有學Python的同學,剛上來學的時候一定會碰到這行代碼,我自己剛開始的學的時候,就當它是main函數入口函數。
- 後來學了一段時間,才慢慢體會到,這行代碼背後的深意.__name__其實跟模塊的引用有關,如果在模塊內部運行這個程序,就是__main__這個名字,如果是外部引用,則是模塊的名字.
6.Calling an external command in Python ?
投票人數:3276 圍觀人數:2,324,850
這個問題做自動化運維的同學一定不陌生,用Python在linux伺服器上調一些其他的腳本,肯定會用到os.system()這招,或者用os.popen("ls -l").read(),獲取返回的結果,或是用subprocess.Popen()跑一些command.
7.How to merge two dictionaries in a single expression?
投票人數:2858 圍觀人數:1,024,003
字典和列表的用法,算是Python裡面的最精妙的地方,後面幾個問題都和字典有關!字典的merge方法有很多種,非常精妙,這裡只羅列部分幾種:
x = {a:1, b: 2}y = {b:10, c: 11}x.update(y)print (x)
x = {a:1, b: 2}y = {b:10, c: 11}z = {**x, **y}print (z)x = {a:1, b: 2}y = {b:10, c: 11}z = dict(x, **y)print (z)
8.How do I sort a dictionary by value?
投票人數:2650 圍觀人數:1,604,329
- 字典的排序問題,也是一個非常典型的字典相關問題,發現 Stackoverflow上對字典的用法,還是吸引了大批的愛好者!
- 字典的排序有很多種方法,詳細可以看我一年前寫的文章裡面,有好幾篇都是對這個介紹.
- 大體可以用sorted,或者獲取字典的items()循環排序,或者collections模塊裡面的most_common().
9.How can I create a directory if it does not exist?
投票人數:2643 圍觀人數:1,645,881
- 這個問題非常巧,我前段時間在小密圈分享過一種非常Pythonic的用法,不僅僅是路徑不存在,還有文件不存在的情況!
- 沒有想到stackoveflow這是排名第九的熱點問題!我們一般通俗的做法是用if/else,或者if not 來判斷一下路徑是否存在os.path.exist(),不存在則新建一個路徑.
10.Does Python have a string contains substring method?
投票人數:2496 圍觀人數:2,226,231
- 總於有字元串的問題了!我一直在想前面文件,字典,模塊,生成器,對象,怎麼沒有字元串呢!
- 啊哈發現第十個問題是關於字元串的,這個問題其實涉及很多字元串的技巧,深挖出來,可以挖出一籮筐關於字元串的技巧!
- 一般我們來判斷一個小字元串在大的字元串裡面,可以用in,find,或者用正則去search,甚至關於字元串的大量處理,大規模的可以用pandas裡面的str去處理。
當然如果只是簡單的分析熱門問題,並不需要深度爬取,只需要點點網頁上的排名就行了,我是為了後面寫一篇深度分析報告.
好上面就是10大熱門問題,我自己一路讀下來,發現收穫不少!也可以檢測一下自己學的掌握情況,有的時候答題不僅是幫助別人,也是提高自己,溫故而知新 可以更強矣!小夥伴不知道大家都打出幾道了,歡迎留言報個數吧!
推薦閱讀:
雙十二來了,我爬取了淘寶上所有的羽絨服|想找到最大折扣
Python年薪最高有50w|探秘全國近1600個Python崗位數據分析
學好Python薪水有多少|我爬取了所有的Python職位
一份值得了解的Google Python風格規範指南
南京樓市火嗎|16000套二手房數據分析
分析9000部電影|一個簡單的電影推薦系統
厲害了!實戰爬取全網5000部手機|上篇
Python
推薦閱讀:
※Python為什麼直接運行和在命令行運行同樣語句但結果卻不同,他們的緩存機制不同嗎?
※MongoDB及可視化工具的安裝
※抓取數據,衡量GAFATA
※這次動真格的了——Python要從娃娃抓起!
※ABSP第8章 文件讀寫
TAG:Python |