Почему print не является функцией в python? - PullRequest
13 голосов
/ 11 декабря 2010

Почему print является ключевым словом в python, а не функцией?

Ответы [ 6 ]

12 голосов
/ 11 декабря 2010

Потому что Гвидо решил, что совершил ошибку. :)

С тех пор это исправлено: попробуйте Python 3, который посвящает раздел своих замечаний к выпуску описанию изменения функции.

Для всей истории см. PEP 3105 и несколько ссылок, приведенных в разделе «Ссылки»!

9 голосов
/ 11 декабря 2010

print был утверждением в Python, потому что это было утверждение в ABC, главное вдохновение для Python (хотя там оно называлось WRITE). Это, в свою очередь, вероятно, содержало утверждение вместо функции, поскольку это был язык обучения и как таковой, вдохновленный базовым языком. Python, с другой стороны, оказался не просто языком обучения (хотя и для этого тоже хорошо).

Однако, в настоящее время print является функцией. Да, в Python 2 вы также можете сделать

from __future__ import print_function

и все готово. Работает с Python 2.6.

2 голосов
/ 11 декабря 2010

Теперь это функция в Python 3.

1 голос
/ 11 декабря 2010

Ответ, который опирается на то, что я ценю в выражении print, но не обязательно из официальной истории Python ...

Python в некоторой степени является скриптовым языком . Сейчас существует множество определений «языка сценариев», но я буду использовать здесь: язык, предназначенный для эффективного использования коротких или интерактивных программ. Такие языки, как правило, допускают однострочные программы без лишних шаблонов; упростить ввод с клавиатуры (например, избегая чрезмерной пунктуации); и предоставить встроенный синтаксис для общих задач (удобство за счет возможной чистоты). В случае с Python печать значения является очень распространенной вещью, особенно в интерактивном режиме. Требование print быть функцией кажется здесь излишне неудобным. Существует значительно меньший риск возникновения ошибок благодаря специальному синтаксису, который правильно работает в 99% случаев.

1 голос
/ 11 декабря 2010

Оператор print в Python 2.x имеет некоторый специальный синтаксис, который не будет доступен для обычной функции. Например, вы можете использовать завершающий ,, чтобы подавить вывод последней новой строки, или вы можете использовать >>, чтобы перенаправить вывод в файл. Но все это не было достаточно убедительным даже для самого Гвидо ван Россума, чтобы сохранить это утверждение - он превратил print в функцию в Python 3.x.

0 голосов
/ 12 мая 2015

Я добавлю свои мысли по этому поводу:

В Python 2.x print не является ошибочным утверждением, или потому что печать в stdout является такой простой вещью, которую нужно сделать.Все остальное настолько продумано или имеет, по крайней мере, понятные причины, что ошибка этого порядка показалась бы странной.Если бы общение с stdout было бы настолько простым, общение с stdin должно быть таким же важным, но input() - это функция.

Если вы посмотрите на список Зарезервированные ключевые слова и список операторов , которые не являются выражениями, явно выделяется print, что является еще одним намеком на то, что должны быть очень конкретные причины.

Я думаю print должен был быть выражением, а не выражением, чтобы избежать нарушения безопасности в input().Помните, что input() в Python2 оценивает все, что пользователь вводит в stdin.Если пользователь, набравший print a и a, содержит список всех паролей, это будет катастрофически катастрофически.

Очевидно, способность input() оценивать выражения считалась более важной, чем print.обычная встроенная функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...