Python, как работает протокол итерации для типа Dict в старой и новой версии?

В книге вычитал что в старых версиях Python чтобы пройтись по ключам словаря, необходимо было сделать следующее:

for key in D.keys():
   print(key)

В новой версии:

for key in D:
   print(key)

В книге написано о том, что тип Dict в новой версии стал итерируемым объектом (т.е. он имеет методы iter для создания объекта итератора, и next для прохода по нему. Но мне не ясно как цикл for работает со старой версией, если в новой версии он (цикл) вызывает метод iter() непосредственно у объекта словаря, то в старой версии у "объекта ключей словаря?!" D.keys() ??

т.е. D.__iter__() == D.keys().__iter__() ??

// объект dict стал итерируемым объектом в Python 2.X (до того как он им стал приходилось вызывать метод keys объекта dict)


Ответы (0 шт):