1. 程式人生 > 實用技巧 >程式語言與Python介紹

程式語言與Python介紹

一 引子

基於上一章所學,有了計算機硬體,再在硬體之上安裝好作業系統,我們就有了一個應用程式的執行平臺,我們接下來的任務就是學習如何使用某款程式語言來開發應用程式。

本章的主題是先帶大家瞭解下程式語言,然後重點介紹python這門程式語言

二 程式語言分類

機器語言

機器語言是站在計算機(奴隸)的角度,說計算機能聽懂/理解的語言,而計算機能直接理解的就是二進位制指令,所以機器語言就是直接用二進位制程式設計,這意味著機器語言是直接操作硬體的,因此機器語言屬於低階語言,此處的低階指的是底層、貼近計算機硬體(貼近代指需要詳細瞭解計算機硬體細節、直接控制硬體),詳解如下

#機器語言
    用二進位制程式碼0和1描述的指令稱為機器指令,由於計算機內部是基於二進位制指令工作的,所以機器語言是直接控制計算機硬體。

    用機器語言編寫程式,程式設計人員要首先熟記所用計算機的全部指令程式碼以及程式碼的含義,然後在編寫程式時,程式設計師得自己處理每條指令和每一資料的儲存分配和輸入輸出,還得記住程式設計過程中每步所使用的工作單元處在何種狀態。這是一件十分繁瑣的工作。編寫程式花費的時間往往是實際執行時間的幾十倍或幾百倍。而且,編出的程式全是些0和1的指令程式碼,直觀性差,不便閱讀和書寫,還容易出錯,且依賴於具體的計算機硬體型號,侷限性很大。除了計算機生產廠家的專業人員外,絕大多數的程式設計師已經不再去學習機器語言了。

    機器語言是被微處理器理解和使用的,存在有多至100000種機器語言的指令,下述是一些簡單示例

    #指令部份的示例
    0000 代表 載入(LOAD)
    0001 代表 儲存(STORE)
    ...

    #暫存器部份的示例
    0000 代表暫存器 A
    0001 代表暫存器 B
    ...

    #儲存器部份的示例
    000000000000 代表地址為 0 的儲存器
    000000000001 代表地址為 1 的儲存器
    000000010000 代表地址為 16 的儲存器
    100000000000 代表地址為 2^11 的儲存器

    #整合示例
    0000,0000,000000010000 代表 LOAD A, 16
    0000,0001,000000000001 代表 LOAD B, 1
    0001,0001,000000010000 代表 STORE B, 16
    0001,0001,000000000001 代表 STORE B, 1[1]

總結機器語言

# 1、執行效率最高
編寫的程式可以被計算機無障礙理解、直接執行,執行效率高 。

# 2、開發效率最低
複雜,開發效率低

# 3、跨平臺性差
貼近\依賴具體的硬體,跨平臺性差

組合語言

組合語言僅僅是用一個英文標籤代表一組二進位制指令,毫無疑問,比起機器語言,組合語言是一種進步,但組合語言的本質仍然是直接操作硬體,因此組合語言仍是比較低階/底層的語言、貼近計算機硬體

#組合語言
組合語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的識別符號,更容易識別和記憶。它同樣需要程式設計者將每一步具體的操作用命令的形式寫出來。彙編程式的每一句指令只能對應實際操作過程中的一個很細微的動作。例如移動、自增,因此彙編源程式一般比較冗長、複雜、容易出錯,而且使用匯編語言程式設計需要有更多的計算機專業知識,但組合語言的優點也是顯而易見的,用匯編語言所能完成的操作不是一般高階語言所能夠實現的,而且源程式經彙編生成的可執行檔案不僅比較小,而且執行速度很快。

彙編的hello world,列印一句hello world, 需要寫十多行,如下

