當前位置:首頁 » 編程語言 » python解釋器

python解釋器

發布時間: 2022-01-27 12:30:34

python用什麼解釋器

Python的編輯器也是眾多的,下面說下幾種:

  • 提問者使用的是dos的編輯器,這一種當然不舒服;

  • Python的自帶的有兩種:

    2.1 Shell形式:這一種和dos一樣很糾結,如下圖:

  • 其他的第三方,比如Eclips+PyDev等;

  • 個人建議你使用2.2裡面的Edit模式,啟動方法是:

    開始--所有程序--Python--IDLE(PythonGUI)。

㈡ Python怎樣使用解釋器

大學里計算機科學最吸引我的地方就是編譯器。最神奇的是,編譯器是如何讀出我寫的那些爛代碼,並且還能生成那麼復雜的程序。當我終於選了一門編譯方面的課程時,我發現這個過程比我想的要簡單得多。

在本系列的文章中,我會試著通過為一種基本命令語言IMP寫一個解釋器,來展示這種簡易性。因為IMP是一個簡單廣為人知的語言,所以打算用 Python寫這個解釋器。Python代碼看起來很像偽代碼,所以即使你不認識 Python,你也能理解它。解析可以通過一套從頭開始實現的解析器組合完成(在本系列的下一篇文章中會有解釋)。除了sys(用於I/O)、re(用於解析正則表達式)以及unittest(用於確保一切工作正常)庫,沒有使用其他額外的庫。

IMP 語言

在開始寫之前,我們先來討論一下將要解釋的語言。IMP是擁有下面結構的最小命令語言:

賦值語句(所有變數都是全局的,而且只能存儲整數):

Python

1

x := 1

條件語句:

Python

1

2

3

4

5

if x = 1 then

y := 2

else

y := 3

end

while循環:

Python

1

2

3

while x < 10 do

x := x + 1

end

復合語句(分號分隔):

Python

1

2

x := 1;

y := 2

OK,所以它只是一門工具語言,但你可以很容易就把它擴展成比Lua或python更有用的語言。我希望能把這份教程能保持盡量簡單。

下面這個例子是計算階乘的程序:

Python

1

2

3

4

5

6

n := 5;

p := 1;

while n > 0 do

p := p * n;

n := n - 1

end

IMP沒有讀取輸入的方式,所以初始狀態必須是在程序最開始寫一系列的賦值語句。也沒有列印結果的方式,所以解釋器必須在程序的結尾列印所有變數的值。

解釋器的結構

解釋器的核心是「中間表示」(Intermediate representation,IR)。這就是如何在內存中表示IMP程序。因為IMP是一個很簡單的語言,中間表示將直接對應於語言的語法;每一種表達和語句都有對應的類。在一種更復雜的語言中,你不僅需要一個「語法表示」,還需要一個更容易分析或運行的「語義表示」。

