Python不是一门伟大的语言

作为一门简洁易用、生态蓬勃且具有高泛用性的编程语言,Python一直以来都被不少人称作“编程语言中的瑞士军刀”。

尤其随着近来AI热潮席卷全球,Python在编程语言圈中的地位也随之水涨船高,甚至一度被视作AI专用语言或大数据专用语言。

然而从语言特性出发,Python真的如人们所说的这般伟大么?本文将为你阐明Python语言不那么迷人的方面,而这些可能会让你质疑你对这门流行语言的了解。 

1、优点、缺点和争议点

不可否认,Python庞大的生态系统及其大量的第三方库非常棒。大量的工具和资源选择使其能够成为需要快速解决问题或创建原型的开发人员的首选。

开发者A:“嘿,我需要建立一个网络爬虫,但我不知道如何开始。”开发者B:“没问题!只需使用 BeautifulSoup 和 Requests from Python。轻而易举!” 

然而尽管Python有着值得称道的优势,但其也有一些令人眼花缭乱的缺点。例如,约有400种格式化字符串的方法。这使得Python给人的感觉不像是一种简洁易用的语言,而更像是希望将它的使用者绕晕。

开发者A:“为什么在Python中格式化字符串的方法这么多?!”开发者B:“我哪知道?我想你最好选择一个并坚持下去。” 

对于某些人来说,Python的强制缩进可能是一个很有争议的问题。虽然它确实在一定程度上加强了一致性和可读性,但也有不少人认为它有点过于严格。同样,关于Python动态类型的争论也是一个经久不衰的话题,有些程序员喜欢动态类型的灵活,而另一些程序员则厌恶其所导致的难以发现的错误。

开发者A:“我喜欢 Python 的强制缩进!这能使代码变得更加简洁。” 开发者B:“呃,我受不了了!感觉我的代码就像是穿着一件紧身衣!” 

2、特殊的陷阱

Python的三元表达式常因其非常规的排列而被人所诟病。虽然大多数语言遵循首先声明条件的一致原则,但 Python 的做法恰恰相反,这可能会导致开发者在读取复杂的表达式时出现混淆。

开发者A:“我无法理解Python的三元表达式。”开发者B:“呃,我想这就像试图倒读一个句子。” 

Python 对单项元组的语法可能令人头疼。如果你忘记了结尾的逗号,它就不再是元组,而是一个表达式。这可能会导致难以察觉的错误并给开发者带来挫败感。

开发者A:“我又忘记了元组中的尾随逗号了!” 

开发者B:“恭喜你,遇到了一个经典的Python陷阱。” 

Python 的正则表达式比其他一些语言(如 JavaScript 或 Ruby)需要更多的样板文件,这会使得它们更笨重、更不优雅。

开发者A:“用Python编写正则表达式感觉就像再玩拼图游戏。”开发者B:“同意,它并不完全是Python优雅的缩影。” 

Python “神奇”的双下划线属性对于初学者来说可能看起来很晦涩难懂,但它们提供了一种强大的方法来自定义对象行为。然而不幸的是,他们神秘的本性经常让新手感到困惑。

开发者A:“Python中所有这些双下划线属性是怎么回事?”开发者B:“它们被称为'神奇方法'。旦是你必须掌握了它们的窍门,它们才会变得强大。” 

3、错误处理和不可变之谜

Python 的错误处理方法鼓励特定的错误处理,这被认为是一种好的做法。但是,在一个语句中捕获所有错误及其消息在开发过程中可能不直观且繁琐。

开发者A:“为什么我不能在 Python 中的单个语句中捕获所有错误?” 开发者B:“这一切都是为了推广最佳实践。但是这在开发过程中确实会很烦人。” 

Python 缺乏对不可变字典或复杂对象的原生支持,这些也是开发人员的主要痛点。虽然第三方库可以填补这一空白,但它仍然是一个难以忽视的不便。

开发者A:“为什么Python没有内置对不可变字典的支持?”开发者B:“好问题,但我也不知道为什么,只能感谢第三方库。” 

4、社区文化冲突

一些Python社区中的成员经常对“Pythonic(优雅的、地道的、整洁的)方式”有着近乎狂热的追求和坚持。这很容易在社区中形成一些氛围,让初学者或者意见不同的人感到沮丧或不自在。