; hello.asm 
section .data            ; 資料段宣告
        msg db "Hello, world!", 0xA     ; 要輸出的字串
        len equ $ - msg                 ; 字串長度
        section .text            ; 程式碼段宣告
        global _start            ; 指定入口函式
        _start:                  ; 在螢幕上顯示一個字串
        mov edx, len     ; 引數三:字串長度
        mov ecx, msg     ; 引數二:要顯示的字串
        mov ebx, 1       ; 引數一:檔案描述符(stdout) 
        mov eax, 4       ; 系統呼叫號(sys_write) 
        int 0x80         ; 呼叫核心功能
                         ; 退出程式
        mov ebx, 0       ; 引數一:退出程式碼
        mov eax, 1       ; 系統呼叫號(sys_exit) 
        int 0x80         ; 呼叫核心功能

總結匯編語言

# 1、執行效率高
相對於機器語言,使用英文標籤編寫程式相對簡單,執行效率高,但較之機器語言稍低,

# 2、開發效率低:
仍然是直接操作硬體,比起機器語言來說,複雜度稍低,但依舊居高不下,所以開發效率依舊較低

# 3、跨平臺性差
同樣依賴具體的硬體,跨平臺性差

高階語言

高階語言是站在人(奴隸主)的角度,說人話,即用人類的字元去編寫程式,而人類的字元是在向作業系統傳送指令,而非直接操作硬體,所以高階語言是與作業系統打交道的,此處的高階指的是高層、開發者無需考慮硬體細節,因而開發效率可以得到極大的提升,但正因為高階語言離硬體較遠,更貼近人類語言,人類可以理解,而計算機則需要通過翻譯才能理解,所以執行效率會低於低階語言。

按照翻譯的方式的不同,高階語言又分為兩種:

編譯型(如c語言)

類似谷歌翻譯,是把程式所有程式碼編譯成計算機能識別的二進位制指令,之後作業系統會拿著編譯好的二進位制指令直接操作硬體,詳細如下

# 1、執行效率高
編譯是指在應用源程式執行之前,就將程式原始碼“翻譯”成目的碼(即機器語言),
因此其目標程式可以脫離其語言環境獨立執行,使用比較方便,執行效率較高。

# 2、開發效率低:
應用程式一旦需要修改,必須先修改原始碼,然後重新編譯、生成新的目標檔案才能執行,
而在只有目標檔案而沒有原始碼,修改會很不方便。所以開發效率低於解釋型

# 3、跨平臺性差
編譯型程式碼是針對某一個平臺翻譯的,當前平臺翻譯的結果無法拿到不同的平臺使用,針對不同的平臺必須重新編譯,即跨平臺性差

# 其他
現在大多數的程式語言都是編譯型的。
編譯程式將源程式翻譯成目標程式後儲存在另一個檔案中,該目標程式可脫離編譯程式直接在計算機上多次執行。
大多數軟體產品都是以目標程式形式發行給使用者的,不僅便於直接執行,同時又使他人難於盜用其中的技術。
C、C++、Ada、Pascal都是編譯實現的

解釋型(如python)

類似同聲翻譯,需要有一個直譯器,直譯器會讀取程式程式碼,一邊翻譯一邊執行,詳細如下

# 1、執行效率低
解釋型語言的實現中,翻譯器並不產生目標機器程式碼,而是產生易於執行的中間程式碼。
這種中間程式碼與機器程式碼是不同的,中間程式碼的解釋是由軟體支援的,不能直接使用硬體,
軟體直譯器通常會導致執行效率較低。

# 2、開發效率高
用解釋型語言編寫的程式是由另一個可以理解中間程式碼的解釋程式執行的,與編譯程式不同的是,
解釋程式的任務是逐一將源程式的語句解釋成可執行的機器指令,不需要將源程式翻譯成目的碼再執行。
解釋程式的優點是當語句出現語法錯誤時,可以立即引起程式設計師的注意,而程式設計師在程式開發期間就能進行校正。


# 3、跨平臺性強
程式碼執行是依賴於直譯器,不同平臺有對應版本的直譯器,所以解釋型的跨平臺性強

