Python有哪些可能被人不喜欢的地方

Python有哪些可能被人不喜欢的地方

在这篇文章中,我们将看一些大部分人不喜欢Python的原因。

使用缩进代替花括号

许多人抱怨Python完全依赖缩进来构建代码块。在Python中,缩进是不可选的。投诉各有不同,但通常包括以下一个或多个方面。

很难判断一个函数在哪里结束

在编写大型Python函数时确实如此。然而,避免编写大型函数是有优势的。这对于任何语言都是如此,不仅仅是Python。一个函数应该只做好一件事。如果你发现自己正在开发一个多页函数,将其拆分成只做一件事的小函数。

这不仅仅产生了干净、易读的代码,还产生了可测试的代码。编写只完成一件事且没有副作用的短函数的单元测试是简单的。当你开发一些做了很多事情的庞大函数时,你只能编写集成测试。

多个Python版本

我们看到一些用户不喜欢Python,因为它有两个版本 – Python 2和Python 3。

为了使情况更糟,它们经常被同时安装在Linux上。尽管两个版本以前都很常见(且不兼容),但现在远不像以前那样成问题。

大多数项目现在已将其代码迁移到Python 3,但这不是一直都这样。不幸的是,由于许多软件包花费了很长时间来确保转换到Python 3,许多Linux发行版不得不同时提供两个版本的Python。

总之,是的,在Python 3过渡期间的一些年份,这是一个真正的问题,但现在大部分问题已得到解决。

Python运行速度慢

这是人们不喜欢Python的另一个原因。Python并不是世界上最快的语言。还有Python的GIL,它并没有像人们描述的那么糟糕。

事实上,作为一种语言,Python更注重可理解、清晰的代码,而不仅仅是速度。因此,Python并不是最快的语言。然而,我们发现许多人抱怨Python,实际上并没有速度问题,或者至少没有尝试修复自己的低效代码。

如果你在Python中有速度问题,有几件事情可以提速。其中之一是使用并发。然而,大多数情况下,优化代码只是一个简单的问题。

你可以尝试以下几个方面:

  • 缓存

  • 布隆过滤器

  • 使用适当的数据结构

  • 减少循环内的工作量

  • 避免递归

另外,考虑使用速度更快的Python实现,如PyPy和CPython。如果这还不够,一些最受欢迎的Python程序(如NumPy)的关键功能是用C实现的。因此,用功能性库替换代码可能会产生更好的结果。

对于大型项目,Python的扩展性不好

在辩论中,许多人听到有人为Python辩护,最后得出结论说它是一种脚本语言,不适合于大型项目。这并不是真的。但是人们知道有几个大型应用是顺利运行的。实际上,Python包括了用于扩展的所有必要工具-

  • 如果你愿意,可以将项目分成不同的包。

  • 可以使用模块。

  • 它支持面向对象编程。

Python的扩展性与其他任何语言一样好甚至更好。Home Assistant是一个我每天都在家里使用的大型项目。它证明了Python可以用于创建巨大且复杂的应用程序。

Python只是一种不带类型的脚本语言

这部分是真的,部分是假的。Python是一种优秀的编程语言。它使我们能够快速编写脚本来完成特定任务,而无需事先显式地定义类型。它使我们能够进行原型设计和快速测试。

这种类型的灵活性被称为动态类型。变量没有类型,但你创建的对象有类型。除此之外,Python是一种强类型语言,这意味着一旦创建了一个对象,它的类型就不会改变。

例如,字符串”2″不会在像”2″ + 2这样的等式中突然变成一个数字。如果这样做,Python会抛出TypeError。

现在,Python通过增加显式类型支持提供了一个很好的混合模型。他们似乎找到了一个恰到好处的地方。如果你只是草草写代码,那就不需要类型。然而,在编写应用程序时,你可以(也应该)指定类型。解释器会忽略它们,但你的代码检查工具和/或集成开发环境可以使用它们来检测潜在的问题。更好的是,因为现在知道所有对象的类型,你的IDE将提供出色的自动完成功能。

另外,因为现在知道所有对象的类型,你的IDE将提供出色的自动完成功能。

Python社区似乎已经接受了这种新的显式类型。流行的API框架FastAPI就广泛使用了类型。这也是它如此易于使用的原因之一- 因为有了显式的类型,你的Python IDE的自动完成功能也非常出色。

Python包含一些丑陋的全局函数

在面向对象的语言(如Java)中,没有全局函数。在Python中,这样的函数示例包括len()和print()。

我们听到的关于len()最常见的问题是长度应该是对象的一部分,而不是全局函数。

例如,为什么没有一个length()方法来获取Python列表的长度呢?

inputList = [4, 6, 2, 1]
# This will NOT work
inputList.length()

# Also this will NOT work
inputList.length

# You must use this one len() - #4
len(inputList)

然而,Python之所以有 len() 函数,是有原因的。这实际上是一个有意设计的选择。

在其他语言(比如Java)中,可以通过在对象上调用一个方法来获取长度。但是,这是哪个方法呢?是:

  • .length()

  • .size()

  • numItems()

  • …等等

还是一个变量,比如 .length.size ?作为Java开发者,我见过所有这些方法以及更多的变体。对如此常见的操作进行标准化是有道理的。如果你的Python对象实现了len()特殊方法,len()函数将会起作用。你所需要做的就是习惯它。

结论

在本文中,我们了解了很多人对Python编程语言不喜欢的七个方面。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程