1. Python筆記 - Python介紹+資料型態

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 留言