往事不堪回首,回忆曾经写过的最蠢的Python代码

文章目录

  • 0 引言
  • 1 无限循环
  • 2 无效的变量赋值
  • 3 冗余的代码
  • 4 使用 eval 函数执行字符串代码
  • 5 不必要的类型转换
  • 6 使用 exec 执行外部命令
  • 7 使用混乱的命名
  • 8 使用硬编码的值
  • 9 忽略异常
  • 10 不合理的注释
  • 11 使用全局变量
  • 12 直接修改迭代对象
  • 13 滥用递归
  • 14 使用 += 运算符连接字符串
  • 15 漏掉缩进
  • 16 使用 is 进行浮点数比较
  • 17 无效的列表切片
  • 18 使用 continue 跳出多个循环

0 引言

没有写过蠢的代码,就不会知道自己曾经犯过哪些编程的低级错误。借此官方活动,回忆下曾经写过的最蠢的Python代码。

1 无限循环

while True:print("I am ZPILOTE!")

这段代码创建了一个永远不会结束的循环,因为条件始终为 True,没有停止或退出条件。所以一定要确保循环中包含适当的终止条件,以避免无限循环。

2 无效的变量赋值

x = x + 1

这段代码尝试将变量 x 的值与自身加1的结果进行赋值,但在赋值之前,x 并没有被定义,因此会引发 NameError在使用变量之前确保对其进行定义或初始化。

3 冗余的代码

if x > 5:print("x is greater than 5")
elif x > 3:print("x is greater than 3")

这段代码中的第二个条件 elif x > 3 是多余的,因为如果第一个条件 x > 5 成立,那么第二个条件肯定也成立。避免编写重复或多余的代码,确保每个条件或分支都有其独特的目的。

4 使用 eval 函数执行字符串代码

x = 5
eval("print(x + 1)")

使用 eval 函数可以执行字符串中的代码,但这也意味着它会执行任何传递给它的代码,包括潜在的恶意代码。这在安全性上是一个潜在的风险。避免使用 evalexec 执行字符串代码,尽量使用更安全的替代方案。

5 不必要的类型转换

x = str(5)

这段代码将整数值 5 转换为字符串类型,并将结果赋给变量 x。这是多余的,因为在大多数情况下,Python 能够自动处理不同类型之间的操作。避免进行不必要的类型转换,尽量让 Python 自动处理类型转换。

6 使用 exec 执行外部命令

import os
command = "ls"
exec(os.system(command))

使用 os.systemexec 来执行外部命令是一种不安全的做法,因为它允许执行任意的系统命令,可能导致安全问题。尽量避免使用 os.systemexec 执行外部命令,可以使用更安全的替代方案,如 subprocess 模块。

7 使用混乱的命名

a = 5
b = "hello"
c = a + b

这段代码使用了不具有描述性的变量名,使得代码难以理解和维护。良好的命名能够提高代码的可读性。选择具有描述性的变量和函数名,使代码更易于理解和维护。

8 使用硬编码的值

for i in range(10):print(i)

这段代码使用硬编码的值 10,而不是使用变量或常量来表示它。这会导致代码的可维护性降低,因为需要更改相同的值时,必须在多个位置进行修改。将常量或可配置的值存储在变量或常量中,以提高代码的可维护性。

9 忽略异常

try:# Some code
except:pass

这段代码使用了一个空的 except 块,它会捕获任何异常并简单地忽略它们,而不做任何处理。这可能会导致难以调试和定位错误。在代码中合理地处理错误和异常,避免简单地忽略它们,以便更好地调试和处理问题。

10 不合理的注释

x = 5  # This is a variable

这段代码的注释 # This is a variable 是多余的,因为它没有提供任何有用的信息,只是重复了代码本身的含义。

11 使用全局变量

def increment():global xx += 1

使用 global 关键字将局部变量提升为全局变量可以导致代码的可维护性降低,因为在整个程序中都可以修改和访问该变量,增加了代码的复杂性。尽量避免使用全局变量,而是使用函数参数和返回值来传递和获取数据。

12 直接修改迭代对象

for item in some_list:some_list.remove(item)

在迭代一个列表的同时,直接修改列表本身会导致遍历过程中的错误行为,因为列表的大小在迭代过程中发生了变化。在迭代对象时,避免直接修改它们,以免导致意外的行为。

13 滥用递归

def countdown(n):if n <= 0:returnprint(n)countdown(n - 1)

这段代码使用递归来实现倒计时,但没有设置递归的终止条件,导致无限递归,最终会导致栈溢出错误。在使用递归时,确保设置递归的终止条件,以避免无限递归。