# 其他
對於解釋型Basic語言,需要一個專門的直譯器解釋執行Basic程式,每條語句只有在執行時才被翻譯,
這種解釋型語言每執行一次就翻譯一次,因而效率低下。一般地,動態語言都是解釋型的,
例如:Tcl、Perl、Ruby、VBScript、JavaScript等

ps:混合型語言

Java是一類特殊的程式語言,Java程式也需要編譯,但是卻沒有直接編譯為機器語言,而是編譯為位元組碼,
然後在Java虛擬機器上以解釋方式執行位元組碼。

總結

綜上選擇不同程式語言來開發應用程式對比

#1、執行效率:機器語言>組合語言>高階語言(編譯型>解釋型)

#2、開發效率:機器語言<組合語言<高階語言(編譯型<解釋型)

#3、跨平臺性:解釋型具有極強的跨平臺型

由於我們開發是應用程式,而應用程式必須運行於某一個平臺之上,應用程式的快慢受限於平臺(就好比F1賽車與寶馬車同時跑在北京五環高速,都受限於道路環境,車速是差不多的)的快慢,並不是單從語言層面就可以提升整體執行效率的,於是開發效率、跨平臺性才是我們需要優先考慮的問題,這就是我們首選python的原因

三 python介紹

談及python,涉及兩層意思,一層代表的是python這門語言的語法風格,另外一層代表的則是專門用來解釋該語法風格的應用程式:python直譯器。

python的創始人為吉多·範羅蘇姆(Guido van Rossum)。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus,他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,語法能夠像shell一樣簡潔,易學易用、可拓展性強,同時兼顧C的強大功能。於是Guido在1989年的聖誕節期間,開始編寫能夠解釋Python語言語法的直譯器。

Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。最新的TIOBE排行榜https://www.tiobe.com/tiobe-index/,Python已飆升至世界第三。

Python可以應用於眾多領域,如:人工智慧、資料分析、爬蟲、金融量化、雲端計算、WEB開發、自動化運維/測試、遊戲開發、網路服務、影象處理等眾多領域。目前業內幾乎所有大中型網際網路企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。

python直譯器的發展史

1989年,Guido開始寫Python語言的編譯器。 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠呼叫C語言的庫檔案。從一出生,Python已經具有了:類,函式,異常處理,包含表和詞典在內的核心資料型別,以及模組為基礎的拓展系統。

Granddaddy of Python web frameworks, Zope 1 was released in 1999

Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.

Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言框架的基礎

Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生

Python 2.5 - September 19, 2006

Python 2.6 - October 1, 2008

Python 2.7 - July 3, 2010

In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible

Python 3.0 - December 3, 2008 (細心的讀者會發現,08年時就推出了3.0,2010年反而又推出了2.7?是因為3.0不向下相容2.0,而很多公司已經基於2.0版本開發出了大量程式,公司已然投入了大量的人財物力,這就導致大家都拒絕升級3.0,無奈官方只能推出2.7過渡版本,之後我們都應該採用3.0直譯器開發程式,但為了方便讀者維護2.0版本的軟體,我們在遇到兩種版本的差異時會專門指出來)

Python 3.1 - June 27, 2009

Python 3.2 - February 20, 2011

Python 3.3 - September 29, 2012

Python 3.4 - March 16, 2014

Python 3.5 - September 13, 2015

Python 3.6 - 2016-12-23 釋出python3.6.0版

Python直譯器有哪些種類?

官方的Python直譯器本質就是基於C語言開發的一個軟體,該軟體的功能就是讀取以.py結尾的檔案內容,然後按照Guido定義好的語法和規則去翻譯並執行相應的程式碼。這種用C實現的直譯器稱為CPython,它是python領域效能最好,應用最廣泛的一款直譯器,我們在後面提到的直譯器指的都是Cpython直譯器。但其實直譯器作為一款應用軟體,完全可以採用其他語言來開發,只要能解釋python這門語言的語法即可。Python直譯器的一些種類如下,簡單瞭解即可

# Jython
JPython直譯器是用JAVA編寫的python直譯器,可以直接把Python程式碼編譯成Java位元組碼並執行,它不但使基於java的專案之上嵌入python指令碼成為可能,同時也可以將java程式引入到python程式之中。

