Python: Почему «next ()» не называется «__next__ ()»

#python #naming-conventions

#python #соглашения об именовании

Вопрос:

Я использую Python 2.7.

По соглашению встроенные методы, такие как __iter__ , __init__ , __str__ и т.д., имеют двойное подчеркивание, чтобы идентифицировать их как таковые. Почему next() функция не имеет этого?

Он представлен наряду с другими встроенными функциями здесь: https://docs.python.org/2/library/functions.html и это не похоже на очень последовательное соглашение.

Ответ №1:

Встроенная функция не имеет __ , потому что ни один из встроенных модулей не имеет. Вы путаете встроенные модули (например str ) со специальными методами (например __str__ ).

Теперь специальный метод, вызываемый встроенным next , также вызывается next в Python 2.7, но это именование было признано случайным и изменено на __next__ в Python 3.

Комментарии:

1. Я вижу, это видно по изменению документации из docs.python.org/2/library/functions.html#next чтобы docs.python.org/3/library/functions.html#next

Ответ №2:

Это было в Python v3.x. И все еще существует для обратной совместимости. Из http://docs.pythonsprints.com/python3_porting/py-porting.html:

В Python 3 была введена функция next() для замены метода next() в объектах итератора. Вместо вызова метода на итераторе вызывается функция next() с итеративным объектом в качестве единственного параметра, который вызывает базовый __next__() метод.