使用和不使用键()方法对字典键进行迭代之间的差异



Python中使用.keys()方法和不使用.keys()方法的字典中的for循环有什么区别?

thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
for i in thisdict:
print(i)
for i in thisdict.keys():
print(i)

有什么区别?

来自Python文档:

密钥((

 nbsp nbsp;返回字典关键字的新视图。请参见视图对象的文档。

并从上面的链接:

dict.keys((、dict.values((和dict.items((返回的对象是视图对象。它们提供了字典条目的动态视图,这意味着当字典发生更改时,视图会反映这些更改。

字典视图可以迭代以产生各自的数据,并支持成员资格测试〔…〕

如果没有keys((-方法,您只需在可用的键上使用迭代器(这可能是首选(,正如您在这里看到的(与第二个相同,但没有加载和调用keys方法(:

In [1]: import dis                                                              
In [2]: dis.dis("for i in {None: None}: print(i)")                              
1           0 LOAD_CONST               0 (None)
2 LOAD_CONST               0 (None)
4 BUILD_MAP                1
6 GET_ITER
>>    8 FOR_ITER                12 (to 22)
10 STORE_NAME               0 (i)
12 LOAD_NAME                1 (print)
14 LOAD_NAME                0 (i)
16 CALL_FUNCTION            1
18 POP_TOP
20 JUMP_ABSOLUTE            8
>>   22 LOAD_CONST               0 (None)
24 RETURN_VALUE
In [3]: dis.dis("for i in {None: None}.keys(): print(i)")                       
1           0 LOAD_CONST               0 (None)
2 LOAD_CONST               0 (None)
4 BUILD_MAP                1
6 LOAD_METHOD              0 (keys)
8 CALL_METHOD              0
10 GET_ITER
>>   12 FOR_ITER                12 (to 26)
14 STORE_NAME               1 (i)
16 LOAD_NAME                2 (print)
18 LOAD_NAME                1 (i)
20 CALL_FUNCTION            1
22 POP_TOP
24 JUMP_ABSOLUTE           12
>>   26 LOAD_CONST               0 (None)
28 RETURN_VALUE

如果您只想迭代字典的键,则不需要调用keys((-方法,该方法可以为您提供字典条目的动态视图。

keys((方法返回一个类似集合的对象,这对于计算与其他字典的交集等非常有用。在您的情况下,由于您只是在迭代,因此根本没有实际差异。

最新更新