閱讀本文大概需要 5 分鐘。
之前我寫過兩篇關于測試人員要不要學程式設計的文章,有很多朋友留言給我說,我也很想學呀,可是我辦不到呀。
前兩篇文章連結如下,沒看過的可以盡快回顧下:
《做軟體測試到底要不要學程式設計?》
《技術導向下的業務測試何去何從?》
我了解辦不到的原因,因為我全部都親身感受過,現在我把最突出的幾個困境彙總了一下,我們來分别聊一聊。
困境一:一學就會,一寫就懵。
學過 Python 的同學,肯定都學習過清單、元組,如果是通過菜鳥教程學習的話,肯定都學習過清單和元組的通路、修改和删除操作。
不知道有多少人還記得第一次看這部分内容的感覺,反正我的感覺是「很簡單嘛,和想象中差不多」,那幾個操作已經很熟悉了。
有一次我在處理一個字元串拼接,我是用的元組,然後我 append 半天,總是報錯,我記得很清楚呀,我學習的時候明明是有這個方法的呀,為毛就是不行呢?
等我回去仔細一看,嘿,append 竟然是清單的方法,這知識點簡單麼?忒簡單了,可以信手拈來麼?不行。
舉例這個已經是最簡單的部分了,類似的我還在多個元素拼接上吭哧過半天,才發現元組必須和元組類型進行拼接,不然也是報錯。
如果需要兩個元組拼接後不是合成一個元組,而是形成一個新的複合型元組,那就更要糾結一會了。
看完我上面說的是不是覺得很簡單,請動手寫一寫,或者回憶下自己當初是怎麼解決這些問題的。
古人雲「看書如流水,編碼如便秘」,甚是。
建議解決方案:多動手實操練習,真的能熟能生巧噢。
困境二:原樣照抄我會,稍加變通就懵。
我之前很多的腳本都是 python2.6 寫的,因為 py2 已經不更新了,是以我正嘗試逐漸改為 py3。
有一次我拿一個簡單的腳本試試效果,腳本功能很簡單,就是把一個 PE 檔案内容使用文本方式讀取出來,然後暴力搜尋其中是否存在某指定字元串,并得出搜尋結果。
py2 讀取檔案内容的寫法是:
def test_readfile2(filepath):
"""讀取檔案内容
Args:
filepath:目标檔案全路徑
Returns:
context:讀取到的檔案内容
"""
with open(filepath, 'r') as obj:
context = obj.read()
return context
複制
同樣的寫法,在 py3 中執行會報錯:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x90 in position 2: illegal multibyte sequence
複制
根據之前弱弱的經驗,一看也知道是編碼的問題,但是我反複的 encode 或者 decode,都是無濟于事。
明明知道是很簡單的問題,但就是搞不定,那種無奈,實在是很無奈。
一次偶然的機會,終于知道了解法,方法果然很簡單:
def test_readfile3(filepath):
"""讀取檔案内容
Args:
filepath:目标檔案全路徑
Returns:
context:讀取到的檔案内容
"""
with open(filepath, 'r', errors='ignore') as obj:
context = obj.read()
return context
複制
僅僅是加了一個參數 errors,一切都搞定了,是不是有種豁然開朗的感覺。
建議解決方案:隻有自己親自踩過的坑才是真的坑,一定要多動手實操練習,了解每一種變通的可能。
困境三:基本用法會,稍微進階就懵。
用 Python 寫 GUI 的同學,應該有部分是使用的 wxPython 這個庫,反正我是用的這個。
如果隻是寫個主界面,大家都會定義一個主視窗類,比如 MainClass 之類的,其他控件也可以按教程一步步操作實作。
有次我需要在主界面之外加一個設定視窗,同時設定項更新後,主界面要立刻響應。
這個響應函數我是寫到主視窗的類裡面的,搞了半天,我就是不知道怎麼在子視窗類中調用父視窗類裡面的方法,網上也搜了很久,就是沒找到有類似的問題以及解決方案。
明明知道是很簡單的問題,但就是搞不定,那種無奈,實在是很無奈。
後來仔細看了網上的一些實作的例子,發現可以在父視窗類中把 self 作為參數傳遞給子視窗,子視窗再通過這個 self 來進行父視窗類中方法的調用,完美解決。
同樣的回過頭看看解決方法,真的是很簡單,而且也确實給人豁然開朗的感覺,但這又明明就是一個稍微進階了一下的基本用法而已。
不動手時不知道自己有多弱,上手後才追悔莫及。
建議解決方案:多動手實操練習,每一個遇到的問題,都是自我進階的階梯。
以上,我通過三個簡單的例子,說明了自己在學習 Python 程式設計中碰到的問題,如果是初階的同學,應該會感同身受,歡迎也留言說說你曾經碰到的那些坑,如果是高階的同學,可以留言說下自己的學習經驗,讓我們也學習下。