簡體   English   中英

為什么python解釋器會提示......注釋“#”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM