购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 Python的短板

虽然Python拥有很多优点,但没有哪种编程语言能够胜任所有工作,因此Python并不能完美地满足一切需求。如果要确定Python是否适用于当前场景,还需要了解Python不擅长的领域。

1.3.1 Python不是速度最快的语言

Python的执行速度可能算得上是一个缺点。Python不是一个完全编译的语言,而是先编译为内部字节码形式,然后交由Python解释器来执行。Python为某些操作给出了高效的实现,例如,用正则表达式解析字符串,可以做到与自己编写的任何C语言代码一样快,甚至会更快。但在大多数情况下,采用Python会比C之类的语言实现更慢。但大家应该保持以下观点:对绝大多数应用程序而言,现代计算机的计算能力都是过剩的。开发速度比程序运行速度更为重要,而Python程序通常编写速度会快很多。另外,用C或C ++编写的模块对Python进行扩展也比较容易,程序当中的CPU密集型部分可以交由这些模块来运行。

1.3.2 Python的库不算最多

虽然Python自带了一批优秀的函数库集合,而且还有很多其他库可用,但是Python在库的数量上并不算领先。像C、Java和Perl之类的编程语言,可用的库集合数量更为庞大。它们在某些领域提供的解决方案是Python所没有的,或者Python可能只提供了其中的一种可选方案。不过这些往往是相当专业的领域,而Python是很容易扩展的,既可以用Python,也可以用C或其他语言的现有库。对于几乎所有的常规计算问题,Python库的支持能力都非常出色。

1.3.3 Python在编译时不检查变量类型

与某些其他编程语言不同,Python变量不像容器那样工作,而更像是引用整数、字符串、类实例等各类对象的标签。这表示这些对象本身虽然是有类型的,但引用它们的变量并没有与类型进行绑定。变量 x 可能在某一行代码中引用一个字符串,而在另一行代码中引用一个整数:

>>> x = "2"
>>> x
'2'     ⇽---  x为字符串"2"
>>> x = int(x)
>>> x
2       ⇽---  现在x为整数值2

Python将类型与对象关联,而不是与变量关联,这就意味着Python解释器无法识别出变量类型不符的错误。假设变量 count 本来是用来保存整数的,但如果将字符串 "two" 赋给它,在Python里也完全没问题。传统的程序员将这种处理方式算作一个缺点,因为对代码失去了额外的免费检查。但是这种错误通常不难发现和修复,Python的代码检测功能可以避免类型错误的发生。大多数Python程序员都认为,动态类型的灵活性是划得来的。

1.3.4 Python对移动应用的支持不足

在过去的10年中,移动设备的数量和种类都出现了爆炸式的增长,到处都是智能手机、平板电脑、平板手机、Chromebook,运行的操作系统也是五花八门。Python在移动计算领域并不算强大。虽然有解决方案可选,但在移动设备上运行Python并不总是能一帆风顺,用Python编写和发布商业应用还存在问题。

1.3.5 Python对多处理器的利用不充分

现在多核处理器已经普及,在很多情况下也都会带来性能的明显提升。但是,由于具有名为全局解释器锁(global interpreter lock,GIL)的特性,Python的标准版本并没有按照多内核来进行设计。详情请查看David Beazley、Larry Hastings等人关于GIL的讨论视频,或者访问Python wiki里的GIL页面。尽管用Python可以运行并发进程,但如果需要“开箱即用”的并发能力,Python可能并不合适。 bFsvpzrt04dJE0IASQXNpnPHwEapqMgZJ4Z+lJoQZgJAPmWQP6Mh0xJUNgMvI2uZ

点击中间区域
呼出菜单
上一章
目录
下一章
×