web-dev-qa-db-fra.com

Utilisation de print () (la version de la fonction) dans Python2.x

Je comprends la différence entre une instruction et une expression, et je comprends que Python3 a transformé print () en fonction.

Cependant, j'ai exécuté une instruction print () entourée de parenthèses sur divers interprètes Python2.x et elle s'est déroulée sans problème, je n'ai même pas eu à importer de module.

Ma question: le code suivant print("Hello SO!") est-il évalué comme une instruction ou une expression dans Python2.x?

48
rahmu

Considérez les expressions suivantes:

a = ("Hello SO!")
a = "Hello SO!"

Ils sont équivalents. De la même manière, avec une déclaration:

statement_keyword("foo")
statement_keyword "foo"

sont également équivalents.

Notez que si vous changez votre fonction d'impression en:

print("Hello","SO!")

Vous remarquerez une différence entre python 2 et python 3. Avec python 2, le (...,...) est intercepté en tant que Tuple puisque print est une instruction alors qu'en python 3, c'est un appel de fonction avec plusieurs arguments.

Par conséquent, pour répondre à la question posée, print est évalué comme une instruction dans python 2.x sauf si vous from __future__ import print_function (introduit dans python 2.6)

48
mgilson

print("Hello SO!") est évaluée comme l'instruction print ("Hello SO!"), où l'argument de l'instruction print est l'expression ("Hello SO!").

Cela peut faire une différence si vous imprimez plusieurs valeurs; par exemple, print("Hello", "world") imprimera le tuple à 2 éléments ('Hello', 'world') au lieu des deux chaînes "Hello" et "world".

Pour la compatibilité avec Python 3 utilisez from __future__ import print_function:

>>> print("Hello", "world")
('Hello', 'world')
>>> from __future__ import print_function
>>> print("Hello", "world")
Hello world
15
ecatmur

Il est toujours évalué comme une déclaration, vous imprimez simplement ("Hello SO!"), qui correspond simplement à "Hello SO!" car ce n'est pas un Tuple (comme mentionné par delnan).

2
Lanaru