1. Python筆記 - Python介紹+資料型態
(以下為之前在台大程式語言訓練班上課時的心得筆記.)
0-1: 在安裝好 Python 以後, 開始來介紹怎麼使用Python, 如果你有學過其他程式語言, Python和其他程式語言比較不同的地方在結構上比較不嚴謹:1. 使用: (colon 冒號)作為敘述的開始
2. 不必使用 ; (semicolon 分號) 來當作結尾
3. 註解使用 #.
4. 使用tab縮排.
0-2: IDLE 環境
Alt + P 上一個指令
Alt + N 下一個指令
Tab 補完指令
因Python Shell只能執行單行的程式, 建議另開視窗來寫. 如果不習慣Pyahon Shell的介面, 也可以使用 UltraEdit 或 Sublime Text 等軟體來編程, 只要附檔名存成 .py 即可.
另外一個集成軟體 Anaconda, 下載後使用Jupyter NoteBook 或是 IPython來撰寫程式, 也是相當方便的, 特別是在Data Science領域.
最後提供一個超好用的 Python 線上編譯網站 Visualize Python online compiler
這網站可以視覺化的執行程式, 對於 debug 相當有幫助!
1-1: 變數命名
Python變數開頭為大/小寫英文字母或是_, 之後則可以混用字母, 數字, 和_, 但不能使用保留字.
下列為錯誤的變數名稱.
Ex: num-PI
Ex: num, exp
del 指令可用來刪除變數.
1-2: Reserved word: 顧名思義, 保留字是留給Python自己用的, 不能拿來當作識別字(ex: 變數名稱).
1-3: 深入探討變數
在Python的世界裡, 變數名稱就像是門牌, 指示指向記憶體位址的一個標籤. 變數的type(型態)就像住家有house, apartment, studio等不同的型式; 變數的Value(值)可以理解為住家裡住了多少人; 而理所當然的不同的型式的住宅, 可以住的人數當然也是不一樣的.
和其他程式語言不同的是Python的變數型態可以不一開始就宣告, 並且之後可以改變, 相當的彈性.
再來談到 object (物件), 對於 Python 來說, 任何東西都是object, 凡是物件都有 id / type / value 三項元素. 變數名稱, 也就是門牌, 則是用來指向對應的id. 進一步的探討變數名稱/id/value之間的關係如下:
使用 == 來檢驗兩物件的 value 是否相等(指向對象的值是否相等); 使用 is 來檢驗兩物件的 id 是否一樣(指向同一對象).
如下圖的另外一個例子, 儘管 a 和 b 的直看似都是10, 但是他們的 value 和 id 都是不一樣的, 因為一個是 integer 10, 另外一個是 string 10; 型態不同.
但是如同上面所提到的, 變數的型態是可以改變的, 所以當 a 的值被賦予成和 b 相同時, a 和 b 的 id 及 value 就會一樣了.
相信上述的說明, 可以讓你更了解 id / type / value 三者間的關係.
1-4: 接下來要介紹的是 data type (資料型態). 下列為 Python 的 Data type.
從上表可以清楚的知道, Python的資料結構分成數值型(numeric)和序列型(sequence).
數值型包含整數, 浮點數, 及複數. 其中除了一般常用的數學運算 + (加), - (減), * (乘), / (除) 外, 還有需要特別說明的 次方 ** (如2的3次方, 為2**3 = 8) 及 整商除法 // (如 14//3 = 4 ).
序列型的資料, 我們注重的是該型態是否有序? 像str為有序函數, 宣告可使用單引號('字串變數'), 雙引號("字串變數"), 三引號, 但是前後需一致.
mutable/immutable是指變數被賦值以後, 可不可以改變. 先以int來說明, 如下圖, a被賦予值 = 1, 對應到內存的一個位置; 接著改變 a的賦值, 這時 a是被指向另外一個位置, 而不是原本的位置改變數值(可以看到id改變), 所以整數型態的變數, 在內存的值是不可改變的.
再以list來說明, 定義 list b後, 如果改變 b的值, 可以看到, 變數名稱還是指向同一個位置, 但是那個位置的值被改變了. 所以list是一個(內存值)可變的變數型態. python可變的變數型態總共有3種, 為 bytearry, list, set.
序列型資料可進行的運算如下:
Ref: https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
1-5-1. list (串列)
形式: [20, 3.14, "三角形", 4+2j, [1,2,3]]
說明: list使用[ ]; 括號裡面除了可以放各種不同型態的資料, 也可以放list; 資料的取出靠索引值, 也因此資料儲存為有序的.
函數:
Ref: https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
1-5-2. tuple (序對)
形式: (20, 3.14, "三角形", 4+2j, [1,2,3], (4,5,6), 6+9j)
說明: tuple使用( ); 括號裡面除了可以放各種不同型態的資料, 也可以放tuple; 資料的取出靠索引值, 也因此資料儲存為有序的. 與 list 最大的不同在於 tuple 是 唯獨且不可更變 的資料結構.
1-5-3-1. set (集合)
形式: {4, 5, 6, 7, 8}
說明: set使用{ }; 括號裡面不可以放的型態為 list, 但可以放tuple; set的資料儲存為無序的且不重複, 重複資料視為同一筆資料.
由下圖知, set1 重複的元素會被忽略, 並且 set 並沒有前後順序的分別. 儘管 set1 和 set2 的元素值一樣(==), 但是兩者占用的記憶體位置(id)是不一樣的.
set支援的運算:
函數:
Ref: https://docs.python.org/2/library/sets.html
1-5-3-2. frozenset (原封集合)
形式: {4, 5, 6, 7, 8}
說明: frozenset使用{ }; 建立後不可進行任何變更.
1-5-4. dict (字典)
形式: {"a":100, "b":3.14, "c":"多邊形", "d":3+9j, "e":[1,2,3,4]}
說明: dict使用{ }; 括號裡面可以放多種型態的資料; dict的型態為無序的, 使用key來檢索, key須為不可變的資料型態(ex:int, str).
dict支援的運算:
函數:
1-6: 型態轉換
資料型態轉換是未來常常會遇到的問題, 一般如果要使用資料型態轉換, 可以使用下列的函數:
1-7: 比較運算子 及 Boolean 運算
Boolean運算有三種 or(聯集), and(交集), not(否運算).
Version 1.0 @ 12/17/17
0 留言