Python 开发中常见的 5 个坏习惯及修正方案

Nora
Nora
发布时间:2026-10-12| 2人浏览过
原创

在 Python 开发中,许多习惯源于其他语言或初学者对语言特性的误解。本文总结了五个常见的编码坏习惯,并提供修正方案,帮助开发者写出更安全、高效且符合 Pythonic 风格的代码。

1. 使用可变对象作为函数默认参数

在定义函数时,如果默认参数使用了可变对象(如列表 [] 或字典 {}),会导致所有调用共享同一个对象。这是因为默认参数在函数定义时只计算一次,而非每次调用时重新创建。

def func(a, b=[]): 
   b.append(a) 
   print(f'a: {a}') 
   print(f'b: {b}') 
 func(1) 
 func(2)

上述代码的输出结果如下:

a: 1 
  b: [1] 
  a: 2 
  b: [1, 2]

可以看到,第二次调用时,列表 b 保留了第一次调用的结果。正确的做法是使用 None 作为默认值,并在函数内部初始化可变对象:

def func(a, b=None): 
   if b is None: 
     b = [] 
   b.append(a) 
   print(f'a: {a}') 
   print(f'b: {b}') 

2. 手动管理文件资源

在操作文件时,如果忘记关闭文件句柄,可能导致资源泄露。虽然可以使用 try...finally 确保关闭,但更推荐的方式是使用上下文管理器(with 语句),它会自动处理资源的打开和关闭。

file = open('file_name') 
  try: 
    for line in file: 
      print(line) 
  finally: 
    file.close()

使用上下文管理器的写法更加简洁且安全:

with open('file_name') as file: 
    for line in file: 
      print(line)

3. 捕获所有异常

使用 except Exception 会捕获所有异常,包括 KeyboardInterrupt(用户中断)和 AssertionError(断言失败)。这可能导致程序无法响应中断或掩盖潜在的逻辑错误。正确的做法是捕获具体的异常类型,如 ValueError 或 IOError。

try: 
    pass # 做一些操作 
  except Exception as e: 
    print(f'Exception {e}')

4. 滥用 for-else 语法

Python 的 for...else 语法中,else 块在循环正常结束(即没有执行 break)时执行。许多开发者不熟悉这一特性,导致代码逻辑混乱。虽然功能上等价,但使用标志变量可能更直观。

numbers = [1, 2, 3, 4, 5] 
 is_odd_exist = False 
 for n in numbers: 
   if n % 2 == 1: 
     is_odd_exist = True 
     break 
 if is_odd_exist: 
   print('Odd exist') 
 else: 
   print('Odd not exist')

使用 for...else 的写法:

numbers = [1, 2, 3, 4, 5] 
  for n in numbers: 
    if n % 2 == 1: 
      print('Odd exist') 
      break 
  else: 
    print('Odd not exist')

5. 低效的字典遍历

在遍历字典时,直接通过键获取值(dict[key])效率较低。推荐使用 .items() 方法直接获取键值对,代码更简洁且性能更好。

member = {'name': 'xiaoming', 
       'age': 18, 
       'mobile': '18312341234'} 
  for key in member: 
    print(f'{key}: {member[key]}')

使用 .items() 的写法:

member = {'name': 'xiaoming', 
      'age': 18, 
      'mobile': '18312341234'} 
 for key, val in member.items(): 
   print(f'{key}: {val}')

以上就是 Python 开发中常见的 5 个坏习惯及修正方案的详细内容,更多关于 Python 最佳实践的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。