[英]Why does the python interpreter prompt with … for a comment “#”?
在Python解釋器中,如果我輸入#
作為注釋,為什么它會提示...
? 我期待一個>>>
提示。
例如,
>>> # my comment
... x = 4
>>> x
4
>>> # my comment
... foo
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
NameError: name 'foo' is not defined
這是我對已發生事情的有根據的猜測 ; 我實際上沒有看過Python的REPL代碼。 如您所知,Python交互式shell在基於解析了前一行的內容而期望進一步輸入時使用...
提示符。
例如:
>>> if True:
...
...因為if ... :<newline>
必須根據Python的詞法結構后跟一個縮進塊。
請注意,除了空格之外,您可以使用空行來觸發相同的奇怪行為,例如:
>>> <space><enter>
...
根據Python的詞法規則,在大多數情況下,只包含空格的行不應被視為pass
語句或空塊,但應該將其視為根本不顯示 。 舉個例子(用|
來強調每行末尾沒有空格):
if False:|
|
print "Foo"|
# comment|
print "Bar"|
|
print "Baz"|
如果您運行此代碼,它將只打印Baz
。 前兩個print
語句被視為同一個塊的一部分, 盡管事實上在它們之前,之后和中間都有非縮進的空行或僅注釋行 。
基本上,當Python解釋器讀取空行或僅包含注釋的行時,它假裝它根本不讀取任何行。 交互式解釋器基本上遵循這種行為:它正在等待輸入,如果它沒有輸入,它會要求更多輸入。 因此...
繼續輸入提示。
似乎是一個完全空行的情況(在刪除EOL字符之后的line==''
)是特殊情況下的交互式解釋器,但是這個特殊的外殼沒有擴展到只包含注釋的行和/或空白。
這是提示,就像你輸入def foo () :
按回車鍵,它會輸出一個省略號(...)並自動為你提示一些提示。 這只是說它接受你在做多行的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.