我再说一遍:Python 是一种糟糕的编程语言,它今天如此流行的唯一原因是谷歌在 2000 年代的头十年大力推动它。 Python 的创造者 Guido van Rossum 实际上从 2005 年到 2012 年在 Google 工作。当时 Go 和 Dart 还没有出现(或者至少他们并不为人所知)并且随着 C# 越来越受欢迎(窃取了 Java开发人员)谷歌可能觉得他们需要一种自己的语言。他们可能会想要拥抱 Java,因为他们已经在 Android 上使用它,但他们一定对与它上床睡觉感到偏执,因为他们已经遇到了与 Oracle 的法律问题。因此,无论出于何种原因,他们采用了 Python。我想象在另一个宇宙中,他们本可以选择 Lua,也许在那个宇宙中 Lua 会成为今天的主导语言。 Lua当然有点奇怪,所以还是不选那个比较好。但是让我们谈谈为什么 Python 很烂。很难谈论为什么某些东西很糟糕,尤其是当它很受欢迎时,但本文将是一个尝试。我将介绍语言本身,而不是它的性能或实现。我将主要将它与 Java 和 C# 进行比较,因为这两种众所周知的成熟语言在软件行业中有大量的实际使用超过 15 年。在很长一段时间内,Python 有两个主要版本在野外运行。当然,它们是 Python 2 和 3,并且彼此不兼容。所以你被置于这种奇怪的情况下,谷歌会说“来吧伙计们,学习一些 Python,这很酷!”然后你去下载它,你会在版本 2 和 3 之间进行选择,也许谷歌会告诉你“选择 3!”而其他人会告诉你“选 2!”然后你会发现 3 几乎没有任何兼容的库,也没有人使用它,而开发 3 的唯一原因是为了在打印功能和表情符号支持中添加括号。直到最近,情况才有所好转。例如,Ubuntu 最近淘汰了 Python 2。我希望你喜欢这些 self 关键字,因为你会在 Python 中随处看到它们。这就是引用类的实例变量的方式。这就像 Java 或 C# 中的 this 关键字,只有在 Python 中才需要它们,因为 Python 是愚蠢的。注意这个类是如何有 2 个实例变量的:颜色和轮子?看看我如何在构造函数中声明和初始化它们? Python愚蠢的另一个例子。
您可能想知道“我如何使它们成为私有实例变量?”嗯,答案是你没有。你不能。 Python 中没有私有实例变量这样的东西。在 Python 中你能做的最好的事情是用两个下划线开始它们,像这样: self.__color = “red” 这样做会导致 Python 解释器破坏变量的名称,因此它不能从类外部访问(尽管如果你愿意,你仍然可以从类外部访问变量)。所以它不会成为一个私有变量,但它会被破坏。当然,它有效,但来吧。想在 C# 或 Java 中定义私有实例变量吗?将关键字 private 放在它前面。如果你问 Python 开发人员这个问题,他们会回答:“不要访问另一个类的实例变量,哈哈”。一般来说,当你指出他们语言中的任何缺陷时,Python 开发人员会表现出敌意和居高临下的态度。啊,空白。 Python 是垃圾的另一个原因。在理智的语言中,范围定界是用花括号或 BEGIN 和 END 关键字或类似的东西完成的。但不是在 Python 中! Python 认为给空格赋予语义意义会很好。究竟为什么他们会给看不见的东西赋予语义意义?谁认为这是个好主意?当我们雇佣新员工时……我认为我们还没有雇佣一个懂 Python 的员工。我只是说,“你写的一切都需要用 Python 编写。”只是为了我可以阅读它。这很棒,因为我可以从房间对面看到他们的屏幕,无论他们的代码是好是坏。
因此,即使我想相信这个人能够在房间的另一边进行代码审查,使用空格比使用大括号更好吗?在几乎所有其他现代语言中,使用缩进是编写方法时的规范。并且只有在 Python 中,制表符和空格之间的差异才会导致解释器心脏病发作。动态类型很糟糕,任何不同意我的人可能还没有编写足够的软件来实现它。使用动态类型,你的程序越大,它就越难以维护。我预测未来所有主流编程语言都将是静态类型的,使用动态类型语言就像使用弓箭一样。您将能够在 YouTube 频道 Primitive Technology 上观看人们使用动态类型语言进行编程。最近出现的语言,例如 TypeScript,给了我希望。一些 Python 程序员已经意识到动态类型是不好的,所以现在我们有了 mypy,但是如果你要给 Python 添加类型注释,你为什么不首先使用像 Java 或 C# 这样的语言呢? Python 没有常量。我的意思是,如果你在文章中做到了这一点,你有什么期望? Stack Overflow 上提出了创建变量常量的问题,Python 开发人员的建议是“不要改变它”。