61 votes

Qu'est-ce que "print" en Python ?

Je comprends ce que print le fait, mais de quel "type" est cet élément de langage ? Je pense que c'est une fonction, mais pourquoi cela échoue-t-il ?

>>> print print
SyntaxError: invalid syntax

N'est-ce pas ? print une fonction ? Ne devrait-il pas imprimer quelque chose comme ça ?

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

63voto

wim Points 35274

Dans les versions 2.7 et suivantes, print est une déclaration. En python 3, print est une fonction. Pour utiliser la fonction print dans Python 2.6 ou 2.7, vous pouvez effectuer les opérations suivantes

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

Voir cet article de la référence du langage Python, ainsi que PEP 3105 pour expliquer pourquoi ça a changé.

35voto

Johnsyweb Points 45395

Dans Python 3, print() est une fonction intégrée (objet)

Avant ça, print était un déclaration . Démonstration...

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.

21voto

Omnifarious Points 25666

print est une erreur qui a été rectifiée dans Python 3. Dans Python 3, il s'agit d'une fonction. Dans Python 1.x et 2.x, il ne s'agit pas d'une fonction, mais d'une forme spéciale telle que if o while mais, contrairement à ces deux-là, il ne s'agit pas d'une structure de contrôle.

Donc, je suppose que la chose la plus précise à appeler est une déclaration.

7voto

wberry Points 6068

En Python, toutes les instructions (sauf l'affectation) sont exprimées avec des mots réservés, et non des objets adressables. C'est pourquoi vous ne pouvez pas simplement print print et vous obtenez un SyntaxError pour avoir essayé. C'est un mot réservé, pas un objet.

Confusément, vous puede ont une variable nommée print . Vous ne pouvez pas l'aborder de la manière habituelle, mais vous pouvez setattr(locals(), 'print', somevalue) et ensuite print locals()['print'] .

Autres mots réservés qui pourraient être souhaitables comme noms de variables mais qui sont néanmoins verboten :

class
import
return
raise
except
try
pass
lambda

1voto

Cyphase Points 741

Dans Python 2, print est une déclaration, ce qui n'est pas du tout la même chose qu'une variable ou une fonction. Les instructions ne sont pas des objets Python que l'on peut transmettre à type() Elles font partie du langage lui-même, plus encore que les fonctions intégrées. Par exemple, vous pouvez faire sum = 5 (même si vous ne devriez pas), mais vous ne pouvez pas faire print = 5 o if = 7 parce que print y if sont des déclarations.

Dans Python 3, la fonction print a été remplacée par l'instruction print() fonction. Ainsi, si vous faites type(print) il retournera <class 'builtin_function_or_method'> .

BONUS :

En Python 2.6+, vous pouvez mettre from __future__ import print_function en haut de votre script (en tant que première ligne de code), et l'option print sera remplacée par l'instruction print() fonction.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X