#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__()
метод.