坎德人的小包包

欧剃,游荡的坎德人,在他的旅途中收集了许许多多有趣的东西。

发表日期:2019-01-22

世上最慢“动物”之一,为啥程序员却很爱“它”

—— Python 是世界上使用最广泛的编程语言之一,它至今已经存在了个 28 年头。对于大多数人,尤其是刚接触 Python 的初学者(以及 C 程序员)来说...

作者:Bobby


Python 是世界上使用最广泛的编程语言之一,它至今已经存在了个 28 年头。对于大多数人,尤其是刚接触 Python 的初学者(以及 C 程序员)来说,有一个问题经常会被提起:“为什么 Python 这么慢,还能这么受欢迎?”或者说,为什么 Python 程序员、开发者不担心它的速度问题?在这篇文章中,优达菌将带给大家详细分析一下主要原因。


(地球上最慢的“动物”)

为啥 Python 在速度上没有优势?

在详细分析之前,我们先来探讨一下 Python 为什么比较慢的一些客观原因。当然,这里的慢是相对于 C 和 C++ 等其他编程语言而言的。

高级编程语言:

用 Python 写代码的时候,你的代码其实非常接近人类的自然语言,接近人类思考问题的方式。为了实现这一点,Python 解释器帮你简化了许多涉及计算机本身的细节,比如内存管理、指针等等…也正因为此,Python 运行起来就比其他“低级编程语言”来的慢。

Python 是解释执行,而不用经过编译:

嗯,我上面这句话其实说的过于概括了,并不完全准确,不过大概意思就是这样的。在执行的过程中,Python 代码被解释器读取,并逐一运行,而不是通过编译过程将代码全部编译成电脑直接执行的字节码,然后再运行。

Python 是一门动态类型的语言:

和其他“静态类型”的语言,比如 C、C++ 或 Java 不同,你在使用一个变量的时候,并不是必须要提前声明它的类型(String 字符串 / Boolean 布尔值 / int 整型数字等等)。你是省事了,但这些就靠计算机来替你处理了。这也就意味着,对于每次的对象调用,程序需要进行大量的处理。此外,动态程度这么高,也意味着 Python 很难以进行优化。

全局解释器锁(Global Interpreter Lock,GIL):

因为 GIL 锁的存在,基本上 Python 解释器在同一个进程里只能运行一个线程(Python解释器的一个实例),所以整体速度难以提升。


(别问我,我不过就是用 Python 搞了个多线程)

为啥大家还喜欢用 Python?

在我看来,这主要是因为,在 90% 的情况下,Python 代码的运行速度并不那么重要,而它的语言特性带来的益处则是实实在在的。下面我就详细说说其中的主要几点:

实际用户并不会太在意速度问题

说 Python 慢的同学,你真的能感觉出 0.001 秒和 0.01 秒的区别吗?对于绝大多数实际使用软件的用户来说,这种细微的差别根本不值得在意。

正常情况下,用户不会太在意你的软件的处理时间有那么一点点长。当然,如果它要卡上个两三百年,那我想这就没有什么用户体验可言了吧。只要在用户可以接受的范围内,就都没有问题。(甚至有的软件为了给用户一种“处理了很多信息”的感觉,会故意把“处理中”的时间延长一点点呢。)此外,如果真的出现处理时间太长的情况,你还可以通过水平扩展的方式来提升你的系统处理能力,以解决一些可能出现的瓶颈,让整个处理速度更快。

写 Python 代码的效率更高

Python 如此受欢迎的首要原因是,和其他编程语言(比如 C++ 和 Java)相比,它的开发效率更高。比起其他语言,Python 的代码更加简明易学,可读性好,容易维护,学习成本和时间相对较短,甚至完成类似任务所需的代码行数都更少。


(Python 代码非常简单而且容易阅读)

Python 语言的许多特性,比如一行函数、列表生成器、动态类型等,都使开发者能用比其他语言少得多代码完成相同或相似的任务。它的良好可读性也使初学者和新手学习语法的时间少了许多。比如,Python 代码确实在运行时的速度比 Java 慢,但 Python 代码的编写时间平均只有 Java 的三到五分之一。

总的来说,Python 简单的语法结构,较高的可读性,以及类似英语一样的命令语句,都让 Python 程序的开发变得更加容易而高效。这正是大家喜欢它的一个重要原因。

运行速度慢?开发速度快才是王道!

曾几何时,计算机的运算资源不足是软件开发的主要瓶颈,计算时间是软件需要消耗的宝贵资源。在这种瓶颈限制下,程序员们养成了绞尽脑汁优化代码运行效率,减少算法复杂度的编程习惯。而现在,计算机、服务器以及各种智能硬件都变得越来越便宜,代码运行速度已经变得没那么重要了。如今,人力资源才是软件开发企业最大的成本,开发所需的时间比软件运行的时间宝贵多了。加快开发速度,才是有效减少开发成本,快速产生效益的重要因素。

如果真的很需要提升程序处理速度,企业完全可以通过水平扩展的方式,也就是部署更多的服务器,来提升整体系统运行速度,以弥补代码本身的处理速度问题。随着计算机算力的不断攀升,多核芯片的不断迭代,提升算力所需的成本也越来愈低。为了省一点服务器开支,而拖慢整个团队的开发速度,明显不是一件划算的事情。

此外,开发速度快,也不单单是节省了人力成本。能快速迭代,易于维护,部署方便的代码,也能显著地提升团队的竞争力。这就是为什么大家都热衷于选择 Python 语言的根本原因。

速度是你应该考虑的唯一因素吗?

当然不是。不管想要开发什么类型的软件,在选择用什么编程语言的时候,你需要考虑的因素往往数以百计。没错,速度确实是其中之一,但它决不是唯一因素。比如,语言的适用性就是非常重要的一个因素。

几十年来,Python 经历了市场的考验,形成了庞大的用户社区。因此,作为开发企业,你很容易就能找到 Python 程序员,并获得各种技术支持。

此外,Python 还拥有非常丰富的标准库,和多种不同用途的框架,基本上算是应有尽有。举几个栗子,要开发网页 app,你可以用 Django 和 Flask,要搞数据分析有 pandas,要跑深度学习有 TensorFlow,等等。

Python 适合用来开发对速度要求很高的应用吗?

上面我们聊了 Python 虽然代码执行速度慢,但有着许多与众不同的优势,使得主流软件开发企业对它爱不释手。也许有人会觉得我们是把 Python 吹的无所不能了吧?其实并不是这样的。对某些严格要求高性能、执行速度快的程序来说,Python 并不适合。没错,程序员可以用力优化算法,但总体上来说,这往往会牺牲可读性,减缓开发速度,产生各种问题,还不如换用其他编程语言呢。比如,在快速实时对战游戏的开发上,C# 将会是一个更好的选择。

结语

总而言之,虽然速度不如其他编程语言,Python 还因为下面这些原因,而被广泛使用:

  • 开发效率更高
  • 节省最贵重的开发成本:人力资源
  • 快速更新,提升竞争力
  • 丰富的代码库和框架
  • 庞大的社区支持

当然,不好的地方我也要 diss,它确实不太适合开发包括游戏在内的许多速度密集型应用程序,也不适合开发操作系统等系统底层应用。

好啦,不说了,我先去学 Python 啦!

(本文已投稿给「优达学城」并已发表。 原作: Bobby 译者:欧剃 编辑:kooyee 转载请保留此信息)

编译来源: https://medium.com/@trungluongquang/why-python-is-popular-despite-being-super-slow-83a8320412a9

标签:UdacityPythonTranslate

Powered by Jekyll on Github.io
2022 © 欧剃