一、代码优化技巧
(一)列表推导式与生成器表达式
列表推导式是Python中创建列表的便捷方式,但当处理大规模数据时,生成器表达式更值得推荐。列表推导式会一次性生成整个列表,占用大量内存;而生成器表达式则是按需生成数据,节省内存资源。
# 列表推导式
squared_nums_list = [x ** 2 for x in range(1000000)]
# 生成器表达式
squared_nums_generator = (x ** 2 for x in range(1000000))
在遍历数据量巨大的数据集时,使用生成器表达式能显著降低内存消耗,避免程序因内存不足而崩溃。
(二)使用zip
和enumerate
简化循环
zip
函数可以将多个可迭代对象对应位置的元素组合成元组,enumerate
函数则能在遍历可迭代对象时同时获取元素的索引和值,它们能有效简化循环操作。
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
# 使用zip同时遍历两个列表
for name, age in zip(names, ages):
print(f"{name} is {age} years old.")
fruits = ['apple', 'banana', 'cherry']
# 使用enumerate获取索引和元素
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
(三)避免重复计算
在代码中,如果某些计算结果会被多次使用,将其存储为变量,避免重复计算。比如在计算圆的面积和周长时:
radius = 5
pi = 3.14159
# 错误做法,重复计算半径的平方
area = 3.14159 * 5 ** 2
circumference = 2 * 3.14159 * 5
# 正确做法
r_squared = radius ** 2
area = pi * r_squared
circumference = 2 * pi * radius
二、实用库使用技巧
(一)itertools
库高效处理迭代对象
itertools
库提供了一系列用于高效处理迭代对象的函数。例如,combinations
函数可以生成指定长度的组合,permutations
函数用于生成排列。在解决组合数学相关问题或数据处理时,这些函数能大幅简化代码。
from itertools import combinations, permutations
nums = [1, 2, 3]
# 生成长度为2的组合
print(list(combinations(nums, 2)))
# 生成所有排列
print(list(permutations(nums)))
(二)collections
库增强数据结构功能
collections
库扩展了Python的内置数据结构。defaultdict
能为字典的键提供默认值,避免键不存在时抛出异常;Counter
用于统计可迭代对象中元素的出现次数。
from collections import defaultdict, Counter
# 使用defaultdict避免KeyError
word_count = defaultdict(int)
words = ['apple', 'banana', 'apple', 'cherry']
for word in words:
word_count[word] += 1
# 使用Counter统计元素出现次数
print(Counter(words))
(三)logging
库实现高效日志记录
在大型项目中,使用logging
库记录日志比简单的print
语句更专业、灵活。它支持设置不同的日志级别(如DEBUG、INFO、WARNING等),并能将日志输出到文件或控制台。
import logging
# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logging.info("This is an info message")
logging.warning("This is a warning message")
三、调试与测试技巧
(一)pdb
进行交互式调试
pdb
是Python内置的调试器,能帮助开发者逐行检查代码,查看变量值,定位问题。在代码中插入import pdb; pdb.set_trace()
,程序执行到此处会暂停,进入调试模式。
def add_numbers(a, b):
import pdb; pdb.set_trace()
result = a + b
return result
add_numbers(3, 5)
在调试模式下,可以使用n
执行下一行,p
打印变量值等命令。
(二)单元测试框架unittest
unittest
是Python标准库中的单元测试框架,用于编写和运行单元测试。通过编写测试用例,可以验证函数或类的功能是否正确。
import unittest
def add(a, b):
return a + b
class TestAddFunction(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 3), 5)
if __name__ == '__main__':
unittest.main()
Comments 1 条评论