1.1 Python語言介紹 1.1.1 什麼是編程?為什麼要編程 編程 是個動詞,編程==寫代碼,寫代碼為了什麼? 為了讓電腦乾你想要乾的事情,比如,馬化騰想跟別人聊天,於是寫了個聊天軟體,這個軟體就是一堆代碼的集合,這些代碼是什麼?這些代碼是電腦能理解的語言。 例子:你是公司老闆,你有一個員 ...
1.1 Python語言介紹
1.1.1 什麼是編程?為什麼要編程
編程 是個動詞,編程==寫代碼,寫代碼為了什麼? 為了讓電腦乾你想要乾的事情,比如,馬化騰想跟別人聊天,於是寫了個聊天軟體,這個軟體就是一堆代碼的集合,這些代碼是什麼?這些代碼是電腦能理解的語言。
例子:你是公司老闆,你有一個員工是中國人,你讓他幹活,就得說中文,還有一個員工是美國人,讓他幹活,就得說英文,你還有一條狗,讓他聽話,你就得汪汪汪。。。,那現在你有臺電腦,讓它幹活,就得用它能理解的語言。
那計算能理解的語言是什麼呢? 之前,我們已經瞭解到,它只能理解2進位,0101010...,你總不能人肉輸一堆二進位給電腦(雖然最原始的電腦就是這麼乾的)讓它工作吧,這樣開發速度太慢了。所以最好的辦法就是人輸入簡單的指令,電腦能把指令轉成二進位進行執行,舉例如下:
假如 程式員想讓電腦 播放一首 歌曲 , 只需要輸入指令
1 open "小蘋果.mp3" 3 play
電腦的CPU接收到這樣的指令後,會把它轉成一堆 只有cpu可以理解的指令,然後再將指令變成各種對應的如下類似二進位
1 [ op | rs | rt | address/immediate] 3 35 3 8 68 decimal 5 100011 00011 01000 00000 00001 000100 binary
最終cpu 去調用你的硬碟上這首歌,通過音箱播放。
上面cpu那段指令太難理解了,如果讓你天天寫這樣的代碼,大家非得自殺不可。還好,偉大的電腦先驅們,開發了各種編程語言,讓我們只需要通過寫一些簡單的規則,就能操作電腦工作啦。
1.1.2 有哪些編程語言?
編程語言總體分以為機器語言、彙編語言、高級語言,如下
1.1.2.1 機器語言
由於電腦內部只能接受二進位代碼,因此,用二進位代碼0和1描述的指令稱為機器指令,全部機器指令的集合構成電腦的機器語言,用機器語言編程的程式稱為目標程式。只有目標程式才能被電腦直接識別和執行。但是機器語言編寫的程式無明顯特征,難以記憶,不便閱讀和書寫,且依賴於具體機種,局限性很大,機器語言屬於低級語言。
用機器語言編寫程式,編程人員要首先熟記所用電腦的全部指令代碼和代碼的涵義。手編程式時,程式員得自己處理每條指令和每一數據的存儲分配和輸入輸出,還得記住編程過程中每步所使用的工作單元處在何種狀態。這是一件十分繁瑣的工作。編寫程式花費的時間往往是實際運行時間的幾十倍或幾百倍。而且,編出的程式全是些0和1的指令代碼,直觀性差,還容易出錯。除了電腦生產廠家的專業人員外,絕大多數的程式員已經不再去學習機器語言了。
機器語言是微處理器理解和使用的,用於控制它的操作二進位代碼。
儘管機器語言好像是很複雜的,然而它是有規律的。
存在著多至100000種機器語言的指令。這意味著不能把這些種類全部列出來。
以下是一些示例:
指令部份的示例:
1 0000 代表 載入(LOAD) 2 0001 代表 存儲(STORE) 3 ... 4 暫存器部份的示例 5 0000 代表暫存器 A 6 0001 代表暫存器 B 7 ... 8 存儲器部份的示例 9 000000000000 代表地址為 0 的存儲器 10 000000000001 代表地址為 1 的存儲器 11 000000010000 代表地址為 16 的存儲器 12 100000000000 代表地址為 2^11 的存儲器 13 集成示例 14 0000,0000,000000010000 代表 LOAD A, 16 15 0000,0001,000000000001 代表 LOAD B, 1 16 0001,0001,000000010000 代表 STORE B, 16 17 0001,0001,000000000001 代表 STORE B, 1[1]
1.1.2.2 彙編語言
彙編語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。彙編程式的每一句指令只能對應實際操作過程中的一個很細微的動作。例如移動、自增,因此彙編源程式一般比較冗長、複雜、容易出錯,而且使用彙編語言編程需要有更多的電腦專業知識,但彙編語言的優點也是顯而易見的,用彙編語言所能完成的操作不是一般高級語言所能夠實現的,而且源程式經彙編生成的可執行文件不僅比較小,而且執行速度很快。
彙編的hello world,列印一句hello world, 需要寫十多行。
1 ; hello.asm 2 section .data ; 數據段聲明 3 msg db "Hello, world!", 0xA ; 要輸出的字元串 4 len equ $ - msg ; 字串長度 5 section .text ; 代碼段聲明 6 global _start ; 指定入口函數 7 _start: ; 在屏幕上顯示一個字元串 8 mov edx, len ; 參數三:字元串長度 9 mov ecx, msg ; 參數二:要顯示的字元串 10 mov ebx, 1 ; 參數一:文件描述符(stdout) 11 mov eax, 4 ; 系統調用號(sys_write) 12 int 0x80 ; 調用內核功能 13 ; 退出程式 14 mov ebx, 0 ; 參數一:退出代碼 15 mov eax, 1 ; 系統調用號(sys_exit) 16 int 0x80 ; 調用內核功能
1.1.2.3 高級語言
高級語言是大多數編程者的選擇。和彙編語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程式中的指令。同時,由於省略了很多細節,編程者也就不需要有太多的專業知識。
高級語言主要是相對於彙編語言而言,它並不是特指某一種具體的語言,而是包括了很多編程語言,像最簡單的編程語言PASCAL語言也屬於高級語言。
高級語言所編製的程式不能直接被電腦識別,必須經過轉換才能被執行,按轉換方式可將它們分為兩類:
1.1.2.4 編譯類
編譯是指在應用源程式執行之前,就將程式源代碼“翻譯”成目標代碼(機器語言),因此其目標程式可以脫離其語言環境獨立執行(編譯後生成的可執行文件,是cpu可以理解的2進位的機器碼組成的),使用比較方便、效率較高。但應用程式一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標文件(* .obj,也就是OBJ文件)才能執行,只有目標文件而沒有源代碼,修改很不方便。
編譯後程式運行時不需要重新翻譯,直接使用編譯的結果就行了。程式執行效率高,依賴編譯器,跨平臺性差些。如C、C++、Delphi等
1.1.2.5 解釋類
執行方式類似於我們日常生活中的“同聲翻譯”,應用程式源代碼一邊由相應語言的解釋器“翻譯”成目標代碼(機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的可執行文件,應用程式不能脫離其解釋器(想運行,必須先裝上解釋器,就像跟老外說話,必須有翻譯在場),但這種方式比較靈活,可以動態地調整、修改應用程式。如Python、Java、PHP、Ruby等語言。
1.2 總結
- 機器語言
優點是最底層,速度最快,缺點是最複雜,開發效率最低
- 彙編語言
優點是比較底層,速度最快,缺點是複雜,開發效率最低
- 高級語言
編譯型語言執行速度快,不依賴語言環境運行,跨平臺差
解釋型跨平臺好,一份代碼,到處使用,缺點是執行速度慢,依賴解釋器運行
1.3 主流編程語言介紹
1.3.1 編程語言排名
世界上的編程語言有600多種,但真正大家主流在使用的最多二三十種,不同的語言有自己的特點和擅長領域,隨著電腦的不斷發展,新語言在不斷誕生,也同時有很多老舊的語言慢慢無人用了。有個權威的語言排名網站,可以看到主流的編程語言是哪些
排名查看地址:(2017年11月數據)https://www.tiobe.com/tiobe-index/
長期語言排名
1.3.2 幾個主流的編程語言:
-
C語言:
C語言是一種電腦程式設計語言,它既具有高級語言的特點,又具有彙編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程式,也可以作為應用程式設計語言,編寫不依賴電腦硬體的應用程式。它的應用範圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。
-
C++:
C++是C語言的繼承的擴展,它既可以進行C語言的過程化程式設計,又可以進行以抽象數據類型為特點的基於對象的程式設計,還可以進行以繼承和多態為特點的面向對象的程式設計。C++擅長面向對象程式設計的同時,還可以進行基於過程的程式設計,因而C++就適應的問題規模而論,大小由之。
C++不僅擁有電腦高效運行的實用性特征,同時還致力於提高大規模程式的編程質量與程式設計語言的問題描述能力。
-
JAVA:
Java是一種可以撰寫跨平臺應用軟體的面向對象的程式設計語言,是由Sun Microsystems公司於1995年5月推出的Java程式設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於個人PC、數據中心、游戲控制台、科學超級電腦、行動電話和互聯網,同時擁有全球最大的開發者專業社群。在全球雲計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊前景。
-
PHP:
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。
-
Ruby:
Ruby 是開源的,在Web 上免費提供,但需要一個許可證。[4]
Ruby 是一種通用的、解釋的編程語言。
Ruby 是一種真正的面向對象編程語言。
Ruby 是一種類似於 Python 和 Perl 的伺服器端腳本語言。
Ruby 可以用來編寫通用網關介面(CGI)腳本。
Ruby 可以被嵌入到超文本標記語言(HTML)。
Ruby 語法簡單,這使得新的開發人員能夠快速輕鬆地學習 Ruby
-
GO:
Go 是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟體變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,後來還加入了Ian Lance Taylor, Russ Cox等人,並最終於2009年11月開源,在2012年早些時候發佈了Go 1穩定版本。現在Go的開發已經是完全開放的,並且擁有一個活躍的社區。
由其擅長併發編程
-
1.3.2.7 Python:
Python是一門優秀的綜合語言, Python的宗旨是簡明、優雅、強大,在人工智慧、雲計算、金融分析、大數據開發、WEB開發、自動化運維、測試等方嚮應用廣泛,已是全球第4大最流行的語言。