Что такое "печать" в Python?

Я понимаю, что делает print, но из того, что "тип" - это элемент языка? Я думаю, что это функция, но почему это не удается?

>>> print print
SyntaxError: invalid syntax

Не print функция? Разве это не должно печатать что-то вроде этого?

>>> print print
<function print at ...>

Ответ 1

В 2.7 и ниже print - это утверждение. В python 3 функция print является функцией. Чтобы использовать функцию печати в Python 2.6 или 2.7, вы можете сделать

>>> from __future__ import print_function
>>> print(print)
<built-in function print>

Смотрите этот раздел из справочника языка Python, а также PEP 3105, почему он изменился.

Ответ 2

В Python 3 print() встроена функция (объект)

До этого print было утверждение. Демонстрация...

Python 2.x:

% pydoc2.6 print

The ``print`` statement
***********************

   print_stmt ::= "print" ([expression ("," expression)* [","]]
                  | ">>" expression [("," expression)+ [","]])

``print`` evaluates each expression in turn and writes the resulting
object to standard output (see below).  If an object is not a string,
it is first converted to a string using the rules for string
conversions.  The (resulting or original) string is then written.  A
space is written before each object is (converted and) written, unless
the output system believes it is positioned at the beginning of a
line.  This is the case (1) when no characters have yet been written
to standard output, (2) when the last character written to standard
output is a whitespace character except ``' '``, or (3) when the last
write operation on standard output was not a ``print`` statement. (In
some cases it may be functional to write an empty string to standard
output for this reason.)

-----8<-----

Python 3.x:

% pydoc3.1 print

Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file: a file-like object (stream); defaults to the current sys.stdout.
    sep:  string inserted between values, default a space.
    end:  string appended after the last value, default a newline.

Ответ 3

print - ошибка, исправленная в Python 3. В Python 3 это функция. В Python 1.x и 2.x это не функция, это особая форма типа if или while, но в отличие от этих двух она не является структурой управления.

Итак, я думаю, самая точная вещь, чтобы назвать это утверждение.

Ответ 4

В Python все утверждения (кроме присваивания) выражаются зарезервированными словами, не адресуемыми объектами. Вот почему вы не можете просто print print, и вы получаете SyntaxError для попытки. Это зарезервированное слово, а не объект.

Смутно, вы можете иметь переменную с именем print. Вы не можете обращаться к нему обычным способом, но вы можете setattr(locals(), 'print', somevalue), а затем print locals()['print'].

Другие зарезервированные слова, которые могут быть желательными в качестве имен переменных, но тем не менее verboten:

class
import
return
raise
except
try
pass
lambda

Ответ 5

В Python 2, print - это оператор, который представляет собой совершенно другую вещь из переменной или функции. Выражения не являются объектами Python, которые можно передать в type(); они просто часть самого языка, даже больше, чем встроенные функции. Например, вы можете сделать sum = 5 (даже если вы этого не сделаете), но вы не можете сделать print = 5 или if = 7, потому что print и if являются операторами.

В Python 3 оператор print был заменен функцией print(). Поэтому, если вы сделаете type(print), он вернет <class 'builtin_function_or_method'>.

БОНУС:

В Python 2.6+ вы можете поместить from __future__ import print_function вверху вашего script (как первую строку кода), а оператор print будет заменен функцией print().

>>> # Python 2
>>> from __future__ import print_function
>>> type(print)
<type 'builtin_function_or_method'>