作者对每一项“缺点”都进行了分析,全文洋洋洒洒,概括起来 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

python代码太长_Python 太糟糕了?开发者总结了 8 大原因相关推荐

  1. python网址太长_Python GUI-长链转短链

    当我们想要与某人分享链接或将链接放入帖子时,如果链接太长,则会占用大量空间,而且非常缺乏吸引力.在这个时候,我们可以结束长链到短链的转换工具.当然,您可以直接搜索在线网站进行转换,但我们可以使用它来练 ...

  2. python代码质量检查工具_python代码检查工具pylint 让你的python更规范

    复制代码 代码如下: #coding:utf-8 ''' a test function module ''' import urllib import time def fetch(url): '' ...

  3. python代码编写规范_python初学者-代码规范

    一.编程规范 1.缩进(代码块) 类定义.函数定义.选择结构.循环结构.with块.行尾的冒号表示缩进的开始. python程序是依靠代码块的缩进来体现代码之间的逻辑关系,缩进结束就表示一个代码块结束 ...

  4. python代码加密 混淆_Python程序的混淆和加密

    混淆 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. 如果你觉得有用, 可以购买离线版本. 同时需要注意的是, 这个混淆其实还是被很多人怀疑的, 因为即使混淆了 ...

  5. python代码代写_python代写代码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 1 原则在开始讨论python社区所采用的具体标准或是由其他人推荐的建议之前,考 ...

  6. python代码重构技巧_Python代码重构

    代码重构是一件很是辛苦却很是有意义的事情,代码重构的缘由在于:django 一.代码过于冗余.沉余架构 二.代码过于耦合函数 三.代码过于复杂学习 四.接口调用超出三层优化 此次重构主要在于架构问题, ...

  7. python代码怎么修改_python修改微信和支付宝步数的示例代码

    项目意义 如果你想在支付宝蚂蚁森林收集很多能量种树,为环境绿化出一份力量,又或者是想每天称霸微信运动排行榜装逼,却不想出门走路,那么该python脚本可以帮你实现. 实现方法 手机安装第三方软件乐心健 ...

  8. python代码调试中间变量_Python代码调试的那些“最少且必要”技巧

    原标题:Python代码调试的那些"最少且必要"技巧 异常处理模块能帮助我们在运行期间处理异常信息,但Python代码还有更为基础的错误--语法错误和逻辑错误. 语法错误相对简单, ...

  9. 调节e18-d80nk的测量距离_线缆太长负载太远,负载端电压难测量?三种方法帮你搞定...

    关键词:电缆, 线缆阻抗, 负载电流, 开尔文检测 在产品设计,研发过程中,我们常会碰到稳压器与负载分离的情况.此时,如果电缆线太长,线缆阻抗无法忽略.负载电流太大,这些都会使得配电线上的压降增大,从 ...

最新文章

  1. 物体检测中的评价指标【文末赠书】
  2. MySQL中INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?
  3. #修改margin_springboot+jpa+tymeleaf实现信息修改功能
  4. CentOS7上安装KVM部署虚拟机
  5. CMake入门指南-编译教程
  6. HashSet.contains
  7. xss权限维持(小技巧)
  8. Reporting Service 在文本框中换行的问题
  9. 3D Reconstruction三维重建halcon算子,持续更新
  10. M1芯片Mac也可以安装Windows系统啦 使用PD16虚拟机安装ARM版Windows10教程
  11. [linux]【编译】【高级01】 - 动态库的设定和依赖性的检查 20160921更新 文章没有最终结案
  12. linux mysql 没有密码忘记,在linux系统中,如果忘记了MySQL的root密码,有没有办法重新设置新密码呢?...
  13. oracle 查看动态性能视图,Oracle 中的V$ 动态性能视图
  14. CentOS虚拟机 Device eth0 does not seem to be present
  15. python soup提取叶子标签_使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)...
  16. python第三方库:chardet字符编码检测和乱码处理
  17. 在shell中向应用程序的socket发送信息
  18. 计算机网络-什么是计算机网络?
  19. 基于c#的IE 代理服务器设置
  20. 【网络安全专栏目录】--企鹅专栏导航

热门文章

  1. 创业冲突的五种解决方法是_失眠原因不同,中医五种调理方法解决问题!
  2. upc 9519 New Game
  3. mac使用Shell(终端)SSH连接远程服务器
  4. 你的第一个Django程序
  5. idea ssm项目移包报错问题
  6. [APIO2016]
  7. Oracle 客户端连接服务器[转]
  8. 解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)
  9. [能力提升][费曼学习法]学习方法
  10. [Leetcode][第17题][JAVA][电话号码的字母组合][回溯]