开发者A:“我很沮丧,我经常被告知自己'不够Pythonic'。”开发者B:“你需要专注于编写干净、高效的代码,让别人认同你。” 

优越感有时会渗透到Python社区,有些Python开发人员看不起其他语言或编程风格。当然,这种态度并不代表整个社区。许多Python开发人员欣赏建设性的批评,并愿意向其他语言和范式学习。

开发者A:“为什么有些Python开发人员表现得像Python是有史以来最好的语言?”开发者B:“在任何编程语言社区中,总会有某种程度的自豪感。但记住,最好的开发人员总是乐于学习和成长。” 

5、Python是否被高估了

对于Python是否被高估了这个辩题,其实从Python的发展历程中我们不难窥得一隅。

十五年前的Python依靠着Web开始逐渐占领市场,彼时Python的背后,是Django以及后来的Flask等Web框架。而在此后真正使Python走上主流的则是数据科学领域的兴起。

从最初的NumPy、Scipy,再到后来真正将Python发扬光大的的Pandas、TensorFlow、PyTorch等。正是这些Google、Meta等大厂背书的数据科学框架的流行,才使得Python一步步走到了如今的地位。

然而细究之下不难发现,这些库和架构,却都不是用Python写成的,而是C、C++甚至Fortran。时至今日,Python最核心的竞争力依然是其“胶水”属性,粘合了易用的前端和高性能的后端。

诚然,今天的Python 在数据科学方面累积的优势的确难以被动摇,但在许多其他方面,Python的表现的依然无法超越甚至比肩各领域中的翘楚。

6、结语

归根结底,虽然Python无疑是一款流行且功能强大的编程语言,但它并非没有缺陷和争议点。通过研究Python的优势,劣势和争议点,我们能够更准确的描绘出更平衡的语言视图。

在探索其他编程语言和范式时,也必须意识到这些问题并保持开放的心态。

毕竟,最好的开发人员是那些能够适应和学习的人,他们拥抱各种编程语言的优势,同样的,他们也能够拥抱各种编程语言的劣势。

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

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

相关文章

QT第四讲

思维导图 基于QT的网络聊天室 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList…

二叉树的层序遍历(两种方法:迭代+递归)

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 解题思路&#xff1a;迭代法…

string类的模拟实现

文章目录 string类的模拟实现string基本框架的实现operator的实现string常用函数的实现 string类的模拟实现 前文对于string的常用函数做了讲解&#xff0c;由于string是一个面试官常考的点&#xff0c;总喜欢让模拟实现string类&#xff0c;下面来模拟实现一下string&#xf…

优化企业集成架构:iPaaS集成平台助力数字化转型

前言 在数字化时代全面来临之际&#xff0c;企业正面临着前所未有的挑战与机遇。技术的迅猛发展与数字化转型正在彻底颠覆各行各业的格局&#xff0c;不断推动着企业迈向新的前程。然而&#xff0c;这一数字化时代亦衍生出一系列复杂而深奥的难题&#xff1a;各异系统之间数据…

Vite创建Vue+TS项目引入文件路径报错

使用vite搭建vue3脚手架的时候&#xff0c;发现main.ts中引入App.vue编辑器会报错&#xff0c;但是不影响代码运行。 报错信息&#xff1a;TS2307: Cannot find module ‘./App.vue’ or its corresponding type declarations. 翻译过来是找不到模块或者相关的声明类型&#…

如何快速模拟一个后端 API

第一步&#xff1a;创建一个文件夹&#xff0c;用来存储你的数据 数据&#xff1a; {"todos": [{ "id": 1, "text": "学习html44", "done": false },{ "id": 2, "text": "学习css", "…

Redis7学习笔记01

一、redis7实战教程简洁 1、大纲&#xff1a; ①、适合对象&#xff0c;从小白到熟手&#xff0c;一套全包圆 ②、Redis专题-大厂面试题&#xff0c;含100道 ③、Redis专题-真实需求生产真实案例 ④、Redis7新特性 2、小白篇高阶篇&#xff1a; 3、大厂面试题&#xff1a…

自动化测试——APP测试

一、环境配置 1、安装jdk 配置环境变量 2、Android SDK 环境安装 3、Appium Server安装 4、模拟器安装 5、安装appium-python-client Python第三方库 二、APP自动化测试原理 三、Desired Capabilites——APPium自动化配置项 1、设置参数 2、操作系统 3、选择版本 4、设备名称…

