首頁  >  文章  >  後端開發  >  簡單介紹一下Python(圖文詳解)

簡單介紹一下Python(圖文詳解)

WBOY
WBOY轉載
2022-03-24 19:05:313912瀏覽

本篇文章為大家帶來了關於python的相關知識,其中主要介紹了包括程式運作機制和Python語言的誕生與發展史等相關問題,希望對大家有幫助。

簡單介紹一下Python(圖文詳解)

推薦學習:python學習教學

#一、電腦組成

##  計算機已經成為我們這個時代的核心設備,我們無時無刻都需要它。它也已經不是人們印像中的桌上型電腦、伺服器,已經演變成了我們身邊的任何物體,如手機、平板電腦和筆記本,以及很多人主觀上沒有意識到,但實際設備內部確實包含「電腦」的設備,如電視、微波爐、汽車,甚至是小孩玩的智慧機器人等。毫不誇張地說,電腦已經成為人身體的延伸,大腦的延伸,成為不可或缺的一部分。未來,電腦將真的進入人體、進入大腦,真正成為人體的一部分。例如,在科幻電影《駭客任務》中的主角被超級針頭插在頸部後方便可以實現快速學習,改變大腦神經網絡,幾秒鐘成為功夫高手。計算機,俗稱電腦(Computer),用於高速計算的電子機器,是20世紀最偉大的科學技術發明之一,可以進行數值計算和邏輯判斷,同時還具有存儲記憶和資料處理的功能。一個完整的電腦系統由硬體系統軟體系統所組成,如下圖所示:

簡單介紹一下Python(圖文詳解)
1.1 硬體系統

  硬體系統主要可以分為

主機和周邊,是指構成電腦系統的物理實體,它們主要由各種各樣的電子裝置和機電裝置組成。從ENIAC(世界上第一台電腦)到目前最先進的電腦,硬體系統的設計採用的都是馮諾依曼體系結構,如下所示:

簡單介紹一下Python(圖文詳解)
  • 運算子: 負責資料的算術運算和邏輯運算,即資料的加工處理;
  • 控制器: 電腦的中樞神經,協調電腦各部分元件工作以及記憶體和周邊裝置的存取; 其中:
    運算器和控制器統稱為中央處理器,即CPU
  • 記憶體: 實作記憶功能的零件,用來儲存程式、資料、指令和各種訊號等信息,並在需要時提供這些資訊;
  • 輸入裝置: 實作將程式、原始資料、文字、字元、控制指令或現場擷取的資料等資訊輸入到電腦中;
  • 輸出裝置: 實現將電腦處理後產生的中間結果或最終結果輸出,包括各種資料符號、文字和控制訊號等資訊;
1.2 軟體系統

  軟體系統主要可分為

系統軟體和應用軟體,是指保證電腦正常運作所需的各種程序,是我們程式設計實踐的主要對象,組成如下:

簡單介紹一下Python(圖文詳解)
  • 系統軟體: 保證電腦硬體的正常運作和效能得到發揮,並且為電腦使用者提供一個直覺、友善和方便的使用介面。
  1. 作業系統: 方便使用者控制和管理電腦軟體資源的系統軟體,功能複雜,是所有軟體正常運作的基礎和核心;
  2. 編譯程式: 也叫語言處理程序,作用是把程式設計師使用各種程式語言,如Java和Python等所寫的程序,翻譯成電腦可執行的機器語言。
  • 應用軟體: 應用軟體是電腦為滿足不同使用者的需求而提供的那部分軟體,它可以拓寬電腦系統的應用領域,方法硬體的性能。
  1. 社交辦公類: 微信、QQ、WPS、騰訊會議、釘子、陌陌等;
  2. 休閒娛樂類: QQ音樂、騰訊影片、Steam、歡樂鬥地主等;

二、程式運作機制

  機器語言也叫機器碼,是可以透過CPU來分析和執行的指令集。電腦只能辨識0和1的機器碼,不能接收類似漢語、英語或其它的人類語言。因此,為了實現人類和電腦的交互,各種程式語言應運而生,如C 、Java、PhP和Python等。

2.1 編譯型與解釋型

分析: 電腦可以直接辨識下面這段Python程式碼嗎?

"""
分析:在控制台输出以下Python代码,计算机可以直接处理吗?
"""print("Hello world!")  # print()为Python中的内置函数,主要用于输出括号内的内容,类似于Java中的System.out.println("Hello world!")

  顯然,上述程式碼主要由英文字母和標點符號組成,但前面已經說過,電腦只能辨識機器碼(0和1),也就是它本身壓根就不認識這段程式碼。

