python沒那麼神 Python 有那麼神嗎?

2021-10-11 02:19:00 字數 2602 閱讀 3103

答案是肯定的,python很神。特別是對於寫慣了c++等靜態型別語言的人來說。

以下摘自皮皮關馬遙的博文。善良的獸人 - csdn部落格。原文寫於2023年11月。

我的第乙份工作是一加國內知名遊戲公司的邏輯程式設計師,必須技能是c++,但是一開始只是寫語法和c++很類似的一種指令碼(後來知道是從乙個開源指令碼引擎angelscript修改而成的)。學習遊戲開發的流程,填資料,用指令碼定製各種任務、副本等等。第一年還很有興致,第二年開始就意興闌珊了。

後來熟悉了整個系統,介入到c++部分的**裡。涉及到道具、任務等等邏輯。那時候覺得最難的部分,是ui系統。當時的ui系統,是用xml拼出介面,然後用類似c++的那種指令碼來給它寫邏輯。從一開始被迫學習,到最後使用的時候遇到各種問題,前後折騰了很久。

寫程式的熱情,在實際工作中被一點點的磨滅。我想,很可能許許多多的程式設計師,都會遇到和我一樣的問題。因為愛好而走上這條路,卻被瑣碎的工作磨滅了最初的衝動。等到我成為乙個獨當一面的程式設計師的時候,我甚至有一種感覺,覺得自己似乎什麼都會,但是除了專案任務以外的東西,什麼都做不出來。相比高中時候的自己,甚至有一些退步。

直到有一天,我看了一本書《黑客與畫家》。

在你迷茫的時候,多吸收一些各方面的知識,偶爾會突然開啟一扇窗。

《黑客與畫家》滿本書都透著濃濃的技術自信,和充足的技術底蘊。它就像是乙個知識豐富的技術高手,迫不及待的將平生經驗一股腦傳授給你,為你指明發展的方向。它的字裡行間透露著對傳統程式語言的鄙夷和對lisp的崇敬。它認為精巧的語言,加上聰明程式設計師實現的高度抽象**,會帶來極大的生產力提公升,讓開發更快、bug更少,讓一兩個開發人員也能撐起乙個具有巨大經濟效益的**。

在web界已經是遍地動態語言的今天,《黑客與畫家》裡的判斷似乎已經沒什麼好討論的了(現在動態語言在很多領域已經成為了主流,和作者當年的情況已經有了天壤之別)。但對於當時的我來說,就是大海浬的一盞明燈。

雖然書裡對python(作者當年還是1.x版本)的看法很具有批判性,但是由於那時python 2.x已經有了長足的發展,加上乙個同事的推薦,我全身心投入到了python的學習之中。在寫了一些小練習程式之後,我在工作中找到了乙個python的用武之地——用python實現乙個資料**分析程式,並檢查**中的資料錯誤、邏輯錯誤。這種**處理工具在遊戲中具有很大的作用,而且非常適合用指令碼來靈活的擴充套件功能。

第乙個實現的簡單版本,使用起來大概是這樣:

import mb

t = mb.table( "data/index.txt" );

l = t.get_line( 1001 ); # 1001 is line index

data1 = l.get_int( 2 ); # 2 means colum 2

data2 = l.get_str( 3 );

這個**主要問題在哪呢?在於讀取資料時,程式設計師自己要指定資料的型別。get_int,get_str,get_float等等等等。

很不幸而又幸運的,當時我用某某雲盤儲存自己的**,有一次誤同步,導致在公司寫的很多**,在家裡操作時覆蓋了。迫使我重寫幾乎整個程式。這次,在同事的參謀下,我實現了這種用法:

import mb

t = mb.table( "data/index.txt" );

l = t[1001]; # 1001 is line index

data1 = l[2]; # 2 means colum 2

data2 = l[3];

這段**實現的功能與上面的完全一樣,但是有兩點變化:1、用下標操作符代替了get_***()函式呼叫,更簡潔。2、讀取時不需要指定型別,執行時,data1自然是整型,data2自然是字串。

這種實現,對於當時的我來說,是乙個理念上的重大突破!

為什麼這麼說呢?因為強型別的問題。在python中,我用一些很簡單的處理,讓mb庫的底層自然的處理了型別。而你知道嗎?在c++中,做到這點難如登天!

c++常常為了推斷乙個型別,不惜使用模版技巧,寫出天書一般的**。而且,結果上,仍然不能做到動態語言的這種用法。也就是說,顯式強型別特性,並不僅僅是約束程式設計師減少bug的工具,它同時也是實現高抽象系統的乙個束縛。這是個很有意思的事情,對我當時的觸動很大。不知讀者能否理解。

到了寫出這個**分析庫之後,我生命中的一扇門開啟了。

我回到了可以自由寫**的時代,就像是我的高中時代,而且比那個時代更為簡潔,充滿了更多的可能。

我可以任意的寫**,幾行**就能實現對樹的操作、複雜的巢狀字典。我彷彿可以操作任意複雜的資料結構,或者複雜的遞迴,只要我想清楚了,根本不需要多少編碼時間。當時自認為掌握了葵花寶典,幹勁十足,所以還找了乙個python學習** 沒事就到上面刷題。寫了很多平時懶的寫的複雜演算法,還看大神們寫的「一行python」(其實是利用了列表解析等方式做的很簡短但是有點難讀的**),收穫了很多樂趣。

後來後來的我,仔細學習過wxpython庫,也實現過類似web框架的遊戲框架,對python的使用也不斷進入新的階段。當然也發現python的很多弊端,並非語言層的,大都是虛擬機器層面的。

學習python的過程中,我總結出專案開發的三大要點——開發速度,執行速度,維護難度。軟體專案金三角。這個規則可以套用在所有的軟體專案上,作為看專案的乙個可觀角度。而且有趣的是,這個三角形總是無法在三點上同時拿到高分。

也許大部分人都無法理解一門語言對乙個程式設計師生涯的影響,所以特撰此文。python對我的影響是巨大的,python昇華了過去的我,也將持續影響未來的我。

Python有那麼神嗎?

這個問題其實簡單點說 就是講 python 到底能做什麼?它的優點在哪?資料庫 python在資料庫方面很優秀,可以和多種資料庫進行連線,進行資料處理,從商業型的資料庫到開放原始碼的資料庫都提供支援。例如 oracle,my sql server等等。有多種介面可以與資料庫進行連線,至少包括odbc...

移動辦公沒那麼簡單,也沒那麼難

一提起移動辦公,大家想到的就是用手機,用筆記本處理繁瑣的工作,這只是簡單的一方面,並不是移動辦公的全部,乙個正確的載體出現了,把工作的每乙個流程,每乙個細節整合起來放到乙個固定的系統上,在通過系統分解到每乙個專案流,每乙個成員上,按照工作流操作日常繁瑣的工作,最後形成閉環以資料的形式呈現給企業管理者...

其實沒那麼難

近半年來,都一直想研究下hadoop和mahout的原始碼。但是,猶豫來猶豫去的都遲遲沒有動靜。眨眼睛畢業半年了,現在因公司業務需求,需要調研下資料探勘相關的技術。在工作的壓力下,開始慢慢的掀開hadoop和mahout等這些分布式開源軟體的原始碼的研究之路。其實,真的沒自己想象的那麼難。與其不斷的...