for循环顶部的项目与其中的项目不匹配,但仍会打印

时间:2018-12-13 02:52:01

标签: python python-3.x

我正在处理一些python代码,有些东西引起了我的注意,这对我来说没有意义。

我有这个列表:

fruits = ['apple', 'pear', 'banana', 'melon', 'grape', 'cherry', 'kiwi', 'persimmon', 'fruit1', 'fruit2','fruit3']


for kittens in fruits:
    print(fruit)

返回:

 fruit3
 fruit3
 fruit3
 fruit3
 fruit3
 fruit3
 fruit3
 fruit3
 fruit3
 fruit3
 fruit3

同时……

for fruit in fruits:
    print(num)

返回:

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-422-f672ba99a550> in <module>()
      1 for fruit in fruits:
----> 2     print(num)

NameError: name 'num' is not defined

我也不希望两者都能起作用,主要是因为我假设python的for循环语法如下:

for item in list:
    do something to item

但是我不确定为什么第一个示例中会以某种方式识别“水果”并返回列表中的最后一个项目。

这是怎么回事?

2 个答案:

答案 0 :(得分:3)

您发布的第一个循环开始执行时,已经定义了fruit。这似乎是因为上一个for循环使用了该变量,例如:

for fruit in fruits:
  # Do something

该循环结束后,fruit不会消失,并保持其上一个值不变

答案 1 :(得分:1)

在您的第一个示例中,fruit必须已在代码的其他位置定义且保持值为“ fruit3”。在第二个示例中,您从未定义num,因此尝试打印不存在的变量,即NameError