[英]Why do I not have to define the variable in a for loop using range(), but I do have to in a while loop in Python?
[英]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 loop
和while loop
問題,但大多數情況下都是OP代碼的案例研究。 我想要的是對Python結構本身以及執行for loop
或while 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.