专栏首页Python无止境用《矛盾论》来解读 Python

用《矛盾论》来解读 Python

大家好,我是猫哥。我对于编程语言跟其它学科的融合非常感兴趣,这种兴趣在创办公众号时就已非常浓烈,因此,几个月来,就做了不少大胆的尝试。不敢说取得了什么“成果”吧,但至少是做到了独树一帜。

在这个过程中,我有幸认识了几位“跨界跨学科”的群友:既有学贯多门语言的大佬,也有深夜研读斯宾诺莎伦理学的同学,还有逛遍各种展馆兴趣无边界的能人。非常有趣。

今天这篇文章的原作者也挺能跨界的,他很佩服毛主席的《矛盾论》,因此把它跟 Python 放在一起思考,写出了一篇文章来投稿。我欣赏他的发散思维 ,以及 跨学科知识融合 的尝试,于是稍作编辑,发布出来。至于内容,就不多说了,建议你往下一看便知。

我的战斗力是53万 | 原创作者

豌豆花下猫 | 编辑润色

《矛盾论》是毛主席写的哲学著作,1975 年由人民出版社出版。

通过阅读,我发现《矛盾论》中的一些方法论可以应用在编程语言之中,本文以 Python 语言举例描述。

1.矛盾的普遍性

《矛盾论》原文中有这样一段话:

列宁也这样说过矛盾的普遍性:"在数学中,正和负,微分和积分。在力学中,作用和反作用。在物理学中,阳电和阴电。在化学中,原子的化合和分解。在社会科学中,阶级斗争。"战争中的攻守,进退,胜败,都是矛盾的现象。失去一方,他方就不存在。

这段话描述的是矛盾的普遍性。那在 Python 中的矛盾是什么呢?大概就是编写代码的速度和代码运行速度之间的矛盾吧。

请看下面例子,现在有一个任务:在近万个文件的目录下,数一数有多少个 JPEG 文件?

看看用各个编程语言实现的情况:

结果显示 Python 的运行速度明显慢于 Go 和 Rust,但是,写这个程序用 Python 需要 15 行代码,Rust 语言需要 29 行,Go 语言需要 30 行。

