python代码太长_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 很糟糕。

详情查看原文:https://www.hackerfactor.com/blog/index.php?/archives/825-8-Reasons-Python-Sucks.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomca安装

下载 官网: http://tomcat.apache.org/ 2.安装 默认 3.安装成功

知其所以然(续)

查了一下,上篇知其所以然(以学习算法为例) 是08年7月写的,现在已经是10年11月,过去了两年零4个月,这说明了三件事情:1,一个问题其实你可以一直放在脑子里面,利用暗时间 对…

python中的引用怎么理解_Python函数通过引用调用

基本上有三种函数调用:通过价值 通过引用传递 通过对象引用传递 Python是一种PASS-BY-OBJECT-REFERENCE编程语言。 首先,重要的是要理解一个变量,变量(对象)的值是两个独立的东西。变量指向对象。变量不是对象。再次&a…

ELF动态库加载技术

库用于将相似函数打包在一个单元中。Linux支持两种类型的库:静态库(在编译时静态绑定到程序)和动态库(在运行时绑定到程序)。Linux系统使用的动态库是ELF格式,后缀名为so。 1 加载 动态库内部划分为段&a…

geoserver安装(war安装+exe安装)

下载 官网:http://geoserver.org/ 方法一 当前只有war版本的 下载结果 tomcat安装最好不要使用exe版本的,因为会出现问题,页面加载不出来,所以大家只需要下载下来解压即可 然后将geoserver安装包中的war文件放到webappx下 然后…

LSGO软件技术团队2015~2016学年第十六周(1214~1220)总结

团队简述: LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为大数据处理与机器学习。成立几年来为学校…

与大家分享一下2010我的找工作历程!真累啊!不过都已经结束了!

经常看到网上别人把找工作的过程与别人分享,这次俺也写下我的一点经历来与大家分享。 大三结束就准备找工作了,因为感觉在学校待着实在没意思,还是出去混混吧。 记得在暑假,想找份实习的,投了些简历,也不知…

LSGO软件技术团队2015~2016学年第十七周(1221~1227)总结

团队简述: LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为大数据处理与机器学习。成立几年来为学校…

postgresql+postgis安装

下载 官网https://www.postgresql.org/ 作者的电脑为win 下载结果为 postgis要选择下载对应版本的 官网http://www.postgis.org/ 以下安装最好装到除c盘之外的,否则有些安装需要权限,一般为d盘 用户名和密码都设置为postgres postgis安装教程 之前设置过…

话说Python:非主流编程语言

【编者按】Python编程语言广受开发者的喜爱,并被列入LAMP (Linux, Apache, MySQL 以及Python/Perl/PHP)中。尽管它在一段时期曾引领了动态语言,但这门颇受好评的编程语言却又从未大红大紫过。是什么让它在开发领域尤其是Web应用开发方面如此受宠呢&#…

把共享库(SO)加载到指定的内存地址

一位朋友最近遇到一个棘手的问题,希望把共享库(SO)加载到指定的内存地址,目的可能是想通过prelink来加快应用程序的起动速度。他问我有没有什么方法。我知道Windows下是可以的,比如在VC6里设置/base的值就行了,所以相信在linux下也…

aop实现原理_SpringAOP原理分析

目录Spring核心知识SpringAOP原理AOP编程技术什么是AOP编程AOP底层实现原理AOP编程使用Spring核心知识Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述…

欧盟无条件批准甲骨文收购Sun

北京时间1月21日消息,据国外媒体报道,甲骨文以70亿美元的价格收购Sun的交易今天获得了欧盟无条件批准。 这笔交易将改变科技产业的格局,这意味着全球第二大商用软件提供商甲骨文进入了硬件产业。在规模达170亿美元的高端计算机服务器市场&…

如何高效的访问内存

影响内存访问速度的因素主要有: 1.内存带宽:每秒读写内存的数据量,由硬件配置决定。 2.CACHE高速缓冲:CPU与内存之间的缓冲器,当命中率比较高时能大大提供内存平均访问速度。 3.TLB转换旁视缓冲:系统虚拟地…

初学者怎样看懂python代码_入门编程(初学者怎样看懂代码)

你既然喜欢编程,就应该认认真真的学习一门语言,学习微软的就先从vb开始,vb是比较好的入门语言,可视化的,比较简单,是非常好的入门语言。书籍最少应该准备两. 先认认真真的学习一门语言,学习微软…

MAVEN安装和配置

maven官网下载 https://maven.apache.org/download.cgi

MIPS架构的医院智能导诊系统设计

摘要:通过研究基于MIPS架构的SMP8654芯片的硬件架构,并且利用芯片内部的图形加速引擎GFX的方式实现了具有高清视频显示和图片文字处理功能的播放器。系统以嵌入式Linux和MiniGUI为平台设计了智能导诊系统,提高了医院的导诊就医的服务效率。智…

C、CPP const 详解

1.const修饰变量一般有两种写法: constTYPE value;TYPE constvalue;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即valu…

arcgis在线地图插件安装

软件下载链接 https://download.csdn.net/download/qq_39397927/15761863