一、簡介
1.1 Python 特性
解釋型語言:代碼無需編譯可直接運行,適合快速開發。
動態類型:變量類型在運行時確定(如x=1后x="str"仍合法)。
面向對象:支持類、對象、繼承等特性,代碼可復用性強。
語法簡潔:通過縮進區分代碼塊,減少括號等冗余符號。
1.2 應用場景
數據分析:Pandas、Numpy 等庫處理結構化數據。
人工智能:TensorFlow、PyTorch 構建機器學習模型。
Web 開發:Django、Flask 框架開發網站。
自動化腳本:批量處理文件、系統運維自動化。
二、Python 基礎語法
2.1 字面量與數據類型
核心關聯點:可變與不可變類型
類型 | 是否可變 | 存儲特點 | 典型應用 |
整數(int) | 不可變 | 直接存儲數值 | 計數、索引 |
浮點數(float) | 不可變 | 存儲小數,存在精度誤差(如0.1+0.2≠0.3) | 科學計算 |
字符串(str) | 不可變 | 字符序列,支持切片操作 | 文本處理 |
列表(list) | 可變 | 有序元素集合,可動態增刪改 | 存儲同類數據序列 |
元組(tuple) | 不可變 | 有序元素集合,不可修改 | 保護數據不被意外修改 |
字典(dict) | 可變 | 鍵值對映射,鍵需不可變(如 str) | 快速查詢(類似通訊錄) |
集合(set) | 可變 | 無序不重復元素,支持集合運算 | 去重、交集并集計算 |
易混淆點:
- 字符串、元組雖不可變,但可通過拼接生成新對象(如s = "a"; s += "b"實際生成新字符串)。
- 字典的鍵必須為不可變類型(如dict[{1:2}]會報錯,因列表可變)。
2.2 運算符優先級(由高到低)
示例對比:
- 3 + 4 * 2 → 先算4*2=8,再算3+8=11(乘優先于加)。
- 3 * 2 ** 2 → 先算2**2=4,再算3*4=12(指數優先于乘法)。
2.3 字符串操作核心方法
易混淆方法對比
方法 | 作用 | 是否修改原字符串 | 示例 |
split() | 按分隔符分割成列表 | 否 | "a,b,c".split(",") → ["a","b","c"] |
join() | 用指定字符連接列表 | 否 | ",".join(["a","b","c"]) → "a,b,c" |
strip() | 去除首尾指定字符(默認空格) | 否 | " abc ".strip() → "abc" |
replace() | 替換子串 | 否 | "abc".replace("a","x") → "xbc" |
upper()/lower() | 轉大小寫 | 否 | "AbC".upper() → "ABC" |
三、流程控制:判斷與循環
3.1 if 基本格式
# 示例代碼
age = 20
if age >= 18:print("成年了")print("可以投票了")
? ? ?if-elif-else 語句
# 示例代碼
height = int(input("請輸入身高(cm): "))
vip_level = int(input("請輸入VIP等級:"))if height < 120:print("免費游玩")
elif vip_level > 3:print("VIP免費")
else:print("需要購票")
3.2 循環結構對比
循環類型 | 適用場景 | 核心特點 | 跳出方式 |
for 循環 | 已知次數的遍歷(如列表、字符串) | 按元素遍歷,無需手動控制計數器 | break/continue |
while 循環 | 未知次數的循環(如用戶輸入驗證) | 條件為真時執行,需手動更新條件變量 | break/continue |
典型案例:
for 循環:遍歷列表求最大值
# 示例代碼
name = "python"
for char in name:print(char)
while 循環:猜數字游戲
# 示例代碼
i = 0
while i < 5:print(i)i += 1
四、函數與數據容器
4.1 函數參數傳遞機制
可變與不可變參數對比
參數類型 | 傳遞方式 | 修改影響 | 示例 |
不可變類型(int/str/tuple) | 值傳遞 | 函數內修改不影響外部變量 | def f(x): x=2; a=1; f(a); print(a) → 1 |
可變類型(list/dict/set) | 引用傳遞 | 函數內修改會影響外部變量 | def f(l): l.append(0); a=[1]; f(a); print(a) → [1,0] |
4.2 數據容器核心操作對比
列表、元組、字典、集合常用方法
操作 | 列表(list) | 元組(tuple) | 字典(dict) | 集合(set) |
創建 | [1,2] | (1,2) 或 1,2 | {'a':1} | {1,2} 或 set([1,2]) |
新增元素 | append()/insert() | 不可新增(報錯) | dict[key]=value | add()/update() |
刪除元素 | pop()/remove() | 不可刪除(報錯) | pop(key) | remove()/discard()/pop() |
訪問元素 | lst[0] | tup[0] | dict[key] 或 get(key) | 不可直接訪問(無序) |
遍歷 | for x in lst | for x in tup | for k in dict 或 for k,v in dict.items() | for x in set |
常用內置函數 | len()/max()/min()/sorted() | len()/max()/min()/sorted() | len()/keys()/values()/items() | len()/union()/intersection() |
數據容器對比
類型 | 元素類型 | 有序 | 可變 | 重復元素 |
列表(List) | 任意 | 是 | 是 | 支持 |
元組(Tuple) | 任意 | 是 | 否 | 支持 |
字典(Dict) | Key 必須不可變,Value 任意 | 否 | 是 | Key 不支持重復 |
集合(Set) | 任意 | 否 | 是 | 不支持 |
字符串(Str) | 字符 | 是 | 否 | 支持 |
五、文件操作與異常處理
5.1 文件操作三模式對比
模式 | 讀寫權限 | 文件不存在時 | 典型應用 |
r | 只讀 | 報錯 | 讀取配置文件 |
w | 寫入(覆蓋原內容) | 創建新文件 | 重新生成日志文件 |
a | 追加寫入 | 創建新文件 | 追加日志記錄 |
安全寫法:使用with open自動關閉文件
# 讀取文件(推薦)with open("data.txt", "r", encoding="utf-8") as f:content = f.read()# 寫入文件(推薦)with open("output.txt", "w", encoding="utf-8") as f:f.write("Hello World")
5.2 異常處理流程
典型案例:
try:num = int(input("輸入數字: "))result = 10 / numexcept ValueError:print("請輸入有效數字")except ZeroDivisionError:print("不能除以0")except Exception as e:print(f"未知錯誤: {e}")else:print(f"計算結果: {result}")finally:print("程序執行完畢")
六、模塊與面向對象編程
6.1 模塊導入方式對比
導入方式 | 語法 | 命名空間影響 | 適用場景 |
導入整個模塊 | import math | math.sqrt(4) | 避免命名沖突 |
導入指定功能 | from math import sqrt | sqrt(4) | 簡化代碼書寫 |
導入所有功能 | from math import * | 可能覆蓋同名變量 | 快速原型開發 |
模塊別名 | import math as m | m.sqrt(4) | 長模塊名簡化 |
6.2 面向對象核心概念
封裝、繼承、多態對比
概念 | 定義 | 代碼示例 |
封裝 | 隱藏內部實現,只暴露必要接口 | class Person: __age=18; def get_age(): return self.__age |
繼承 | 子類復用父類代碼 | class Student(Person): pass |
多態 | 同一方法不同實現(動態綁定) | def func(obj): obj.sound(); dog=Dog(); bird=Bird(); func(dog); func(bird) |