Python簡介
- Python是膠水語言,也就是通常會跟隨著另一個比較低階的語言出現
- 而Python主要底層就是用C寫的,如果要自己擴展新的功能,大部分也是用C擴展
- 它的整體架構跟Java很像,後面有一個Python的VM
- 所有Python程式碼都要轉換成接近機器語言的格式才能執行,有點像是編譯的過程
- 通常Script語言都拿來做系統管理比較多,但是Python的架構又比Shell Script大,所以Python也有GUI, Net, Web的功能
- 簡單而言
- Java能做的Python也都可以做,只是兩個語言的理念不太一樣
- Java希望它的JDK能夠涵蓋所有開發者的需求
- Python則常使用第三方的模組來作開發
- 至於執行檔
- 有套件可以轉換成exe檔
- 原理是把整包Python執行環境打包進去
- 不強制使用者一定要安裝Python解譯器
- James Cheng
- 它的定位其實跟Java差不多,只是Java都要經過編譯的手續才能執行
- 開發速度Python還是快一點點
- 好處就是可攜,只要有Python的地方,程式碼都可以執行
- Python設計格言「There is only one way to do it」,代表達成目的盡可能只用一個方法,以達簡單之目的。
Python 入門指南 - 認識 Python 語言
- Python 是物件導向程式語言 (object-oriented programming language)
- Object 為 Python 中最基本的物件,其實 Python 中所有東西都是物件,用雙引號的String也是物件的一種
- 屬於直譯 (interpret) 式的程式語言 (programming language),因此無須編譯 (compile)
- 直譯代表程式會逐行被執行,如果程式中有語法錯誤 (syntax error),直譯器 (interpreter) 就會暫停執行
- Python也提供互動介面(Command Line),可以當做簡單計算機,測試某段小程式
Python 入門指南 - 資料型態與變數
- 與一般程式相同,但是代表bool的值多了 None,其意義代表null的情況
- 陣列分成三種
- 陣列用[1,2]宣告,裡面的值可以改變
- 序列用(1,2) 宣告,值不可改變
- 字典(dictionary),以key-value的方式儲存
b = [1, 2.0, "3", [4], (5)] #陣列
b = (1, 2.0, "3", [4], (5)) #序列
b = {1:2.0, "3":[4]} #字典
Python 入門指南 - 變數命名規則與縮排
- Python撰寫時不能任意縮排,縮排在python是切割程式區塊(block)
- 縮排通常用於控制結構(for if….)、函式與類別中
Python 入門指南 - 運算式與陳述
- Python用的and、or和not,是直接使用英文做為運算元,而非&、| or !等符號。
a = True
b = False
c = a and b # c 會等於 False
d = a or b # d 會等於 True
e = not b # e 會等於 True
Python 入門指南 - 迴圈
- 迴圈或其它需要 {} 的部份,在Python只用縮排來代表
- For迴圈語法較特別,語法如下
for i in range(10, 0, -1):
- For與in連用,in要接多個元素的物件(陣列),例如用range()來產生一個依序的range物件
- Range(10,0,-1)代表,產生一陣列從10~0 每一次遞減1
Python 入門指南 – 函式
- Python的函式關建字是def,後面接函式名稱與傳入參數,沒有太大變化
- 差別是不用定義回傳資料的型態
def big(a, b):
- 字串的比較,是從第一個字姆開始比較大小
Python 入門指南 – 類別
class Demo:
def setAtt(self, a = 22, b = 33):
self.a = a
self.b = b
def do_something(self):
return self.a + self.b
- Self是python類別中預設的參數,代表物件的實體,類似java的this
Python 入門指南 – 注意事項
- 記得每個區段(原本用{}的部份),都改用tab來做區隔,不能用空白取代(會 error)
- 要讓print 輸出時不換行 要改成 print(“xxx” , end=’’)
- 透過chr(i)可把數字轉成字元(ASCII),轉回來用ord(i)
- 字元的串接,”abc”.join(x),此用法會把x插入在abc中間,型成axbxc,若要把陣列直接轉成str,可以用 “”.join(array),前面的””不放資料即可
Python軟體開發 – 串列
- B = [ 1,2.0,”3”,[4],(5)]
|
操作 |
說明 |
|
d[i] = x |
將索引值 i 的元素設定為 x |
|
d[i:j] = t |
將索引值 i 到 j 的元素設定為 t |
|
del d[i:j] |
刪除索引值 i 到 j 的元素 |
|
x in d |
判斷 x 是否為 d 的元素 |
|
x not in d |
判斷 x 是否非為 d 的元素 |
|
d + e |
合併 d 與 e 兩個串列 |
|
d * 5 |
將 d 中所有元素複製為 5 倍 |
- 詳見範例:array.py
Python軟體開發 – import
- 亂數產生密碼表
- 將pythom提供的模組用import匯進來,例如random,就用 import random
import random;
code = [chr(i) for i in range(97,123)]
random.shuffle(code);
print("".join(code));
- 若將Class這些定義和測試的程式寫在一起,除了不好閱讀外,被其它程式import時,會優先執行沒有縮排的code。也就是說,測試程式會先被執行。
- 為了避免此問題,可以將程式寫在if __name__ == '__main__': 的地方。
Python軟體開發 – if __name__ == '__main__':
- 我們將一開始寫的Encrypt的class分開,變成兩個檔案,Encrypt.py和main.py
- 在main.py可以用import Encrypt方式拉進來,但原本寫在Encrypt.py的測試程式也會被執行
- 為了讓測試程式也能存在,可將測試程式移到if __name__ == '__main__': 當中
- 範例請見example(encrypt)
Python軟體開發 – __init__()
- 相當於java class的建構子,寫在class裡面,當class被建立後就會被執行
- list(),其功用是將原為string的資料,將每個字元切開轉成array
- __str__函式建於class中,其中用是當print class時,會以__str__的內容為主
認識標準模組庫及 Tk
- 另外像預設的浮點數會有誤差,這時使用 decimal 就可以避免誤差的產生,例如
from decimal import *
print()
print(round(0.7 * 1.05, 2))
print(round(Decimal("0.7") * Decimal("1.05"), 2))
print()
print(1.00 % 0.10)
print(Decimal("1.00") % Decimal("0.10"))
print()
print(1 / 7)
print(Decimal("1") / Decimal("7"))
print()
