首页 > 编程语言 >Python编程的16个坏习惯

Python编程的16个坏习惯

时间:2024-07-31 11:29:10浏览次数:8  
标签:16 Python 坏习惯 item result time print my

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 提供了一致的代码风格,有助于提高代码的可读性,可维护性,以及团队协作。

 

标签:16,Python,坏习惯,item,result,time,print,my
From: https://www.cnblogs.com/yeyuzhuanjia/p/18334254

相关文章

  • Flask框架入门:快速搭建轻量级Python网页应用
    转载: Flask框架入门:快速搭建轻量级Python网页应用1. Flask基础Flask是一个使用Python编写的轻量级Web应用框架。它的设计目标是让Web开发变得快速简单,同时保持应用的灵活性。Flask依赖于两个外部库:Werkzeug和Jinja2,Werkzeug作为WSGI工具包处理Web服务的底层细节,Jinja2作为......
  • 我有一个“pywhatkit”python 模块属性错误。你能帮我吗?
    Pywhatkit已成功安装,但在任何属性代码中都显示属性错误。我可以修复它吗?我尝试过的代码:importpywhatkitpywhatkit.sendmsg('071*******','Ado',15,48)我如何修复这个问题:我将程序文件名“pywhatkit.py”重命名为“anotername.py”。谢谢所有帮......
  • 如何使用Python获取Excel文件中嵌入图像的位置?
    我正在使用包含嵌入图像的Excel文件(.xlsx)。我需要使用Python以编程方式提取这些图像的位置(单元格引用)。这是我到目前为止所尝试过的:任何建议将不胜感激。使用openpyxl和openpyxl-image-loader:我没有处理嵌入图像。解压缩Excel文件并检查内容:......
  • cmd输入python直接弹出windows应用商店
    明明已经安装好了python,并且也确认配置好了python的环境变量,但是在cmd里输入python后,直接弹出windows商店,python获取界面,其实只需要关闭系统里的应用执行别名设置,最近出来的电脑系统里是自带开启了python相关的执行别名。步骤是【设置】-【应用】-【高级应用设计】-【应用执行名称......
  • Python 数学问题:(2**3+(5+6)**(1+1)) =?
    (2**3+(5+6)**(1+1))=?如果您能提供一步一步的解决方案,我将不胜感激。计算机向我展示了答案,但我只是不知道它是如何得出的。所以,如果可以的话,让我知道就太好了。我已经被“**”部分困住了,而且也对“3”的用途感到困惑。我尝试了这个问题,得到了131,但这不是答案。让我......
  • Python - Generators
    Thetaskofimplementingiteratorscanbesimplifiedbyusinggenerators.Wehaveseenhowtocreatecustomiteratorsusingtheobject-orientedway,i.e.,bydefiningaclassthathas__init__,__next__,and__iter__methods.Forexample,wesawtheCubes......
  • Python应用—加密、解密文件
    1.创作需求日常生活中我们有很多文件想要保密。这个脚本可以方便大家对所有的文件类型进行加密,解密。最大程度保护我们的隐私。2.话不多说,直接上代码fromcryptography.fernetimportFernetimportdocx#加密defencrypt_file(filename):#生成密钥key=Fer......
  • T-SQL——关于安装 Mcrosoft.ACE.oledb.16.0出现的32位和64位的冲突问题
    目录1.关于安装Access数据引擎:microsoft.ACE.oledb.16.0(或者:microsoft.ACE.oledb.12.0)2.关于MSSM界面导入,选择目标时候,没有SQLServerNativeClient11.0shanzm-2024年7月31日10:47:241.关于安装Access数据引擎:microsoft.ACE.oledb.16.0(或者:microsoft.ACE.oledb.12.0)公司......
  • phpstudy_2016-2018_rce_backdoor漏洞复现
    phpstudy_2016-2018_rce_backdoor说明内容漏洞编号phpstudy_2016-2018_rce漏洞名称RCE(RemoteCommand|CodeExecute)漏洞评级高危影响范围phpStudy2016、phpStudy2018漏洞描述攻击者可以利用该漏洞执行PHP命令,也可以称作phpStudy后门。漏洞描述攻击者可以利用该漏......
  • 三种语言实现二维前缀和(C++/Python/Java)
    题目输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1,y1,x2,y2表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数......