解釋器將會執行三個階段:

  • 源碼中的字元分割成標記符(token)

  • 將標記符組織成一棵抽象語法樹(AST)。抽象語法樹就是中間表示。

  • 評估這棵抽象語法樹,並在最後列印這棵樹的狀態

  • 將字元串分割成標記符的過程叫做「詞法分析」,通過一個詞法分析器完成。關鍵字是很短,易於理解的字元串,包含程序中最基本的部分,如數字、標識符、關鍵字和操作符。詞法分析器會除去空格和注釋,因為它們都會被解釋器忽略。

    實際執行這個解析過的抽象語法樹的過程稱為評估。這實際上是這個解析器中最簡單的部分了。

    本文會把重點放在詞法分析器上。我們將編寫一個通用的詞彙庫,然後用它來為IMP創建一個詞法分析器。下一篇文章將會重點打造一個語法分析器和評估計算器。

    詞彙庫

    詞法分析器的操作相當簡單。它是基於正則表達式的,所以如果你不熟悉它們,你可能需要讀一些資料。簡單來說,正則表達式就是一種能描述其他字元串的特殊的格式化的字元串。你可以使用它們去匹配電話號碼或是郵箱地址,或者是像我們遇到在這種情況,不同類型的標記符。

    詞法分析器的輸入可能只是一個字元串。簡單起見,我們將整個輸入文件都讀到內存中。輸出是一個標記符列表。每個標記符包括一個值(它代表的字元串)和一個標記(表示它是一個什麼類型的標記符)。語法分析器會使用這兩個數據來決定如何構建一棵抽象語法樹。

    由於不論何種語言的詞法分析器,其操作都大同小異,我們將創建一個通用的詞法分析器,包括一個正則表達式列表和對應的標簽(tag)。對每一個表達式,它都會檢查是否和當前位置的輸入文本匹配。如果匹配,匹配文本就會作為一個標記符被提取出來,並且被加上該正則表達式的標簽。如果該正則表達式沒有標簽,那麼這段文本將會被丟棄。這樣免得我們被諸如注釋和空格之類的垃圾字元干擾。如果沒有匹配的正則表達式,程序就要報錯並終止。這個過程會不斷循環直到沒有字元可匹配。

    下面是一段來自詞彙庫的代碼:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

  • import sys

    import re

    def lex(characters, token_exprs):

    pos = 0

    tokens = []

    while pos < len(characters):

    match = None

    for token_expr in token_exprs:

    pattern, tag = token_expr

    regex = re.compile(pattern)

    match = regex.match(characters, pos)

    if match:

    text = match.group(0)

    if tag:

    token = (text, tag)

    tokens.append(token)

    break

    if not match:

    sys.stderr.write('Illegal character: %sn' % characters[pos])

    sys.exit(1)

    else:

    pos = match.end(0)

    return tokens

  • 注意,我們遍歷正則表達式的順序很重要。lex會遍歷所有的表達式,然後接受第一個匹配成功的表達式。這也就意味著,當使用詞法分析器時,我們應當首先考慮最具體的表達式(像那些匹配運算元(matching operator)和關鍵詞),其次才是比較一般的表達式(像標識符和數字)。

    詞法分析器

    給定上面的lex函數,為IMP定義一個詞法分析器就非常簡單了。首先我們要做的就是為標記符定義一系列的標簽。IMP只需要三個標簽。RESERVED表示一個保留字或操作符。INT表示一個文字整數。ID代表標識符。

    Python

    1

    2

    3

    4

    5

  • import lexer

    RESERVED = 'RESERVED'

    INT= 'INT'

    ID = 'ID'

  • 接下來定義詞法分析器將會用到的標記符表達式。前兩個表達式匹配空格和注釋。它們沒有標簽,所以 lex 會丟棄它們匹配到的所有字元。

    Python

    1

    2

    3

  • token_exprs = [

    (r'[ nt]+',None),

    (r'#[^n]*', None),

  • 然後,只剩下所有的操作符和保留字了。記住,每個正則表達式前面的「r」表示這個字元串是「raw」;Python不會處理任何轉義字元。這使我們可以在字元串中包含進反斜線,正則表達式正是利用這一點來轉義操作符比如「+」和「*」。

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

  • (r':=', RESERVED),

    (r'(',RESERVED),

    (r')',RESERVED),

    (r';', RESERVED),

    (r'+',RESERVED),

    (r'-', RESERVED),

    (r'*',RESERVED),

    (r'/', RESERVED),

    (r'<=',RESERVED),

    (r'<', RESERVED),

    (r'>=',RESERVED),

    (r'>', RESERVED),

    (r'=', RESERVED),

    (r'!=',RESERVED),

    (r'and', RESERVED),

    (r'or',RESERVED),

    (r'not', RESERVED),

    (r'if',RESERVED),

    (r'then',RESERVED),

    (r'else',RESERVED),

    (r'while', RESERVED),

    (r'do',RESERVED),

    (r'end', RESERVED),

  • 最後,輪到整數和標識符的表達式。要注意的是,標識符的正則表達式會匹配上面的所有的保留字,所以它一定要留到最後。

    Python

    1

    2

    3

  • (r'[0-9]+',INT),

    (r'[A-Za-z][A-Za-z0-9_]*', ID),

    ]

  • 既然正則表達式已經定義好了,我們還需要創建一個實際的lexer函數。

    Python

    1

    2

  • def imp_lex(characters):

    return lexer.lex(characters, token_exprs)

  • 如果你對這部分感興趣,這里有一些驅動代碼可以測試輸出:

    Python

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

  • import sys

    from imp_lexer import *

    if __name__ == '__main__':

    filename = sys.argv[1]

    file = open(filename)

    characters = file.read()

    file.close()

    tokens = imp_lex(characters)

    for token in tokens:

    print token

  • 繼續……

    在本系列的下一篇文章中,我會討論解析器組合,然後描述如何使用他們從lexer中生成的標記符列表建立抽象語法樹。

    如果你對於實現IMP解釋器很感興趣,你可以從這里下載全部的源碼。

    在源碼包含的示例文件中運行解釋器:

    Python

    1

  • python imp.py hello.imp

  • 運行單元測試:

    Python

    1

  • python test.py

㈢ 如何把python解釋器內

你用什麼系統?python版本?
>windows:
安裝完後,在cmd命令行中輸python就行了,也就是打開python.exe,彈出命令行窗口,有python簡介和「>>>」提示就可調試了。
*註:python3.x版本的print用法是:
print('hello world!')
python 2.x用法:
print 'hello world'
建議windows下裝active python調試!
linux下我沒用過

