推薦學習:
計算機已經成為我們這個時代的核心裝置,我們無時無刻都需要它。它也已經不是人們印象中的桌上型電腦、伺服器,已經演變成了我們身邊的任何物體,如手機、平板電腦和筆電,以及很多人主觀上沒有意識到,但實際裝置內部確實包含「計算機」的裝置,如電視機、微波爐、汽車,甚至小孩玩的智慧機器人等。毫不誇張地說,計算機已經成為人身體的延伸,大腦的延伸,成為不可或缺的一部分。未來,計算機將真的進入人體、進入大腦,真正成為人體的一部分。比如,在科幻電影《駭客帝國》中的主角被超級針頭插在頸部後方便可以實現快速學習,改變大腦神經網路,幾秒成為功夫高手。計算機,俗稱電腦(Computer),用於高速計算的電子機器,是20世紀最偉大的科學技術發明之一,可以進行數值計算和邏輯判斷,同時還具有儲存記憶和資料處理的功能。一個完整的計算機系統由硬體系統和軟體系統組成,如下圖所示:
硬體系統主要可以分為主機和外設,是指構成計算機系統的物理實體,它們主要由各種各樣的電子器件和機電裝置組成。從ENIAC
(世界上第一臺計算機)到目前最先進的電腦,硬體系統的設計採用的都是馮·諾依曼
體系結構,如下所示:
CPU
軟體系統主要可以分為系統軟體和應用軟體,是指保證計算機正常執行所需的各種程式,是我們程式設計實踐的主要物件,組成如下:
機器語言也叫機器碼,是可以通過
CPU
進行分析和執行的指令集。計算機只能識別0和1的機器碼,不能接收類似於漢語、英語或其它的人類語言。因此,為了實現人類和計算機的互動,各種程式語言應運而生,如C++、Java、PhP和Python等。
分析: 計算機可以直接識別下面這段Python程式碼嗎?
""" 分析:在控制檯輸出以下Python程式碼,計算機可以直接處理嗎? """print("Hello world!") # print()為Python中的內建函數,主要用於輸出括號內的內容,類似於Java中的System.out.println("Hello world!")
顯然,上述程式碼主要由英文字母和標點符號組成,但前面已經說過,計算機只能識別機器碼(0和1),即它本身壓根就不認識這段程式碼。
那麼,我們是如何通過程式碼控制計算機進行工作的?
人機互動的過程就像一個當地人與一個外國人進行交流時一樣,如果雙方想要理解彼此的想法,就需要一箇中間媒介,它可以通過某種方式把對方的語言轉換成自己可以理解的語言,反之亦然。因此,計算機如果想要理解我們編寫的程式碼,就需要將其轉換為自己可以識別的機器碼,而根據轉換過程,程式語言又被分為編譯型和解釋型。
C++
。Python
。演演算法是計算機的靈魂,而程式語言是使得計算機具有靈魂的工具。伴隨著計算機硬體的發展,計算機程式語言也歷經了從低階到高階的演變,而每一次改變的核心思想就是「讓人更容易程式設計」。計算機硬體的速度越快、體積越小、成本越低,應用到人類社會的場景就會越多,那麼所需要的演演算法就會越複雜,也就要求計算機程式語言越高階。最初重達幾十噸但一秒只能運算5000次的ENIAC,只能做非常小的應用,如彈道計算。如今,任何一個人的手機運算能力都可以秒殺那個年代地球上所有計算機運算能力的總和。越容易使用的語言,就有越多人使用;越多人使用,就有越多人共同作業;越多人共同作業,就可以創造越複雜的物體。現代社會,一個軟體動輒幾十或幾百人、甚至幾千人共同作業也成為可能,這自然就為開發複雜軟體提供了「人力基礎」。這是一個人類普遍的社會現象,越容易使用的工具,通過使用數量,通過大量人的共同作業,徹底改變某個行業甚至人類社會。未來三十年必將是軟體人才的世界,除普通軟體,大量人工智慧軟體,如自動駕駛、機器人保姆以及機器人女友都會進入我們的生活,甚至計算機技術和基因工程結合以實現長生不老,感興趣的可以閱讀一下《未來簡史: 從智人到智神》。
機器語言由數位組成所有指令。當讓你使用數位程式設計,寫幾百個數位、甚至幾千個數位,每天面對的是純數位,可以大膽預測:「程式設計師群體100%會有精神問題」。機器語言通常由數位串組成(最終被簡化成二進位制0和1),對於人類來說,機器語言過於繁瑣。使用機器語言,人類無法編出複雜的程式。
為了程式設計的方便,以及解決更加複雜的問題,程式設計師開始改進機器語言,使用英文縮寫的助記符(單詞)來表示基本的計算機操作。這些助記符構成了組合語言的基礎,如:LOAD、MOVE
之類,這樣人更容易記憶和使用。識別成百上千個單詞,總比成百上千個數位,感覺會好很多。組合語言相當於人類的手工業社會,需要技術極其嫻熟的工匠,但是開發效率也非常低。組合語言雖然能編寫高效率的程式,但是學習和使用都不是易事,並且很難偵錯。另一個複雜的問題,組合語言以及早期的計算機語言(Basic、Fortran等)
沒有考慮結構化設計原則,而是使用goto語句
來作為程式流程控制的主要方法。這樣做的後果是:一大堆混亂的調轉語句使得程式幾乎不可能被讀懂。對於那個時代的程式設計師,能讀懂上個月自己寫的程式碼都成為一種挑戰。即使這樣,組合語言仍然應用於工業電子程式設計領域、軟體的加密解密、計算機病毒分析等。
對於簡單的任務,組合語言可以勝任。但是,隨著計算機的發展以及其漸漸滲透到了工作生活的方方面面,一些複雜的任務出現了,組合語言就顯得力不從心(應該說是程式設計師使用組合語言解決複雜問題出現了瓶頸)。於是,出現了高階語言,如C++
、Java
等。語言越高階,越接近人的思維,使用起來就越方便。高階語言,尤其是物件導向的語言,如Java、Python
等,使得程式設計的難度和門檻越來越低。目前以及可預見的未來,計算機語言仍然處於「第三代高階語言」階段,高階語言允許程式設計師使用接近日常英語的指令來編寫程式。例如,實現一個簡單的任務:A+B=C
, 使用機器語言、組合語言和高階語言的的實現如下所示:
Python是一門動態資料型別、物件導向的直譯語言,主要用於人工智慧的各個領域,如機器學習、爬蟲與資料分析、深度學習、計算機視覺等。
TIOBE程式語言排行榜:
Python的作者,Guido von Rossum
(吉多·範·羅蘇姆),荷蘭人。1982年,吉多從阿姆斯特丹大學獲得了數學和計算機碩士學位。然而,儘管他算得上是一位數學家,但他更加享受計算機帶來的樂趣。用他的話說,雖然擁有數學和計算機雙料資質,他總趨向於做計算機相關的工作,並熱衷於做任何和程式設計相關的事情。在那個時候,吉多接觸並使用過諸如Pascal、C、Fortran等語言。這些語言的基本設計原則是讓機器能更快執行。在80年代,雖然IBM和蘋果已經掀起了個人電腦(personal computer)浪潮,但這些個人電腦的設定很低。比如早期的Macintosh,只有8MHz的CPU主頻和128KB的RAM,一個大的陣列就能佔滿記憶體。所有的編譯器的核心是做優化,以便讓程式能夠執行。為了增進效率,語言也迫使程式設計師像計算機一樣思考,以便能寫出更符合機器口味的程式。在那個時代,程式設計師恨不得用手榨取計算機每一寸的能力。有人甚至認為C語言的指標是在浪費記憶體。至於動態型別,記憶體自動管理,物件導向…… 別想了,那會讓你的電腦陷入癱瘓。
這種程式設計方式讓吉多感到苦惱。吉多知道如何用C語言寫出一個功能,但整個編寫過程需要耗費大量的時間,即使他已經準確的知道了如何實現。他的另一個選擇是shell。Bourne Shell
作為UNIX系統
的直譯器已經長期存在。UNIX的管理員們常常用shell去寫一些簡單的指令碼,以進行一些系統維護的工作,比如定期備份、檔案系統管理等等。shell可以像膠水一樣,將UNIX系統下的許多功能連線在一起。許多C語言上百行的程式,在shell下只用幾行就可以完成。然而,shell的本質是呼叫命令,它並不是一個真正的語言。例如,shell沒有數值型的資料型別,加法運算都很複雜。總之,shell不能全面調動計算機的功能。
吉多希望有一種語言,這種語言能夠像C語言那樣,能夠全面呼叫計算機的功能介面,又可以像shell那樣,可以輕鬆的程式設計。ABC語言讓吉多看到希望。ABC是由荷蘭的數學和計算機研究所開發的。吉多在該研究所工作,並參與到ABC語言的開發。ABC語言以教學為目的。與當時的大部分語言不同,ABC語言的目標是「讓使用者感覺更好」。ABC語言希望讓語言變得容易閱讀、使用、記憶和學習,並以此來激發人們學習程式設計的興趣。
然而,ABC語言編譯器需要很高的電腦設定才能執行,而這些電腦的使用者通常都精通電腦,所以他們更多的是關注程式的效率,而非它的學習難度。另一方面,如下致命的設計問題是它沒有流行起來的原因:
IO
: ABC不能直接操作檔案系統,即不能直接讀寫資料。輸入輸出的困難對於計算機而言是致命的,你能想象一個不能開啟車門的跑車嗎?How to
來定義一個函數,而對於程式設計師來說,他們更習慣用function
或define
。C
和Shell
之間的簡單易學、功能全面的語言;1989年,為了打發聖誕節假期,吉多開始寫Python語言的編譯器。Python這個名字,來自吉多所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:介於C和shell之間,功能全面,易學易用,可拓展的語言。吉多作為一個語言設計愛好者,已經有過設計語言的嘗試。這一次,也不過是一次純粹的hacking行為。
1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠呼叫C語言的庫檔案。從一出生,Python已經具有了:類,函數,例外處理,包含表和詞典在內的核心資料型別,以及模組為基礎的拓展系統。Python語法很多來自C,但又受到ABC語言的強烈影響。來自ABC語言的一些規定直到今天還富有爭議,比如強制縮排,但這些語法規定讓Python容易讀。另一方面,Python聰明的選擇服從一些慣例,特別是C語言的慣例,比如恢復等號賦值。吉多認為,如果「常識」上確立的東西,沒有必要過度糾結。Python從一開始就特別在意可拓展性。Python可以在多個層次上拓展。從高層上,你可以直接引入.py檔案。在底層,你可以參照C語言的庫。Python程式設計師可以快速的使用Python寫.py檔案作為拓展模組。但當效能是考慮的重要因素時,Python程式設計師可以深入底層,寫C程式,編譯為.so檔案引入到Python中使用。Python就好像是使用鋼構建房一樣,先規定好大的框架,而程式設計師可以在此框架下相當自由的拓展或更改。
最初的Python完全由吉多本人開發。Python得到吉多同事的歡迎。他們迅速的反饋使用意見,並參與到Python的改進。吉多和一些同事構成Python的核心團隊。他們將自己大部分的業餘時間用於hack Python。隨後,Python拓展到研究所之外。Python將許多技術層面上的細節隱藏,交給編譯器處理,並凸顯出邏輯層面的程式設計思考。因此,Python程式設計師可以花更多的時間用於思考程式的邏輯,而不是具體的實現細節。這一特徵吸引了廣大的程式設計師,Python開始流行。計算機硬體越來越強大,Python又容易使用,所以許多人開始轉向Python。吉多維護了一個mail list,Python使用者就通過郵件進行交流。Python使用者來自許多領域,有不同的背景,對Python也有不同的需求。Python相當的開放,又容易拓展,所以當使用者不滿足於現有功能,很容易對Python進行拓展或改造。隨後,這些使用者將改動發給吉多,並由吉多決定是否將新的特徵加入到Python或者標準庫中。如果程式碼能被納入Python自身或者標準庫,這將是極大的榮譽。由於吉多至高無上的決定權,他因此被稱為「終身的仁慈獨裁者」
。2018年7月12日,在完成PEP(Python Enhancement Proposals)572後,吉多決定退出Python核心決策層。
Python以及其標準庫的功能強大,這些是整個社群的貢獻。Python的開發者來自不同領域,他們將不同領域的優點帶給Python。例如,Python標準庫中的正規表示式(Regular expression)是參考Perl,而lambda, map, filter, reduce等函數參考了Lisp。Python本身的一些功能以及大部分的標準庫來自於社群。Python的社群不斷擴大,進而擁有了自己的newsgroup,網站,以及基金。從Python 2.0開始,Python也從mail list的開發方式,轉為完全開源的開發方式。社群氣氛已經形成,工作被整個社群分擔,Python也獲得了更加高速的發展。到今天,Python的框架已經確立。Python語言以物件為核心組織程式碼,支援多種程式設計正規化,採用動態型別,自動進行記憶體回收。Python支援解釋執行,並能呼叫C庫進行拓展。Python有強大的標準庫。由於標準庫的體系已經穩定,所以Python的生態系統開始拓展到第三方包。這些包,如Django、web.py、wxpython、numpy、matplotlib、PIL,將Python升級成了物種豐富的熱帶雨林。
Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。Python在TIOBE排行榜中排行第八,它是Google的第三大開發語言,Dropbox的基礎語言,豆瓣的伺服器語言。Python的發展史可以作為一個代表,帶給我們許多啟示。在Python的開發過程中,社群起到了重要的作用。吉多自認為自己不是全能型的程式設計師,所以他只負責制訂框架。如果問題太複雜,他會選擇繞過去,也就是cut the corner。這些問題最終由社群中的其他人解決。社群中的人才是異常豐富的,就連建立網站,籌集基金這樣與開發稍遠的事情,也有人樂意於處理。如今的專案開發越來越複雜,越來越龐大,合作以及開放的心態將成為專案最終成功的關鍵。
Python從其他語言中學到了很多,無論是已經進入歷史的ABC,還是依然在使用的C和Perl,以及許多沒有列出的其他語言。可以說,Python的成功代表了它所有借鑑的語言的成功。同樣,Ruby借鑑了Python,它的成功也代表了Python某些方面的成功。每個語言都是混合體,都有它優秀的地方,但同時也有各種各樣的缺陷。同時,一個語言「好與不好」的評判,往往受制於平臺、硬體、時代等等外部原因,程式設計師經歷過許多語言之爭。
import this
執行即可;C
或C++
語言編寫,然後在Python程式中進行呼叫。num = 10
,而在Java中則為int num = 10;
。總結:動態型別,指向可變,記憶體單元中的內容不可變;靜態型別,指向不可變,內容可變。C++
寫的程式可以從原始檔(C++語言)轉換到一個你的計算機使用的語言,即二進位制程式碼(0和1)。這個過程通過編譯器和不同的標記以及選項完成。當我們執行程式的時候,連線轉載器軟體把我們的程式從硬碟複製到記憶體中並且執行。而Python語言寫的程式不需要編譯成二進位制程式碼。我們可以直接從原始碼執行程式。在計算機內部,Python直譯器把原始碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器碼並執行。由於只需要把我們的Python程式拷貝到另外一臺計算機上,它就可以工作了,這也使得Python程式更加容易移植。推薦學習:
以上就是簡單介紹一下Python(圖文詳解)的詳細內容,更多請關注TW511.COM其它相關文章!