Care este diferența dintre print și print() în python 2.7 (Programare, Python, Python 2.7)

Coada lui Godzilla a intrebat.

Sunt începător în Python.

Am rulat următorul cod pe python 2.7 și văd rezultate diferite când folosesc print sau print(). Care este diferența dintre aceste două funcții?Am citit și alte întrebări, de exemplu, această întrebare, dar nu am găsit răspunsul.

class Rectangle:
    def __init__(self, w, h):
        self.width = w
        self.height = h
    def __str__(self):
        return "(The width is: {0}, and the height is: {1})".format(self.width, self.height)

box = Rectangle(100, 200)
print ("box: ", box)
print "box: ", box

Rezultatul este:

('box: ', <__main__.Rectangle instance at 0x0293BDC8>)
box:  (The width is: 100, and the height is: 200)

Comentarii

  • Dacă învățați Python, vă sugerez să folosiți Python 3, care are mai puține comportamente surprinzătoare –  > Por Andrea Corbellini.
5 răspunsuri
RemcoGerlich

În Python 2.7 (și înainte), print este un declarație care primește un număr de argumente. Aceasta tipărește argumentele cu un spațiu între ele.

Astfel, dacă faceți

print "box:", box

Se tipărește mai întâi șirul de caractere „box:”, apoi un spațiu, apoi orice altceva. box se tipărește ca fiind (rezultatul instrucțiunii __str__ funcției).

Dacă faceți

print ("box:", box)

Ați dat unul argument, un tuple format din două elemente („box:” și obiectul box).

Tuplurile se tipăresc ca reprezentare a acestora (utilizate mai ales pentru depanare), așa că se apelează la funcția __repr__ a elementelor sale, mai degrabă decât a lor __str__ (ceea ce ar trebui să dea un mesaj ușor de utilizat).

Aceasta este diferența pe care o vedeți: (The width is: 100, and the height is: 200) este rezultatul apelului boxei dvs. __str__, , dar <__main__.Rectangle instance at 0x0293BDC8> este al său __repr__.

În Python 3 și versiunile ulterioare, print() este o funcție normală ca oricare alta (deci print(2, 3) tipărește "2 3" și print 2, 3 este o eroare de sintaxă). Dacă doriți să aveți asta în Python 2.7, puneți

from __future__ import print_function

în partea de sus a fișierului dvs. sursă, pentru a-l face puțin mai pregătit pentru prezent.

Serge Ballesta

Aceasta în principal în completarea altor răspunsuri.

Puteți vedea în scripturile Python 2 print (var) atunci când utilizarea normală ar fi print var.

Se folosește faptul că (var) este doar o expresie între paranteze în Python 2 cu este pur și simplu văzută ca fiind var deci print(var) și print var se comportă exact la fel în Python 2 – dar funcționează doar la tipărirea o singură variabilă

Punctul interesant este că atunci când luați în considerare o migrare la Python 3, print(var) (aici apelul către funcția print) este deja sintaxa corectă.

TL/DR: print(var) în Python 2 este doar un truc pentru a ușura migrarea la Python3 folosind faptul că (var) este doar o expresie – forma de tuple ar fi (var,)

chuwy

În primul exemplu, tipăriți tuple, dar nu apelați funcția print. deci următoarele sunt identice:

a = ("box: ", box)
print a

Cu alte cuvinte, în primul exemplu ați creat un tuplu și l-ați imprimat. Rezultate diferite, pentru tipuri de date diferite.

Se presupune că nu ar trebui să existe o diferență semnificativă între o funcție și o declarație pentru cazul dumneavoastră, dar pentru viitor vă sfătuiesc să folosiți întotdeauna funcția (print()). Cu toate acestea, dacă sunteți în continuare interesat de diferențe (care nu au legătură cu cazul dumneavoastră), cu funcția print puteți specifica separatorul, sfârșitul și locul de ieșire, așa cum este descris în documentația.

Comentarii

  • Mulțumesc, dar de ce aceste două ieșiri diferite? –  > Por Coada lui Godzilla.
  • Primul provine de la repr(box), iar a doua de la str(box). Atunci când tipăriți un tuple, repr(...) versiunea este utilizată pentru toate elementele. –  > Por viraptor.
Trop Freshloïc

În python 2.7 print() este mai rapid decât print. Iată un test făcut cu Repl.it consolă Python online :

import time

start_time = time.time()
print "lol"
end_time = time.time()
print(end_time - start_time)

start_time_2 = time.time()
print ("lol")
end_time_2 = time.time()
print(end_time_2 - start_time_2)

print((end_time_2 - start_time_2) > (end_time - start_time))

Python 2.7.10
[GCC 4.8.2] on linux
lol
7.08103179932e-05
lol
1.00135803223e-05
False

Comentarii

  • Caching-ul nu ar afecta oricum acest experiment? –  > Por Samarth S.
  • Bună observație, dar nu cred că da ! Curios, am încercat același test cu imprimare fără paranteze pe Repl.it și imprimare cu paranteze pe tutorialspoint.com/execute_python_online.php. Ca rezultat, ultimul este tot mai rapid. –  > Por Trop Freshloïc.
Chanpreet Chhabra

În Python 2.7: print nu este o funcție, este un cuvânt cheie și acționează ca o instrucțiune specială.

Înainte de aceasta, trebuie să învățăm mai multe despre tuple și expr în python2.

Dacă scriem (‘hello’): este considerată o expresie, nu un tupluplu, poate fi considerată un tuplu doar dacă se introduce „,”.

De ex:

print("hello")
>>> hello
a=("hello")
>>>'hello'
a=("hello", "world")
>>>('hello', "world")
print("hello", "world")
>>> ('hello', 'world')

astfel, în python2.7, când folosim instrucțiunea print cu paranteze, aceasta este considerată în continuare o instrucțiune, nu o funcție python, iar valorile cu paranteze sunt tratate ca fiind un tuplu sau o expresie, în timp ce în python 3, print nu mai este o instrucțiune, ci este considerată o funcție.

Pentru a utiliza funcția print din python 3 în python2, utilizați următoarea instrucțiune de import,

from __future__ import print_function