[英]Why doesn't Python give any error when quotes around a string do not match?
我最近開始學習 Python,我不明白為什么 Python 會這樣:
>>> "OK" 'OK' >>> """OK""" 'OK' >>> "not Ok' File "<stdin>", line 1 "not Ok' ^ SyntaxError: EOL while scanning string literal >>> "not OK""" 'not OK'
由於引號的數量不匹配,為什么最后一條語句不會出錯?
最后的"""
不被識別為三重引號,而是單個"
(以關閉當前字符串文字) 后跟一個空字符串""
; 兩個並列的字符串文字被連接起來。 通過在關閉和打開之間放置一個空格,可以更容易地識別相同的行為"
。
>>> "not OK" ""
'not OK'
"not OK"""
Python 將其解釋為"not OK"+""
如果你給"not Ok""ay"
,你會得到輸出為'not Okay'
你會認為 " 或 ' 之間沒有區別,但實際上,Python 使用貪婪的方法來接受輸入。
一旦 Python 看到匹配的引用,語句就結束了。
這就是為什么你可以寫類似"'s" ""
。 在字符串中有一個'
但因為你在一個字符串中,python 不會引發錯誤。 然后在那之后,有一個"
后跟"
但這是一個不同的(空)字符串。
如果您執行類似"s'
那么 Python 會在 if 運行您的命令之前尋找下一個"
。
Python 使用堆棧實現來檢測引號的打開和關閉。 如果您知道堆棧是什么,那么它是一個數據結構,其中最后一個元素將首先被刪除。
假設你的字符串是A = "''"
它的作用是,對於第一次遇到的每一個單引號或雙引號,它都會將它添加到堆棧中,並且每一秒,它都會從堆棧中移除,除非它當然, """
將被解析為單個
在我們的示例中, A = "''"
迭代,對於前 2 個元素,它們將被添加到堆棧中,對於接下來的 2 個元素,它們將被刪除。
所以引號將被匹配,當且僅當,堆棧中的元素數量最終必須為零
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.