鍍金池/ 教程/ Python/ 頂層組件
復(fù)合語(yǔ)句
數(shù)據(jù)模型
完整的語(yǔ)法規(guī)范
執(zhí)行模型
表達(dá)式
導(dǎo)入系統(tǒng)
詞法分析
簡(jiǎn)單語(yǔ)句
頂層組件
介紹

頂層組件

Python解釋器的可以有幾種輸入源:從標(biāo)準(zhǔn)輸入或程序參數(shù)傳入的腳本,交互方式下的輸入,從模塊源文件,等等。本章給出在這些情況下使用的語(yǔ)法。

完整的 Python 程序

盡管語(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ǔ)法用于以下的情況:

  • 當(dāng)解析一個(gè)完整Python程序時(shí)(從文件或字符串中);
  • 當(dāng)解析一個(gè)模塊時(shí);
  • 當(dāng)解析一個(gè)傳給exec()語(yǔ)句的字符串時(shí);

交互式輸入

交互模式輸入使用以下語(yǔ)法進(jìn)行解析:

interactive_input ::= [stmt_list] NEWLINE | compound_stmt NEWLINE

請(qǐng)注意一個(gè)(頂層)復(fù)合語(yǔ)句后面在交互模式下必須跟著一個(gè)空行;需要用它來(lái)幫助解釋器檢測(cè)輸入的結(jié)束。

表達(dá)式輸入

eval()用于表達(dá)式的輸入。它將忽略前面的空格。Eval()的字符串參數(shù)必須具有以下形式:

eval_input ::= expression_list NEWLINE*