日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

用《矛盾論》來(lái)解讀 Python

系統(tǒng) 1810 0

? 點(diǎn)擊上方藍(lán)字“ Python貓 ”, 免費(fèi)獲得 一個(gè)公眾號(hào)

大家好,我是貓哥。我對(duì)于編程語(yǔ)言跟其它學(xué)科的融合非常感興趣,這種興趣在創(chuàng)辦公眾號(hào)時(shí)就已非常濃烈,因此,幾個(gè)月來(lái),就做了不少大膽的嘗試。不敢說(shuō)取得了什么“成果”吧,但至少是做到了獨(dú)樹(shù)一幟。

在這個(gè)過(guò)程中,我有幸認(rèn)識(shí)了幾位“跨界跨學(xué)科”的群友:既有學(xué)貫多門(mén)語(yǔ)言的大佬,也有深夜研讀斯賓諾莎倫理學(xué)的同學(xué),還有逛遍各種展館興趣無(wú)邊界的能人。非常有趣。

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

用《矛盾論》來(lái)解讀 Python_第1張圖片

?我的戰(zhàn)斗力是53萬(wàn) |? 原創(chuàng)作者

?豌豆花下貓 |? 編輯潤(rùn)色

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

通過(guò)閱讀,我發(fā)現(xiàn)《矛盾論》中的一些方法論可以應(yīng)用在編程語(yǔ)言之中,本文以 Python 語(yǔ)言舉例描述。

1.矛盾的普遍性

《矛盾論》原文中有這樣一段話(huà):

列寧也這樣說(shuō)過(guò)矛盾的普遍性:"在數(shù)學(xué)中,正和負(fù),微分和積分。在力學(xué)中,作用和反作用。在物理學(xué)中,陽(yáng)電和陰電。在化學(xué)中,原子的化合和分解。在社會(huì)科學(xué)中,階級(jí)斗爭(zhēng)。"戰(zhàn)爭(zhēng)中的攻守,進(jìn)退,勝敗,都是矛盾的現(xiàn)象。失去一方,他方就不存在。

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

請(qǐng)看下面例子,現(xiàn)在有一個(gè)任務(wù):在近萬(wàn)個(gè)文件的目錄下,數(shù)一數(shù)有多少個(gè) JPEG 文件?

看看用各個(gè)編程語(yǔ)言實(shí)現(xiàn)的情況:

用《矛盾論》來(lái)解讀 Python_第2張圖片

結(jié)果顯示 Python 的運(yùn)行速度明顯慢于 Go 和 Rust,但是,寫(xiě)這個(gè)程序用 Python 需要 15 行代碼,Rust 語(yǔ)言需要 29 行,Go 語(yǔ)言需要 30 行。

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

這個(gè)任務(wù)顯示出了 Python 語(yǔ)言中的矛盾:開(kāi)發(fā)速度和運(yùn)行速度之間的矛盾。

《矛盾論》中關(guān)于矛盾有這樣一個(gè)描述:

如果是存在兩個(gè)以上的矛盾的復(fù)雜過(guò)程的話(huà),就要用全力找到它的主要矛盾,捉住這個(gè)主要矛盾,一切問(wèn)題就迎刃而解了。

在 Python 中還存在著其它的矛盾,比如內(nèi)存,并發(fā),可讀性等等,有那么一句笑話(huà)“動(dòng)態(tài)語(yǔ)言一時(shí)爽,重構(gòu)代碼火葬場(chǎng)”。

但在 Python 中的主要矛盾就是速度,這一點(diǎn)是被人議論最多的,其它的矛盾也有些是因?yàn)樗俣冗@個(gè)主要矛盾而產(chǎn)生的。

2.為什么會(huì)有矛盾?

Python為什么運(yùn)行速度慢?

首先因?yàn)?Python 是動(dòng)態(tài)語(yǔ)言,動(dòng)態(tài)類(lèi)型語(yǔ)言之所以慢,就是因?yàn)槊恳粋€(gè)簡(jiǎn)單的操作都需要大量的指令才能完成。一般來(lái)說(shuō),虛擬機(jī)擁有很強(qiáng)的優(yōu)化器,但卻是為靜態(tài)語(yǔ)言設(shè)計(jì)的,對(duì) Python 幾乎沒(méi)有效果。

舉一個(gè)例子。對(duì)于整數(shù)加法,C 語(yǔ)言很簡(jiǎn)單,只要一個(gè)機(jī)器指令 ADD 就可以了,最多不過(guò)再加一些內(nèi)存讀寫(xiě)。但是,對(duì)于 Python 來(lái)說(shuō),a + b 這樣的簡(jiǎn)單二元運(yùn)算,可就真的很麻煩了。Python 是動(dòng)態(tài)語(yǔ)言,變量只是對(duì)象的引用,變量 a 和 b 本身都沒(méi)有類(lèi)型,而它們的值有類(lèi)型。所以,在相“加”之前,必須先判斷類(lèi)型。

其次,Python 的解釋器 CPython 中存在 GIL(全局解釋器鎖),它會(huì)讓 Python 只能執(zhí)行單線(xiàn)程,Python 中所謂的多線(xiàn)程,只是在各個(gè)單線(xiàn)程之間的快速切換,讓程序看上去像是在執(zhí)行多線(xiàn)程。

(對(duì)于 Python 慢的分析,這里有篇文章《Python 為什么這么慢?》值得一看,另外, GIL 的問(wèn)題并不是不可解決的,詳見(jiàn)《GIL 已經(jīng)被殺死了么? 》)

