11 个 Python 编码习惯

news2024/11/23 10:47:54

让你成为糟糕程序员的 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.coloradmin.cn/o/877217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入探析设计模式:工厂模式的三种姿态

深入探析设计模式&#xff1a;工厂模式的三种姿态 1. 简单工厂模式1.1 概念1.2 案例1.3 优缺点 2. 抽象工厂模式2.1 概念2.2 案例&#xff1a;跨品牌手机生产2.3 优缺点 3. 超级工厂模式3.1 概念3.2 案例&#xff1a;动物园游览3.3 优缺点 4. 总结 欢迎阅读本文&#xff0c;今天…

windows10和linux18.04中配置mmhuman3d

分类&#xff1a;动作捕捉 github地址&#xff1a;https://github.com/open-mmlab/mmhuman3d 所需环境&#xff1a; Windows10&#xff0c;CUDA11.6&#xff0c;conda 4.13.0&#xff0c;Visual Studio 2017&#xff1b; Ubuntu18.04&#xff0c;conda22.9.0&#xff0c;CUDA11…

人工智能能够通过所有[创造力测试]

沃顿商学院教授Ethan Mollick emollick 分享了三篇新的实验性论文&#xff0c;证明了AI在实际情境中的创造力。 https://www.oneusefulthing.org/p/automating-creativity “GPT-4 现在在替代用途测试中击败了 91% 的人类&#xff0c;在托伦斯创造性思维测试中击败了 99% 的人类…

每天一道leetcode:1466. 重新规划路线(图论中等广度优先遍历)

今日份题目&#xff1a; n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部决定重新规划路线&#xff0c;以…

网络安全专业术语英文缩写对照表

因在阅读文献过程中经常遇到各种专业缩写&#xff0c;所以把各种缩写总结了一下。 因能力有限&#xff0c;错误在所难免&#xff0c;欢迎进行纠错与补充&#xff1a;https://github.com/piaolin/CSAbbr 渗透相关 缩写全称解释备注XSSCross Site Script Attack跨站脚本攻击为…

前端食堂技术周刊第 94 期:TS 5.2 RC、从零实现 RSC、Redux 迁移至 ESM 之旅、HTML 满汉全席

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;葡茉美式 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…

揭秘国产操作系统的黄金测试利器:探索开源测试工具的神秘世界

揭秘国产操作系统的黄金测试利器&#xff1a;探索开源测试工具的神秘世界 文章目录 1.前言2.国产操作系统现状的深度解析3.国产操作系统的质量保障神器(开源测试工具)4.开源测试工具的重要性5.国产操作系统如何利用开源测试工具进行黄金测试6.国产操作系统的开源测试工具整合方…

python安装第三方包时报错:...\lib\site-packages\pip\_vendor\urllib3\response.py...

安装redis第三方包&#xff1a; pip install redis报错现象&#xff1a; 解决方法&#xff1a;使用以下命令可成功安装 pip install redis -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

IT运维:使用数据分析平台监控深信服防火墙

概述 深信服防火墙自身监控可以满足绝大部分需求&#xff0c;比如哪个应用占了最大带宽&#xff0c;哪个用户访问了哪些网站&#xff1f;这里我们为什么使用鸿鹄呢&#xff1f;因为我们要的是数据的处理和分析&#xff0c;比如某个用户在某个事件都做了哪些行为&#xff0c;这个…

OpenCV图像处理——轮廓检测

目录 图像的轮廓查找轮廓绘制轮廓 轮廓的特征轮廓面积轮廓周长轮廓近似凸包边界矩形最小外接圆椭圆拟合直线拟合 图像的矩特征矩的概念图像中的矩特征 图像的轮廓 查找轮廓 binary,contours,hierarchycv.findContours(img,mode,method)绘制轮廓 cv.drawContours(img,coutours…

找不到mfc140u.dll怎么办?mfc140u.dll丢失怎样修复?简单三招搞定

最近我遇到了一个问题&#xff0c;发现我的电脑上出现了mfc140u.dll文件丢失的错误提示。这个错误导致一些应用程序无法正常运行&#xff0c;让我感到非常困扰。经过一番研究和尝试&#xff0c;我终于成功修复了这个问题&#xff0c;并从中总结出了一些心得。 mfc140u.dll丢失原…

Claude2 Api接入方案

一&#xff0c;实现目标 接入钉钉机器人支持群聊和私聊 网上看了很多方案&#xff0c;因为Claude的api申请难度非常大&#xff0c;大部分都是说使用Slack&#xff0c;但是Slack只能免费使用一个月。作为一个完美主义怎么可能允许这样的事情发生。何如处理&#xff0c;抓网页。…

基于Redis实现全局唯一Id

微信公众号访问地址&#xff1a;基于Redis实现全局唯一Id 推荐文章&#xff1a; 1、使用原生Redis命令实现分布式锁 ​ 2、为什么引入Redisson分布式锁&#xff1f; 3、SpringBoot整合多数据源&#xff0c;并支持动态新增与切换&#xff08;详细教程&#xff09; 4、Sprin…

【计算机网络】Udp详解

前言 上几文章我们讲解了应用层协议Http和Https&#xff0c;要知道应用层协议有很多&#xff0c;这些都是程序员自己定制的&#xff0c;而真正要传输的时候&#xff0c;是要在操作系统的传输层进行的&#xff0c;今天我们就来学习一下传输层协议Udp的 标识一个通信 要进行跨…

黑马项目一阶段面试 自我介绍篇

面试官你好&#xff0c;我叫xxx&#xff0c;是来自xxxx的本科毕业生。我通过招聘网站/内推/线下招聘了解到的贵司&#xff0c;我具有扎实的Java后端的基础功底&#xff0c;基本掌握JavaSE、JavaEE流行技术的使用&#xff0c;并且我比较好学&#xff0c;心态也很乐观积极&#x…

docker nginx ssl设置

使用docker运行nginx&#xff0c;配置代理&#xff0c;和ssl设置&#xff0c;进行https访问 一 准备 本次在centos环境中 1.已安装docker&#xff0c;docker-compose 2.运行了一个后端服务容器&#xff0c;提供基本的接口访问【可选】 3.一个域名&#xff08;已经解析到服…

Linux命令200例:date用于显示和设置系统的日期和时间

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

MongoDB 更新文档(更新数组对象中的元素)

之前我们介绍了如何更新文档&#xff0c;并简单的介绍了更新文档时可以使用选项进行指定当更新内容不存在时&#xff0c;可以进行新增文档。具体可以参考&#xff1a; MongoDB 更新文档(更新一条文档)https://blog.csdn.net/m1729339749/article/details/129983304 最近遇到了…

Android实现超出固定行数折叠文字“查看全文“、“收起全文“

先上效果图 分析问题 网上有很多关于这个的代码&#xff0c;实现都过于复杂了&#xff0c;github上甚至还看到一篇文章600多行代码&#xff0c;结果一跑起来全是bug。还是自己写吧&#xff01;&#xff01;&#xff01; 如果我们需要换行的"查看全文"、"收起全…

用汇编指令求两个数的最大公约数 求for循环实现1~100

1.用汇编指令求两个数的最大公约数 2.用汇编指令求for循环实现1~100