python
让代码优雅又高效:10个必会的Python实用技巧与示例
Python之所以强大,不仅因为它语法简单,更因为它提供了许多“开箱即用”的高级特性。无论是数据清洗、自动化办公,还是后端开发,掌握这些技巧能让你的代码从“能跑”变成“漂亮且高效”。
以下是我整理的10个高频Python实用技巧,附带场景示例,建议收藏备用。
1. 列表推导式:一行代码搞定循环
这是Python最具代表性的特性之一。与其写繁琐的
"for"循环,不如用列表推导式,代码更简洁,执行速度通常也更快。
场景: 将一个列表中所有数字平方,并过滤掉奇数。
❌ 普通写法:
nums = [1, 2, 3, 4, 5, 6]
result = []
for n in nums:
if n % 2 == 0:
result.append(n ** 2)
print(result) # [4, 16, 36]
✅ 优雅写法:
nums = [1, 2, 3, 4, 5, 6]
result = [n ** 2 for n in nums if n % 2 == 0]
print(result) # [4, 16, 36]
2. 解包(Unpacking):优雅地交换变量
还在用临时变量交换两个值吗?Python的解包功能可以直接赋值。
场景: 交换变量、提取列表首尾元素。
# 交换变量
a, b = 1, 2
a, b = b, a
print(a, b) # 2 1
# 提取列表首尾
data = [1, 2, 3, 4, 5]
first, *middle, last = data
print(first) # 1
print(middle) # [2, 3, 4] (注意这里得到的是列表)
print(last) # 5
3. 枚举(Enumerate):告别手动计数
在遍历列表时需要索引?别再用
"range(len(list))"了,
"enumerate"才是正解。
场景: 打印列表元素及其下标。
❌ 普通写法:
fruits = ["apple", "banana", "orange"]
for i in range(len(fruits)):
print(i, fruits[i])
✅ 优雅写法:
fruits = ["apple", "banana", "orange"]
for index, value in enumerate(fruits, start=1): # start参数可设置起始索引
print(index, value)
# 输出:
# 1 apple
# 2 banana
# 3 orange
4. 字典合并:Python 3.9+ 的黑魔法
以前合并字典需要用
"update()"方法或解包,Python 3.9引入了专门的合并运算符
"|"。
场景: 合并两个配置字典。
dict1 = {"name": "Alice", "age": 25}
dict2 = {"age": 26, "city": "Beijing"} # age键重复,后者覆盖前者
# Python 3.9+
merged_dict = dict1 | dict2
print(merged_dict) # {'name': 'Alice', 'age': 26, 'city': 'Beijing'}
# 兼容旧版本的写法
merged_dict_old = {**dict1, **dict2}
5. 集合(Set)去重:极速过滤重复项
当你需要去除列表中的重复元素,并且不关心顺序时,
"set"(集合)是最快的方案。
场景: 统计文章中不重复的单词数。
words = ["python", "java", "python", "c++", "java", "python"]
unique_words = set(words)
print(unique_words) # {'c++', 'java', 'python'}
print(len(unique_words)) # 3
# 如果想转回列表
unique_list = list(unique_words)
6.
"defaultdict":再也不怕KeyError
在使用字典统计频次时,经常需要判断键是否存在。
"collections.defaultdict"可以自动初始化键值。
场景: 统计每个字母出现的次数。
❌ 普通写法:
letters = "abracadabra"
count = {}
for letter in letters:
if letter not in count:
count[letter] = 0
count[letter] += 1
✅ 优雅写法:
from collections import defaultdict
letters = "abracadabra"
count = defaultdict(int) # int()默认返回0
for letter in letters:
count[letter] += 1
print(dict(count)) # {'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
7.
"with"语句:自动管理资源
操作文件或数据库连接时,忘记关闭资源会导致内存泄漏。
"with"(上下文管理器)能自动帮你处理善后工作。
场景: 读写文件。
❌ 危险写法(可能忘记close):
file = open("test.txt", "w")
file.write("Hello World")
file.close()
✅ 优雅写法:
with open("test.txt", "w", encoding="utf-8") as f:
f.write("Hello World")
# 离开with代码块,文件会自动关闭,即使发生异常也会关闭
8. 三元运算符:简化条件赋值
将简单的
"if-else"逻辑压缩在一行内。
场景: 根据条件赋值。
age = 20
# 普通写法
if age >= 18:
status = "Adult"
else:
status = "Minor"
# 优雅写法
status = "Adult" if age >= 18 else "Minor"
print(status)
9. F-String:格式化字符串的终极武器
Python 3.6引入的f-string是目前最可读、最简洁且速度最快的字符串格式化方法。
场景: 拼接字符串和变量。
name = "Bob"
score = 95.5678
# 旧写法
print("Name: %s, Score: %.2f" % (name, score))
print("Name: {}, Score: {}".format(name, score))
# F-String写法 (推荐)
print(f"Name: {name}, Score: {score:.2f}") # 支持直接格式化数字
print(f"{name=}, {score=}") # Python 3.8+,调试神器,直接输出变量名和值
# 输出: name=Bob, score=95.5678
10. 虚拟环境(Virtual Environment):项目的隔离舱
这是项目管理的必备技巧。不同项目依赖不同的库版本,全局安装会导致冲突。
场景: 为新项目创建独立环境。
# 1. 创建虚拟环境(在项目目录下运行)
python -m venv venv
# 2. 激活环境
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
# 3. 此时命令行前面会出现 (venv) 标识
# 现在pip安装的包只会装在当前目录
pip install requests
# 4. 退出环境
deactivate
总结与建议
技巧 核心价值 适用场景
列表推导式 简洁、高效 数据筛选、转换
解包 代码可读性 变量交换、数据拆分
Enumerate 同时获值取索引 循环遍历
F-String 直观、速度快 字符串拼接、日志输出
Defaultdict 逻辑简化 计数、分组
进阶建议:
如果你想进一步提升代码质量,可以去了解一下列表推导式与生成器表达式的区别(内存优化),以及装饰器(Decorator)(代码复用)。
💬 评论列表 (0)
暂无评论,快来抢沙发吧!
发表评论