当前位置:首页>python>这 5 个 Python 技巧,90% 的人都不知道!

这 5 个 Python 技巧,90% 的人都不知道!

  • 2026-09-09 19:37:11
这 5 个 Python 技巧,90% 的人都不知道!

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)

为什么更好:

  • 更简洁,少打 10 个字符
  • 避免索引错误
  • 更符合 Python 风格

进阶用法:

# 从 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)

为什么更好:

  • 不用关心索引
  • 自动处理长度不一致
  • 可读性提升 100%

进阶用法:

# 同时遍历 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)

为什么更好:

  • 一行搞定
  • 避免 KeyError
  • 可以自定义默认值

进阶用法:

# 统计词频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]

为什么更好:

  • 更易读
  • 更灵活
  • Python 官方推荐

进阶用法:

# 嵌套推导式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")

为什么更好:

  • 代码减少 60%
  • 不用记 enter/exit
  • 用生成器语法更直观

使用示例:

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

📌 总结

技巧
新手写法
高手写法
遍历索引
range(len())
enumerate()
多列表遍历
索引访问
zip()
字典默认值
if-else
get()
列表转换
map/filter
推导式
上下文管理器
类实现
contextlib

记住:

写 Python 代码不是为了机器能懂,是为了人能懂。


你还知道哪些 Python 隐藏技巧?评论区分享~

最新文章

随机文章