(以上例子的出处:https://blog.lilydjwg.me/2018/6/14/walk-a-directory-python-vs-go-vs-rust.212932.html)

这个任务显示出了 Python 语言中的矛盾:开发速度和运行速度之间的矛盾。

《矛盾论》中关于矛盾有这样一个描述:

如果是存在两个以上的矛盾的复杂过程的话,就要用全力找到它的主要矛盾,捉住这个主要矛盾,一切问题就迎刃而解了。

在 Python 中还存在着其它的矛盾,比如内存,并发,可读性等等,有那么一句笑话“动态语言一时爽,重构代码火葬场”。

但在 Python 中的主要矛盾就是速度,这一点是被人议论最多的,其它的矛盾也有些是因为速度这个主要矛盾而产生的。

2.为什么会有矛盾?

Python为什么运行速度慢?

首先因为 Python 是动态语言,动态类型语言之所以慢,就是因为每一个简单的操作都需要大量的指令才能完成。一般来说,虚拟机拥有很强的优化器,但却是为静态语言设计的,对 Python 几乎没有效果。

举一个例子。对于整数加法,C 语言很简单,只要一个机器指令 ADD 就可以了,最多不过再加一些内存读写。但是,对于 Python 来说,a + b 这样的简单二元运算,可就真的很麻烦了。Python 是动态语言,变量只是对象的引用,变量 a 和 b 本身都没有类型,而它们的值有类型。所以,在相“加”之前,必须先判断类型。

其次,Python 的解释器 CPython 中存在 GIL(全局解释器锁),它会让 Python 只能执行单线程,Python 中所谓的多线程,只是在各个单线程之间的快速切换,让程序看上去像是在执行多线程。

(对于 Python 慢的分析,这里有篇文章《Python 为什么这么慢?》值得一看,另外, GIL 的问题并不是不可解决的,详见《GIL 已经被杀死了么?》)

Python 为什么开发速度快?

首先,也是因为 Python 是动态语言,编程时不用定义变量类型。比如要定义一个变量 a,让 a 的值为 1,用 C 语言来写分为两步,第一步是“int a”,第二步是“a = 1”,另外C语言还需要导入头文件“#include”和定义主函数 main。而 Python 只需要一步“a = 1”。

其次,Python 拥有大量的模块、库和包,让开发者拿来即用,提高开发效率。

3.矛盾的同一性

“事情不是矛盾双方互相依存就完了,更重要的,还在于矛盾着的事物的互相转化。”

《矛盾论》举了大量例子来说明矛盾的同一性。

比如:”被统治的无产阶级经过革命转化为统治者,原来是统治者的资产阶级却转化为被统治者,转化到对方原来所占的地位。”

还有:“大家都知道,战争和和平是相互转化的。战争转化为和平,例如第一次世界大战转化为战后的和平,中国的内战现在也停止了,出现了国内的和平。和平转化为战争,例如一九二七年的国共合作转化为战争,现在的世界和平局面也可能转化成第二次世界大战。“

由此可见,矛盾着的双方都向着它们的对立面慢慢地转化。

Python 也是同理。比如想让 Python 程序运行的快,那可以部分程序用 C/C++ 重写,那代码量就会增多,开发速度就会变慢。

运行速度从慢到快,开发速度从快到慢,从相反的方向互相转化,体现了矛盾的同一性。

4.认识的过程

看一段矛盾论的原文:

就人类认识运动的秩序来说,总是认识个别的和特殊的任务,逐步地扩大到认识一般的事物。人们总是首先认识了许多不同事物的特殊本质,然后才有可能进行更近一步的概括工作,认识诸种事物的特殊本质。

搞编程的人可能多少会听过一句话“语言是相通的”。一方面,每个编程语言都有自己擅长的领域,比如 Python 适合人工智能,PHP 适合网站开发,Java 适合软件开发,但每个编程语言又有类似的功能和语法。

前提是你要精通一种语言,了解背后的思想,才可以更好的过渡到其它语言,从而发现各种编程语言的共通之处,从个别到一般。

5.语言的发展

正是由于 Python 存在着“开发快,运行慢”的矛盾,Python 的核心开发团队才不断地研究改进,让 Python 不断地发展。

毛主席在《矛盾论》中说:

党内如果没有矛盾和解决矛盾的思想斗争,党的生命也就停止了。

当有一天 Python 中的矛盾消失了,那这门语言也就走到了尽头,这一点或许也可以映射到其它的编程语言吧。

本文分享自微信公众号 - Python猫(python_cat),作者:我的战斗力是53万

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 3.8 带来了哪些新鲜功能?

    Python 3.8最明显的变化就是赋值表达式,即:=操作符。赋值表达式可以讲一个值赋给一个变量,即使变量不存在也可以。它可以用在表达式中,无需作为单独的语句出...

    Python猫
  • 四个月技术写作,我写了些什么?

    按照大多数个人订阅号的优良传统,号主应该在跨年的前后作年终总结。然而,一来我反应比较迟钝,没跟上节奏,二来当时我正在写比较重要的系列,没时间分心,所以还是慢了半...

    Python猫
  • 耗时两年,我终于出了一本电子书!

    2018 年国庆节前,我开通了微信公众号“Python猫”,写下了“喵星来客”系列的第一篇文章。

    Python猫
  • 用Python支持 7 亿月活用户的应用?Instagram 是这样实现的

    PyCon 简介 PyCon 是全世界最大的以 Python 编程语言 为主题的技术大会。大会由 Python 社区组织,每年举办一次。在大会上,来自世界各...

    AI研习社
  • 学习 Python 来做一些神奇好玩的事情吧

    相信看完 @X_AirDu 的回答我们已经对 Python 有了一个大概的了解。那接下来就让我们更深入的了解 Python 吧~

    SunnyGo
  • 为什么程序员要学Python

    2017年7月20日,IEEE发布了2017年编程语言排行榜:Python高居首位。就在今年,Python突然间走进了大众的视线,一瞬间,关于这种我们很少听过的...

    企鹅号小编
  • 下一个十年,Python的“王者”地位还保得住吗?

    本文最初发表在 Medium 博客上,经原作者 Bharath K 授权,InfoQ 中文站翻译并分享。

    代码医生工作室
  • 资深程序员说,这本Python书能让你从入门到开车,轻松成为老司机

    前段时间推荐了几本基础的Python学习书籍,可是没过两天就有人找我,说我介绍那几本入门书籍都看完,有没有可以学更多的Python书。

    Python编程大咖
  • Python数据分析

    工欲善其事,必先利其器“,Python是目前为止做数据分析最常用的编程语言,我们可以站在巨人的肩膀上,高效完成数据分析。

    数据山谷
  • 警惕!Python 正在慢慢失去魅力!

    自从 1990 年代初发布 Python 以来,它引起了很多炒作。当然,编程社区至少花了 20 年的时间才意识到它的存在,但是自那时以来,它的普及程度已经远远超...

    Python知识大全

扫码关注云+社区

领取腾讯云代金券