Python 為什么開(kāi)發(fā)速度快?

首先,也是因?yàn)?Python 是動(dòng)態(tài)語(yǔ)言,編程時(shí)不用定義變量類(lèi)型。比如要定義一個(gè)變量 a,讓 a 的值為 1,用 C 語(yǔ)言來(lái)寫(xiě)分為兩步,第一步是“int a”,第二步是“a = 1”,另外C語(yǔ)言還需要導(dǎo)入頭文件“#include”和定義主函數(shù) main。而 Python 只需要一步“a = 1”。

其次,Python 擁有大量的模塊、庫(kù)和包,讓開(kāi)發(fā)者拿來(lái)即用,提高開(kāi)發(fā)效率。

3.矛盾的同一性

“事情不是矛盾雙方互相依存就完了,更重要的,還在于矛盾著的事物的互相轉(zhuǎn)化。”

《矛盾論》舉了大量例子來(lái)說(shuō)明矛盾的同一性。

比如:”被統(tǒng)治的無(wú)產(chǎn)階級(jí)經(jīng)過(guò)革命轉(zhuǎn)化為統(tǒng)治者,原來(lái)是統(tǒng)治者的資產(chǎn)階級(jí)卻轉(zhuǎn)化為被統(tǒng)治者,轉(zhuǎn)化到對(duì)方原來(lái)所占的地位。”

還有:“大家都知道,戰(zhàn)爭(zhēng)和和平是相互轉(zhuǎn)化的。戰(zhàn)爭(zhēng)轉(zhuǎn)化為和平,例如第一次世界大戰(zhàn)轉(zhuǎn)化為戰(zhàn)后的和平,中國(guó)的內(nèi)戰(zhàn)現(xiàn)在也停止了,出現(xiàn)了國(guó)內(nèi)的和平。和平轉(zhuǎn)化為戰(zhàn)爭(zhēng),例如一九二七年的國(guó)共合作轉(zhuǎn)化為戰(zhàn)爭(zhēng),現(xiàn)在的世界和平局面也可能轉(zhuǎn)化成第二次世界大戰(zhàn)。“

由此可見(jiàn),矛盾著的雙方都向著它們的對(duì)立面慢慢地轉(zhuǎn)化。

Python 也是同理。比如想讓 Python 程序運(yùn)行的快,那可以部分程序用 C/C++ 重寫(xiě),那代碼量就會(huì)增多,開(kāi)發(fā)速度就會(huì)變慢。

運(yùn)行速度從慢到快,開(kāi)發(fā)速度從快到慢,從相反的方向互相轉(zhuǎn)化,體現(xiàn)了矛盾的同一性。

4.認(rèn)識(shí)的過(guò)程

看一段矛盾論的原文:

就人類(lèi)認(rèn)識(shí)運(yùn)動(dòng)的秩序來(lái)說(shuō),總是認(rèn)識(shí)個(gè)別的和特殊的任務(wù),逐步地?cái)U(kuò)大到認(rèn)識(shí)一般的事物。人們總是首先認(rèn)識(shí)了許多不同事物的特殊本質(zhì),然后才有可能進(jìn)行更近一步的概括工作,認(rèn)識(shí)諸種事物的特殊本質(zhì)。

搞編程的人可能多少會(huì)聽(tīng)過(guò)一句話(huà)“語(yǔ)言是相通的”。一方面,每個(gè)編程語(yǔ)言都有自己擅長(zhǎng)的領(lǐng)域,比如 Python 適合人工智能,PHP 適合網(wǎng)站開(kāi)發(fā),Java 適合軟件開(kāi)發(fā),但每個(gè)編程語(yǔ)言又有類(lèi)似的功能和語(yǔ)法。

前提是你要精通一種語(yǔ)言,了解背后的思想,才可以更好的過(guò)渡到其它語(yǔ)言,從而發(fā)現(xiàn)各種編程語(yǔ)言的共通之處,從個(gè)別到一般。

5.語(yǔ)言的發(fā)展

正是由于 Python 存在著“開(kāi)發(fā)快,運(yùn)行慢”的矛盾,Python 的核心開(kāi)發(fā)團(tuán)隊(duì)才不斷地研究改進(jìn),讓 Python 不斷地發(fā)展。

毛主席在《矛盾論》中說(shuō):

黨內(nèi)如果沒(méi)有矛盾和解決矛盾的思想斗爭(zhēng),黨的生命也就停止了。

當(dāng)有一天 Python 中的矛盾消失了,那這門(mén)語(yǔ)言也就走到了盡頭,這一點(diǎn)或許也可以映射到其它的編程語(yǔ)言吧。

精選推薦,更多好文

1

為什么 Python 3 ?把 print 改為函數(shù)?

2

Python 高速增長(zhǎng)的三次歷史機(jī)遇

3

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

4

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

用《矛盾論》來(lái)解讀 Python_第3張圖片


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 通州区| 凤阳县| 古蔺县| 都匀市| 宣城市| 抚顺市| 曲沃县| 天台县| 措勤县| 汕尾市| 芜湖县| 马公市| 义马市| 玛纳斯县| 江口县| 闽清县| 桂东县| 永济市| 樟树市| 浪卡子县| 绍兴市| 新乡市| 寿宁县| 平阴县| 边坝县| 东城区| 邮箱| 海兴县| 九龙城区| 马公市| 怀仁县| 尉犁县| 昌平区| 汉中市| 湘潭县| 珲春市| 海城市| 吉隆县| 万安县| 永康市| 萨迦县|