您现在的位置是:网站首页> 内容页

为什么我认为Python会腐烂到死?这有八个原因:IT新闻

  • 金百利国际平台
  • 2019-09-27
  • 224人已阅读
简介资料来源:黑客因素;黑客新闻编辑:元子、大明和木清[新智能教程阅读]作为机器学习程序员的首选编程语言,Python已经成为全世界大学生最

    资料来源:黑客因素;黑客新闻编辑:元子、大明和木清[新智能教程阅读]作为机器学习程序员的首选编程语言,Python已经成为全世界大学生最流行的编程语言。但是也有例外。最近,一位开发人员描述了他不能忍受Python的八个原因,这引起了很多网友的回应。Python作为机器学习程序员的首选编程语言,近年来得到了广泛的应用。随着人工智能的蓬勃发展,Python今年取代Java成为全世界大学生最流行的编程语言。机器学习领域的许多教科书、文章和技术文档在给出代码时都使用Python作为示例语言,这显示了Python的流行。Python具有启动速度快、门限低、语法结构相对简单、初学者容易入门、老手二次学习成本低、机器学习任务独特等优点。受欢迎是很自然的事。但是,除了一切,每个人都不可能像爱一样去爱任何东西。最近,在黑客因素方面,一个名叫Neal Krawetz的男人写了八条她无法忍受Python的原因。她把蟒蛇往里和往外塞。本文列举了Python存在主要缺陷的八个原因,包括版本兼容性、安装版本混乱、程序关键词的唯一命名规则、公共库命名规则、缺乏一致性、分配传递混乱、以及本地文件的易出错命名策略。总而言之,将Python降低到不好的水平。在当前Python热潮的背景下,本文是一篇出色的工作。看太多的蟒蛇赞美诗是不是有点审美疲劳?你最好改变一下口味。原因1:版本不兼容。在安装Linux之后,默认情况下可能安装多个版本的Python。可能存在Python 2和Python 3,或者甚至更多的片段版本,比如3.5或3.7。这是有原因的:Python 3与Python 2不完全兼容,其他一些版本在这方面有明显的缺陷——向后兼容,也称为向下兼容。所以Ubuntu同时安装了Python 2和Python 3,因为这些版本的核心功能是不同的。缺乏向后兼容和分离的版本通常是衰退的早期警告。Commodore创建了第一台家用计算机(比IBM PC或苹果早得多)。然而,Commodore PET与随后的COModore CBM计算机不兼容,CBM与VIC-20、Commodore-64、Amiga等不兼容。因此,用户要么花费大量时间从一个平台导入代码到另一个平台,要么干脆放弃这个平台——Commodore是过去的一个教训。当用户选择放弃这个平台时,它注定要消失。同样,Perl曾经非常受欢迎。但是当Perl 3问世时,它并没有完全向后兼容Perl 2代码。接下来是Perl 4。当Perl 5出现时,许多人选择切换到其他更稳定的编程语言。所以今天,仍然只有少数人积极使用Perl来维护现有的Perl项目,并且从来没有出现过其他主要的基于Perl的项目。类似地,Python为每个版本设计了不同的代码岛。社区总是拖拽这些旧版本,所以您最终会得到旧的、过时的Python代码,因为没有人愿意花时间将它导入到最新的版本。据我所知,没有人在Python 2上创建新代码,但我们仍然让代码继续存在,因为没有人向Python 3.x导入所需的代码。在官方的Python网站上,这些文档是积极维护的,并且可以在Python 2.7、3.5、3.6和3.7上使用,因为它们不能放弃旧代码。Python就像编程语言中的僵尸,一个行走的尸体。原因2:安装太太和太太很麻烦。通常,您可以直接在apt、Yum和rpm之后获得最新的稳定版本。但是,如果“apt-get install python”,您不知道它是什么版本,并且可能无法与所需的所有代码兼容。因此,在安装Python版本时,需要指定它。一个项目需要Python 3.5(当时的最新版本),但是最后我的计算机上有很多版本:Python 2、Python 2.6、Python 3和Python 3.5。两个来自操作系统,一个用于项目安装,另一个是因为我安装了一些不相关的软件。虽然它们都是“Python”,但它们并不完全相同。如果要安装Python包,应该使用“pip”(Pip代表“Pip Installs Packages”)。但是由于系统上有许多版本的Python,所以必须记住使用正确的pip版本。否则,“pip”可能运行“pip2”而不是“pip3.7”。(如果名称不存在,则需要指定pip3.7的实际安装路径。)一个朋友告诉我,我需要配置环境,以便所有东西都可以使用Python 3.5。它工作了,但是没持续多久,因为我启动了另一个需要Python 3.6的项目。两个并发项目有两个不同版本的Python,emmmm,这很难说。PIP安装程序将文件放在用户的本地目录中。您不能使用pip来安装系统范围的库,Gawd将防止您犯运行“sudo Pip”的错误,因为它将扰乱整个计算机!顺便问一下,谁维护这些PIP模块?答案是社区。也就是说,没有明确的所有者和强制责任。今年早些时候,PyPi的一个版本有一个后门,其中SSH证书被盗,但我一点也不惊讶,因为社区存储库根本不可信。出于同样的原因,我不使用Node。JS和NPM。原因3:语法令人头疼的是在作用域中使用空格会导致可读性差。我非常相信可读代码。乍一看,Python似乎非常易读,并且当您开始构建大型代码库时,这种可读性就会降低。其他编程语言,如C、Java、JavaScript、Perl和PHP,使用{}表示范围;列表使用()。Python使用空格。如果需要为复杂代码定义范围,则对以下代码行进行缩进,当缩进终止时,范围终止。Python手册说可以使用任意数量的空格或选项卡来定义范围。但是,每个缩进使用四个空格!uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuPython社区已经标准化了这个术语,尽管它没有出现在Python手册中。文档中的示例说明可以使用TAB、TAB 1空间等。但是社区对这四个空间是偏执的!因此,除非您打算永远不向任何人显示您编写的代码,否则每个缩进使用四个空格。当我第一次看到Python代码时,我认为使用缩进来定义作用域可能是个好主意。事实上,我太天真了。这是一个很大的缺点。深度嵌套是可能的,但是每行代码都变得非常宽,并且必须包装在文本编辑器中。长函数和长条件操作都可能使开始和结束的匹配变得困难。我同情那些错误计算空间数量的人(比如只丢失三个空间而不是四个),因为这些错误需要花费数小时进行调试和跟踪。我的调试代码习惯没有缩进,因此我可以快速浏览代码,并在完成后轻松地识别和删除调试代码。但是Python呢?如果缩进错了,那就错了。原因4:加载库的独特方式。大多数编程语言都有包含其他代码块的方法。对于C,它是“#include”。对于PHP,有“include”、“include_.”、“.”和“._.”。对于Python,它是“import”。Python导入允许导入整个模块、模块部分或模块内的特定功能。但是找到导入代码块的方法很麻烦。使用C,直接查看/usr/include/*。但是Python呢?最好使用“python-v”列出所有位置,然后搜索列表中每个目录和子目录中的每个文件。真麻烦。导入函数还允许用户重命名导入的代码,这基本上定义了名称空间。乍一看,这似乎不错,但它最终会影响可读性和长期支持。重命名模块非常适合于小脚本,但对于大程序则非常糟糕。这样的操作“import numpy as n”应该被终止。但这不是最糟糕的部分。对于大多数语言来说,包括代码实际上意味着只包括代码。一些语言,例如面向对象的C,可以执行代码。类似地,一些PHP代码可能定义全局变量,因此导入可以运行代码,但这通常被认为是一种不好的做法。相反,许多Python模块包含导入期间运行的初始化函数。你不知道发生了什么,你不知道它在做什么,你甚至没有注意到。除非存在名称空间冲突,否则要花很长时间才能找到这种情况的原因。原因5:关键字和库命名是“唯一的”,数组在所有其他编程语言中都称为“数组”。在Python中,数组被称为“list”。在其他语言中,关联数组有时称为“hash”(Perl),但在Python中称为“dictionary”。Python在计算机和信息科学中似乎没有使用通用术语。然后是图书馆的名称。看看这些名字,PyPy,PyPi,NumPy,SciPy,SymPy,PyGtk,Pyglet,PyGame……(是的,前两个名称听起来完全一样,但是它们的功能和用途非常不同。)我知道“py”代表Python。但是这两个字母不能在图书馆的开头或结尾固定吗?一些常见的库不遵循这种所谓的“Py”命名约定。例如,matplotlib、nose、Pillow和SQLAlchemy。虽然可以从一些命名(例如“SQLAlchemy”包含SQL,因此可能是SQL接口)中看到库的一些函数,但是许多名称只是随机的词。如果您事先不知道Beautiful Soup的用途,从名称中可以看出它是HTML/XML解析器吗?顺便说一下,Beauti.Soup库有良好的文档,并且易于使用。如果每个Python模块都很容易使用,那么我就不会在这儿花太多时间了。不幸的是,这是一个例外,而不是规范。大多数Python库都烂透了。)总的来说,我认为Python对库的命名是令人困惑的,并且缺乏一致性原则。我总是觉得命名开源项目有这种混乱的规则。除非您了解该项目,否则您根本无法知道该项目的名称。除非你知道你在找什么,否则你可能永远找不到你要找的东西。从大多数Python库的命名来看,我现在更相信这个观点。原因6:还有一些其他的“独特”特征。每种语言都有自己的怪癖。在C语言中,使用&and*访问地址空间和值是一个奇怪的术语。C语言还有“and”--“变量增减控制方法,在Bash语言中,当引用括号和正则表达式周期等特殊字符时,需要使用反斜杠。JavaScript存在兼容性问题(并非每个浏览器都支持所有有用的功能)。但是Python比我所见过的任何其他语言都奇怪。以字符串为例:在C语言中,字符串使用双引号,字符使用单引号。在PHP和Bash中,两种类型的引号都可以用于字符串。但是,当使用双引号时,变量可以嵌入到字符串中。相反,用单引号括起来的字符串属于文本。任何嵌入变量的名称都是不可扩展的。在JavaScript中,单引号和双引号之间实际上没有区别。在Python中,单引号和双引号之间没有区别。但是,如果希望字符串交叉线,则需要使用三个引号“”、“string”、“或“string”。如果要使用二进制文件,首先需要使用B(bbinary)或R(r.)来选择字符串。有时您需要使用str(string)进行字符串转换或字符串。编码(“utf-8”)以将其转换为utf8。如果您认为PHP和JavaScript符号很奇怪,请等待,直到在Python中使用引号为止。原因7:任务很奇怪。大多数编程语言按值传递函数参数。如果函数改变了它的值,结果就不会传递回调用代码。但是Python不同。默认情况下,Python使用对象传递引用参数来执行函数。这意味着更改源变量最终可能会更改值。这是面向程序、面向函数和面向对象的编程语言之间的主要区别之一。如果通过对象引用传递每个变量,并且对该变量的任何更改都会在其他地方导致变量值的更改,那么全局变量也可以用于处理所有内容。用不同的名称调用相同的对象不会改变对象的值,因此该对象实际上是全局的。C程序员有一句老话,全局变量是邪恶的,不应该使用。在Python中,变量必须通过值传递。A=b”只是为相同的对象空间指定另一个名称,而不将B的值赋给a。如果要赋值,则需要使用复制函数。通常的格式是“a=B.copy()”。但是请注意,我指的是“正常”。并非所有数据类型都可以以这种方式分配,并且一些函数可能不完整。需要一个名为“copy”的单独库:“a=copy。深拷贝(B)。原因8:命名本地程序令人困惑。根据所使用的库或函数命名程序是一种常见的编程技术。例如,我正在使用名为“libscreen.”的C语言库测试屏幕捕获程序。我调用的程序可以命名为“屏幕截图”。c,编译为“屏幕截图”。“EXE”。如果使用C、Java、JavaScript、Perl、PHP和其他语言,这种命名方法是非常有用的,因为编程语言可以很容易地将存储库与本地程序区分开来,因为它们的路径不同。但如果使用Python,千万不要这样命名。为什么?Python总是假设用户首先导入本地代码。如果我有一个名为“screen..py”的程序使用“importscreen.”,它将导入自身而不是系统库。至少,本地程序需要命名为“myscreen.”。py以避免这个错误。当然,有很多Tucao,但实际上,Python并非没有价值。Python是一种非常流行的语言,拥有大量的用户。我的一些朋友非常喜欢Python,这是他们最喜欢的编程语言。多年来,我与他们讨论了这些问题,每次他们都点头表示同意。他们不否认Python确实存在这些问题,但是觉得这些缺点不足以让他们放弃Python。我的朋友经常引用所有存在于编程中的酷Python库。我也认为一些图书馆真的很有用。例如,Beauti.Soup是我使用过的最好的HTML解析器之一,NumPy使多维数组和复杂的数学过程更容易实现,TensorFlow对于机器学习非常有用。但我不会仅仅因为我喜欢TensorFlow或SciPy就用Python创建一个程序。为了方便某些库,放弃程序的可读性和可维护性是不值得的。一般来说,当我写一篇关于某个话题的负面评论文章时,我会试着写一些积极的东西。例如,当我写到FFmpeg的局限性时,我清楚地表明它是最好的视频处理库。但是我不能在这里写Python的优点,因为我真的认为Python很糟糕。这篇文章一发表,就引发了评论领域的激烈辩论:“你不了解Python”、“Mario Abarca”。这些问题可以总结如下:您不喜欢Python,因为它与C风格的版本不兼容,不是bug,而是特性;我认为没有人维护的东西不应该再在虚拟环境中安装不同的Python版本。默认TAB=用于安装在相同环境中的现代编辑器的4个空间。您也不必使用四个空格,但要确保官方文档始终非常好,真的。如果不在标准库中,请翻阅《Python的Hitchhiker指南》。我认为Python的命名风格特别好而且直观。列表要么是数组,要么是序列;关联数组是显式地排除b之前的二进制字符串,因为在Unicode规范中,1字节1字节的优点在于,我可以在任何地方、任何时间引用某些内容,而不必每次复制和粘贴原始名称,如上面注释1和2一样,这是关于谁的问题生态系统,语言本身。无关紧要。因为不同的人花费宝贵的业余时间来维持这样的社区维护项目,每个人都有自己的习惯和价值观,这只能说明你太个性化了。我们都保持默认的统一样式。显然,对于其他人来说,维护C/C包括.很难处理模块接口列表和数组。接下来,每种语言都有自己的转换集。Python可能不是最完美的,但是其他的更差,对象引用效率更高。尤其是当变量名不一致时,直接复制它们会有问题。但如果引用,最好不要将程序命名为标准库中的程序或模块的名称。首先,纠正你。PyPy和PyPi的发音不同。第一个是“派屁股-爱情”。第二个是“派屁股-爱情”。其次,这个名字重要吗?第三方哥哥,任何名字都可以出现哥哥。当你被提名时,你能保证你能够忠诚吗?我不懂jaxteller SoA.为什么不使用缩进来定义作用域呢?多么壮观啊!你不用用其他语言缩进吗{}?此外,您不认为按{}类型的转换很难吗?我和范C谈过“缩进与括号”。他说没有括号,我们怎么能容易地找到范围?对标准Py粉丝的回答是:啊,你以前喜欢括号,因为你的坏代码习惯。我认为,最好问一下:如果不使用文本编辑器/IDE来突出括号或它们之间的空格,是否仍然坚持使用括号而不缩进?我想他终于明白我的意思了,他说:“啊,我明白了,你使用缩进的原因是Python编辑器太烂了!”可怜的家伙。签字。”我也不喜欢Python,”可爱的Python是我的第一种语言,但是我再也不会使用它了。当然,在我看来,作者的问题不是问题,而是个人习惯。包装管理模式很糟糕。那么多包管理员可以借鉴,可以使PIP不那么差啊,不能有一个标准的包管理员有一个标准的清单?没有怀孕!安装Tunde确实令人头疼。是的,很多人提到安装虚拟环境,venv/virtualenv。Ruby具有RVM,这使得在同一环境中使用不同版本变得容易。我宁愿一个接一个地给Ruby、PHP、Perl。要配置环境,但不愿意配置Python。哦!多线兰姆达!我最喜欢JS。在蟒蛇,不!对!现在!Setpatchadd.1.5以来我一直在使用Python。对我来说,缩进是最不能容忍的表达句子的方式!我喜欢C中的括号,不喜欢Python的缩进。Colanderman:我认为Python最大的问题是内部模型过于复杂,无法满足其意图。有经验的开发人员很难理解,更不用说初学者了。你怎么认为?

文章评论

Top