亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用《矛盾論》來解讀 Python

系統 1576 0

? 點擊上方藍字“ Python貓 ”, 免費獲得 一個公眾號

大家好,我是貓哥。我對于編程語言跟其它學科的融合非常感興趣,這種興趣在創辦公眾號時就已非常濃烈,因此,幾個月來,就做了不少大膽的嘗試。不敢說取得了什么“成果”吧,但至少是做到了獨樹一幟。

在這個過程中,我有幸認識了幾位“跨界跨學科”的群友:既有學貫多門語言的大佬,也有深夜研讀斯賓諾莎倫理學的同學,還有逛遍各種展館興趣無邊界的能人。非常有趣。

今天這篇文章的原作者也挺能跨界的,他很佩服毛主席的《矛盾論》,因此把它跟 Python 放在一起思考,寫出了一篇文章來投稿。我欣賞他的 發散思維 ?,以及? 跨學科知識融合 ?的嘗試,于是稍作編輯,發布出來。至于內容,就不多說了,建議你往下一看便知。

用《矛盾論》來解讀 Python_第1張圖片

?我的戰斗力是53萬 |? 原創作者

?豌豆花下貓 |? 編輯潤色

《矛盾論》是毛主席寫的哲學著作,1975 年由人民出版社出版。

通過閱讀,我發現《矛盾論》中的一些方法論可以應用在編程語言之中,本文以 Python 語言舉例描述。

1.矛盾的普遍性

《矛盾論》原文中有這樣一段話:

列寧也這樣說過矛盾的普遍性:"在數學中,正和負,微分和積分。在力學中,作用和反作用。在物理學中,陽電和陰電。在化學中,原子的化合和分解。在社會科學中,階級斗爭。"戰爭中的攻守,進退,勝敗,都是矛盾的現象。失去一方,他方就不存在。

這段話描述的是矛盾的普遍性。那在 Python 中的矛盾是什么呢?大概就是編寫代碼的速度和代碼運行速度之間的矛盾吧。

請看下面例子,現在有一個任務:在近萬個文件的目錄下,數一數有多少個 JPEG 文件?

看看用各個編程語言實現的情況:

用《矛盾論》來解讀 Python_第2張圖片

結果顯示 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 中的矛盾消失了,那這門語言也就走到了盡頭,這一點或許也可以映射到其它的編程語言吧。

精選推薦,更多好文

1

為什么 Python 3 ?把 print 改為函數?

2

Python 高速增長的三次歷史機遇

3

Python 工匠:使用裝飾器的技巧

4

你真的知道Python的字符串是什么嗎?

用《矛盾論》來解讀 Python_第3張圖片


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日狠狠久久偷偷四色综合免费 | 一级高清毛片 | 极品福利在线 | 综合色久七七综合七七蜜芽 | 色婷亚洲 | 老子影院午夜伦手机不四虎 | 99视频网| 久久精品亚洲日本波多野结衣 | 在线免费黄色网址 | 最新国产福利在线 | 日日摸夜夜夜夜夜添 | 欧美成人综合在线 | 成人一级黄色毛片 | 亚洲一区二区三区网站 | 中国一级特黄 | 色婷婷激婷婷深爱五月小蛇 | 不卡中文一二三区 | 免费国产成人高清在线观看视频 | 香蕉依人 | ww亚洲ww亚在线观看 | 伊人精品成人久久综合欧美 | 人与拘一级a毛片 | 特级一级毛片视频免费观看 | 国产精品久久久久影视青草 | 久久久久久久久中文字幕 | 97影院网| 久草新免费 | 欧美.成人.综合在线 | 91福利一区二区在线观看 | 夜夜操夜夜 | 亚洲综合国产 | 四虎影免看黄 | 日本大臿亚洲香蕉大片 | 中文字幕欧美亚洲 | 国产国拍亚洲精品永久不卡 | 成人黄色在线视频 | 四虎影视国产在线观看精品 | 亚洲日本中文字幕在线 | 欧美在线播放成人免费 | 来自深渊在线观看 | 久久精品一区二区免费看 |