[筆記] Python 基礎
語言特性與熱門應用
- Python 是泛用的程式語言,強調易學好懂
- 最近常用在數據分析、人工智慧
安裝
下載地址 : Python
資料與運算
1. 變數與資料型態
- 數字 :
3.5
- 字串 :
"hello"
- 布林值 :
True
、False
( python 的 T 跟 F 為大寫 )
- 可變列表 ( List ) :
[3,4,5]
、["hello","world"]
- 固定列表 ( Tuple ) :
(3,4,5)
、("hello","world")
- 集合 :
{3,4,5}
、{"hello","world"}
- 字典 :
{"apple":"蘋果","data":"資料"}
- 變數 :
data=3
data 為變數,不用宣告
2. 運算
數字
7//6
: 整數除法
2**3
: 2 的 3 次方
字串
有序列表 ( List、Tuple )
List,假設 grades = [12,60,15,70,90]
grades[1:4] = []
輸出為 [12,90]
: 連續刪除列表中編號 1 到 4 ( 不包含 )
grades = grades + [12,33]
輸出為 [12,60,15,70,90,12,33]
Tuple : 除了更動會出錯,其他都跟 List 一樣
集合與字典
集合,假設 s1 = {3,4,5}
s2 = {4,5,6,7}
10 in s1
輸出為 False
,10 not in s1
輸出為 True
&
: 交集,|
: 聯集,-
: 差集,^
: 反交集
s = set("hello")
s 輸出為 {'l','h','e','o'}
: 把字串拆解為集合
字典,假設 dic = {"apple":"蘋果","bug":"蟲蟲"}
test in dic
輸出為 False
,test not in dic
輸出為 True
del dic["apple"]
: 刪除字典中的鍵值對
dic = {x:x*2 for x in [3,4,5]}
dic 輸出為 {3:6,4:8,5:10}
: 從列表資料產生字典
流程控制
- 在 python
{}
用縮排 ( tab ) 取代
1. 判斷式
1 2 3 4 5 6
| if True: print("True 執行") elif False: print("False 執行") else: print("跑不到")
|
python 目前不支援 switch
2. 迴圈
- while
1 2 3 4
| n = 1 while n<10: printf(n) n+=1
|
for
迴圈最後可加 else:
,else 在迴圈結束前執行,被 break 強制結束就不會執行 else
函式、模組與封包
函式 : 用來做程式的包裝,同樣邏輯可以重複利用
1 2 3 4 5 6 7
| def add(n1 = 1,n2 = 2): result = n1 + n2 return result
print(add(3, 4)) print(add()) print(add(n2 = 3,n1 = 4))
|
1 2 3 4 5 6 7 8
| def avg(*ns): sum = 0 for n in ns: sum += n print(sum/len(ns))
avg(3, 4) avg(3, 5, 10)
|
模組 : 將程式寫在一個檔案中,此檔案可重複載入使用
- 載入
- 使用
1 2 3
| print(system.platform) print(system.maxsize) print(system.path)
|
- 內建模組與自訂模組
1 2 3 4
| import sys sys.path.append("modules") import geometry print(geometry.distance(1, 1, 5, 5))
|
1 2 3 4
| def distance(x1, y1, x2, y2): return ((x2 - x1)**2 + (y2 - y1)**2)**0.5 def slope(x1, y1, x2, y2): return (y2 - y1)/(x2 - x1)
|
封包 : 用來整理、分類模組
建立封包
檔案配置 :
專案資料夾
主程式.py
封包資料夾
__init__.py
: 必要
模組一.py
模組二.py
使用封包
1
| import 封包名稱.模組名稱 as 模組別名
|
類別與實體物件
類別
定義類別
1 2 3
| class 類別名稱: 定義封裝的變數 定義封裝的函式
|
使用類別
實體物件
- 建立實體物件
1 2 3 4 5
| class 類別名稱: def __init__(self): 透過操作 self 來定義實體屬性
obj = 類別名稱()
|
1 2 3 4 5 6
| class Point: def __init__(self, x, y): self.x = x self.y = y
p = Point(1,5)
|
- 使用實體物件
1 2 3
| p = Point(1,5) print(p.x + p.y)
|
實體方法
- 建立實體方法
1 2 3 4 5 6 7
| class 類別名稱: def __init__(self): 封裝在實體物件中的變數 def 方法名稱(self,更多自訂參數): 方法主體,透過 self 操作實體物件
obj = 類別名稱()
|
1 2 3 4 5 6 7
| class Point: def __init__(self, x, y): self.x = x self.y = y def show(self): print(self.x, self.y) p = Point(1,5)
|
- 使用實體方法
1 2 3
| p = Point(1,5) p.show()
|
文字檔案的讀取與儲存
1. 開啟檔案
1
| 檔案物件 = open(檔案路徑, mode = 開啟模式, encoding = 編碼)
|
開啟模式
"r"
: 讀取模式
"w"
: 寫入模式
"r+"
: 讀寫模式
編碼
2. 讀取檔案
1 2
| for 變數 in 檔案物件: 從檔案依序讀取每行文字到變數中
|
1 2
| import json 讀取到的資料 = json.load(檔案物件)
|
3. 儲存檔案
1 2
| import json json.dump(要寫入的資料, 檔案物件)
|
4. 關閉檔案
最佳實務
1 2 3
| with open(檔案路徑, mode = 開啟模式) as 檔案物件: 讀取或寫入檔案的程式
|
亂數與統計模組
random
- 載入模組
- 使用 random
1 2 3 4 5 6
| random.choice([0, 1, 5, 8]) random.sample([0, 1, 5, 8], n) random.shuffle([0, 1, 5, 8]) random.random() random.uniform(n, m) random.normalvariate(n, m)
|
常態分配範例 :
statistics
- 載入模組
- 使用 statistics
1 2 3
| statistics.mean([1, 4, 6, 9]) statistics.median([1, 4, 6, 9]) statistics.stdev([1, 4, 6, 9])
|
網路連線與公開資料串接
網路連線
- 載入模組
1
| import urllib.request as request
|
- 下載特定網址資料
1 2 3
| with request.urlopen(網址) as response: data = response.read().decode("utf-8") print(data)
|
公開資料串接
確認資料格式
解讀格式