python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...
在這篇文章里,我會來闡述下為什么我覺得 Python 對于計算機編程入門教學來說是一門很棒的編程語言(對基礎編程課程更多觀點可以查看這篇文章)。這也是從我針對初學者Python 編程教學過程中獲得并總結的一些心得體會。
簡單地說,我有足夠的信心作出這樣一個判斷,那就是對于大部分的編程初學者來說他們并不是很關心計算機科學或編程理論。對他們來說,重要的是如何簡單地通過盡可能少的努力編寫盡可能少的代碼并在計算機上先運行起來。需要
寫的代碼越少,可能出現的錯誤和漏洞也就越少,從而在關鍵的早期學習過程中減少學習障礙。很多初學者會因這種障礙帶來挫折感并喪失信心,甚至會完全放棄編程學習。
Python 在編程入門學習方面優于其他的很多編程語言,因為它可以讓初學者較少地關注諸如類型、編譯器和編寫樣板代碼等細節,把重心放到與實現特定目標相關的算法和數據結構的學習(類似的語言還有Ruby)。下面我會列舉 Python 對于初學者友好的一些特點,這些特點很適合初學者進行編程入門學習。
無需聲明變量類型
當一個初學者剛開始學習類似 C++ 或者 Java 這種靜態類型的編程語言時,通常他/她寫的第一行代碼便是像 int count 或者 List seq 這種變量聲明。這些代碼除了讓你視覺上感覺混亂、模糊真實的執行動作語句之外,沒有別的用處。在初學者通常需要編寫的小規模程序代碼中,這些聲明代碼甚至會達到總代碼量的 1/4 到 1/3 之多。對于經驗豐富的程序員來說聲明變量和類型是必要的也是自然的,但對于尚在努力應對編譯器類型錯誤信息的初學者而言,它們確實很煩人。(在某些靜態類型編程語言中你也可以不必聲明類型,比如 ML 和其他有類型判斷的語言,但是第一次就教學生 ML 語言就像是一上來就要給人家鼻子上狠狠來上一拳一樣。)。
運行期類型錯誤,而不是編譯期類型錯誤
編譯期類型錯誤會給初學者帶來很大困擾。至少讓代碼先跑起來,執行一些操作,這比連編譯都通過不了,根本運行不起來要強很多。雖然在以產品質量為目標的代碼規范中,嚴格的類型檢查是非常重要的,因為這樣可以減少因為運行期類型錯誤而導致的問題。但是對于初學者而言,他們并不會去寫核反應堆代碼,他們寫的只是一二十行玩具操控的代碼。至少讓他們的程序先運行起來,讓他們在運行期知道哪一行代碼出了問題。有時候在發生這樣的錯誤之前程序已然運行很深,運行期錯誤處理可以讓初學者對代碼錯誤有更直觀的認識。
對于一個學習編程的新手來說,只是希望他的代碼能夠運行并做點什么(即使代碼并不完美),這時候最打擊士氣的莫過于一個叫做「編譯器」的神秘暴君拒絕將他的代碼變成可執行程序。理想狀態下,學生越頻繁地運行他們的代碼,縮短編程期間編輯調試的迭代周期增加迭代次數,編程學習的動力就越大。
(布魯斯·埃凱爾在 強類型與強測試 文章中討論了動態類型語言在生成高質量代碼方面的優勢,即便對于資深程序員來說也是如此。)
print 語句是多態的,會自動插入空格與換行
新手會在程序輸出與調試代碼中大量使用 print 語句(畢竟就讓他們使用 Python 的調試器會有點困難)。不像 C 語言風格中晦澀的 printf 的語法,Python的 print 可以正確地打印出所有類型的變量,而無需考慮是基礎變量還是復合變量。相比于下面的古怪的代碼:
printf("%s lives at %d %s\n",
person, street_number, street_name);
學生可以寫出如下更容易理解的清晰代碼:
print person, "lives at", street_number, street_name
上面的 Python print 語句實際上所有人都容易理解,就是要打印出一行像「約翰·多伊住在榆樹街 135 號」這樣的信息;而 C printf 的版本只適合 C 程序員閱讀。
字符串、列表、字典內置,且語法統一
即使作為初級程序員,也可以很容易的通過使用字符串(存儲文本數據)、列表(存儲序列數據)、字典(存儲關聯數據)寫出很棒的代碼。Python 通過統一的操作語法讓這三個基礎的數據結構變得極其容易操作, 比如:使用 [...] 進行元素訪問,使用 for ... in ... 來循環迭代,使用 if ... in ... 來做成員測試。
動態類型可以很容易的避免列表、字典笨拙的長類型聲明。比如避免某些晦澀的 Map> 聲明, 而使用簡單的初始化像 x = [1, 2, 3] 就可以簡單賦值。例如你想創建一個 key 為字符串類型,value 為數值類型的字典,只需要把對應的內容扔進去就好,而不需要做任何冗長的聲明:
d = {}
d["my bowling scores"] = [120, 140, 165]
而要實現相同的初始化功能,Java 1.5 的代碼卻是這樣的:
Map> d = new HashMap>();
List lst = new LinkedList();
lst.add(120);
lst.add(140);
lst.add(165);
d.put("my bowling scores", lst);
我對 Java 沒有意見(雖然可憐的 Java 總會收到抨擊),但看看這一堆冗長的代碼。為了將把相似的數據填到字典中,顯然至少需要多次的重復代碼輸入。
是的,我知道,對于一個從事大型軟件工作的經驗豐富的程序員來說,多輸入幾行代碼無關緊要。但對于初學者呢?哪個版本的代碼更容易被理解!我無法想象怎樣向一個初學者解釋這段 Java 代碼。對于初學者,他們并不需要關心類型聲明,Java 泛型,參數多態機制或任何其他奇怪的編程語言術語,他們需要的只是希望用盡可能少的代碼去實現自己預期的想法而已。
漂亮、干凈的編程語法,簡潔而準確;不會因為簡潔而造成混淆
毫無疑問 Python 代碼看起來優雅、干凈、容易書寫,并且易讀、易理解。但同時,Python 也不會因為這種簡潔造成混淆,出現像 Perl 代碼經常會出現的情況。它在簡潔和清楚準確兩個層面上做到了很好的平衡。
最初 Python 吸引我的地方是我發現寫 Python 代碼很有趣,因為它看起來很美觀。雖然這聽起來有一點老套,但是看 Python 代碼時喚起的愉快的發自內心的情感可以提高程序員的工作效率,讓他/她覺得代碼更整潔,更容易理解。如果你需要每天長時間盯著代碼好幾個小時,那么它越看起來越優雅就越好(世界上大部分事情都是如此),并且這一點很重要。
交互式命令提示符,和無需重啟會話即可動態重新加載模塊的能力
無論何時一個編程語言初學者有關于一個函數或者語言特色是如何工作的問題時,最好是使用科學的方法來進行回答,那就是先去試試看看發生了什么,然后再去改善,潤色自己的理解,再去重新實驗。最佳實踐就是通過交互式命令提示,因為不需要保存源文件,重新編譯它,重新編輯來消除你剛剛修改的代碼中愚蠢的類型錯誤,重新編譯,然后重新執行。通過使用 Python,你可以在交互式提示中創建數據結構,并實時測試它們。
更好的是,當你想去測試寫在源文件( Python 中稱之為模塊)的函數,你可以使用 reload 函數來重新加載你的改動而無需退出交互式環境。這對于在運行試驗模塊前需要做很多準備工作的場景十分的有幫助。一個快速的編輯調試周期會使初學者受益頗多,因為這會讓他們感覺測試起代碼來更自由,代價更低。實驗的越多,理解的越深,越有學下去的動力。
返回新值,而不是改變現有對象的操作
Python 標準庫的許多操作都是以函數式風格編寫的,這意味著這些操作會返回新值而不是修改原來的對象。在教授編程初學者使用 Python 的交互式命令提示符時,我發現這個函數特點非常有用,因為它允許人們在不改變原對象的情況下繼續對同一對象進行重復實驗。
例如,當我教授學生關于字符串切片的內容(目標是去除字符串兩邊的雙引號)時,我創建了一個值為 Weight in kilograms 的 x 字符串類型變量,為了演示字符串切片的語法,我讓他們嘗試用不同的索引切片,以便自己查看結果:
>>> print x
"Weight in kilograms"
>>> print x[1:]
Weight in kilograms"
>>> print x[2:]
eight in kilograms"
>>> print x[3:]
ight in kilograms"
>>> print x[:-1]
"Weight in kilograms
>>> print x[:-2]
"Weight in kilogram
>>> print x[:-3]
"Weight in kilogra
>>> print x[1:-1]
Weight in kilograms
最后一行代碼實現了去除首部和尾部雙引號的需求,因為切片操作每次返回的都是新值,而原始的字符串并沒有被改變,所以可以被無限次操作而不受影響。試想如果不是這樣,測試切片操作時每次都需要重新修改原始字符串的內容,這會是多么的不方便。
對初學者來說最佳實踐就是去不斷的實驗練習,而函數式風格對此有很大的促進作用。
全面的標準庫,以及大量可用的免費第三方庫
大多數的介紹性編程課程都會讓初學者編寫一些數學相關的程序,如計算菲波那切數列或者求素數,寫一個四則運算計算器,求一個集合的平均數,因為這些都很容易實現而且不需要外部依賴(畢竟,數學運算符在大多數編程語言中是原始運算,因為它們在大多數機器語言中都是原始運算)。
我個人認為如果學生腦海里有現實生活中應用的需求,那么編程將變得更加有趣。例如 用腳本管理自己的電子照片,給他們喜歡的聊天客戶端寫拓展,互聯網圖片爬蟲等。這些應用會使用到大量的庫,幸運的是,Python 中有很多這樣的庫。沒有這些庫的幫助,學生永遠也不能跳出編寫玩具程序的范疇,更別提去創造能激勵他們進一步學習的有用的軟件了。
合適程度的運算符重載
運算符重載可以讓代碼看起來更簡潔易讀,但是濫用也會使代碼變得一團糟。對一個編程語言來說允許運算符重載的程度(以及標準庫中哪些運算符實際重載),就決定了代碼的可讀性。一種極端是,在 C 和 Java 中,幾乎沒有操作符被重載。所以為了實現大部分的操作會調用繁多的函數/方法。另一種極端是,Perl 中大部分操作符都被重載了,在不同的上下文中有不同的含義,這同樣使得代碼看起來一團糟。我個人覺得 Python 在運算符重載方面取得了一個很好的平衡,比如 + 和 [] 。
舉例來講,+ 操作符是演示優雅的運算符重載的絕佳例子:數值加法,字符串,列表和元組的拼接等。如果你問初學者他們期望 + 為上述類型做什么,他們很容易猜出正確的功能。另一方面,如果你問初學者他們期望 + 對兩個字典做些什么,他們就會感到困惑了,因為現實中沒有特別直觀的對兩個字典進行合并的場景。或許你能將兩個字典合并成一個更大的字典,但是當兩個字點都包含某幾個 key 時,保留哪一個呢?字典中 + 缺乏明確的含義,這可能是為什么它在這種類型上不會過載的原因。
總結
以上是生活随笔為你收集整理的python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外地兵源地在本地当兵后间隔1年以后工作算
- 下一篇: 23年北京军队文职体检地点在报考单位所在