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…

css之文字描边

文章目录 传统方式实现第二种方式 传统方式实现 html <p>文字描边效果</p>scss mixin text-stroke($color: #ffffff, $width: 1px) {text-shadow: 0 -#{$width} #{$color},#{$width} -#{$width} #{$color},#{$width} 0 #{$color},#{$width} #{$width} #{$color}…

【AI】roop给视频换脸记录

环境 安装Anaconda3基于Anaconda3创建一个python3.10的环境安装Git安装ffmpeg 我的操作系统版本是Ubuntu 18.04.4 LTS&#xff08;带GPU会快一点&#xff09;&#xff0c;以上所说的 环境请自行百度安装&#xff01;快速使用 拉取项目 git clone gitgithub.com:VoidAndNull…

Spring Cache

什么是Spring Cache&#xff1f; Spring Cache是Spring框架的一个模块&#xff0c;它提供了对应用程序方法级别的缓存支持。通过使用Spring Cache&#xff0c;您可以在方法的结果被计算后&#xff0c;将其缓存起来&#xff0c;从而避免相同输入导致的重复计算。 Spring Cache…

AWS考试认证学习(二)

一、AWS高级 SAP-C01考试 AWS高级考试 AWS Certified Solutions Architect - Professional 报名费&#xff1a;300美金 SAP-C01考试内容主要覆盖的五大领域和对应领域所占权重&#xff1a; 1、组织复杂性设计 12.5% 2、新解决方案设计 31% 3、迁移规划 15% 4、成本控制…

Linux 发行版 CentOS 于 Ubuntu 软件的安装、卸载、查找

CentOS于Ubuntu 内核都是Linux&#xff0c;是一样的。 CentOS 软件格式 .rpm sudo yum [-y] [ install | remove | search ] 软件名称 install 安装 remove 移除 search 搜索 Ubuntu 软件格式 .deb sudo apt [-y] [ install | remove | search ] 软件名称 install 安装 remove…

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

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

Vector<T> 动态数组(随机访问迭代器)(答案)

答案如下 //------下面的代码是用来测试你的代码有没有问题的辅助代码,你无需关注------ #include <algorithm> #include <cstdlib> #include <iostream> #include <vector> #include <utility> using namespace std; struct Record { Record…

第一财经专访张晨:图技术赋能金融领域进入全新阶段

2023世界人工智能大会期间&#xff0c;创邻科技创始人兼CEO张晨博士受邀走进第一财经的演播室&#xff0c;围绕人工智能技术和图技术在金融行业的赋能展开讨论&#xff0c;为线上数万名观众分享精彩前沿观点。 现场直击 AI赋能金融 大模型催生新业态 | 图技术赋能金融领域进入…

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、设备名称…

唯一索引异常捕获aop切面工具类

定义自定义唯一索引捕获注解 /*** author huaqiang* version 1.0* description 自定义唯一索引异常* date 2023/7/28*/ Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface CustomDuplicateKeyException {String[] keyValu…

TCP KeepAlive与HTTP Keep-Alive

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

在CSDN学Golang云原生(Kubernetes Pod)

一&#xff0c;pod的定义与基本用法 在 Kubernetes 中&#xff0c;Pod 是最小的可部署单元&#xff0c;它包含一个或多个容器。使用 Golang 来定义和操作 Pod 时&#xff0c;需要使用 kubernetes/client-go 包提供的 API。 以下是 Golang 定义和基本用法 Pod 的示例&#xff…

【Java】Spring框架是如何解决Bean创建过程中的循环依赖问题的

文章目录 【Java】Spring框架是如何解决Bean创建过程中的循环依赖问题的引言三级缓存数据结构简介源码阅读如何启动调试&#xff1f;场景1&#xff1a;通过xml配置文件来构造循环引用场景2&#xff1a;通过注解自动装配属性来构造循环引用&#xff1a;以Controller为例 脉络场景…

jdk8使用okhttp发送http2请求

本文主要用于工作记录&#xff0c;在项目中遇到了就记录一下 在早期&#xff0c;原生的JDK8是不支持HTTP/2协议的&#xff0c;所以&#xff0c;要想使用这个特性&#xff0c;需要有web服务器和应用环境的支持&#xff0c; 例如&#xff1a;在VM中增加-Xbootclasspath/p:/Users…