11 个 Python 编码习惯

让你成为糟糕程序员的 11 个 Python 编码习惯

简介 Python 因其简洁性和可读性而备受推崇,但即使是最有经验的程序员也可能会陷入影响代码质量的习惯中。

在本博客中,我们将探讨 10 种常见的编码习惯,它们会降低您作为 Python 程序员的效率。

通过识别和纠正这些习惯,您可以提高代码的可维护性、效率和整体质量。

让我们来看看你是否有这些编码陋习。

  1. 不使用描述性变量名

有意义的变量名可以提高代码的清晰度。使用 "a "或 "temp "这样含糊不清或通用的名称会使代码难以理解。请选择能表达变量用途的描述性名称。

# 不好
x = calculate(user_input)

# 好的
result = calculate(user_input)
  1. 忽略注释和文档

清晰的注释和文档对于理解复杂的代码非常宝贵。忽略对函数和类的适当解释会给维护和协作带来挑战。


# 不好
def calc(x, y):
    return x + y

# 好
def calculate_sum(x, y):
    """
    返回两个数字的和。
    "
""
    返回 x + y
  1. 过度使用全局变量

全局变量可能导致意想不到的行为和错误。请优先使用函数参数或类属性,以尽量减少意外的副作用,提高代码的模块化程度。

# 不好
x = 5

def multiply(y):
    return x * y

# 好
def multiply(x, y):
    return x * y
  1. 未利用列表理解功能

列表理解为生成列表提供了一种简洁可读的方法。如果不使用它们,就会导致代码冗长、效率低下。

# 坏
平方 = []
for num in range(5):
    squares.append(num ** 2)

# 好
squares = [num ** 2 for num in range(5)]
  1. 忽略 PEP 8 指南

遵循 Python Enhancement Proposal (PEP) 8 指南看似无关紧要,但格式的一致性能显著提高代码的可读性和协作性。忽略这些指南会导致混乱,并妨碍与其他开发者的协作。

# Bad
if condition:
value = 42

# 好
if condition:
    value = 42
  1. 编写低效循环

使用 for 循环来完成一些可以用内置函数如 map()filter() 或 comprehensions)解决的简单任务,会不必要地减慢代码的运行速度。

# 不好
results = []
for num in nums:
    results.append(some_function(num))

# 好的
results = list(map(some_function, nums))
  1. 不正确处理异常

忽略异常或使用简单的 except: 子句会隐藏错误并导致意外故障。具体说明你捕获和处理的异常,可以改进调试和错误解决。

# 糟糕
try:
    value = int(user_input)
except:
    value = None

# 好
try:
    value = int(user_input)
except ValueError:
    value = None
  1. 内存管理不善

创建不必要的数据结构副本或不释放文件句柄等资源会导致内存泄漏和效率低下。

# 坏
data = read_large_file()
process(data)
# 数据保留在内存中

# 好的
with open('large_file.txt') as file:
    data = file.read()
process(data)
# 数据从内存中释放
  1. 不接受模块化

编写单一脚本而不将代码分解为可重复使用的函数或类,会使代码难以测试、调试和维护。

# 不好
def main():
    # 单体脚本

# 好
def process_data(data):
    # 模块化函数

if __name__ == '__main__'
    main()
  1. 硬编码值

在代码中硬编码值会给维护和可扩展性带来挑战。请使用常量或配置文件:

# 不好
def calculate_area(radius):
    return 3.14 * radius ** 2

# 好
PI = 3.14

def calculate_area(radius):
    return PI * radius ** 2
  1. 忽略类型注解

忽略类型注解会导致意想不到的行为。使用注释可提高代码的可读性,并有助于捕捉与类型相关的错误:

# 不好
def add(a, b):
    return a + b

# 好
def add(a: int, b: int) -> int:
    return a + b

Python编程基础 I

触发某些条件或者说满足某些预先定义的条件后,立即执行的概念是条件和分支,它允许我们根据特定条件引导我们的程序执行不同的操作。

比较运算符

比较操作用于比较一个值或操作数,并基于条件生成一个布尔值。在比较两个值时,您可以使用以下运算符:

等于:==

不等于:!=

大于:>

小于:<

大于等于:>=

小于等于:<=

让我们给变量 a 赋值为 5。使用两个等于 == 符号表示等于运算符,以确定两个值是否相等。下面的案例将变量 a 与 6 进行比较。

# 等于条件
a = 5
a == 6

>>> False

我们可以将相同的方法应用于字符串。例如,我们可以在两个不同的字符串上使用等于运算符。由于这些字符串不相等,我们得到一个 False。

# 使用等于号比较字符串
"ACDC" == "Michael"

>>> False
# 使用不等于号比较字符串
"ACDC" != "Michael"

>>> True

分支

当根据不同的输入来控制代码流程时,分支是一个不错的选择。if 语句的作用类似于一个只在条件为真时才打开的锁定门。

然而,如果条件为假,程序将继续进行而不执行任务。这种简单但有效的方法允许您根据特定条件执行不同的语句。

我们可以使用之前学过的条件语句作为 if 语句中需要检查的条件。语法非常简单:

if 条件语句:

其中包含一个 if 单词、任何条件语句,并在末尾加上一个冒号。

在一个新行中以缩进开始需要在此条件下执行的任务。在冒号后面并且带有缩进的代码行仅在 if 语句为真时执行。当代码行不再包含缩进时,任务将结束。

让我们看一个具体的例子。


# 基本的 if 语句
x = 20
y = 5

# 可能为真或假的表达式
if x < y:
    # 在缩进中,我们有在条件为真时运行的表达式    
    print("x 比 y 小")

# 在 if 语句之后的语句将无论条件是真还是假都会运行
print("继续进行")
x 比 y 小,继续进行

如果在 else 语句之前没有任何条件为真,则该语句将运行一块代码。

# else 语句
x = 3
y = 10

if x > y:
    print("x 比 y 大")
else:
    print("x 比 y 小")

print("继续进行")

>>> x 比 y 小
    继续进行

elif 语句,即 else if 的缩写,允许我们在之前的条件语句为假时检查附加条件。

如果 elif 语句的条件为真,则将运行替代的表达式。考虑音乐会的例子,如果 x 和 y 相等会怎么样?

# 带有 elif 语句的 x 等于 y
x = 3
y = 3

if x < y:
    print("x 比 y 小")
elif x == y:
    print("x 等于 y")
else:
    print("x 比 y 大")

x 等于 y

逻辑运算符

有时,您可能需要同时验证多个条件。例如,您可能希望确保两个不同的条件都为真。逻辑运算符使您能够混合或更改条件。

and
or
not

这些运算符在两个变量上使用以下真值表进行总结:

alt

https://introcs.cs.princeton.edu/java/71boolean/

and 语句仅在两个条件都为真时为真。

or 语句在一个条件或两个条件都为真时为真。

not 语句输出相反的真值。

让我们看一个例子:

humidity = "low"
temperature = "low"

if humidity == "low" and temperature == "high":
    print("这是一个炎热的沙漠")
elif humidity == "low" and temperature == "low":
    print("这是一个北极沙漠")
elif humidity == "high" and temperature == "high":
    print("这是一个热带森林")
else:
    print("我不知道!")

>>> 这是一个北极沙漠

结论

在本文中,我们介绍了Python中的条件和分支的概念。在接下来的文章中,我们将深入探讨循环。

要成为一名精通 Python 的程序员,改掉不良的编码习惯至关重要。通过遵守 PEP 8 准则、使用描述性名称、记录代码并采用高效的实践如列表解析。

您将提高代码的可读性、可维护性和整体质量。解决这些常见的陷阱不仅能让你成为更好的 Python 程序员,还能为你和你的合作者带来更积极的编码体验。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/67150.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

Intel汇编和ATT汇编的区别?

一、前缀不同 在 Intel 语法中&#xff0c;没有寄存器前缀或立即前缀。 然而&#xff0c;在 AT&T 中&#xff0c;寄存器的前缀是“%”&#xff0c;而 immed 的前缀是“$”。 Intel 语法十六进制或二进制即时数据分别带有“h”和“b”后缀。 此外&#xff0c;如果第一个十六…

算法通关村第七关——递归和迭代实现二叉树前中后序遍历

1.递归 1.1 熟悉递归 所有的递归有两个基本特征&#xff1a; 执行时范围不断缩小&#xff0c;这样才能触底反弹。终止判断在调用递归的前面。 写递归的步骤&#xff1a; 从小到大递推。分情况讨论&#xff0c;明确结束条件。组合出完整方法。想验证就从大到小画图推演。 …

使用AffNet和HardNet进行图像匹配

一、说明 我们有一个任务是找到与给定查询图像最匹配的图像。首先&#xff0c;我们在OpenCV中尝试了使用SIFT描述符和基于Flann的匹配器的经典图像匹配。结果是完全错误的。然后是词袋...最后&#xff0c;找到了AffNet和HardNet。 二、关于AffNet和HardNet 本文专门介绍如何进…

【枚举倍数+容斥】CF803 F

Problem - F - Codeforces 题意&#xff1a; 思路&#xff1a; 正难则反&#xff0c;考虑容斥 即考虑gcd ! 1的所有子序列个数 因为子序列内部无序&#xff0c;因此不算真正的子序列&#xff0c;考虑枚举倍数 根据经典套路&#xff0c;我们去枚举 gcd&#xff0c;然后去枚…

win10下如何安装ffmpeg

安装ffmpeg之前先安装win10 绿色软件管理软件&#xff1a;scoop. Scoop的基本介绍 Scoop是一款适用于Windows平台的命令行软件&#xff08;包&#xff09;管理工具&#xff0c;这里是Github介绍页。简单来说&#xff0c;就是可以通过命令行工具&#xff08;PowerShell、CMD等…

Pytorch安装教程:最新保姆级教程

目录 概述 重要的事情说三遍&#xff1a;不需要装cuda、不需要装cuda、不需要装cuda 1.查看自己NVIDIA版本 2.创建一个conda 环境 3.安装pytorch 本文意在帮助即将步入深入学习领域的学子 在这之前首先你需要安装好anaconda&#xff0c;不懂的可以下面这篇文章 最新Anaco…

C语言的动态分配空间C++的动态分配空间问题

动态分配空间 C&#xff1a;1、malloc 2、calloc C&#xff1a;new运算符 一 malloc malloc()&#xff1a; 这个函数用于分配一块指定大小的内存块&#xff0c;并返回一个指向该内存块的指针。语法如下&#xff1a; void* malloc(size_t size); 示例&#xff1a; int* ptr …

【软件测试】我的2023面试经验谈

最近行业里有个苦涩的笑话&#xff1a;公司扛过了之前的三年&#xff0c;没扛过摘下最近的一年&#xff0c;真是让人想笑又笑不出来。年前听说政策的变化&#xff0c;大家都满怀希望觉得年后行情一片大好&#xff0c;工作岗位激增&#xff0c;至少能有更多的机会拥抱未来。然而…

nodejs+vue+elementui美食网站的设计与实现演示录像2023_0fh04

本次的毕业设计主要就是设计并开发一个美食网站软件。运用当前Google提供的nodejs 框架来实现对美食信息查询功能。当然使用的数据库是mysql。系统主要包括个人信息修改&#xff0c;对餐厅管理、用户管理、餐厅信息管理、菜系分类管理、美食信息管理、美食文化管理、系统管理、…

android app控制ros机器人五(百度地图)

半吊子改安卓&#xff0c;新增了标签页&#xff0c;此标签页需要显示百度地图 按照官方教程注册信息&#xff0c;得到访问应用AK&#xff0c;步骤也可以参照下面csdn Android地图SDK | 百度地图API SDK 【Android】实现百度地图显示_宾有为的博客-CSDN博客 本人使用的是aar开…

metaRTC7 demo mac/ios编译指南

概要 metaRTC7.0开始全面支持mac/ios操作系统&#xff0c;新版本7.0.023 mac os demo 包含有srs/zlm的推拉流演示。发布版自带了x64版第三方类库&#xff0c;arm版第三方类库还需开发者自己编译。 源码下载 下载文件metartc7.023.7z https://github.com/metartc/metaRTC/re…