什么是Python中的“打印”?
我了解print
是做什么的,但是type是什么语言元素呢? 我认为这是一个function,但为什么这会失败?
>>> print print SyntaxError: invalid syntax
不print
function? 不应该打印这样的东西?
>>> print print <function print at ...>
在2.7和下, print
是一个声明。 在python 3中, print
是一个函数。 要使用Python 2.6或2.7中的打印function,你可以这样做
>>> from __future__ import print_function >>> print(print) <built-in function print>
请参阅Python语言参考中的这一部分 ,以及PEP 3105为什么更改。
在Python 3中, print()
是一个内置的函数(object)
在此之前, 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.
print
是在Python 3中纠正的错误。在Python 3中,它是一个函数。 在Python 1.x和2.x中,它不是一个函数,它是一个像if
或while
这样的特殊forms,但与这两者不同,它不是一个控制结构。
所以,我认为最准确的说法就是声明。
在Python中,所有语句(赋值除外)都用保留字表示,而不是可寻址对象。 这就是为什么你不能简单地print print
,你得到一个SyntaxError
尝试。 这是一个保留字,而不是一个对象。
令人困惑的是,你可以有一个名为print
的variables。 你不能以正常的方式解决它,但你可以setattr(locals(), 'print', somevalue)
然后print locals()['print']
。
其他保留字可能是可取的variables名称,但仍然是verboten:
class import return raise except try pass lambda
在Python 2中, print
是一个声明,它是一个与variables或函数完全不同的东西。 语句不是可以传递给type()
Python对象; 它们只是语言本身的一部分,甚至比内置函数还要多。 例如,你可以做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
脚本的顶部(作为第一行代码)将from __future__ import print_function
放入, print
语句将被print()
函数replace。
>>> # Python 2 >>> from __future__ import print_function >>> type(print) <type 'builtin_function_or_method'>