对for循环感到困惑Python3

时间:2019-01-26 22:36:02

标签: python python-3.x

我一直在通过观看YouTube上的for循环教程以及阅读python和google的资料来解决这个问题。但是还有一件事我不理解。

我不了解for循环中单词for之后的规则。有人可以看看我的示例代码并解释一下到底发生了什么,以便一次给出不同的输出和错误。

预先感谢您的任何建议:)

>>> def my_range(start, end, step):
    while start <= end:
        yield start
        start += step

>>> for x in my_range(1, 2, 0.5):
           print(x)

1
1.5
2.0
>>> for i in my_range(1, 2, 0.5):
           print(i)

1
1.5
2.0
>>> for blabla in my_range(1, 2, 0.5):
           print (blabla)

1
1.5
2.0
>>> for d in my_range(1, 2, 0.5):
           print(d)

1
1.5
2.0

# Why does the three below this comment only print 2.0?

>>> for i in my_range(1, 2, 0.5):
           print(x)

2.0
2.0
2.0
>>> for x in my_range(1, 2, 0.5):
           print(i)

2.0
2.0
2.0
>>> for blabla in my_range(1, 2, 0.5):
           print(x)

2.0
2.0
2.0

# How come I cannot print(t) here? What are the rules for what to put inside those brackets?

>>> for blabla in my_range(1, 2, 0.5):
           print(t)

Traceback (most recent call last):
  File "<pyshell#70>", line 2, in <module>
    print(t)
NameError: name 't' is not defined

# Now in the following two tests I am suddenly allowed to use t, and even print it? Why? And what is the reason for the outputs being different again?

>>> for t in my_range(1, 2, 0.5):
           print(blabla)

1
1
1
>>> for x in my_range(1, 2, 0.5):
           print(t)

2.0
2.0
2.0
>>> 

3 个答案:

答案 0 :(得分:2)

在循环中的for后面加上的单词是变量名。在每次迭代中,您要循环遍历的迭代器(in之后的部分)将一个值分配给变量名称。

因此,给定此循环for x in range(10),将依次为变量x09之间的每个数字分配变量。这是一个普通的赋值,就像x = 0一样,并且变量在循环结束后保留​​最后一个值。

在测试循环中看到奇怪内容的原因是,有时您正在循环并分配一个变量,但打印出另一个变量。如果另一个变量未定义,则会出现异常。否则,您将反复获得相同的值(无论是最后一次分配的值,也许是先前的循环)。

答案 1 :(得分:0)

来自w3Schools Python For Loops

  

range()函数默认将序列加1,但是可以通过添加第三个参数range(2,30,3)来指定增量值:

对于第一个红色示例:您定义了变量x

  1. x的值为1。1是<2,因此该函数将输出1。
  2. x的值增加0.5。 1.5 <2,因此该函数将输出x = 1.5的值
  3. x的值增加0.5。所以x现在是2。2 = 2所以它输出2
  4. x的值增加0.5 2.5> 2,因此不会运行打印功能,并且循环结束。

每个红色的示例都是相同的,您只需定义新变量i,blabla,d。 在第一个绿色示例中,您遍历i并打印变量x。变量x始终具有相同的值(2),直到您对其进行更改或取消设置。

在蓝色示例中,您尝试打印未声明的变量t。之后,您用for t in my_range(1, 2, 0.5) :定义了t变量,根据上一个绿色示例,blabla的值为2。

答案 2 :(得分:0)

您定义这些变量。你给他们起名字。

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

将打印:

0
1
2
3
4

您已将i定义为您要遍历的范围或列表之外的任何内容。

尝试一下。

band_list = ['Led Zeppelin', 'Beatles', 'The Who']
for band in band_list:
    print(band)

您将获得:

Led Zeppelin
Beatles
The Who

如果再次打印band,该变量将被设置为该循环中的最后一件事。 (每次循环执行时,它都会被覆盖。因此,最后一个不会被覆盖。)

print(band)

您将获得:

The Who

将for循环视为从一件事转到另一件事。如果定义变量id blahblahband,则它代表第一件事,然后是第二件事,然后是第三件事,依此类推。列表或范围“ The Who”或“ 2.0”中的最后一项没有任何替换,因为后面没有任何内容。