Почему оператор импорта Python не использует скобки? - PullRequest
3 голосов
/ 23 сентября 2019

Я понимаю концепцию ключевых слов как зарезервированных слов в Python, которые не должны использоваться в качестве идентификаторов.Что меня смущает, так это то, что помимо этой общности ключевые слова, по-моему, используются по-разному.Например, операторы import и del, похоже, работают как функции, которые принимают только один параметр, тогда как другие ключевые слова, такие как if и while, используются для составных операторов.Мой вопрос заключается в том, что если определенные ключевые слова (например, импорт) используются так же, как функция, то почему синтаксис отличается (т.е. не используются круглые скобки).Печать, используемая в качестве функции, в отличие от предыдущего использования в качестве ключевого слова, для меня гораздо более интуитивно понятна.Это может сбить с толку нового ученика, чье первое утверждение обычно является импортным, синтаксис которого, по-видимому, аналогичен неправильному глаголу в человеческих языках.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Ты слишком много думаешь.Есть функции, которые могут импортировать, но оператор import упрощает реализацию (для нас, пользователей).Подумайте, если бы это была (только) функция, вам бы пришлось заключить строку в кавычки .. import('foo.py').Python2 print на самом деле не сильно экономил при нажатии клавиш.

Если вам нужна функциональность, она доступна, рассмотрите первый абзац в Справочнике по языку Python.

5.Система импорта

Код Python в одном модуле получает доступ к коду в другом модуле в процессе его импорта.Оператор import является наиболее распространенным способом вызова импортирующего оборудования, но это не единственный способ.Такие функции, как importlib.import_module () и встроенная функция __import __ (), также можно использовать для вызова механизма импорта.

1 голос
/ 24 сентября 2019

Импорт связывает имена, а удаление связывает имена, поэтому это должны быть операторы.

Простая причина того, что import и del не могут быть функциями, заключается в том, что функция не может добавлять / удалять из вызывающегоПространство имен.Тело функции на самом деле не имеет доступа к пространству имен вызывающей стороны (за исключением некоторых хаков, зависящих от реализации).

Обратите внимание, что из-за своей семантики del не может быть функцией: del a удаляет a из текущего пространства имен.Функция не может удалить что-либо из вызывающего пространства имен

- Гвидо ван Россум, 1 августа 1994

...