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