9. 頂級組件?
Python 解釋器可以從多種源獲得輸入:作為標(biāo)準(zhǔn)輸入或程序參數(shù)傳入的腳本,以交互方式鍵入的語句,導(dǎo)入的模塊源文件等等。 這一章將給出在這些情況下所用的語法。
9.1. 完整的 Python 程序?
雖然語言規(guī)范描述不必規(guī)定如何發(fā)起調(diào)用語言解釋器,但對完整的 Python 程序加以說明還是很有用的。 一個完整的 Python 程序會在最小初始化環(huán)境中被執(zhí)行:所有內(nèi)置和標(biāo)準(zhǔn)模塊均為可用,但均處于未初始化狀態(tài),只有 sys
(各種系統(tǒng)服務(wù)), builtins
(內(nèi)置函數(shù)、異常以及 None
) 和 __main__
除外。 最后一個模塊用于為完整程序的執(zhí)行提供局部和全局命名空間。
適用于一個完整 Python 程序的語法即下節(jié)所描述的文件輸入。
解釋器也可以通過交互模式被發(fā)起調(diào)用;在此情況下,它并不讀取和執(zhí)行一個完整程序,而是每次讀取和執(zhí)行一條語句(可能為復(fù)合語句)。 此時的初始環(huán)境與一個完整程序的相同;每條語句會在 __main__
的命名空間中被執(zhí)行。
一個完整程序可通過三種形式被傳遞給解釋器:使用 -c
字符串 命令行選項(xiàng),使用一個文件作為第一個命令行參數(shù),或者使用標(biāo)準(zhǔn)輸入。 如果文件或標(biāo)準(zhǔn)輸入是一個 tty 設(shè)置,解釋器會進(jìn)入交互模式;否則的話,它會將文件當(dāng)作一個完整程序來執(zhí)行。
9.2. 文件輸入?
所有從非交互式文件讀取的輸入都具有相同的形式:
file_input ::= (NEWLINE | statement
)*
此語法用于下列幾種情況:
解析一個完整 Python 程序時(從文件或字符串);
解析一個模塊時;
解析一個傳遞給
exec()
函數(shù)的字符串時;
9.3. 交互式輸入?
交互模式下的輸入使用以下語法進(jìn)行解析:
interactive_input ::= [stmt_list
] NEWLINE |compound_stmt
NEWLINE
請注意在交互模式下一條(最高層級)復(fù)合語句必須帶有一個空行;這對于幫助解析器確定輸入的結(jié)束是必須的。
9.4. 表達(dá)式輸入?
eval()
被用于表達(dá)式輸入。 它會忽略開頭的空白。 傳遞給 eval()
的字符串參數(shù)必須具有以下形式:
eval_input ::= expression_list
NEWLINE*