簡單介紹一下Python(圖文詳解)

  那麼,我們是如何透過程式碼控制電腦進行工作的?

簡單介紹一下Python(圖文詳解)

  人機互動的過程就像一個當地人與一個外國人進行交流時一樣,如果雙方想要理解彼此的想法,就需要一個中間介質,它可以通過某種方式把對方的語言轉換成自己可以理解的語言,反之亦然。因此,電腦如果想要理解我們所寫的程式碼,就需要將其轉換為自己可以辨識的機器碼,而根據轉換過程,程式語言又被分為編譯型和解釋型。

  • 編譯型: 編譯型語言可以直接將程式碼轉為電腦可以辨識並執行的機器碼,如C
簡單介紹一下Python(圖文詳解)
  • 解釋型: 解釋型語言先將程式碼轉換為字節碼,然後再將其翻譯成電腦可辨識的機器碼,如Python
簡單介紹一下Python(圖文詳解)

2.2 電腦處理程序的流程

  1. 使用者開啟程序,程式開始執行;
  2. 作業系統將程式內容和相關資料送入電腦記憶體;
  3. CPU根據程式內容從記憶體讀取指令;
  4. CPU分析、處理指令,並為下一指令做好準備;
  5. 讀取下一指令分析並處理,如此循環往復直至處理完程式中的全部指令,最後將計算結果放入指令指定的記憶體位址;
##2.3 電腦語言發展史

  

演算法是電腦的靈魂,而程式語言是使得電腦具有靈魂的工具。伴隨著電腦硬體的發展,電腦程式語言也經歷了從低階到高階的演變,而每一次改變的核心思想就是「讓人更容易編程」。電腦硬體的速度越快、體積越小、成本越低,應用到人類社會的場景就會越多,那麼所需的演算法就會越複雜,也就要求電腦程式語言越高階。最初重達幾十噸但一秒只能運算5000次的ENIAC,只能做非常小的應用,如彈道計算。如今,任何一個人的手機運算能力都可以秒殺那個年代地球上所有電腦運算能力的總和。越容易使用的語言,就有越多人使用;越多人使用,就有越多人協作;越多人協作,就可以創造越複雜的物件。現代社會,一個軟體動輒幾十或幾百人、甚至幾千人協作也成為可能,這自然就為開發複雜軟體提供了「人力基礎」。這是一個人類普遍的社會現象,越容易使用的工具,透過使用數量,透過大量人的協作,徹底改變某個產業甚至人類社會。未來三十年必將是軟體人才的世界,除了普通軟體,大量人工智慧軟體,如自動駕駛、機器人保姆以及機器人女友都會進入我們的生活,甚至電腦技術和基因工程結合以實現長生不老,感興趣的可以閱讀《未來簡史: 從智人到智神》。

簡單介紹一下Python(圖文詳解)
  • 機器語言: 相當於人類的原始階段;
  機器語言是由數字組成所有指令。當讓你使用數字編程,寫幾百個數字、甚至幾千個數字,每天面對的是純數字,可以大膽預測:「程式設計師群體100%會有精神問題」。機器語言通常由數字串組成(最終被簡化成二進制0和1),對於人類來說,機器語言過於繁瑣。使用機器語言,人類無法編出複雜的程式。

  • 彙編語言: 相當於人類的手工業階段;
  為了程式設計的方便,以及解決更複雜的問題,程式設計師開始改進機器語言,使用英文縮寫的助記符(單字)來表示基本的電腦操作。這些助記符構成了組合語言的基礎,如:

LOAD、MOVE 之類,這樣人更容易記憶和使用。辨識成百上千個單詞,總比成百上千個數字,感覺會好很多。組合語言相當於人類的手工藝社會,需要技術極為純熟的工匠,但開發效率也非常低。雖然彙編語言能編寫高效率的程序,但是學習和使用都不是易事,而且很難調試。另一個複雜的問題,彙編語言以及早期的電腦語言(Basic、Fortran等)沒有考慮結構化設計原則,而是使用goto語句來作為程式流程控制的主要方法。這樣做的後果是:一大堆混亂的調轉語句使得程式幾乎不可能被讀懂。對於那個時代的程式設計師,能讀懂上個月自己寫的程式碼都成為一種挑戰。即使這樣,彙編語言仍然應用於工業電子程式設計領域、軟體的加密解密、電腦病毒分析等。

  • 高階程式語言: 相當於人類工業階段;

  對於簡單的任務,組合語言可以勝任。但是,隨著電腦的發展以及其漸漸滲透到了工作生活的方方面面,一些複雜的任務出現了,彙編語言就顯得力不從心(應該說是程式設計師使用彙編語言解決複雜問題出現了瓶頸)。於是,出現了高階語言,如C Java等。語言越高級,越接近人的思維,使用就越方便。高階語言,尤其是物件導向的語言,如Java、Python等,使得程式設計的難度和門檻越來越低。目前以及可預見的未來,電腦語言仍然處於「第三代高階語言」階段,高階語言允許程式設計師使用接近日常英語的指令來編寫程式。例如,實作一個簡單的任務:A B=C , 使用機器語言、組合語言和高階語言的實作如下所示:
