Что такое "печать" в 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'>