Python 写了 3 年,你可能还是新手。
不是你不努力,是这些隐藏技巧没人告诉你。
今天分享 5 个我私藏的 Python 技巧,每一个都能让你的代码更 Pythonic。
1️⃣ 用 enumerate 代替 range(len())
❌ 新手写法:
for i inrange(len(items)):print(i, items[i])
✅ 高手写法:
for i, item inenumerate(items):print(i, item)
为什么更好:
进阶用法:
# 从 1 开始计数for i, item inenumerate(items, start=1):print(f"{i}. {item}")# 输出:# 1. Apple# 2. Banana# 3. Orange
2️⃣ 用 zip 同时遍历多个列表
❌ 新手写法:
names = ["Alice", "Bob", "Charlie"]ages = [25, 30, 35]for i inrange(len(names)):print(names[i], ages[i])
✅ 高手写法:
for name, age inzip(names, ages):print(name, age)
为什么更好:
进阶用法:
# 同时遍历 3 个列表for name, age, city inzip(names, ages, cities):print(f"{name}, {age}, {city}")# 用 zip 创建字典result = dict(zip(names, ages))# {'Alice': 25, 'Bob': 30, 'Charlie': 35}
3️⃣ 用 get 处理字典默认值
❌ 新手写法:
if key in my_dict: value = my_dict[key]else: value = 0
✅ 高手写法:
value = my_dict.get(key, 0)
为什么更好:
进阶用法:
# 统计词频word_count = {}for word in words: word_count[word] = word_count.get(word, 0) + 1# 嵌套字典user = data.get("user", {})name = user.get("name", "Unknown")
4️⃣ 用列表推导式代替 map/filter
❌ 新手写法:
squares = list(map(lambda x: x**2, numbers))evens = list(filter(lambda x: x % 2 == 0, numbers))
✅ 高手写法:
squares = [x**2for x in numbers]evens = [x for x in numbers if x % 2 == 0]
为什么更好:
进阶用法:
# 嵌套推导式matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]flattened = [num for row in matrix for num in row]# [1, 2, 3, 4, 5, 6, 7, 8, 9]# 带条件的推导式squares_of_evens = [x**2for x in numbers if x % 2 == 0]
5️⃣ 用 contextlib 简化上下文管理器
❌ 新手写法:
classTimer:def__enter__(self):self.start = time.time()returnselfdef__exit__(self, *args):self.end = time.time()self.elapsed = self.end - self.start
✅ 高手写法:
from contextlib import contextmanager@contextmanagerdeftimer(): start = time.time()try:yieldfinally: end = time.time()print(f"Elapsed: {end - start:.2f}s")
为什么更好:
使用示例:
with timer():# 执行耗时操作 time.sleep(1)# 输出:Elapsed: 1.00s
🎁 额外福利:f-string 的高级用法
基础用法:
name = "Alice"age = 25print(f"{name} is {age} years old")
进阶用法:
# 格式化数字price = 49.9print(f"Price: ${price:.2f}") # $49.90# 百分比rate = 0.856print(f"Rate: {rate:.1%}") # 85.6%# 日期格式化from datetime import datetimenow = datetime.now()print(f"Today: {now:%Y-%m-%d}") # 2026-03-29# 表达式print(f"Next year: {age + 1}") # 26# 字典解包person = {"name": "Alice", "age": 25}print(f"{person['name']}") # Alice
📌 总结
记住:
写 Python 代码不是为了机器能懂,是为了人能懂。
你还知道哪些 Python 隐藏技巧?评论区分享~