Python數據類型、運算符、變數
版權說明
無特別說明情況下,圖文均原創(題圖: Pexels)
歡迎轉發
這是我面向小白寫的 Python 編程教程的第四篇。拿勺子同學當小白鼠講過一遍後,就把修改完的講義發到?影子練習SinanTalk?上來啦。
從這一節開始,我們將進入正式的 Python 學習。絕大多數網上編程教程都直接從這一節的內容開始,我之所以選擇在前面鋪墊那麼久,一是遵循人腦的自然學習規律——在猛扎進細節中前先建立對大畫面的認知理解;二是作為走過這條自學路的人,我會希望當初的自己也得到過這樣的指點。
在具體內容前,重複兩條很多人都說過的學習編程最好的方式:
跟著教程或源碼敲代碼,出錯了可以立即得到反饋,甚至應該故意實驗一些可能出錯的指令,可以獲得最佳編程學習效果。學習時故意出些錯總比未來在一堆代碼里無意中埋下 bug 好久解決不掉要好得多。
關鍵概念記英文原版。中文只是翻譯參考。
程序是什麼
在上一節《工程師的腦子和普通人不一樣》中,我曾把程序員比做寫菜譜的人,計算機只是個規規矩矩炒菜的,一個程序就像一份菜譜,演算法其實就是那份菜譜里描述做菜的步驟……還可以再學一個更專業抽象的說法:程序即為執行一次計算的一系列指令。
Program:a sequence of instructionsthat specifies how to perform a computation.
這裡的指令指的是什麼呢?
用任一程序語言寫的任一程序,都完全可以只由以下五種指令組成:
輸入 input
輸出 output
數學計算 math
條件控制 conditional execution
重複 repetition
只要掌握這五類指令,就可以寫出任何程序——其實很好理解,雖然菜的品類無數,但並不存在煎炸烤炒燉煮拌不能搞定的菜(有這樣還搞不定的菜嗎?)
值與類型
Value值
值即為在編程中所用數據的基本單位。主要包括兩大類:數字 (number)與字元串 (string)。
數字進一步可以分為3種類型(還有一類複數,但很少用到,此處不提):
整型(integer),即整數,如 4, 7, 101
浮點型(floating point),即帶小數點的數字,如 2.5, 5.0, 3.14
布爾值(boolean),說是數字其實更像邏輯數據類型,只包括True/False兩個值(書寫固定,開頭大寫);但可以和其他數字一起進行數學運算,此時 True = 1, False = 0.
字元串是一串由引號(單引號或雙引號皆可,但同一對引號需統一單雙)圍起的字元,如,,。注意,a. 當數字加上引號時就成字元串了,不再具備數字值的特性了(比如可以進行數學運算);b. 引號內可加空格可加標點,都可以構成字元串的一部分。
Type類型
類型是值的分類(理解成值的屬性也行)。我們在上面已經看到 Python 幾大基本類型的一部分了:整型、浮點型、布爾值與字元串。想要知道某個值或變數(下面會講到)的類型,可以用內置函數來問 Python:
在後面幾節我們還會接著學習列表 (list)、元組 (tuple)、字典 (dictionary)、集合 (set) 等更多類型。
運算符
Python 中的運算符 (operator) 主要用在數學運算上,和通用的算術運算符號大體相同。被運算符連接的值可稱為運算數 (operand)。
在這兒通過交互模式來看一下用法:
除了用在數字上,有兩個運算符還可以用在字元串上:,. 猜一猜加號和乘號會在字元串上產生什麼效果呢?
通過將多個字元串順序連接起來的操作被稱為字串串接(string concatenation),非常常用;通過把一個字元串複製多次的操作倒沒什麼專用說法 (可以稱為 string multiplication),用的不多,不過需要注意字元串只能與整型相乘,字元串之間不能相乘。
像這樣,一個運算符可以同時用於一個以上數據類型 (type) 的現象被稱為重載(overloading)。比如,可以同時用在數字和字元串上。並不是所有編程語言都支持運算符的重載。除了運算符,之後我們還會接觸到函數重載 (function overloading)。
至於有多個運算符同時存在時該遵從什麼運算順序的問題,和數學計算相同。不確定的時候就用括弧明確優先順序即可。
變數
光有值還不夠用,我們還需要變數(variable)。變數自身不能單獨存在。變數用來存儲、命名值,是其代表的一個值的名字。當我們給變數賦值時,會用到賦值語句(assignment statement):
關於 Python 中變數與值的關係,我沒見過比 David Goodger 講得更好的了,此處就借用下他的例子和插圖吧。
Python 中的變數就像是其綁定的值的姓名標籤。如,當給變數 a 賦值 1 時,,1 這個整數就綁了 a 的標籤, 並且 1 會在內存里佔一個位置:
當你重新給 a 賦新值 2 時,,就等於把這個標籤移到 2 身上了,2 此時也會在內存里佔一個位置:
此時你無法再通過 a 來找到 1 了。如果 1 沒有綁定任何其他標籤(變數)的話,那 1 就不會再在內存里佔位置了。
如果你創建一個新變數 b,並用 a 來給 b 賦值,其實等同於在 2 身上綁了兩個姓名標籤,通過 a 或 b 都可以找到 2:
並不是所有編程語言里的變數都是值的「姓名標籤」。
變數的命名
Python 變數命名的規則不複雜,可以是:
字母組合,如 a, foo, val, counter
字母與數字組合,如 dict1, list2
可以加下劃線,如 is_even, max_val2
但不能以數字開頭
習慣性以小寫字母命名
不可以用 Python 保留字/關鍵字 (keywords) 來命名變數
Python 保留字/關鍵字都有哪些呢?可以在交互模式下輸入:
當你在文本編輯器或 IDE 中編程時,Python 保留字會自動呈現不同的顏色,所以一開始也不用背保留字列表。每個保留字都非常常用,之後很快會在實踐中熟悉。
雖然變數命名並不複雜,但這不僅關係到 style,還關係到代碼的易讀性,因此最好起個易懂易記易區分並符合邏輯的名字,比如,我給字元串起名的話,明顯比要合理得多。
表達式與語句
Python 表達式 (expression) 是值、變數與運算符的組合。一個值或變數本身也可以構成一個表達式。
Expressions: a combination of values, variables and operators.
剛開始接觸 Python 編程的新手可能都遇到過這個困惑,為什麼有些代碼可以在互動式編程 (interactive programming) 模式下直接返回結果,但腳本式編程 (script programming) 時就不會返回結果呢?這其實是 Python 表達式在解釋器 (interpreter) 中的不同行為。當你在解釋器的提示符 (prompt) ——就是尖箭頭——處輸入一個表達式時,解釋器會在回車後求得表達式的值並返回,如:
在腳本模式下運行,雖然解釋器也會對表達式求值 (evaluate),但並不會返回結果。
在上面幾個簡單例子中,唯一沒有即時返回結果的就是,因為這並非表達式,而是一個 Python 語句。
Python 語句 (statement) 是一組有效力的代碼塊。
Statement: a unit of code that has an effect.
目前為止我們已經遇到過的語句有:
賦值語句 (assignment statement):創建新變數並賦予一個值。
輸出語句 (print statement):輸出一個值。
解釋器不會對語句求值,而是直接執行 (executes) 一個指令。
今後我們還會接觸更多 Python 語句。
第4節 作業
閱讀 Think Python (2nd edition) 第1 & 2章,並完成每章正文後練習。
Think Python: How to Think Like a Computer Scientist是小白學習 Python 的最佳入門書(不是我評價的,而是超多大佬推薦),第2版面向 Python3。英文原版並不難懂。需要Think Python原版教材的讀者可以加本文作者個人微信(LynnTang_),付費取書「小白」。
第4節 小結
我們在這一節進入 Python 編程知識的正題,先介紹了一些基本的編程概念:值與類型、運算符、變數、表達式與語句。雖然已經能寫簡單的賦值語句和輸出語句,進行數學運算了,但還不會用 Python 來表達更複雜的程序邏輯,下節課我們將開始學習條件控制和更多編程基礎概念。
※3 個月如何從小白到 Python 高手?捷徑在這裡
※Python編程基礎如何快速入門?「附電子書下載」
TAG:Python |