我创建了一段代码来测试变量声明,
In [37]: price = {"apple": 3, "orange":1}
In [38]: for key in price:
...: fruit = key
In [39]: fruit
Out[39]: 'orange'
无需事先声明可变水果就可以工作,
尽管如此,
In [44]: cars = {}
In [45]: for key in cars:
...: car = key
In [46]: car
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-46-38f6ffefbd69> in <module>
----> 1 car
NameError: name 'car' is not defined
提示未定义汽车,
In [51]: for key in cars:
...: print(type(car), dir(car))
#it output nothing, key is None
但是None
可以分配给汽车
In [52]: car = None
In [53]: car
In [54]: i = car
In [55]: i
i is not defined
这两种情况有什么区别?
答案 0 :(得分:1)
price = {"apple": 3, "orange":1}
for key in price:
fruit = key
print(fruit)
这一遍迭代字典中的键。当您简单地遍历字典(例如for x in dictionary
)时,便会遍历其键。在循环中,您是将键分配给同一变量,而不是列表或任何其他数据结构,因此每次循环时都要替换。
cars = {}
for key in cars:
car = key
print(car)
在这里,for
循环不会迭代,因为字典是 empty ,所以Python无法识别car
是什么。
字典为空表示其中没有任何物品,甚至没有None
:
cars = {}
print(cars)
# {}
答案 1 :(得分:1)
区别在于变量初始化。例如...
car = None
...将“ car”变量设置为“无”。在概述的第一个示例中,在第46行上未定义“ car”,因为循环从不迭代且变量从未初始化(因为“ cars”是空字典)。
答案 2 :(得分:1)
您误解了它的工作原理。
您的词典是空的,甚至没有None
。迭代一个空的集合将被忽略。因此,for
循环根本不会执行。
Python是一种完整的OO语言,这意味着其中的每个元素都是一个对象。 None
也是如此。您可以将None
添加到集合中。它将显示一个None
。但就您而言,什么都没有。
答案 3 :(得分:1)
Cars
中没有任何键(没有双关语),因此语句car = key
将永远不会执行。
对于i = car
而言,当您声明i = car
时,我只是成为car指向的同一位置的引用,因此它返回与car相同的值也就不足为奇了