Python 基础语法
一、数据类型
常用类型
| 类型 | 示例 | 说明 |
|---|---|---|
| int | 42, -7, 0b1010 | 整数,无大小限制 |
| float | 3.14, -0.5, 1e-3 | 浮点数,双精度 |
| str | ‘hello’, “世界” | 字符串,不可变 |
| bool | True, False | 布尔值,是 int 的子类 |
| NoneType | None | 空值,表示"无" |
| complex | 1+2j | 复数(较少用) |
类型检查与转换
python# 检查类型type(42) # <class 'int'>isinstance(3.14, float) # Trueisinstance(3.14, (int, float)) # True # 类型转换int("42") # 42int("1010", 2) # 10(二进制转十进制)float("3.14") # 3.14str(100) # "100"bool("") # False(空字符串为假)bool([]) # False(空容器为假)bool("hello") # True
可变 vs 不可变
| 类型 | 可变性 | 说明 |
|---|---|---|
| int, float, str, bool, tuple | 不可变 | 修改会创建新对象 |
| list, dict, set | 可变 | 原地修改不创建新对象 |
pythona = "hello"a.upper() # 返回新字符串 "HELLO",a 不变a = a.upper() # 需要重新赋值 lst = [1, 2, 3]lst.append(4) # lst 变成 [1, 2, 3, 4],原地修改
二、容器类型
list(列表)
有序、可变、可重复。
python# 创建lst = [1, 2, 3, 2]lst = list(range(5)) # [0, 1, 2, 3, 4]lst = [x*2 for x in range(5)] # [0, 2, 4, 6, 8] 列表推导式 # 增删改查lst.append(4) # 末尾追加: [1, 2, 3, 4]lst.insert(1, 99) # 指定位置插入: [1, 99, 2, 3]lst.extend([5,6]) # 合并列表: [1, 2, 3, 5, 6]lst.remove(2) # 删除第一个匹配值lst.pop() # 删除并返回末尾元素lst.pop(0) # 删除并返回指定索引元素lst[0] = 100 # 修改元素lst.index(3) # 查找元素索引(不存在报 ValueError)lst.count(2) # 统计出现次数 # 切片lst[1:4] # 索引 1~3(左闭右开)lst[:3] # 前 3 个lst[-3:] # 后 3 个lst[::2] # 每隔一个取lst[::-1] # 反转 # 排序lst.sort() # 原地升序lst.sort(reverse=True) # 原地降序sorted(lst) # 返回新排序列表(不改变原列表)sorted(lst, key=len) # 按自定义规则排序
tuple(元组)
有序、不可变、可重复。常用于函数返回多个值。
pythont = (1, 2, 3)t = 1, 2, 3 # 括号可省略t = (1,) # 单元素元组必须加逗号 # 解包a, b, c = (1, 2, 3) # a=1, b=2, c=3a, *b = (1, 2, 3, 4) # a=1, b=[2, 3, 4]
dict(字典)
无序(3.7+ 有序)、可变、键唯一。
python# 创建d = {"name": "Alice", "age": 25}d = dict(name="Bob", age=30)d = {x: x**2 for x in range(5)} # 字典推导式: {0:0, 1:1, 2:4, 3:9, 4:16} # 增删改查d["email"] = "a@b.com" # 新增/修改d.get("phone", "N/A") # 安全获取,不存在返回默认值d.setdefault("role", "user") # 不存在则设置默认值d.pop("age") # 删除并返回值d.popitem() # 删除并返回最后一个键值对(3.7+)del d["key"] # 遍历for k in d: # 键for k, v in d.items(): # 键值对for v in d.values(): # 值 # 合并(3.9+)d1 | d2 # 合并两个字典(后者覆盖前者)d1 |= d2 # 原地合并
set(集合)
无序、可变、元素唯一。
pythons = {1, 2, 3}s = set([1, 2, 2, 3]) # {1, 2, 3} 自动去重 # 集合运算s.add(4) # 添加s.remove(2) # 删除(不存在报错)s.discard(2) # 删除(不存在不报错)s1 & s2 # 交集s1 | s2 # 并集s1 - s2 # 差集s1 ^ s2 # 对称差集(在两者中但不同时存在){1, 2}.issubset(s) # 是否子集
常用技巧
python# enumerate() — 带索引遍历for i, val in enumerate(['a', 'b', 'c']): print(f"{i}: {val}") # zip() — 并行遍历for name, age in zip(['Alice', 'Bob'], [25, 30]): print(f"{name} is {age}") # 推导式[x.upper() for x in ['a', 'b']] # 列表推导(x*2 for x in range(10)) # 生成器推导(惰性){k: v for k, v in [('a', 1), ('b', 2)]} # 字典推导{x for x in [1, 2, 2, 3]} # 集合推导 {1, 2, 3}
三、字符串
格式化
pythonname, age = "Alice", 25f"{name} is {age} years old" # f-string(推荐)f"{name=}" # 调试输出: "name='Alice'"f"{3.14159:.2f}" # 保留两位小数: "3.14" "{} is {} years old".format(name, age)"{name} is {age} years old".format_map({"name": "Bob", "age": 30})
常用方法
pythons = " Hello World! " s.strip() # 去两端空白: "Hello World!"s.lstrip() # 去左空白s.rstrip() # 去右空白s.lower() # 转小写s.upper() # 转大写s.replace("World", "Python") # 替换s.split() # 按空白分割: ['Hello', 'World!']s.split(",") # 按逗号分割",".join(["a", "b"]) # 连接: "a,b"s.find("World") # 查找索引,不存在返回 -1s.startswith("Hello") # 是否以...开头s.endswith("!") # 是否以...结尾s.count("l") # 计数len(s) # 长度
索引与切片
pythons = "Python"s[0] # 'P's[-1] # 'n's[1:4] # 'yth's[::-1] # 'nohtyP' 反转
四、运算符
算术运算符
python+ - * / # 加减乘除(/ 返回 float)// # 整除: 7 // 3 → 2% # 取余: 7 % 3 → 1** # 幂: 2 ** 10 → 1024
比较运算符
python== != > < >= <= # 返回 boolis / is not # 身份比较(比较内存地址,不建议比较值)
逻辑运算符
pythonand or not # 短路求值a = 0 or "default" # a = "default"(0 为假,返回第二个值)b = "hi" and "ok" # b = "ok"(都为真,返回最后一个值)
成员运算符
python3 in [1, 2, 3] # True'x' not in 'hello' # True
五、流程控制
if-elif-else
pythonscore = 85if score >= 90: grade = "A"elif score >= 80: grade = "B"elif score >= 70: grade = "C"else: grade = "D" # 三元表达式x = 1 if condition else 0
for 循环
pythonfor i in range(5): # 0~4 print(i) for i in range(2, 10, 3): # 2, 5, 8(起、止、步长) # 倒序for i in range(10, 0, -1): # 10~1 # 遍历字典for k, v in d.items(): print(k, v)
while 循环
pythoncount = 0while count < 5: print(count) count += 1
break / continue / else
pythonfor i in range(10): if i == 3: continue # 跳过本次循环 if i == 7: break # 终止循环else: print("循环正常结束(没有遇到 break)") # 循环的 else 子句
六、文件操作
python# 读文件with open("file.txt", "r", encoding="utf-8") as f: content = f.read() # 读取全部 line = f.readline() # 读取一行 lines = f.readlines() # 读取所有行到列表 # 写文件with open("out.txt", "w", encoding="utf-8") as f: f.write("Hello\n") f.writelines(["line1\n", "line2\n"]) # 追加模式with open("log.txt", "a", encoding="utf-8") as f: f.write("new log entry\n") # 二进制读写with open("img.png", "rb") as f: data = f.read() # 模式说明# r 只读(默认)# w 写入(覆盖)# a 追加# x 排他创建(文件存在则报错)# b 二进制模式# t 文本模式(默认)# + 读写模式(r+/w+)
pathlib(3.4+,推荐替代 os.path)
pythonfrom pathlib import Path p = Path("data/config.json")p.exists() # 文件是否存在p.is_file() # 是否是文件p.is_dir() # 是否是目录p.name # 文件名: "config.json"p.stem # 无后缀: "config"p.suffix # 后缀: ".json"p.parent # 父目录: datap.read_text() # 读取文本p.write_text("hello") # 写入文本p.read_bytes() # 读取二进制 # 路径拼接Path("data") / "sub" / "file.txt" # 优雅拼接

