什么是人们对Python不喜欢的事情?
在本文中,我们将看一下大多数人对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实现,例如PyPy和CPython。如果还不够,一些最流行的Python程序(例如NumPy)将其基本功能实现为C语言。因此,替换您的代码并不时地使用库中的功能可能会产生更好的结果。
Python不适合大型项目的扩展
在辩论中,许多人都听到过人们为Python辩护,但最终得出的结论是它是一种无法在较大的项目中进行扩展的脚本语言。但其实并不是这样的。我们知道有一些大型应用程序正在平稳运行。事实上,Python包括所有扩展所需的工具−
- 如果你想的话,可以将项目分成不同的包。
-
可以使用模块。
-
它允许面向对象编程。
Python的规模与任何其他编程语言一样大,甚至更好。Home Assistant是一个非常大的项目,我在家里每天晚上都会用到它,它证明了Python可以用于创建巨大而复杂的应用程序。
Python只是一种无类型的脚本语言
这部分是真实的,另一部分则是假的。Python是一种非常优秀的编程语言。它允许我们快速地编写脚本来完成特定任务,而不需要事先明确定义类型。这使我们能够进行原型设计并进行快速测试。
这种类型灵活性称为动态类型。变量缺乏类型,但您创建的对象有类型。除此之外,Python是一种强类型语言,这意味着一旦创建对象,其类型将不会改变。
例如,“2”这个字符串在进行“2” + 2这样的公式计算时不会突然变成数字。如果这么做,Python将抛出TypeError类型的错误。
现在,Python提供了一个包含显式类型支持的完美混合模型。他们似乎已经找到了最合适的平衡点。如果您正在进行开发,可以略过输入类型。然而,当您编写应用程序时,可以(并且应该)指定类型。解释器会忽略它们,但是您的linter和/或IDE可以使用它们来捕捉潜在问题。更好的是,因为它现在知道所有对象的类型,您的IDE将提供出色的自动完成功能。
Python社区似乎已经接受新的显式类型支持。流行的API框架FastAPI广泛使用类型。这是它易于使用的原因之一–因为采用显式输入类型,您的Python IDE还可以提供出色的自动完成功能。
Python包含一些丑陋的全局函数
在面向对象的编程语言(如Java)中没有全局函数。在Python中,全局函数的例子是 len() 和 print() 等。
我们经常听到的有关len()的最常见问题是长度应该是对象的一部分,而不是全局函数。
例如,为什么没有用于检索Python列表长度的length()方法?
inputList = [4, 6, 2, 1]
# 这将不起作用
inputList.length()
# 这也将不起作用
inputList.length
# 您必须使用这个 len() - #4
len(inputList)
然而,Python具有len()函数也有其原因。这实际上是一种有意的设计选择。
在其他语言(例如Java)中,可以通过调用对象的方法来获取长度。但是,它是哪个方法?是−
- .length()
-
.size()
-
numItems()
-
…等等
它是一个变量,例如 .length 或 .size ?作为Java开发人员,我见过所有这些内容以及更多变化。标准化这样一个常见的活动是有意义的。如果您的Python对象实现了len() dunder方法,len()函数将起作用。您所要做的就是习惯它。
结论
在本文中,我们学习了许多人不喜欢Python编程语言的七件事情。
极客教程