我创建了一个代码片段来测试变量声明,
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可以分配给car
In [52]: car = None
In [53]: car
In [54]: i = car
In [55]: i i is not defined不是报告错误,
这两个案子有什么区别?
发布于 2018-10-23 03:56:23
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循环不会迭代,因为字典是空的,所以Python无法识别car是什么。
字典空意味着里面没有项目,甚至连None都没有。
cars = {}
print(cars)
# {}发布于 2018-10-23 03:58:42
不同之处在于变量初始化。例如..。
car = None...sets的“汽车”变量为零。在第一个示例中,没有定义第46行中的"car“,因为循环从不迭代,变量从未初始化(因为"cars”是一个空的dict)。
发布于 2018-10-23 04:00:04
你误解了它的工作原理。
你有一个空头,里面甚至没有None。迭代一个空集合就被忽略了。因此,for循环根本不执行。
Python是一个完整的OO语言,这意味着它中的每个元素都是一个对象。None也是。可以将None添加到集合中。它将向您展示有一个None。但在你的情况下,什么都没有。
https://stackoverflow.com/questions/52940894
复制相似问题