電腦基礎知識--語言介紹

來源:互聯網
上載者:User

標籤:串列   參數   介紹   文本   包含   img   壓縮   一個個   資料   

解釋型語言 和編譯型語言

電腦本身不能識別進階語言,當我們運行一個程式的時候,需要一個“翻譯” 來把 進階語言轉換成電腦能讀懂的語言。 “翻譯”過程分兩種:

  1. 編譯 編譯型語言在執行程式前,首先會通過編譯器執行一個編譯的過程,把程式編譯成機器語言。 之後,程式再次啟動並執行時候,就不要“翻譯”了,而是可以直接執行。比如C語言。 編譯型語言的優點在於在運行程式的時候不用解釋,可直接利用已經翻譯過的檔案。
  2. 解釋 解釋型語言就沒有編譯的過程,而是在程式啟動並執行時候,通過解譯器逐行解釋代碼,然後運行。比如python。

java等基於虛擬機器的語言興起之後,程式設計語言又不能單純的在劃分為編譯型語言或解釋型語言。 java是首先通過編譯器將代碼編譯成位元組碼檔案,然後在JVM執行java位元組碼,將其解釋成機器語言。 所以我們說java是一種半編譯半解釋的語言。

C#,在第一次執行的時候,將代碼編譯成IL中間碼檔案,然後由JIT編譯器編譯成本地的機器碼執行。 相當於編譯了兩次。

關於python,看下面詳解。

第一個python程式

首先我們開啟python 互動式解譯器, 執行如下命令:

1 # python3 2 Python 3.5.1+ (default, Mar 30 2016, 22:46:26)3 [GCC 5.3.1 20160330] on linux4 Type "help", "copyright", "credits" or "license" for more information.5 >>> print("Hello World")6 Hello World

 

然後我們 寫一個最簡單的python程式。 建立 first.py檔案,檔案內容如下:

1 print("First Hello World!")
 

建立 second.py

import firstprint("Second Hello World!")

然後我們喜歡執行第二個檔案:

python second.py

輸出:

First Hello World!Second Hello World!
python程式的執行過程

這個時候我們會發現產生了一個 pycache 目錄; 目錄下 有檔案first.cpython-35.pyc。 如果python版本是2.x 則會在目前的目錄直接產生first.pyc。 我們說python是解釋型語言 ,那這個pyc是什麼檔案呢? 按照一般的理解來說,pyc 中的c 應該是compile的意思, 既然是這樣,那麼python代碼是如何被轉換成一系列的機器指令呢?現在我們就好好深究一下這裡的因果關係。 其實本質上python和java、C#是一樣的,三者的 程式執行原理都可以用兩個詞概括——虛擬機器、位元組碼。 在python中有一個非常核心的東西——interpreter,當我們在命令列敲入python,當我們在shell中敲入命令python的時候, 目的就是為了啟用這個解譯器; 當我們執行 python second.py的時候,python解譯器立即被啟用,然後執行python程式。在pyhton的解譯器還要完成一個非常重要的工作——編譯.py檔案。

python解譯器在執行程式的時候,首先就是對檔案中的python原始碼進行編譯,產生一個python的位元組碼(byte code),然後 將位元組碼交給python虛擬機器,虛擬機器則按照順序一條一條的執行位元組碼,直到程式執行完。 上面在執行python second.py時,我們發現只有second.py檔案產生了pyc檔案,原因我們不知道,但是我們可以猜測python在執行的時候,只對需要編譯的檔案進行編譯。那什麼是需要編譯的檔案呢? 比如說,first.py檔案不只被 second.py調用, 還被其他的py檔案調用,這個時候,如果把 first.py 進行編譯,那下次就直接調用編譯後的pyc檔案,這樣就加快了執行速度。

那麼有人就要問了,如果我修改了first.py檔案,下次調用first.pyc的時候不就不是最新的代碼了嗎,對於這個我們並不需要擔心。pyc檔案中包含自身建立的時間,在python程式執行的時候,首先會嘗試載入pyc檔案,在載入的過程中,python會比對py檔案和 pyc檔案的時間,如果pyc檔案時間早於py檔案時間,就會重新編譯py檔案,產生新的pyc檔案, 否則就會直接調用py從檔案。

python整體架構

