天天看點

學習 Python 程式設計的三種困境

閱讀本文大概需要 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 程式設計中碰到的問題,如果是初階的同學,應該會感同身受,歡迎也留言說說你曾經碰到的那些坑,如果是高階的同學,可以留言說下自己的學習經驗,讓我們也學習下。