摘要:接下來手工實現了一個簡單的裝飾器原型,緊接著引入中的裝飾器語法。最后還列出了一些裝飾器的高級用法,包括給裝飾器傳遞參數等。讀完整個答案,一定能對裝飾器有較深的理解,并且知道理解裝飾器的思考過程。
作為一名程序員,如果沒有聽過 Stackoverflow,那么你最好去面壁思過一下。程序員最需要閱讀的一本編程書籍(其實編程書留下這本就夠了!):
那些還沒有讀過這本書的程序員,是時候買一本了。如果還在猶豫,那么先看下這篇文章,看看為什么離不開 stackoverflow。
提問的智慧當你拋出一個技術問題時,最終是否能得到有用的回答,往往取決于你所提問和追問的方式。 --Eric S. Raymond
有時候,清晰描述一個問題,特別是技術問題沒有想象的那么簡單。提問從來就是一門學問,可惜很多人沒有意識到這一點,或者沒有給予足夠的重視。或者,有的提問者根本不是抱著提問的態度來請求大家的幫助。所以我們會發現各種讓人無法解答或者無心解答的問題:
java正則表達式問題?
sla響應時間是指什么?
ATL類與一般的類繼承有什么區別
為了避免上面的問題被關閉或者修改,放一張圖片在這里,來體會下這種狗屎問題:
去 segmentfault 的未回答題目中隨便就能找到一堆這樣的問題,所以很多人顯然并沒有提問的智慧或者沒有很好的態度。Raymond 和 Rick Moen 寫了一份經典的文章 How To Ask Questions The Smart Way專門來描述如何提問,這篇文章被翻譯成各國文字,留傳很廣,可以在這里找到中文版。Stackoverflow 和 Segmentfalut 也給出了關于提問的建議:
Help Center > Asking
How to Ask
How do I ask a good question?
什么樣的問題才是受歡迎的
在 Stackoverflow 可以看到太多經典的問題,我們可以從這些問題中學習如何去提問,如何和答題者溝通。當你看習慣了stackoverflow 上面的問題,提問時就會不自覺去模仿,從而避免問出無腦問題。下面是提問時最需要注意的幾個問題:
問搜索引擎沒有滿意答案(google 起碼過四頁)的問題
問那些自己無法獨立解決,已經做過很多嘗試的問題
盡量清楚地描述問題:良好的排版,代碼,錯誤提示,圖片等
讓你的問題對別人有幫助
問題要有確定的答案,不要有太多的主觀性
不同的方案很多時候我們希望能夠找到一個解決辦法,但是在 stackoverflow 上,經常會有意外的收獲。你可能會看到對一個問題不同的解決方案,甚至包括對這些解決方案的比較。
假設現在你想知道 python 中如何調用外部命令,比如 ls -l 來打印某個目錄下面的文章。Google一下 python call system command,第一條就是stackoverflow 上面的一個相關問題:Calling an external command in Python. (google技術問題,基本都會顯示 stackoverflow 相關問題)。
然后在這個問題下面,有人總結了調用外部命令的幾種方法:
os.system()
os.popen()
subprocess.popen()
subprocess.call()
subprocess.run()
并且還對每個方法做了介紹,你可以選擇適合自己應用場景的方法。再比如這個問題 How to check whether a file exists using Python?,介紹了 python 中檢查文件是否存在的不同方法。
工具的使用有許多強有力的工具可以幫我們更好地研究問題,你可能知道gdb調試工具,可能知道python的timeit時間監控模塊,但是你不知道那些自己不知道的工具。很多時候,當第一次知道某個工具時,我們心中會產生相見恨晚的感覺。然而,心儀的趁手工具總是那么可遇不可求。
在 stackoverflow,每一個問題答案或者評論中都可能會有一些好的工具,你總有機會發現那些遺落在字里行間的優秀工具。
下面列出我發現的一些不錯的工具:
truss/strace:跟蹤進程執行時的系統調用和所接收的信號,strace可以跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間。(來自問題:Why is reading lines from stdin much slower in C++ than Python?)
vprof:一個可視化工具,可以分析 Python 程序的特點,比如運行時間,內存使用等。(來自問題:How can you profile a Python script?)
Regex 101:一款在線的正則表達式輔助工具,可以幫助理解正則表達式的含義,方便調試正則表達式以及做一些簡單的嘗試。(來自問題:Learning Regular Expressions)
下面為 Regex 101 的一個簡單示例:
思考的過程很多時候,遇到一個問題,我們根本無從下手,不知道朝哪個方向思考。但是通過 stackoverflow,我們可以輕易知道具體的解決方案,有時候甚至還能知道別人面對這個問題時候是怎么思考的。
假設你想利用裝飾器來完成一個任務,即在下面say函數返回的字符串前后加上,你想想這樣定義 say。
@makebold @makeitalic def say(): return "Hello"
每次調用 say 返回 Hello。但是要如何實現 makebold 和 makeitalic 呢,這是一個問題。在 stackoverflow 上,有大牛會直接告訴你答案,并扔給你一個裝飾器的文檔鏈接。但是還有大牛會把自己的思考過程,把自己對裝飾器的理解詳細地告訴你,讓你深入去理解裝飾器機制。
針對上面的這個問題,有一個答案獲得了 3000 多贊,一步步告訴大家如何解決問題。首先告訴我們python中函數有什么特點:
函數是對象
函數可以被賦給一個變量
函數可以被定義在另一個函數中
一個函數可以返回另一個函數
可以把函數作為參數傳遞
然后開始解釋什么是裝飾器:其實就是封裝器,可以讓我們在不修改原函數的基礎上,在執行原函數的前后執行別的代碼。接下來手工實現了一個簡單的裝飾器原型,緊接著引入 python 中的裝飾器語法。最后還列出了一些裝飾器的高級用法,包括給裝飾器傳遞參數等。讀完整個答案,一定能對裝飾器有較深的理解,并且知道理解裝飾器的思考過程。這樣,沿著這條思考的路徑,你自己就可以推導出裝飾器的使用方法。
可能的盲區沒有問題要提問時也可以時常逛一逛 stackoverflow,瀏覽一些投票比較多的問題,看看別人的回答。在這個龐大的知識庫中,你很可能會發現自己的一些認知盲區,發現一些自己從未關注過的內容。
我就發現了一些比較有意思的問題,比如:
Print in terminal with colors using Python?
What is a metaclass in Python?
What is your most productive shortcut with Vim?
我整理了一份 Python 的高質量問題清單,放在這里以供時常翻閱。
相見恨晚那么怎么才能找到 stackoverflow 呢,兩個建議:
英語精確描述問題
用 Google 去搜索
只要你不是第一個遇見某個技術問題的人,你基本就會在 stackoverflow 找到相同或者類似的問題。早日遇見,早日喜歡上 stackoverflow,你會發現生活是如此愜意。
博客地址
更多閱讀玩轉 Stack Overflow 之提問篇
7 Strace Examples to Debug the Execution of a Program in Linux
How can I make a chain of function decorators in Python?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38030.html
摘要:一個詭異的結果在前端開發中,我們都少不了用來輸出變量和調試。再看下面一個例子圖中的結果,我是在執行了這句話之后才點擊的小三角,然而結果卻沒有變成詭異結果的樣子。 一個詭異的結果 在前端開發中,我們都少不了用console.log來輸出變量和調試。可是在使用它的過程中,偶爾也會出現一些讓我們很費解的行為,如下圖: showImg(https://segmentfault.com/img/...
摘要:服務層這一層有點東西了,算是整個框架的核心,如果你跟敖丙一樣以后都是從事后端開發的話,我們基本上整個技術生涯,大部分時間都在跟這一層的技術棧打交道了,各種琳瑯滿目的中間件,計算機基礎知識,操作,算法數據結構,架構框架,研發工具等等。 前言 自學/學習路線這樣的一期我想寫很久了,因為一直想寫的...
摘要:同時,前端技術也慢慢的趨于穩固,自成一套體系。從月份開始,微信正式將公測了小程序。基于小程序的開發,也將成為國內的前端的一大重點。 前言 臨近2017的尾聲,總是希望來盤點一下這一年中前端的發展。到目前為止,前端的井噴期也快臨近尾聲了。并不像幾年前一樣,總是會有層出不窮的新東西迸發出來。同時,前端技術也慢慢的趨于穩固,自成一套體系。如果你喜歡我的文章,歡迎評論,歡迎Star~。歡迎關注...
摘要:同時,前端技術也慢慢的趨于穩固,自成一套體系。從月份開始,微信正式將公測了小程序。基于小程序的開發,也將成為國內的前端的一大重點。 前言 臨近2017的尾聲,總是希望來盤點一下這一年中前端的發展。到目前為止,前端的井噴期也快臨近尾聲了。并不像幾年前一樣,總是會有層出不窮的新東西迸發出來。同時,前端技術也慢慢的趨于穩固,自成一套體系。如果你喜歡我的文章,歡迎評論,歡迎Star~。歡迎關注...
閱讀 2973·2021-11-23 10:12
閱讀 2698·2021-11-23 09:51
閱讀 2047·2021-11-15 11:37
閱讀 1383·2019-08-30 15:55
閱讀 1973·2019-08-29 15:40
閱讀 1172·2019-08-28 18:30
閱讀 1655·2019-08-28 18:02
閱讀 2650·2019-08-26 12:00