什么是Python中的“打印”?

我了解print是做什么的,但是type是什么语言元素呢? 我认为这是一个function,但为什么这会失败?

 >>> print print SyntaxError: invalid syntax 

printfunction? 不应该打印这样的东西?

 >>> 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中,它不是一个函数,它是一个像ifwhile这样的特殊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因为printif是语句。

在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'>