Python编程的16个坏习惯

1、手动进行字符串格式化

# 坏习惯

name = "Alice"

greeting = "Hello, " + name + "!"

 

# 好习惯

name = "Alice"

greeting = f"Hello, {name}!"

 

理由:使用+进行字符串拼接会导致代码可读性差,而且在复杂情况下容易出错,f-string 可读性更好

 

2、手动关闭文件

# 坏习惯

file = open("example.txt", "r")

content = file.read()

file.close()

 

# 好习惯

with open("example.txt", "r") as file:  

  content = file.read()

 

理由:手动关闭文件容易忘记,使用上下文管理器(with语句)会在代码执行完毕后自动关闭文件,即使发生异常也会被正确处理,更加安全可靠

 

3、使用裸 except子句

# 坏习惯

try:  

  result = 10 / 0

except:  

  print("Error occurred")

 

# 好习惯

try:  

  result = 10 / 0 

except ZeroDivisionError:   

  print("Error occurred")

 

理由:裸 except 会捕捉所有异常,包括系统退出信号等。这可能会导致在处理异常时掩盖真正的错误,使得调度变得更加困难。

 

4、默认参数使用可变对象

# 坏习惯

def add_item(item, items=[]):  

  items.append(item)  

  return items

 

# 好习惯

def add_item(item, items=None):  

  if items is None:    

    item = []  

    items.append(item)  

  return items

理由:默认参数在函数定义时被计算,而不是在每次函数调用时。这意味着如果默认参数是可变对象(如列表或字典),那么它将在所有函数调用之间共享,导致意外的结果

 

5、不会使用推导式

# 坏习惯

squares = []

for i in range(5):  

  squares.append(i ** 2)

 

# 好习惯

squares = [i ** 2 for i in range(5)]

 

理由:推导式是一种简洁,可读性高的语法糖,可以减少代码行数,提高效率

 

6、使用 type(x) 检查类型

# 坏习惯

value = 42

if type(value) is int:  

  print("It is an integer")

 

# 好习惯

value = 42

if isinstance(value, int):  

  print("It is an integer")

 

理由:type 不如 isintance 灵活,且无法处理继承关系。

 

7、使用 ==判断是否为 None, True False

# 坏习惯

if x == None:  

  print("x is None")

 

# 好习惯

if x is None:  

  print("x is None")

 

理由:在Python中, None, True False 是单例对象,使用 is 能确保比较的是对象的身份。另外,对象的 __eq__方法可以被重载,这就意味着 == 可能不总是按照我们的期望的方式进行比较。

 

8、使用 bool(...) len(...) 进行条件检查

# 坏习惯

my_list = [1, 2, 3]

if len(my_list) != 0:  

  print("List is not empty")

 

# 好习惯

my_list = [1, 2, 3]

if my_list:  

  print("List is not empty")

 

理由:在条件判断时使用可读性更高的表达式,不必显式地检查长度或真值。

 

9、使用 range(len(...)), 而不是 enumerate

# 坏习惯

my_list = ['apple', 'banana', 'orange']

for i in range(len(my_list)):  

  item = my_list[i]  

  print(i, item)

 

# 好习惯

my_list = ['apple', 'banana', 'orange']

for i, item in enumerate(my_list):  

  print(i, item)

 

理由:enumerate()提供了在迭代中同时获取索引和值的优雅方式,比手动追踪索引更好

 

10、不了解字典的 items 方法

# 坏习惯

my_dict = {'a': 1, 'b': 2, 'c':3}

for key in my_dict:  

  print(key, my_dict[key])

 

# 好习惯

my_dict = {'a': 1, 'b': 2, 'c':3}

for key, value in my_dict.items():  

  print(key, value)

 

理由:items() 提供了更直接的方式同时获取键和值,避免了额外的字典查找。

 

11、不使用元组解包

# 坏习惯

coordinates = (3, 5)

x = coordinates[0]

y = coordinates[1]

 

# 好习惯

coordinates = (3, 5)

x, y = coordinates

理由:元组解包能够使代码更加简洁,提高可读性。

 

12、使用 time() 进行代码计时

# 坏习惯

start_time = time.time()

end_time = time.time()

 

# 好习惯

start_time = time.perf_counter()

end_time = time.perf_counter()

 

理由:perf_counter()提供了更高精度的计时,适用于测量小段代码的执行时间。time() 通常精度较低,可能不适合测量短时间间隔。

 

13、在生产环境使用 print 语句而不是日志

# 坏习惯

result = calculate_result()

print("Result:", result)

 

# 好习惯

import logging

result = calculate_result()

logging.info("Result: %s", result)

 

理由:print 语句是调度的一种方式,但在生产环境中使用日志更为合适,具备更多配置选项和级别

 

14、使用 import * 导入模块

# 坏习惯

from module import *

 

# 好习惯

from module import specific_function_or_class

 

理由:导入所有符号可能导致命名冲突,不利用代码维护。

 

15、不使用原始字符串

# 坏习惯

regular_string = "C:\\Documnets\\file.txt"

 

# 好习惯

regular_string = r"C:\Document\file.txt"

 

理由:使用原始字符串可以提高代码的可读性,尤其是在处理路径,正则表达式等需要反斜杠的情况下。原始字符串告诉读者不要解释反斜杠为转义字符。

 

16、不遵循 PEP8 编码规范

# 坏习惯

aVar=5

result=aVar+2

 

# 好习惯

a_var = 5

result = a_var + 2

 

理由:PEP8 提供了一致的代码风格,有助于提高代码的可读性,可维护性,以及团队协作。

 

posted @ 2024-07-31 11:24  业余砖家  阅读(1)  评论(0编辑  收藏  举报