簡單介紹一下Python(圖文詳解)

三、Python語言的誕生與發展史

Python是一門動態資料類型、物件導向的詮釋語言,主要用於人工智慧的各個領域,如機器學習、爬蟲與資料分析、深度學習、電腦視覺等。

TIOBE程式語言排行榜:

簡單介紹一下Python(圖文詳解)

#3.1 誕生與發展

  • 時代背景: 硬體限制;

  Python的作者,Guido von Rossum(吉多·範·羅蘇姆),荷蘭人。 1982年,吉多從阿姆斯特丹大學獲得了數學和電腦碩士學位。然而,儘管他算得上是一位數學家,但他更享受計算機帶來的樂趣。用他的話來說,雖然擁有數學和電腦雙料資質,他總是趨向於做電腦相關的工作,並熱衷於做任何和程式相關的事情。在那個時候,吉多接觸並使用過諸如Pascal、C、Fortran等語言。這些語言的基本設計原則是讓機器能更快運作。在80年代,雖然IBM和蘋果已經掀起了個人電腦(personal computer)浪潮,但這些個人電腦的配置很低。例如早期的Macintosh,只有8MHz的CPU主頻和128KB的RAM,一個大的陣列就能佔滿記憶體。 所有的編譯器的核心是做最佳化,以便讓程式能夠運作。為了增進效率,語言也迫使程式設計師像電腦一樣思考,以便能寫出更符合機器口味的程式。在那個時代,程式設計師恨不得用手榨取電腦每一寸的能力。有人甚至認為C語言的指標在浪費記憶體。至於動態類型,記憶體自動管理,物件導向…… 別想了,那會讓你的電腦陷入癱瘓。

  • Shell: 本質是呼叫命令,它不是一個真正的語言;

  這種程式設計方式讓吉多感到苦惱。吉多知道如何用C語言寫出一個功能,但整個編寫過程需要耗費大量的時間,即使他已經準確的知道如何實現。他的另一個選擇是shellBourne Shell作為UNIX系統的解釋器已經長期存在。 UNIX的管理員常常用shell去寫一些簡單的腳本,以進行一些系統維護的工作,例如定期備份、檔案系統管理等等。 shell可以像膠水一樣,將UNIX系統下的許多功能連接在一起。許多C語言上百行的程序,在shell下方只用幾行就可以完成。然而,shell的本質是呼叫命令,它並不是一個真正的語言。例如,shell沒有數值型的資料型態,加法運算都很複雜。 總之,shell不能全面調動電腦的功能

  • ABC語言: 可讀易用,弊端明顯;

  吉多希望有一種語言,這種語言能夠像C語言那樣,能夠全面呼叫電腦的功能接口,又可以像shell那樣,可以輕鬆的程式設計。 ABC語言讓吉多看到希望。 ABC是由荷蘭的數學和計算機研究所開發的。吉多在該研究所工作,並參與ABC語言的開發。 ABC語言以教學為目的。與當時的大部分語言不同,ABC語言的目標是「讓使用者感覺更好」。 ABC語言希望讓語言變得容易閱讀、使用、記憶和學習,並以此激發人們學習程式設計的興趣。
  然而,ABC語言編譯器需要很高的電腦配置才能運行,而這些電腦的使用者通常都精通電腦,所以他們更多的是關注程式的效率,而不是它的學習難度。另一方面,以下致命的設計問題是它沒有流行起來的原因:

  1. 可擴展性差: ABC不是模組化語言,如果想在其中增加功能,如對圖形化的支持,需要改變很多地方。
  2. 不能直接進行IO: ABC不能直接操作檔案系統,也就是不能直接讀寫資料。輸入輸出的困難對於電腦而言是致命的,你能想像一個不能打開車門的跑車嗎?
  3. 過度革新: ABC用自然語言的形式來表達程式的意義。例如,它使用How to來定義一個函數,而對於程式設計師來說,他們更習慣用functiondefine
  4. 傳播困難: ABC編譯器很大,必須保存在磁帶上,這也意味著如果想要使用它,必須先準備一個大大的磁帶。
  • Python孕育與成長: 介於CShell之間的簡單易學、功能全面的語言;

  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某些方面的成功。 每個語言都是混合體,都有它優秀的地方,但同時也有各種各樣的缺陷。同時,一個語言「好與不好」的評判,往往受制於平台、硬體、時代等等外在原因,程式設計師經歷過許多語言之爭。

