Python实用技巧与最佳实践
以下是一些能让你的 Python 代码更高效优雅的实用技巧:
字符串与文本处理
使用 f-strings 格式化 - 比 .format() 或 % 格式化更清晰:
- name, age = "Alice", 30
- print(f"{name} is {age} years old") # 清晰易读
三引号多行字符串 - 适合 SQL 查询或文档:
- query = """
- SELECT name, email
- FROM users
- WHERE active = 1
- """
列表与字典操作
列表推导式 - 比传统循环更简洁:
- squares = [x**2 for x in range(10) if x % 2 == 0] # 仅偶数的平方
字典推导式:
- word_lengths = {word: len(word) for word in ["python", "java", "go"]}
使用 get() 安全访问字典:
- user_age = user_data.get("age", 0) # 若 "age" 键不存在则返回 0
控制流与逻辑
链式比较:
- if 18 <= age <= 65: # 比 age >= 18 and age <= 65 更清晰
- print("工作年龄")
使用 any() 和 all() 做布尔运算:
- if any(x > 10 for x in numbers): # 只要有任一数 > 10 即为 True
- if all(score >= 60 for score in scores): # 所有分数都 >= 60 才为 True
函数与类技巧
避免可变默认参数陷阱:
- # 错误方式
- def add_item(item, target_list=[]): # 危险!
- # 正确方式
- def add_item(item, target_list=None):
- if target_list is None:
- target_list = []
*使用 args 和 kwargs 实现灵活函数:
- def flexible_func(*args, **kwargs):
- print(f"Args: {args}, Kwargs: {kwargs}")
内置函数与模块
用 enumerate() 替代手动计数:
- for i, item in enumerate(items):
- print(f"{i}: {item}")
用 zip() 并行迭代:
- names = ["Alice", "Bob", "Charlie"]
- ages = [25, 30, 35]
- for name, age in zip(names, ages):
- print(f"{name}: {age}")
用 collections.Counter 计数:
- from collections import Counter
- letter_counts = Counter("hello world")
用 pathlib 处理文件路径:
- from pathlib import Path
- file_path = Path("data") / "file.txt" # 跨平台路径处理
性能与内存
用生成器处理大数据集:
- def fibonacci():
- a, b = 0, 1
- while True:
- yield a
- a, b = b, a + b
列表切片技巧:
- # 反转列表
- reversed_list = original_list[::-1]
- # 获取每第 n 个元素
- every_third = my_list[::3]
错误处理
EAFP (请求原谅比请求许可更容易):
- # Python 风格
- try:
- value = my_dict["key"]
- except KeyError:
- value = "default"
- # 而不是
- if "key" in my_dict:
- value = my_dict["key"]
- else:
- value = "default"
上下文管理器
始终使用上下文管理器处理文件操作:
- with open("file.txt") as f:
- content = f.read()
- # 文件自动关闭,即使发生异常也是如此
调试与开发
用 pprint 打印复杂数据结构:
- from pprint import pprint
- pprint(complex_nested_dict) # 输出更易读
用 breakpoint() 调试(Python 3.7+):
- # 替代 import pdb; pdb.set_trace()
- breakpoint() # 进入调试器
这些技巧能显著提升你的 Python 代码的可读性、性能和可维护性。关键是要根据具体场景选择合适的技巧应用。
实践建议
字符串格式化优先用 f-strings(Python 3.6+)
列表/字典推导式要适度,过于复杂时用常规 for 循环
字典访问用 .get() 防止 KeyError
文件操作必须用 with 语句
大数据集处理优先考虑生成器
错误处理倾向于 EAFP 而非 LBYL
复杂调试场景用 pprint 和 breakpoint()
记住:代码是写给人看的,只是顺便能被机器执行。选择技巧时,可读性和可维护性应该是首要考虑因素。
