首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么“无赋值”提示未定义该变量。

为什么“无赋值”提示未定义该变量。
EN

Stack Overflow用户
提问于 2018-10-23 03:50:49
回答 4查看 57关注 0票数 0

我创建了一个代码片段来测试变量声明,

代码语言:javascript
运行
复制
In [37]: price = {"apple": 3, "orange":1}                                                                         

In [38]: for key in price: 
    ...:     fruit = key                                                                                          
In [39]: fruit                                                                                                    
Out[39]: 'orange'

它不需要努力提前宣布可变的果实,

尽管如此,

代码语言:javascript
运行
复制
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

它提示的汽车没有定义,

代码语言:javascript
运行
复制
In [51]: for key in cars: 
    ...:     print(type(car), dir(car))  
#it output nothing, key is None

但是None可以分配给car

代码语言:javascript
运行
复制
In [52]: car = None                                                                                               
In [53]: car                                                                                                     
In [54]: i = car                                                                                                  
In [55]: i  

i is not defined不是报告错误,

这两个案子有什么区别?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-23 03:56:23

代码语言:javascript
运行
复制
price = {"apple": 3, "orange":1}

for key in price:
    fruit = key

print(fruit)

这个循环遍历字典中的键。当您简单地通过字典(如for x in dictionary)执行循环时,您将遍历它的键。在循环中,您将键分配给相同的变量,而不是列表或任何其他数据结构,因此每次在循环中替换。

代码语言:javascript
运行
复制
cars = {}     

for key in cars: 
    car = key

print(car)

在这里,for循环不会迭代,因为字典是空的,所以Python无法识别car是什么。

字典空意味着里面没有项目,甚至连None都没有。

代码语言:javascript
运行
复制
cars = {}                              
print(cars)
# {}
票数 1
EN

Stack Overflow用户

发布于 2018-10-23 03:58:42

不同之处在于变量初始化。例如..。

代码语言:javascript
运行
复制
car = None

...sets的“汽车”变量为零。在第一个示例中,没有定义第46行中的"car“,因为循环从不迭代,变量从未初始化(因为"cars”是一个空的dict)。

票数 1
EN

Stack Overflow用户

发布于 2018-10-23 04:00:04

你误解了它的工作原理。

你有一个空头,里面甚至没有None。迭代一个空集合就被忽略了。因此,for循环根本不执行。

Python是一个完整的OO语言,这意味着它中的每个元素都是一个对象。None也是。可以将None添加到集合中。它将向您展示有一个None。但在你的情况下,什么都没有。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52940894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档