這個問題在這里已經有了答案: Python for 回圈實際上是如何作業的? (1 個回答) 2 天前關閉。
例如:
#1
val = 5
for i in range(val) :
print(i)
當范圍用盡時,即最后一個值達到 python 如何知道 for in loop ends 。和其他語言一樣
#2
for(i=0;i<=5;i ){
print(i)
}
就像在這個實驗中一樣。當 i 的值大于 5 時,錯誤條件會導致回圈終止。
我嘗試閱讀 python 檔案并瀏覽谷歌但沒有令人滿意的答案。所以無法得到這張照片。
uj5u.com熱心網友回復:
所以這實際上是一個復雜的問題,但答案的非常粗略的版本是“編譯器/解釋器可以做它想做的事”。
它實際上并沒有運行您撰寫的人類可讀的文本——相反,它經歷了整個轉換管道。至少,詞法分析器將文本轉換為符號序列,然后決議器將其轉換為語言結構樹;然后可以將其編譯成機器代碼或由虛擬機解釋。
因此,python 解釋器創建了一個處理底層邏輯的結構。根據執行的優化(這些實際上是一個黑盒子,很難說出它們做了什么),這可能會產生邏輯上等同于類 Javafor回圈所產生的結構,或者它實際上可以創建數字資料結構(這就是range()函式自己做的事情)然后迭代它們。
編輯為這個構造甚至意味著什么提供更多基礎:
Python 迭代式回圈與 C 式i 回圈的定義方式不同。Python 回圈旨在迭代串列或其他序列資料結構的每個元素 - 例如,您可以說,for name in listOfNames然后name在以下塊中使用。
當您說 時for i in range(x),這是執行類似 C 風格回圈的 pythonic 方式。把它想象成
for(int i = 0; i < arr.length(); i ){
foo(arr[i[)
}
在該代碼塊中,您arr通過遍歷每個有效索引來訪問可索引序列的每個元素。你實際上并不關心i- 它只是達到目的的一種手段,一種確保你訪問每個元素的方法。
Python 假定這就是您要嘗試執行的操作:python 變體是
for elem in arr:
foo(elem)
大多數人會同意更簡單、更清晰和更優雅。
但是,有時您確實想要明確地逐個編號。要使用 python 樣式執行此操作,您需要創建一個串列,其中包含您要訪問的所有數字 - 這就是該range函式的作用。您通常會將其視為回圈陳述句的一部分,但它可以獨立存在 - 您可以說x = range(10), 并將x包含一個包含數字 0-9 的串列。
因此,在遞增數字以訪問串列的每個專案之前,現在您要獲取數字串列以獲得遞增的值。
“它是如何做到的”仍然是我在上面給出的解釋——決議器和解釋器知道如何創建實際創建這個序列并逐步執行它的細節邏輯,或者可能將其轉換為一些邏輯上等效的步驟。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/536594.html
下一篇:for回圈沒有正確迭代
