-
Sujet
-
Salutations,
quand on apprend le python 3, on est confronté forcément à un moment à un vestige du passé : le python 2. Ici on va donc parler de la commande print.
Tout d’abord, un programme hello world :
python 2:
print « hello world »
python 3:
print(« hello world »)
on voit que les deux ne fonctionnent pas vraiment pareil puisqu’il faut mettre des parenthèses en python 3… et pour cause : en python 3, print est une fonction. Mais ca n’est pas le cas en python 2.
#python 2: >>> def f(): print "hello world" ... >>> import dis >>> dis.dis(f) 1 0 LOAD_CONST 1 ('hello world') 3 PRINT_ITEM 4 PRINT_NEWLINE 5 LOAD_CONST 0 (None) 8 RETURN_VALUE >>> #python 3: >>> def f(): print("hello world") >>> import dis >>> dis.dis(f) 2 0 LOAD_GLOBAL 0 (print) 2 LOAD_CONST 1 ('hello world') 4 CALL_FUNCTION 1 6 POP_TOP 8 LOAD_CONST 0 (None) 10 RETURN_VALUE >>>
On voit qu’en python 3, print est appelé de la même manière que n’importe quelle fonction en python : on charge la fonction, on charge les arguments, on appelle la fonction.
En python 2, on voit que c’est une instruction de la machine virtuelle python : PRINT_ITEM. Juste après, un PRINT_NEWLINE est effectué pour… sauter une ligne (thanks captain obvious).
Ces différences expliquent aussi pourquoi pour éviter de sauter une ligne, en python 2, la syntaxe sera :
print « hello world »,
et en python 3:
print(« hello world », end= » »)
Mais, ca n’est pas tout ! En effet, la fonction print de python 3 peut prendre bien d’autres arguments que end.. et je vous invite à les découvrir :
>>> help(print) Help on built-in function print in module builtins: print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) 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. flush: whether to forcibly flush the stream. #on est bien en python 3
- Vous devez être connecté pour répondre à ce sujet.