一、 基础高效语法
# 多变量赋值a, b, c = 1, "Python", [2,3]# 变量交换(无临时变量)x, y = 10, 20x, y = y, xprint("交换后:", x, y) # 输出 20 10
score = 88# 二分支result = "及格"if score >=60else"不及格"# 多分支嵌套(简洁场景用,复杂建议用if-else)grade = "优秀"if score >=90else"良好"if score >=80else"及格"if score >=60else"不及格"print(grade) # 输出 良好
name, age = "小李", 28# 基础嵌入变量print(f"姓名:{name},年龄:{age}")# 嵌入表达式+格式化print(f"明年年龄:{age+1},薪资:{15000.234:.2f}") # 保留2位小数# 嵌入函数调用print(f"姓名大写:{name.upper()}")
# 基础生成:start=0, stop=终点(不含), step=1lst1 = list(range(10)) # [0,1,...,9]# 指定起始与步长lst2 = list(range(1, 11, 2)) # 1-10的奇数 [1,3,...,9]print(lst1, lst2)
lst = [1,2,3,4]s = "Python"print(3in lst) # True,替代手动循环判断print("py"in s) # False,区分大小写print("Py"in s) # True
nums = [3,1,4,1,5,9]print("总和:", sum(nums))print("最大值:", max(nums))print("最小值:", min(nums))print("长度:", len(nums))
二、 容器高效操作
# 基础生成:表达式+循环nums1 = [i*2for i in range(5)] # [0,2,4,6,8]# 带过滤条件nums2 = [i for i in range(1, 11) if i % 2 == 0] # 1-10偶数 [2,4,...,10]print(nums1, nums2)
# 去重lst = [1,2,2,3,3,3]unique_set = set(lst)unique_lst = list(unique_set)print("去重后:", unique_lst) # [1,2,3]# 集合运算(交集/并集/差集)a = {1,2,3}b = {3,4,5}print("交集:", a & b) # {3}print("并集:", a | b) # {1,2,3,4,5}
# 字典推导式:快速构建字典dict1 = {i: i*2for i in range(3)} # {0:0, 1:2, 2:4}# dict.get():避免key不存在报错print(dict1.get(1)) # 2print(dict1.get(5, "不存在")) # 不存在,指定默认值# dict.fromkeys():批量生成字典keys = ["name", "age", "gender"]dict2 = dict.fromkeys(keys, "未知") # 所有key默认值为未知print(dict1, dict2)
lst = [2,1,3,2,1,4,3]# Python3.7+ 字典有序,fromkeys会保留元素首次出现顺序unique_dict = dict.fromkeys(lst)unique_lst = list(unique_dict.keys())print("有序去重:", unique_lst) # [2,1,3,4]
lst = [1,2,3]s = {1,2,3}t = (1,2,3)d = {1:"a",2:"b"}# 列表转其他print(set(lst), tuple(lst))# 集合转列表print(list(s))# 字典转列表(默认key,可指定values/items)print(list(d), list(d.values()))
三、 循环迭代优化
lst = ["Python", "Java", "C++"]# 基础用法:start默认0for idx, val in enumerate(lst): print(f"索引{idx}:{val}")# 指定索引起始值for idx, val in enumerate(lst, start=1): print(f"序号{idx}:{val}")
names = ["小李", "小张", "小王"]ages = [28, 25, 30]scores = [85, 92, 78]# 并行遍历多列表,以最短列表为准for name, age, score in zip(names, ages, scores): print(f"{name},{age}岁,成绩{score}分")
import itertools# 1. 无限迭代器(慎用,需终止条件)nums = itertools.count(start=1, step=2) # 1,3,5,...无限生成for i, num in enumerate(nums): print(num, end=" ")if i >= 4:break# 输出前5个 1 3 5 7 9print()# 2. 排列组合:permutations(排列), combinations(组合)lst = ["a","b","c"]perm = list(itertools.permutations(lst, 2)) # 3选2排列,有序comb = list(itertools.combinations(lst, 2)) # 3选2组合,无序print("排列:", perm)print("组合:", comb)
# 低效写法:循环内重复计算len(lst)lst = [1,2,3]*1000total = 0# for i in range(len(lst)): # 每次循环都计算len,耗时# 高效写法:提前计算,只算1次lst_len = len(lst)for i in range(lst_len): total += lst[i]print("总和:", total)
四、 高阶特性与内存优化
# 基础定义:参数:表达式(只能单行)add = lambda x,y: x+yprint("两数之和:", add(3,5)) # 8# 配合排序使用(核心场景)lst = [(2,8), (1,3), (5,4)]lst.sort(key=lambda x: x[1]) # 按元组第2个元素排序print("排序后:", lst) # [(1,3), (5,4), (2,8)]
- map()/filter()/reduce() 三大高阶函数
from functools import reduce # reduce需导入nums = [1,2,3,4]# 1. map:批量映射处理nums_map = list(map(lambda x: x**2, nums)) # 每个元素平方 [1,4,9,16]# 2. filter:批量过滤nums_filter = list(filter(lambda x: x%2==0, nums)) # 筛选偶数 [2,4]# 3. reduce:累积计算nums_reduce = reduce(lambda x,y: x+y, nums) # 累积求和 1+2+3+4=10print(nums_map, nums_filter, nums_reduce)
# 生成器函数(用yield替代return,按需生成,不占内存)defgen_nums(n):for i in range(n):yield i # 每次yield返回一个值,暂停执行# 调用生成器(惰性求值)g = gen_nums(5)print("生成器元素:", list(g)) # [0,1,2,3,4]# 处理大文件场景(核心用途,避免内存溢出)defread_big_file(file_path):with open(file_path, "r", encoding="utf-8") as f:for line in f: # 逐行读取,不一次性加载yield line.strip()
五、 实用工具
# 文件操作场景(自动关闭文件,无需手动f.close())file_path = "test.txt"# 写入文件with open(file_path, "w", encoding="utf-8") as f: f.write("Python高效技巧\n")# 读取文件with open(file_path, "r", encoding="utf-8") as f: content = f.read() print("文件内容:", content)# 其他场景:数据库连接、网络连接等,均能自动释放资源
# 1. *解包:序列类(列表、元组、集合)lst1 = [1,2,3]lst2 = [4,5,6]merged_lst = [*lst1, *lst2] # 合并列表 [1,2,3,4,5,6]print(merged_lst)# 函数传参用*解包defadd(a,b,c):return a+b+cnums = [1,2,3]print("函数传参解包:", add(*nums)) # 等价add(1,2,3)# 2. **解包:字典dict1 = {"name":"小李", "age":28}dict2 = {"gender":"男", "age":30}merged_dict = {**dict1, **dict2} # 合并字典,后序覆盖前序重复keyprint(merged_dict) # {'name': '小李', 'age': 30, 'gender': '男'}# 函数传参用**解包defprint_info(name, age): print(f"{name},{age}岁")print_info(**dict1) # 等价print_info(name="小李", age=28)