瞭解了python程式的執行過程,那麼也應該瞭解python的整體架構是什麼。 python的整體架構可以分為三個主要的部分。

  • 左邊的部分 python提供的大量模組、庫 和使用者自訂的模組。
  • 中間的部分 python的核心——解譯器,也可以叫虛擬機器,這裡的箭頭方向是python運行過程中資料流的方向, Scanner對應詞法分析,用來將檔案或命令輸入的每一行代碼切分為一個個的token; Parser對應文法分析,在Scanner的分析結果上進行文法分析,建立抽象文法樹(AST); Compiler 則根據建立的AST 產生指令集合——位元組碼; Code Evaluator 執行位元組碼檔案,所以又被稱為虛擬機器。
  • 右邊的部分 對象/類型、記憶體配置 和解譯器之間的箭頭表示兩者之間的“使用”關係; 運行時狀態與解譯器之間的箭頭表示“修改”關係。python在執行的過程中會不斷的修改當前解譯器的所處的狀態,在不同的狀態之間切換。
python程式檔案頭部的 #!
#!/usr/bin/env python print("Hello World!")

Shebang 是一個由井號和歎號構成的字串行(#!), 其出現在文字檔的第一行的前兩個字元. 在檔案中存在Shebang的情況下, 類Unix作業系統的程式載入器會分析Shebang後的內容, 將這些內容作為解譯器指令, 並調用該指令, 並將載有Shebang的檔案路徑作為該解譯器的參數。#!先用於協助核心找到Python解譯器, 但是在匯入模組時, 將會被忽略. 因此只有被直接執行的檔案中才有必要加入#!.

檔案編碼什麼是檔案編碼 (瞭解的可忽略)

我們在顯示器看見的文字圖片等資訊在電腦上儲存的時候並不是我們看到的樣子。如果你拆開硬碟,把裡面的碟片拿出來用顯微鏡來看就會看到上面有很多凹凸的地方。和我們平時見到的光碟片類似。凹凸的位置分別表示0和1。這是因為在電腦中電訊號只有兩種狀態,有電和沒電。在儲存資料的時候,如果我們要儲存一個字母“A”,那麼就可以用一定長度的0和1來表示。比如說用“01000001”來表示A。有了這樣的對應關係,我們就可以儲存我們平時見到的一些字元了。
於是就是有ASCII(美國(國家)資訊交換標準(代)碼),使用7個或8個二進位位進行編碼的方案,最多可以給256個字元。使用了ASCII碼,不同的電腦之間就可以實現資料的標準化。
但是ASCII使用的時候有一些限制。他最多之可以表示256個字元。如果有其他的字元就無能為力了。ASCII只能表示26個基本的拉丁字母、阿拉伯數字和英式標點。因此也只能用於顯示現代美國英語。
後來電腦世界開始有了其他語言,ASCII碼已經無法滿足需求。後來不同語言的人各自為自己定製了一套屬於自己的編碼,同時與ASCII保持相容。這些編碼統稱MBCS,到了這裡大家都開始好似用雙位元組。(中國的叫GB*,比如GBK).
在後來有人開始覺得,這麼多編碼,有些編碼之間還不相容,太讓人頭大了,於是有這麼一群人就坐在一起想出了一個辦法:所有的語言都使用同一種編碼,這種編碼就是Unicode。 Unicode使用最少2個位元組(1個位元組=1BYTE=8bit=一個長度為8的位元) 來表示字母和符號等,有時候是4個位元組。這樣就解決了上面遇到的問題。
Unicode又叫萬國碼,是業界的一種標準。但是有人又覺得如果我要表示一個ASCII裡的字元,使用unicode來表示不是太浪費空間了嗎,於是就有人想出了另外一種解決方案——UTF-8。
UTF-8是對Unicode編碼的壓縮和最佳化,最大的特點是它採用了變長的編碼方式,他不再是最少使用2個位元組,而是將所有的字元進行分類。ascii碼中的內容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存…

  • 不同編碼之間的關係 

python2中檔案的預設編碼為ASCII,在檔案中含有中文的時候就會報錯,這時,我們需要是設定一下檔案的預設編碼,如下:

#!/usr/bin/env python # -*- coding: UTF-8 -*-  # 指定python檔案編碼方式 

在python3中,檔案的預設編碼為UTF-8,已經不存在這個問題。

電腦基礎知識--語言介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.