Python解釋器的可以有幾種輸入源:從標(biāo)準(zhǔn)輸入或程序參數(shù)傳入的腳本,交互方式下的輸入,從模塊源文件,等等。本章給出在這些情況下使用的語(yǔ)法。
盡管語(yǔ)法規(guī)格說(shuō)明不需要指明語(yǔ)言的解釋器是如何執(zhí)行的,對(duì)一個(gè)完整的Python程序的了解也是有用的。一個(gè)完整的Python程序運(yùn)行在一個(gè)最低限度的初始環(huán)境中:所有內(nèi)置和標(biāo)準(zhǔn)模塊都是可用的,但都沒(méi)有被初始化,除了sys(各種系統(tǒng)服務(wù))模塊、builtin(內(nèi)置函數(shù)、異常和None)模塊和__ main__
模塊。main被用來(lái)為完整程序的運(yùn)行提供局部和全局名字空間。
針對(duì)于文件輸入來(lái)說(shuō)的完整的 Python 程序語(yǔ)法,在下一節(jié)給出描述。
解釋器也可以以交互方式運(yùn)行;在這種情況下,它并不讀取和運(yùn)行一個(gè)完整程序,而是一次讀取和運(yùn)行一條語(yǔ)句(可能是復(fù)合語(yǔ)句)。這種初始環(huán)境與完整程序環(huán)境是相同的;每條語(yǔ)句都是在__ main__
名字空間下運(yùn)行。
在Unix上,一個(gè)完整程序可以以三種形式傳給解釋器:使用-c字符串命令行選項(xiàng),以一個(gè)文件作為命令行的第一個(gè)參數(shù),或作為標(biāo)準(zhǔn)輸入。如果文件或標(biāo)準(zhǔn)輸入是一個(gè)tty(終端)設(shè)備,解釋器進(jìn)行交互模式;否則,它把文件作為一個(gè)完整程序來(lái)運(yùn)行。
所有從非交互文件的輸入讀取具有相同的形式:
file_input ::= (NEWLINE | statement)*
這個(gè)語(yǔ)法用于以下的情況:
交互模式輸入使用以下語(yǔ)法進(jìn)行解析:
interactive_input ::= [stmt_list] NEWLINE | compound_stmt NEWLINE
請(qǐng)注意一個(gè)(頂層)復(fù)合語(yǔ)句后面在交互模式下必須跟著一個(gè)空行;需要用它來(lái)幫助解釋器檢測(cè)輸入的結(jié)束。
eval()用于表達(dá)式的輸入。它將忽略前面的空格。Eval()的字符串參數(shù)必須具有以下形式:
eval_input ::= expression_list NEWLINE*