# IPython
IPython是基於CPython之上的一個互動式直譯器,也就是說,IPython只是在互動方式上有所增強,但是執行Python程式碼的功能和CPython是完全一樣的。這就好比很多國產瀏覽器雖然外觀不同,但核心其實都是呼叫了IE。
CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。

# PyPy
PyPy是Python開發者為了更好地Hack Python而用Python語言實現的Python直譯器。PyPy提供了JIT編譯器和沙盒功能,對Python程式碼進行動態編譯(注意不是解釋),因此執行速度比CPython還要快。

# IronPython
IronPython和Jython類似,只不過IronPython是執行在微軟.Net平臺上的Python直譯器,可以直接把Python程式碼編譯成.Net的位元組碼。

四 安裝python直譯器

Python直譯器目前已支援所有主流作業系統,在Linux,Unix,Mac系統上自帶Python直譯器,在Windows系統上需要安裝一下,具體步驟如下。

下載python直譯器

開啟官網 https://www.python.org,按提示下載即可

安裝直譯器

測試安裝是否成功

windows --> 執行 --> 輸入cmd ,然後回車,彈出cmd程式,輸入python,如果能進入互動環境 ,代表安裝成功。

五 第一個python程式

執行python程式的兩種方式

方式一: 互動式模式

方式二:指令碼檔案

# 1、開啟一個文字編輯工具,寫入下述程式碼,並儲存檔案,此處檔案的路徑為D:\test.py。強調:python直譯器執行程式是解釋執行,解釋的根本就是開啟檔案讀內容,因此檔案的字尾名沒有硬性限制,但通常定義為.py結尾
print('hello world')

# 2、開啟cmd,執行命令,如下圖

總結:

#1、互動式模式下可以即時得到程式碼執行結果,除錯程式十分方便
#2、若想將程式碼永久儲存下來,則必須將程式碼寫入檔案中
#3、我們以後主要就是在程式碼寫入檔案中,偶爾需要開啟互動式模式除錯某段程式碼、驗證結果

註釋

在正式學習python語法前,我們必須事先介紹一個非常重要的語法:註釋

1、什麼是註釋

註釋就是就是對程式碼的解釋說明,註釋的內容不會被當作程式碼執行

2、為什麼要註釋

增強程式碼的可讀性

3、怎麼用註釋?

程式碼註釋分單行和多行註釋

1、單行註釋用#號,可以跟在程式碼的正上方或者正後方

2、多行註釋可以用三對雙引號""" """

4、程式碼註釋的原則:

1、不用全部加註釋,只需要為自己覺得重要或不好理解的部分加註釋即可

2、註釋可以用中文或英文,但不要用拼音

六 IDE工具pycharm的使用

什麼是IDE?為何要有IDE

在編寫第一個python程式時,存在以下問題,嚴重影響開發效率

問題一:我們瞭解到一個python程式從開發到執行需要操作至少兩個軟體

1、開啟一個軟體:文字編輯器,建立文字來編寫程式
2、開啟cmd,然後輸入命令執行pyton程式

問題二:在開發過程中,並沒程式碼提示以及糾錯功能

綜上,如果能有一款工具能夠整合n個軟體的功能,同時又程式碼提示以及糾錯等功能,那麼將會極大地提升程式設計師的開發效率,這就是IDE的由來,IDE全稱Integrated Development Environment,即整合開發環境,最好的開發Python程式的IDE就是PyCharm。

pycharm安裝

# 下載地址: https://www.jetbrains.com/pycharm/download  選擇Professional專業版

安裝完成後註冊,然後啟動,會讓你先建立一個專案,其實就是一個資料夾,我們以後的程式碼都存在這裡面。

Pycharm建立資料夾

建立資料夾是管理檔案的良好方式

如何建立檔案並編寫程式執行

建立py檔案test.py

在test.py中寫程式碼,輸入關鍵字的開頭可以用tab鍵補全後續,並且會有程式碼的錯誤提示