14 使用 += 运算符连接字符串

result = ""
for i in range(10):result += str(i)

在循环中使用 += 运算符来连接字符串会导致性能问题,因为每次迭代都会创建一个新的字符串对象。更好的做法是使用列表或生成器来收集字符串,然后使用 join 方法来连接它们。

15 漏掉缩进

if True:
print("IndentationError: expected an indented block")

这段代码在if语句后面没有正确的缩进,导致 IndentationError确保代码块的缩进正确。

16 使用 is 进行浮点数比较

x = 0.1 + 0.1 + 0.1
if x is 0.3:print("x is equal to 0.3")

在这个例子中,使用 is 运算符进行浮点数比较是错误的。is 运算符用于比较对象的身份,而不是值。正确的做法是使用 == 运算符进行浮点数的值比较。

17 无效的列表切片

my_list = [1, 2, 3]
print(my_list[1:0])

这段代码中的切片 my_list[1:0] 是无效的,因为起始索引(1)大于结束索引(0)。正确的切片应该是 my_list[0:1]在使用列表切片时,确保起始索引小于结束索引,以获取正确的切片结果。

18 使用 continue 跳出多个循环

for i in range(5):for j in range(5):continue

这段代码中的 continue 语句只会跳出内部的循环,而不会跳出外部的循环。因此,它对于退出多个循环是无效的。要跳出多个循环,可以使用更复杂的条件或者使用标签和 break 语句来实现。




须知少时凌云志,曾许人间第一流。



⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔

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

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

相关文章

Retrofit项目 - Android和Java的类型安全的HTTP客户端

A type-safe HTTP client for Android and Java 官网&#xff1a;Retrofit Retrofit turns your HTTP API into a Java interface. public interface GitHubService { GET("users/{user}/repos") Call<List<Repo>> listRepos(Path("user"…

华为云云耀云服务器L实例评测|2核2G跑mysql性能测试

前言 上一次我们介绍了华为云云耀云服务器L实例的基本信息&#xff0c;从购买到特色都做了简要介绍。但是 很多人看到这个配置又产生了迟疑&#xff0c;主要是因为云耀现在提供的全系是2核&#xff0c;性能吃得消吗&#xff1f;今天我们就来做一个性能测试 环境准备 因为我们…

朋友圈为什么会被折叠?

“朋友圈&#xff0c;正在无限制被折叠” 分享动态&#xff0c;共享生活&#xff0c;是大多数人对于朋友圈的认知。但实际上&#xff0c;我们时不时要和朋友圈里的商家做斗争。 现在微信也越来越多的规则&#xff0c;让发圈技巧变得瞬间失效。今天我们看看这些规则&#xff0…

2023华为杯数学建模研赛思路分享——最全版本A题深度解析

问题回顾&#xff1a; WLAN网络信道接入机制建模 1. 背景 无线局域网&#xff08;WLAN, wireless local area network&#xff09;也即Wi-Fi广泛使用&#xff0c;提供低成本、高吞吐和便利的无线通信服务。基本服务集&#xff08;BSS, basic service set&#xff09;是WLAN的…

Android 10以上出现的 android Permission denied 读写权限问题解决方法

原因&#xff1a; 从Android 10 开始&#xff0c;应用即使申请了权限&#xff0c;也只能读写自己外部存储的私有目录&#xff0c;就是Android/data/对应应用包名 下的相关目目录。除此之外任何目录的读写都会被拒绝&#xff0c;并提示android Permission denied。 解决方案 在A…

C++标准模板库——vector的使用及其模拟实现

目录 一. vector的介绍 1.vector的介绍 二.vector的使用 vector中常见接口的介绍vector的构造和析构函数vector的三种遍历方式 三.vector的模拟实现 vector的增删查改vector容器的容量变化和大小增减vector迭代器失效问题vector的小框架 构造函数和析构函数迭代器和operat…

有什么推荐使用的企业上网行为管理软件?

在当今信息化社会&#xff0c;企业的上网行为管理越来越重要。企业上网行为软件是一种能够监控和管理企业员工上网行为的工具&#xff0c;它可以帮助企业更好地管理网络资源&#xff0c;提高工作效率&#xff0c;保护企业信息安全&#xff0c;并符合相关的法律法规。本文将深入…

尝试访问启动磁盘设置时出错怎么办?

当出现“尝试访问启动磁盘设置时出错”这样的错误提示&#xff0c;而且启动转换控制面板打不开了时&#xff0c;是无法开启触摸板功能的。我们可以使用以下方法来解决问题。 1. 在Windows桌面左下角搜索框输入“计算机管理”后点击“打开”。 2. 点击“本地用户与组”&#xff…

