簡體   English   中英

Python-為什么我們必須在while循環中初始化標識符而不在for循環中初始化標識符?

[英]Python - Why do we have to initialise the identifier in while loop but not in for loop?

我以前學習過Visual Basic,現在我正在學習Python。 我意識到在Python中,我們不必在for loop初始化標識符的值,但是在while loop卻是另一種方式。 對我來說,這看起來很陌生,就像在Visual Basic中一樣,我們必須在兩個循環中都將變量聲明為標識符。

例如,在Python Wiki中,

x = 1
while True:
    print "To infinity and beyond! We're getting close, on %d now!" % (x)
    x += 1

運行完美。 但是,在我評論x = 1 ,它會產生一個錯誤。 為什么它不能像for loop那樣運行for loop其中x從0開始?

另外,例如,即使我們為for loop分配標識符的值,

num = 10
for num in range(5):
    print num
print num

循環將覆蓋分配的值。 為什么會這樣呢?

我知道這里有很多for loopwhile loop問題,但大多數情況下都是OP代碼的案例研究。 我想要的是對Python結構本身以及執行for loopwhile loop時語言的一些基本操作的更一般的解釋。 同樣,在這種情況下,我指的是Python 2.7.11。 如果您能指出3.5.1在結構上的差異,將不勝感激。 非常感謝。

x = 1
while True:
    print "To infinity and beyond! We're getting close, on %d now!" % (x)
    x += 1

如果注釋x = 1 ,則此行將引發錯誤:

x += 1

因為這意味着x = x + 1 ,因為未定義x,所以會引發錯誤(python不知道加1的值)

num = 10
for num in range(5):
    print num
print num

您在循環內和循環外都對兩個變量使用了相同的名稱,這就是循環內使用另一個num值的原因。

優良作法是在循環變量內使用變量的另一個名稱,因為您確實不需要在循環外使用相同的for循環變量

因此,您可以編寫如下內容:

num = 10
for i in range(5):
    # play with num and i variables
    num += i * 2
 print num

因為“范圍”告訴您什么是值的連續性,並將num定義為局部值。 您看不到任何文字,但是過程更加復雜。

一個示例可以是Java語言。 在for循環中,您可以看到循環迭代的值的初始值,可以看到最大值和增量。 for(var num = 0; var <5; var + = 1)在python中,您看到range(5)中的num。 while循環更為明確。

num是用於全局變量和局部變量的名稱這一事實可能會引起混淆。 實際上,您在循環中看到的num是另一個變量。

由於Python的for循環更像是C#的foreach或JS的for of
而VB的for更像Pascal的for

我將使用Pascal而不是VB,因為我更了解它。

帕斯卡for

var i: byte;
begin
    for i := 0 to 5 do
    begin
        writeln(i);
    end;
end.

每個Pascal的for循環都可以使用range輕松地在Python中復制:

for i in range(5):
    print(i)

但是,Python的for更多的東西:

for c in "HelloWorld!":
    print(c)

如果不直接處理索引,則無法在Pascal中復制它。

Pascal和VB的for可以與索引一起使用-它們從某個索引迭代到另一個索引,而Python的for循環可以與可迭代對象(數組,字符串,文件,生成器等等)一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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