为什么python打印最后一个键

时间:2020-07-01 08:18:31

标签: python loops dictionary iteration

我是python的新手,想知道结果。我只想了解它。 假设我有以下字典:

employee = {   
   'user_name': 'my name',   
   'password': 'hello',   
   'mobile phone': 123456789
}

for i in employee:    
    print(i)  

print(i)

这是结果:

user_name
password
​mobile phone​
mobile phone

如果您注意到(手机)已打印两次,则第二则来自上述代码中的第二次打印。

  1. 为什么会这样? 我预计会收到此错误:

NameError:名称'i'未定义

通常是python。

  1. 我要访问第一个或第二个密钥怎么办?可以像访问最后一个一样访问(而不写密钥名称或数字)吗?

2 个答案:

答案 0 :(得分:2)

这里的问题是范围:

Python的作用域行为由函数作用域定义:请在此处查看更多documentation

由于您正在运行main函数,因此i变量仍将在print语句中定义,因为它与for循环的作用域相同。

因此它将具有循环的最后一次迭代的值(即“手机”)

#global scope (main function)
 employee = {   
   'user_name': 'my name',   
   'password': 'hello',   
   'mobile phone': 123456789
}

for i in employee:   
    #you are still in the global scope here !!
    print(i)  

#and here too....so the "i" variable will have the value of your last iteration !
print(i)

更清楚地说,如果您要编写类似以下内容的话:


    #global scope (main function)
     employee = {   
       'user_name': 'my name',   
       'password': 'hello',   
       'mobile phone': 123456789
    }
    def show_employees() :
        for i in employee:   
            #you are in the "show_employees" function scope here !!
            print(i)  

    show_employees() # here you call the function

    #and here you will get your "expected error" because "i" is not defined in the global scope
    print(i)

输出:

文件“ main.py”,第18行,在 打印(i) NameError:名称“ i”未定义

答案 1 :(得分:1)

Python的范围与其他语言(例如C ++,C#或Java)有所不同。在这些语言中,声明

for (int i=0; i<10; i++) { ... }

i仅在循环范围内定义。 Python并非如此。 i仍然存在,并具有为其分配的最后一个值。

我要访问第一个或第二个密钥怎么办?可以像访问最后一个一样访问(而不写密钥名称或号码)吗?

不。除了使循环停在其他位置之外。