[论文阅读]A ConvNet for the 2020s

摘要 视觉识别的咆哮的20年代开始于ViTs的引入&#xff0c;它很快取代了卷积神经网络&#xff0c;成为最先进的图像分类模型。另一方面&#xff0c;一个原始的ViT在用于一般的比如目标识别和语义分割的计算机视觉任务的时候面临困难。层次Transformer(例如&#xff0c;Swin-Tr…

新手小白如何入门学习CTF?【网络安全】

最近有很多新手小白私信我&#xff1a;如何学习CTF&#xff1f;新手小白应该怎么入门CTF&#xff1f;想打CTF&#xff0c;但是没有思路怎么办&#xff1f; 昨天下班之后&#xff0c;花了几个小时&#xff0c;整理了一下CTF学习的思路与方法&#xff0c;分享给大家&#xff0c;如…

十一、流程控制-if-switch

流程控制 1.流程控制1.1.复合语句1.2.if语句★1.2.1.简单条件的if语句★1.2.2.if...else语句★1.2.3.if...else if多分支语句★1.2.4.if语句的嵌套★ 1.3.switch多分支语句★1.3.1.switch语句通用语法★1.3.2.switch表达式★训练一★训练二★ ————————————————…

Linux 安装 git

一 . 安装git 方式1&#xff1a;通过yum 安装 yum -y install git查看是否安装成功 git --version安装目录在&#xff1a;/usr/libexec/git-core yum 安装有一些缺点 &#xff1a;不能自己指定安装目录、安装版本 方式 2 下载tar.gz 包 配置 查看git 版本&#xff1a;Index…

KF32A学习笔记(一):工程导入、编译烧录方法(KF32 IDE+ KF32 PRO)

目录 概述KF32 IDE打开现有项目工程1.工程导入2.编译工程3.下载程序 KF32 PRO 概述 本文主要是对KF32A150芯片程序的编译、烧录方法进行说明。针对开发过程中的编译烧录和无代码情况下的烧录两种场景&#xff0c;需要安装ChipON PRO KF32和ChipON IDE KF32两个上位机工具&…

【面试经典150 | 数组】跳跃游戏 II

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;贪心 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容…

FBX文件结构解读【文本格式】

FBX 格式几乎受到所有 3D 引擎的支持&#xff0c;是 Autodesk 开发的 3D 模型的专有格式。它支持顶点、索引、法线、UV坐标、材质和动画。 FBX还支持许多其他类型的信息&#xff0c;但它们对游戏引擎几乎没有用处。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 有两种…

密度估计公式

极大似然估计&#xff1a; y p ( x 1 , x 2 , x 3 , . . . , x n ) 1 2 π σ e − ( x 1 − μ ) 2 2 σ 2 1 2 π σ e − ( x 2 − μ ) 2 2 σ 2 . . . 1 2 π σ e − ( x n − μ ) 2 2 σ 2 y p(x_1,x_2,x_3,...,x_n) \frac{1}{\sqrt{2\pi} \sigma} e ^{-\frac{(x_1…

9.基于粤嵌gec6818开发板小游戏2048的算法实现

2048源码&#xff1a; 感兴趣的可以去了解一下2048优化算法&#xff1a; 基于蒙特卡罗树搜索的_2048_游戏优化算法_刘子正 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #incl…

2024贝壳校招面试真题及其详解(一)

1.spring 和spring boot区别 Spring 和 Spring Boot 都是 Java 框架,用于构建企业级应用程序。Spring 是一个完整的框架,提供各种功能,包括依赖注入、事务管理、数据访问、Web 开发等。Spring Boot 是一个基于 Spring 的框架,旨在简化 Spring 应用程序的开发和部署。 Sp…

9月22日,每日信息差

今天是2023年09月22日&#xff0c;以下是为您准备的14条信息差 第一、亚马逊将于2024年初在Prime Video中加入广告。Prime Video内容中的广告将于2024年初在美国、英国、德国和加拿大推出&#xff0c;随后晚些时候在法国、意大利、西班牙、墨西哥和澳大利亚推出 第二、中国移…

程序员自由创业周记#12:999%

下载量涨了999% 在此之前&#xff0c;我的Apple开发账号上只有一个产品-学伟扫描&#xff0c;因为没有推广&#xff0c;只靠自然流量&#xff0c;每天的下载量寥寥无几&#xff0c;这种稳定无人问津的状态断断续续保持了4年。 之前的周记里介绍了最近在做创业的第二个项目-学伟…