3.2 設計哲學

  • 取得Python設計哲學: 成功安裝Python軟體後(下一個專題),開啟任一編輯環境鍵入import this運行即可;
簡單介紹一下Python(圖文詳解)
  • #總結: 簡單優雅可擴展,實用扁平是關鍵,最佳方案only one???

3.3 優勢與不足

  • ##優勢:
  1. 簡單易學可擴展: 閱讀一個良好的Python程式就像欣賞一篇優美的文章一樣,儘管它的要求非常嚴格,如強制縮排可提高程式碼的可讀性。 Python的這種偽代碼本質使得我們可以更專注於解決問題的邏輯而非搞明白語言本身,如我們無需過多關注諸如記憶體管理這樣的底層細節。如果我們希望一段關鍵程式碼運行的更快(C要比Python快50倍以上)或希望某些演算法不公開,可以把部分程式用CC 語言編寫,然後在Python程式中進行呼叫。
  2. 免費開源可移植: Python是FLOSS(自由/開放原始碼軟體)之一,也就是說我們可以自由地發布這個軟體的拷貝、閱讀它的原始碼、對它做改動、把它的一部分用於新的自由軟體中。由於其開源本質,Python可移植在許多電腦平台上,如Windows、Linux等
  3. 物件導向: Python既支援流程導向的程式設計也支援物件導向的程式設計。 在「過程導向」的語言中,程式是由過程或僅僅是可重複使用程式碼的函數建構起來的。 在「物件導向」的語言中,程式是由資料和功能組合而成的物件建構起來的。與其它的程式語言如C 和Java相比,Python以一種非常強大又簡單的方式實現物件導向編程,而封裝、繼承和多態性三大特性則是它成"神"的關鍵。
  4. 動態語言: 動態語言,又稱為弱型別語言,是指變數在建立時不需要宣告類型,具體類型根據指向的記憶體單元中的資料型別決定,即指向什麼型別就是什麼型別。相反,靜態語言(強型別語言),定義變數時需要宣告型別,變數指向的記憶體單元可存放的資料型別固定。例如,Python中定義一個整數變數為num = 10,而在Java中則為int num = 10;。總結:動態類型,指向可變,記憶體單元中的內容不可變;靜態類型,指向不可變,內容可變。
  5. 解釋型語言: 編譯型語言,如C 寫的程式可以從原始檔(C 語言)轉換到一個你的電腦使用的語言,即二進位代碼(0和1)。這個過程透過編譯器和不同的標記以及選項完成。當我們運行程式的時候,連接轉載器軟體把我們的程式從硬碟複製到記憶體並且運行。而Python語言寫的程式不需要編譯成二進位代碼。我們可以直接從原始碼運行程式。在電腦內部,Python解釋器把原始程式碼轉換成稱為字節碼的中間形式,然後再把它翻譯成電腦使用的機器碼並執行。由於只需要把我們的Python程式拷貝到另外一台電腦上,它就可以運作了,這也使得Python程式更容易移植。
  6. 豐富的函式庫: 包含Python自備的標準函式庫和第三方函式庫。其中Python的標準函式庫可以幫助我們處理各種工作,包括正規表示式、文件產生、執行緒、資料庫、HTML、GUI等。這被稱為Python的「功能齊全」理念。除了標準庫以外,Python也支援安裝第三方庫,如wxPython、Twisted和Python圖像庫等。
  • #缺點: Python語言非常完美,沒有明顯的短板和缺點。唯一的缺點就是執行效率慢,而這個是解釋型語言所通有的,不過這一缺陷會隨著電腦硬體效能的不斷提升而弱化。
3.4 應用程式場景

簡單介紹一下Python(圖文詳解)
推薦學習:

python教學

以上是簡單介紹一下Python(圖文詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除