作为一门简洁易用、生态蓬勃且具有高泛用性的编程语言,Python一直以来都被不少人称作“编程语言中的瑞士军刀”。
尤其随着近来AI热潮席卷全球,Python在编程语言圈中的地位也随之水涨船高,甚至一度被视作AI专用语言或大数据专用语言。
然而从语言特性出发,Python真的如人们所说的这般伟大么?本文将为你阐明Python语言不那么迷人的方面,而这些可能会让你质疑你对这门流行语言的了解。
不可否认,Python庞大的生态系统及其大量的第三方库非常棒。大量的工具和资源选择使其能够成为需要快速解决问题或创建原型的开发人员的首选。
开发者A:“嘿,我需要建立一个网络爬虫,但我不知道如何开始。”开发者B:“没问题!只需使用 BeautifulSoup 和 Requests from Python。轻而易举!”
然而尽管Python有着值得称道的优势,但其也有一些令人眼花缭乱的缺点。例如,约有400种格式化字符串的方法。这使得Python给人的感觉不像是一种简洁易用的语言,而更像是希望将它的使用者绕晕。
开发者A:“为什么在Python中格式化字符串的方法这么多?!”开发者B:“我哪知道?我想你最好选择一个并坚持下去。”
对于某些人来说,Python的强制缩进可能是一个很有争议的问题。虽然它确实在一定程度上加强了一致性和可读性,但也有不少人认为它有点过于严格。同样,关于Python动态类型的争论也是一个经久不衰的话题,有些程序员喜欢动态类型的灵活,而另一些程序员则厌恶其所导致的难以发现的错误。
开发者A:“我喜欢 Python 的强制缩进!这能使代码变得更加简洁。” 开发者B:“呃,我受不了了!感觉我的代码就像是穿着一件紧身衣!”
Python的三元表达式常因其非常规的排列而被人所诟病。虽然大多数语言遵循首先声明条件的一致原则,但 Python 的做法恰恰相反,这可能会导致开发者在读取复杂的表达式时出现混淆。
开发者A:“我无法理解Python的三元表达式。”开发者B:“呃,我想这就像试图倒读一个句子。”
Python 对单项元组的语法可能令人头疼。如果你忘记了结尾的逗号,它就不再是元组,而是一个表达式。这可能会导致难以察觉的错误并给开发者带来挫败感。
开发者A:“我又忘记了元组中的尾随逗号了!”
开发者B:“恭喜你,遇到了一个经典的Python陷阱。”
Python 的正则表达式比其他一些语言(如 JavaScript 或 Ruby)需要更多的样板文件,这会使得它们更笨重、更不优雅。
开发者A:“用Python编写正则表达式感觉就像再玩拼图游戏。”开发者B:“同意,它并不完全是Python优雅的缩影。”
Python “神奇”的双下划线属性对于初学者来说可能看起来很晦涩难懂,但它们提供了一种强大的方法来自定义对象行为。然而不幸的是,他们神秘的本性经常让新手感到困惑。
开发者A:“Python中所有这些双下划线属性是怎么回事?”开发者B:“它们被称为'神奇方法'。旦是你必须掌握了它们的窍门,它们才会变得强大。”
Python 的错误处理方法鼓励特定的错误处理,这被认为是一种好的做法。但是,在一个语句中捕获所有错误及其消息在开发过程中可能不直观且繁琐。
开发者A:“为什么我不能在 Python 中的单个语句中捕获所有错误?” 开发者B:“这一切都是为了推广最佳实践。但是这在开发过程中确实会很烦人。”
Python 缺乏对不可变字典或复杂对象的原生支持,这些也是开发人员的主要痛点。虽然第三方库可以填补这一空白,但它仍然是一个难以忽视的不便。
开发者A:“为什么Python没有内置对不可变字典的支持?”开发者B:“好问题,但我也不知道为什么,只能感谢第三方库。”
一些Python社区中的成员经常对“Pythonic(优雅的、地道的、整洁的)方式”有着近乎狂热的追求和坚持。这很容易在社区中形成一些氛围,让初学者或者意见不同的人感到沮丧或不自在。
开发者A:“我很沮丧,我经常被告知自己'不够Pythonic'。”开发者B:“你需要专注于编写干净、高效的代码,让别人认同你。”
优越感有时会渗透到Python社区,有些Python开发人员看不起其他语言或编程风格。当然,这种态度并不代表整个社区。许多Python开发人员欣赏建设性的批评,并愿意向其他语言和范式学习。
开发者A:“为什么有些Python开发人员表现得像Python是有史以来最好的语言?”开发者B:“在任何编程语言社区中,总会有某种程度的自豪感。但记住,最好的开发人员总是乐于学习和成长。”
对于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的表现的依然无法超越甚至比肩各领域中的翘楚。
归根结底,虽然Python无疑是一款流行且功能强大的编程语言,但它并非没有缺陷和争议点。通过研究Python的优势,劣势和争议点,我们能够更准确的描绘出更平衡的语言视图。
在探索其他编程语言和范式时,也必须意识到这些问题并保持开放的心态。
毕竟,最好的开发人员是那些能够适应和学习的人,他们拥抱各种编程语言的优势,同样的,他们也能够拥抱各种编程语言的劣势。