本文转载自公众号“读芯术”(ID:AI_Discovery)
上世纪90年代初,Python面世了。近30年来,关于它的“炒作”一直没有少过。当然,编程界花了至少20年的时间才认识到它,但自那以后,它的流行程度远远超过了C、C#、Java甚至Javascript。
尽管Python目前在数据科学和机器学习领域,以及某些程度上在科学和数学计算领域占据着主导地位,但与Julia,Swift和Java等新语言相比,它确实有其劣势。
是什么让Python如此受欢迎?
Python迅速发展的主要原因是易于学习和功能强大。这使得它对初学者,包括那些由于C、C++等语言语法艰涩且陌生而对其望而却步的人,都非常有吸引力。
该语言从根本上广泛强调代码的可读性。凭借其简洁而富有表现力的语法,它允许开发人员在不编写大量代码的情况下表达想法和概念(例如在C或Java等低级语言)。Python非常简单,可以与其他编程语言无缝集成(例如将CPU密集型任务卸载到C / C ++),这对多语言开发人员来说是一个加分项。
Python用途广泛的另一个原因是大型企业(包括FAANG)以及无数小型企业对其的大量使用。如今,Python包里几乎包含了可以想到的任何东西——用于科学计算的Numpy,用于机器学习的Sklearn和用于计算机视觉的Caer。
Python也有缺点
它运行很慢,非常慢
显而易见,在未来很长一段时间里,速度都是开发人员的主要关注点之一。
Python之所以“慢”,实际上有两个原因——Python被解释为与编译相反,最终导致执行速度较慢;以及它是动态类型的(Python在执行过程中自动推断变量的数据类型)。
事实上,“Python很慢”这一说法对初学者影响很大。这是真的,但只是部分事实。以Python中可用的机器学习库TensorFlow为例,这些库其实是用C++编写的,并可以在Python中使用,某种程度上构成了围绕C++实现的Python“装饰器”。Numpy,甚至Caer,在一定程度上也是如此。
它有一个GIL(I)
Python速度缓慢的主要原因之一是存在GIL(全局解释器锁),它一次只能执行一个线程。虽然这可以提高单线程的性能,但它限制了并行性,开发人员必须实现多处理程序而非多线程程序来提高速度。
不是内存密集型任务的最优解
当对象超出范围时,Python会自动进行垃圾回收。它旨在消除C和C++在内存管理方面的所涉及的许多复杂问题。由于指定数据类型的灵活性(或缺乏灵活性),Python消耗的内存量可能会迅速爆炸增长。此外,运行时可能会弹出Python未关注的错误,最终减缓开发过程。
移动计算中的弱存在
随着台式机到智能手机的巨大转变,很明显,我们需要更强大的语言来构建手机软件。尽管Python在台式机和服务器平台上具有很强的代表性,但是由于缺乏强大的移动计算处理能力,Python往往会在移动开发上失败。
近年来,这一领域有了很大进步,但是这些新添加的库与Kotlin,Swift和Java等强大的竞争对手相比仍有差距。
其他语言的兴起
最近,Julia,Rust和Swift等较新的语言强势入局。它们借鉴了Python,C/C ++和Java的许多优秀设计概念——Rust基本保证了运行时的内存安全性和并行性,并提供与WebAssembly的一流互操作性;由于支持LLVM编译器工具链,Swift几乎与C一样快;而Julia为I/O密集型任务提供了异步I/O,并且速度非常快。
Python从来就是很好的编程语言,它从来没有超越C/C++和Java。它是一种通用的编程语言,强调人类可读的、以英语为中心的语法,允许程序和应用程序的快速开发。
归根结底,Python和其他语言一样,是一种工具。有时候,它是很好的工具。有时候不是。大多数情况下,只是 “还不错”。
Python作为一种编程语言会消亡吗?笔者不这么认为。
那么,它的魅力正在消失吗?也许有一点,但只是一点点。