这些实用的 Python 技巧不仅能让你的代码更简洁优雅,还能有效提升效率。即使你已经熟悉 Python,这些“隐藏”功能也可能会带给你惊喜。
快速检查条件是否满足,而无需复杂的 if
语句:
data = [0, 1, 2, 3]
if any(data):
print("至少有一个真值!")
if all(data):
print("所有值都是真值!")
在 Python 3.8+ 中,可以更简单地打印变量名和值:
name = "Python"
print(f"{name=}") # 输出:name='Python'
使用上下文管理器轻松创建计时器或锁定资源:
import time
from contextlib import contextmanager
@contextmanager
def timer():
start = time.time()
yield
end = time.time()
print(f"经过时间:{end - start:.2f}秒")
with timer():
sum([x**2 for x in range(10000)])
当类太复杂而字典不够时,namedtuple
是个好选择:
from collections import namedtuple
Car = namedtuple('Car', ['make', 'model', 'year'])
my_car = Car(make='Tesla', model='Model S', year=2022)
print(my_car.make) # 输出:Tesla
随时更改函数的行为,特别适合临时调整功能:
def greet():
print("Hello!")
greet()
greet = lambda: print("Bonjour!")
greet()
下划线 _
表示不需要的数据项:
_, filename = "/path/to/file.txt".rsplit("/", 1)
print(filename) # 输出:file.txt
for
和 while
循环可以带 else
,仅在循环未被打断时执行:
for num in range(5):
if num == 3:
break
else:
print("完成而没有中断!")
减少使用 try-except
获取字典键的麻烦:
data = {'name': 'Python'}
print(data.get('age', '未找到')) # 输出:未找到
只需一行命令即可开启本地文件服务器:
python -m http.server 8080
自动安装缺失的库,减少中断:
import subprocess
try:
import requests
except ImportError:
subprocess.run(["pip", "install", "requests"])
打印整齐的 JSON 数据以便阅读:
import json
data = {'name': 'Python', 'age': 30}
print(json.dumps(data, indent=4))
确保脚本在虚拟环境中运行:
import sys
if not hasattr(sys, 'real_prefix'):
raise EnvironmentError("请激活虚拟环境!")
用 lru_cache
缓存重复计算结果:
from functools import lru_cache
@lru_cache
def expensive_function(x):
print("运行中...")
return x * 2
print(expensive_function(10)) # 运行
print(expensive_function(10)) # 已缓存
轻松检查字符串是否为回文:
is_palindrome = lambda s: s == s[::-1]
print(is_palindrome('racecar')) # True
dataclass
装饰器简化类定义:
from dataclasses import dataclass
@dataclass
class Book:
title: str
author: str·
b = Book("Python Tricks", "Dan Bader")
print(b)
无需手动清理临时文件,使用 tempfile
:
import tempfile
with tempfile.TemporaryFile() as temp:
temp.write(b'一些数据')
在不修改源代码的情况下更改模块的行为:
import random
random.randint = lambda a, b: 42 # 始终返回 42
print(random.randint(1, 100)) # 输出:42
Python 3.10+ 引入了 match-case
语法用于多分支判断:
command = 'start'
match command:
case 'start':
print("启动中...")
case 'stop':
print("停止中...")
用 Lock
来防止多线程资源冲突:
from threading import Lock
lock = Lock()
with lock:
print("线程安全区域")
同时遍历多个列表而无需嵌套循环:
names = ['Alice', 'Bob']
ages = [24, 27]
for name, age in zip(names, ages):
print(f"{name} 今年 {age} 岁。")
交换两个变量时无需临时变量:
a, b = 5, 10
a, b = b, a
print(a, b) # 输出:10, 5
定义清晰的常量而非使用“神奇数字”:
from enum import Enum
class Status(Enum):
PENDING = 1
APPROVED = 2
REJECTED = 3
无需复杂计算获取下一天日期:
from datetime import datetime, timedelta
print(datetime.now() + timedelta(days=1))
找出代码瓶颈,优化性能:
python -m cProfile your_script.py
找出内存消耗大的部分:
pip install memory-profiler
mprof run your_script.py
这些技巧可以帮助你高效编码,提升 Python 编程的专业性!