㈣ linux如何重啟python解釋器

TestCase 測試用例,就是功能里那樣一條條用例
TestSuite 多個測試用例集合在一起,就是TestSuite,就是一個功能模塊的所有用例放這里了
TestLoader是用來載入TestCase到TestSuite中的,這個方法很好玩,可以將一個目錄下的所有python文件里的測試用例摳出來
TestRunner是來執行測試用例的,測試的結果會保存到TestResult實例中,包括運行了多少測試用例,成功了多少,失敗了多少等信息

㈤ 怎麼啟動python解釋器

1.首先找到本地python安裝位置,若找不到可直接搜索「python」,復制「python.exe」執行文件的所在目錄,如下:

注意事項

python2.x下為:print "Hello World"

python3.x下print需要加「()」:print ("Hello World")

㈥ Python解釋器有哪些

python 解釋器很多種,最廣泛運用的有:
1、CPython
當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。
2、IPython
IPython是基於CPython之上的一個互動式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。
CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。
3、PyPy
PyPy是另一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),所以可以顯著提高Python代碼的執行速度。
絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。如果你的代碼要放到PyPy下執行,就需要了解PyPy和CPython的不同點。
4、Jython
Jython是運行在Java平台上的Python解釋器,可以直接把Python代碼編譯成Java位元組碼執行。
5、IronPython
IronPython和Jython類似,只不過IronPython是運行在微軟.Net平台上的Python解釋器,可以直接把Python代碼編譯成.Net的位元組碼。
6、qpython用於在手機上編程

㈦ python的解釋器在哪

安裝了python環境就有了解釋器,解釋器其實可以說是python環境。

㈧ 電腦自帶python解釋器嗎,沒有解釋器的話python程序是怎麼運行的呢

windows電腦不自帶python,linux自帶python。
如果沒有python組件的話,python程序無法運行。

㈨ python解釋器是什麼

大家都知道,Python是一門解釋型語言,解釋器是Python運行必不可少的一種工具。所以,我們搭建Python環境,本質上就是對Python進行配置和定製。而解釋器就是能夠執行用其他計算機語言編寫的程序的系統軟體,它是一種翻譯程序。它的執行方式是一邊翻譯一邊執行,因此其執行效率一般偏低,但是解釋器的實現較為簡單,而且編寫源程序的高級語言可以使用更加靈活和富於表現力的語法。

㈩ 什麼是python解釋器

什麼是python解釋器?
當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py文件。
由於整個Python語言從規范到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。
CPython
當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。
IPython
IPython是基於CPython之上的一個互動式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。
CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。
PyPy
PyPy是另一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),所以可以顯著提高Python代碼的執行速度。
絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。如果你的代碼要放到PyPy下執行,就需要了解PyPy和CPython的不同點。
Jython
Jython是運行在Java平台上的Python解釋器,可以直接把Python代碼編譯成Java位元組碼執行。
IronPython
IronPython和Jython類似,只不過IronPython是運行在微軟.Net平台上的Python解釋器,可以直接把Python代碼編譯成.Net的位元組碼。
小結
Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平台交互,最好的辦法不是用Jython或IronPython,而是通過網路調用來交互,確保各程序之間的獨立性。
本教程的所有代碼只確保在CPython 2.7版本下運行。請務必在本地安裝CPython(也就是從Python官方網站下載的安裝程序)。
此外,教程還內嵌一個IPython的Web版本,用來在瀏覽器內練習執行一些Python代碼。要注意兩者功能一樣,輸入的代碼一樣,但是提示符有所不同。另外,不是所有代碼都能在Web版本的IPython中執行,出於安全原因,很多操作(比如文件操作)是受限的,所以有些代碼必須在本地環境執行代碼。
相關推薦:《Python教程》以上就是小編分享的關於什麼是python解釋器的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!

熱點內容
jquery圖片壓縮上傳 發布:2024-11-16 09:54:50 瀏覽:602
安卓如何排查內存泄漏 發布:2024-11-16 09:54:13 瀏覽:199
怎麼設置登錄區域網伺服器憑據 發布:2024-11-16 09:49:46 瀏覽:538
閑置電腦家用下載伺服器 發布:2024-11-16 09:48:28 瀏覽:750
java工程師面試問題 發布:2024-11-16 09:28:36 瀏覽:233
用什麼引擎導出的安卓安裝包不大 發布:2024-11-16 09:09:06 瀏覽:474
安卓手機如何設置轉接 發布:2024-11-16 09:08:55 瀏覽:423
sql行業 發布:2024-11-16 09:04:07 瀏覽:295
如何查看電腦硬碟的介面速率緩存 發布:2024-11-16 08:59:42 瀏覽:221
c語言局部變數與全局變數 發布:2024-11-16 08:37:38 瀏覽:489