TCP KeepAlive与HTTP Keep-Alive

TCP KeepAlive与HTTP Keep-Alive TCP KeepAliveHTTP Keep-AliveTCP服务器怎么检测客户端断开连接 TCP KeepAlive TCP连接建立之后&#xff0c;如果应用程序或者上层协议一直不发送数据&#xff0c;或者隔很长时间才发送一次数据&#xff0c;那么TCP需要判断是应用程序掉线了还…

Android Studio 启用设备远程调试配置完整步聚

启用手机设置->开发者选项-无线调试,然后选择允许 已启用后无线调试变成绿色 ,点击无线调试进入详情页面 点击Android Studio的Device Manager 下的WIFI图标 会弹出下图窗口 打开手机的开发者选项中的WIFI调试(无线调试)下的使用二维码配对设备进行扫描. 设备配对成功后手机…

Unity Shader - if 和 keyword 的指令比较

文章目录 环境TestingIf4Sampleunity shaderlab 中的 TestingIf4Sample.shadergraphics analyzer 中的 TestingIf4Sample.glsl TestingKW4Sampleunity shaderlab 中的 TestingKW4Sample.shadergraphics analyzer 中的 TestingKW4Sample.glsl 比较 环境 Unity : 2020.3.37f1 Pi…

在Linux中用strsignal函数输出对各种信号的描述

2023年7月29日&#xff0c;周六上午 目录 函数原型Linux有多少种信号使用示例 函数原型 #include <string.h>char* strsignal(int signum);strsignal函数接受一个整数参数signum&#xff0c;表示信号的编号。 用于把信号编号转换成一个简短的对这个信号编号的描述。 L…

JAVA SE -- 第十一天

&#xff08;全部来自“韩顺平教育”&#xff09; 异常-Exception 一、异常介绍 1、基本介绍 Java语言中&#xff0c;将程序执行中发生的不正常情况为“异常”&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 2、执行过程中发生的异常事件可分为两大类 …

FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示

1.场景 基于特权A7系列开发板&#xff0c;采用OV5640摄像头实时采集图像数据&#xff0c;并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中&#xff0c;用到的软件版本&#xff0c;如下表所示&#xff0c;基本的硬件情况如下。该项目对应FPGA工程源码…

图注意力网络论文详解和PyTorch实现

图神经网络(gnn)是一类功能强大的神经网络&#xff0c;它对图结构数据进行操作。它们通过从节点的局部邻域聚合信息来学习节点表示(嵌入)。这个概念在图表示学习文献中被称为“消息传递”。 消息(嵌入)通过多个GNN层在图中的节点之间传递。每个节点聚合来自其邻居的消息以更新其…

MyBatis(二)

文章目录 一.MyBatis的模式开发1.1 定义数据表和实体类1.2 配置数据源和MyBatis1.3 编写Mapper接口和增加xxxMapper.xml1.4 测试我们功能的是否实现. 二. Mybatis的增删查改操作2.1 单表查询2.2 多表查询三.动态SQL的实现3.1 什么是动态SQL3.2 动态SQL的使用if标签的使用trim标…

M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输

前言 最近新入了Macmini M2&#xff0c;但是以前的老电脑的虚拟机运行不起来了。&#x1f605;&#xff0c;实际上用过K8S的时候&#xff0c;会发现部分镜像也跑不起来&#xff0c;X86的架构和ARM实际上还是有很多隐形兼容问题。所以只能重新安装ARM Win11&#xff0c;幸好微软…

【MySQL】表的操作

今天我们来谈谈MySQL下对表的操作 目录 一、创建表 二、查看表 2.1 查看库中存有的表 2.2 查看表结构 2.3 查看表的创建语句 三、修改表 3.1 重命名表名 3.2 新增列 3.3 修改列的数据类型 3.4 删除列 3.5 重命名列 四、删除表 一、创建表 我们要想在数据库中创建…

SpringMvc+阿贾克斯

0目录 1.SpringMVC 加阿贾克斯 2.分页版 1.实战 创建数据库 创建工程和pom依赖 配置web.xml和applicationContext.xml 实体类 Mapper接口方法 Mapper.xml BookService BookSeriviceImpl 控制层 测试 加入findAll.html 测试 2.分页版 控制层 PostMan测…

华为OD机试真题 Java 实现【AI面板识别】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、控制台输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08…