"Які переваги використання ключового слова def як для генераторів, так і для функцій?"
Хоча вони механічно відрізняються, але на практиці, коли я їх використовую, вони часто фактично однакові для мене концептуально (я не думаю, що багато дзвонють range()проти xrange()).
З точки зору розуміння того, що ця функція відбувається швидко, я погоджуюся, що щось втрачається з використанням def, але все не повинно бути занадто затуманеним у межах функції.
Навіть неявна return Noneситуація може заплутати передбачувану поведінку функції після довгих умовних умов (як, наприклад, було return Noneзадумане як остаточне поведінку або недогляд у логіці). Але це лише мої переконання з цього приводу.
Я не вважаю, що мій аргумент є особливо переконливим, хоча я просто відкладусь до PEP 255 :
Проблема: Введіть ще одне нове ключове слово (скажімо, "gen" або "генератор") замість "def" або іншим чином змініть синтаксис, щоб відрізнити функції генератора від негенераторних функцій.
Con: На практиці (як ви про них думаєте) генератори - це
функції, але з поворотом, що вони відновлені. Механіка їх налаштування є порівняно незначною технічною проблемою, і введення нового ключового слова непомітно переосмислить механіку того, як запускаються генератори (життєво важлива, але крихітна частина життя генератора).
Про: Насправді (як ви про них думаєте) генератор-функції - це фактично фабричні функції, які виробляють генератор-ітератори як би за допомогою магії. У цьому відношенні вони докорінно відрізняються від негенераторних функцій, діючий більше як конструктор, ніж функція, тому повторне використання "def" в кращому випадку заплутане. Заява «урожайності», похована в тілі, недостатньо попереджає, що семантика настільки різна.
BDFL: "def" залишається. Жоден аргумент з обох сторін не є абсолютно переконливим, тому я порадився з інтуїцією мого дизайнера мови. Це говорить мені, що синтаксис, запропонований у PEP, є абсолютно правильним - не надто гарячим, не надто холодним. Але, як і Oracle у Delphi в грецькій міфології, воно не говорить мені чому, тому я не маю спростування аргументів проти синтаксису PEP. Найкраще, що я можу придумати (крім згоди з спростуванням ... вже зробленими), це "FUD". Якби це було частиною мови з першого дня, я дуже сумніваюся, що це зробило б сторінку Ендрю Кучлінга "Бородавки Пітона".