Python正在逐渐失去魅力

原标题:Python正在逐渐失去魅力

自从1990年代Python被初发布以来,它引起了很多的热议。但编程界花了至少20年的时间才真正注意到Python的存在,至此,它的普及程度已经远远超过了C语言、C#语言、Java甚至 Javascript。

△ 相比其他语言Python近些年取得令人印象深刻的增长

尽管Python在数据科学(Data Science)和机器学习(Machine Learning)以及科学和数学计算(Scientific and Mathematical computing)领域占据着主导地位,但与Julia,Swift和Java等较新等语言相比,它确实具有其劣势。

01

是什么使Python如此流行?

Python入门门槛极低和强大的应用能力是其使用量达到指数型增长的主导原因。这使得它对初学者以及对编程不熟悉从而讨厌像C / C ++这类语言的人都非常有吸引力。

该语言从根本上广泛强调代码的可读性。凭借其简洁明了的语法,它使开发人员无需编写大量行代码即可表达想法和概念(在C或Java等较低级语言中就是这种情况)。Python非常简单,可以与其他编程语言无缝集成(例如offload程序和数据传递到C / C ++),这对多语言开发人员来说无疑是一个非常方便的优点了。

Python应用广泛的另一个原因是它被各企业大量使用 (包括FAANG)今天,对于你能想象到的任何项目,你几乎都可以找到一个相对应的Python包—在科学计算(Scientific computing)已有Numpy,而机器学习有Sklearn计算机视觉有Caer。

02

Python的弱点 — 真的很慢

△ 尼克·艾布拉姆斯(Nick Abrams)在Unsplash上拍摄的照片

不用多说,速度通常是开发人员关注的焦点之一。Python变慢的主要原因可以归为以下两点:

1. Python是解释性的语言,而不是编译型的语言,这终究会导致执行时间的缓慢

2. 它是一种动态的语言 (变量的数据类型在执行期间由Python自动推断)

初学者经常对“Python的确太慢”的说法产生争议,事实上,的确如此,但也并非完全正确。例如, Python的机器学习库TensorFlow实际上是用C++编写的,在Python中进行调用而已,是在C++的上层实现的一个Python“封装器”。Numpy是如此,Caer也是类似的形式。

Python有一个GIL(l)

Python速度缓慢的主要原因之一是GIL(Global Interpreter Lock)的存在,它一次只能执行一个线程。虽然这可以提高单线程的性能,但是它限制了并行性。在这种并行性中,开发人员为了提高速度必须实现多处理程序而不是多线程程序。

不是处理内存密集型任务的最佳选择

当对象超出范围时,Python会自动进行垃圾收集。它旨在消除C和C ++在内存管理中涉及的许多复杂性。由于指定数据类型的灵活性,Python消耗的内存量可能会迅速爆炸。

此外,在运行时,一些BUG可能会被Python忽略,最终成为延缓开发过程的主要诱因。

03

在移动计算中表现牵强

△ 由Yura Fresh在Unsplash上拍摄的照片

随着从台式机向智能手机的巨大变迁,显然,人们需要更强大的语言来构建用于手机的软件。尽管Python在台式机和服务器平台上具有相当不错的表现,但是由于缺乏强大的移动端计算处理能力,Python往往会在移动开发上失去优势。

近年来,Python在该领域取得了许多进步,但是这些新添加的库与强大的竞争对手(如Kotlin,Swift和Java)相比还相去甚远。

04

其他语言的兴起

最近,Julia、Rust和Swift等较新的语言突然出现,它们借鉴了Python,C / C ++和Java的许多优秀设计概念——Rust 几乎保证了运行时的内存安全性和并发性,并提供与WebAssembly一样的互操作性。由于它支持LLVM编译器工具链,Swift 几乎与C一样快。而Julia 提供了I / O(输入/输出)密集型任务的异步I / O,并且速度非常快。

结论

Python并非最优的编程语言,它无法取代C / C ++和Java。它被构建为一种通用的编程语言,强调了可读性,以英语为中心的语法,从而使人们上手快速开发程序和应用程序。

就其他语言一样,Python是一种工具。在某些应用场景,它是最适合的工具;有时候不是。大多数情况下,它“还挺好用的”。

那么,Python作为一种编程语言是否正在消亡?

我不这么认为。

它失去魅力了吗?

嗯,也许只是一点点。一点点。

——— End ———

· 部分图片来源于网路,如有侵权请及时联系我方

· 未经许可,谢绝一切形式的转载

责任编辑:

Thenews.cc