专栏首页程序员的知识天地Python 太糟糕了?开发者总结了 8 大原因

Python 太糟糕了?开发者总结了 8 大原因

有开发者发文表达了他觉得 Python 不行的 8 大原因

作者对每一项“缺点”都进行了分析,全文洋洋洒洒,概括起来 8 个原因分别是:

1、版本不兼容

Python 3 与 Python 2 不完全兼容。作者以 Perl 语言和创造了世界上早期个人电脑的 Commodore 为例,分析了缺乏向后兼容性和分离版本是如何导致失败的。

2、安装问题

运行 apt、yum 与 rpm 等工具可以获取并安装大多数软件包的最新代码,但是在使用 apt-get install python 或者 pip install python 安装 Python 的时候你不知道实际被安装的是哪个版本,而这可能与你所需要的代码不兼容。安装时需要指定 Python 版本。

3、缩进规则

乍一看,Python 代码似乎非常易读,但是在大型代码库中并不是这样。Pyhon 的四格缩进允许深度嵌套,但是嵌套太多层的话会导致代码在文本编辑器中换行,变得混乱。而长函数和长条件操作可能使得难以匹配语法的开始与结束。给调试带来了很大的困难。

4、代码导入方式

Python 的导入方式 import 允许引入整个模块、模块的一部分或模块中的特定函数。作者认为 Python 这种导入规则使得查找可导入的列表并不直观。C 中可以直接查看 .h 头文件,但是 Python 需要使用 python -v 列出引用所在位置,之后搜索该列表中每个目录和子目录中的每个文件。

此外,Python 的导入机制还允许用户重命名导入的代码,作者认为重命名模块非常适合小脚本,但是对于长程序来说真的很糟糕,因为它会影响代码的可读性和长期支持。

而更糟糕的地方在于,对于大多数语言来说,导入代码就只是导入代码,如果存在带有构造函数的全局对象,那么一些语言会执行代码,但这通常被认为是一种不好的做法。而许多 Python 模块在导入期间就运行初始化函数,这导致你不清楚什么正在运行,不知道它在做什么,需要花很多时间来追踪。

5、命名法

作者认为 Python 没有使用通用并且专业的术语描述语言本身。比如在其它所有语言中,数组都称为 arrays,但是在 Python 中,它被称为 lists;关联数组有时称为 hash(Perl),但 Python 称之为 dictionary。代码库命名方法也是这样,像 PyPy、PyPi、NumPy、SciPy、SymPy、PyGtk、Pyglet 与 PyGame 这些库,它们名称中的“Py”有时放在开头,有时又放在后边,没有统一。而类似 matplotlib、nose、Pillow 和 SQLAlchemy 的一些常见库甚至直接放弃了“Py”这种命名约定。

作者将 Python 描述为“具有可怕且不一致的命名约定的库的集合”。

6、怪癖

每种语言或多或少都有自己的怪癖,但是 Python 比其它语言都多。以字符串的操作为例,在 Python 中,单引号和双引号之间没有区别。但是,如果想要字符串跨行,则需要使用三引号 """string""" 或 string;如果想使用二进制文件,那么需要使用 b'binary' 或 r'raw';有时需要使用 str(string) 将字符串转换为字符串,或使用 string.encode('utf-8') 将其转换为 utf8。

7、按对象引用传递变量

大多数编程语言都按值传递函数参数,但是 Python 默认使用 pass-by-object-reference 参数执行函数,这意味着更改源变量可能会使引用值改变。这是程序、函数和和面向对象编程语言之间的重大差异之一,如果每个变量都是通过对象引用传递的,并且对变量的任何更改都会在任何地方更改引用,那么可以直接使用全局变量来处理所有变量。但是全局变量的弊端是有目共睹的。

8、本地名称

gcc -o screencapture.exe screencapture.c -lscreencapture

假如在使用名为“libscreencapture.so”的 C 库测试截屏程序,可以调用自己的程序“screencapture.c”并编译成“screencapture.exe”。

但是在 Python 中这么做是不行的。Python 假定你首先要导入的是本地代码,那么如果你有一个名为“screencapture.py”的程序使用“import screencapture”,它将导入自己而不是系统库。

作者最后还表示,通常他会辩证地去评论一个东西,他觉得 Python 确实有一些不错的库,比如 BeautifulSoup、NumPy 和 TensorFlow,但是他真的没法列出关于 Python 其它好的方面,因为他真的认为 Python 很糟糕。

如果你依然在编程的世界里迷茫,不知道自己的未来规划,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的!交流经验! 自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、人工智能、数据挖掘等,零基础到项目实战的资料都有整理。 送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,这里是python学习者聚集地

点击:python技术分享

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python工程师面试汇总:25条Python知识点,命中高达95%

    Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。

    一墨编程学习
  • Python最新平均薪资20680元!Python主要用来做什么?

    Python是一种计算机程序设计语言,又被称为胶水语言,可以用混合编译的方式使用c/c++/java等语言的库。你可能已经听说过很多种流行的编程语言,比如在大学...

    一墨编程学习
  • 超2万名开发人员调查:会 Python 和不会 Python 的区别

    该调查由 Python 软件基金会与 JetBrains 一起发起,有来自 150 多个国家的超过两万名开发人员参与。

    一墨编程学习
  • Python简史:开发者的小小副业如何成为全球最热编程语言?

    这是针对新型编程语言 Python 举办的第一次 workshop,共有二十来个程序员参加,Barry Warsaw 是其中之一。他记得当时这些第一批用 Pyt...

    机器之心
  • 你肯定不全知道的Python 10大谬论

    伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实,这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991...

    昱良
  • 新手零基础学习Python第一步,搭建开发环境!

    Python是一门计算机编程语言,通过给计算机下达精确的指令以完成相应的任务或者事情。

    用户4322765
  • Python 面试问答 Top 25

    Python 是一种解释型,交互式,面向对象的高级编程语言。和别的一些使用标点符号的语言不同,Python使用了大量的英语单词作为关键字,因而具有很好的可读性。...

    昱良
  • Python 2 即将停止支持,你准备好了吗?

    之前我们曾报道过 Python 2.7 将于 2020 年退休的消息,随着该时间节点的临近,已陆续有一大批 Python 项目宣布将在 2020 年之前放弃对 ...

    昱良
  • Python入门学习资料

    4、《笨办法学 Python》:这本书绝对是最简单的学习 Python 的方法,本书的 HTML 在线版是完全免费的。

    孤独的明月
  • 全网最实用 Python 面试题大全(花费了整整 3 天时间整理出来的)

    花费了整整3天时间整理出来的全网最实用Python面试题大全,一共30道题目+答案的纯干货,如此的辛勤整理,希望大家多多支持,建议点赞+收藏!

    Python小二

扫码关注云+社区

领取腾讯云代金券