Logička i fizička linija

6.4.1 Logička i fizička linija 

Problem: U čemu je razlika? Zar nije istina da ako ja pričan Pythonski da me Python razume?
Odgovor: Da. On te razume. Ovde je reč o pisanju. Kao što je tebi „normalno“ da čitaš sa leva na desno, odozgo prema dole, tako i ja moram da poštujem ta pravila, ako želim da ti napišem nešto što ćeš razumeti, iako „pričamo“ istim jezikom. 
Fizička linija je ono što vidiš prilikom pisanja programa. Na primer:
input('Unesi nešto') # Tražimo ulaz od korisnika
Vidimo da smo MI u jednoj fizičkoj liniji dali komandu Pythonu i napisali komentar.
Logička linija je ono što Python vidi kao jednu naredbu. Python uvek pretpostavlja da će svaka fizička linija u fajlu odgovarati logičnoj liniji u tom istom fajlu. 
U primeru iznad logička linije je input('Unesi nešto!'). Ako bi smo to prikazali na jednoj liniji (gledajući sa NAŠE perspektive kako je vidimo u editoru), onda to takođe odgovara i fizičkoj liniji. 
Zbog toga, pametno je da koristimo jednu naredbu po liniji, što će takođe da učini naš program lakše čitljivim nekom drugom programeru, ili nama samima. Jer ako stavimo više naredbi....
>>> print('ja') input('ti') 
  File "", line 1 
    print('ja') input('ti') 
                    ^ 
SyntaxError: invalid syntax 
>>> 
.... to nam baš i neće proći.
(u ovom primeru sam stavio DVA logička reda (dve funkcije input i print) u JEDNU fizičku liniju.)
Ali, ako smo baš zapeli i želimo da napišemo više od jednog logičkog reda na jednoj fizičkoj liniji, onda moramo da "kažemo" šta smo uradili Python-u (da se jadnik ne pogubi, kao malo pre), koristeći oznaku tačka-zarez (;),  koja će da pokaže Pythonu gde je kraj neke logičke linije i početak sledeće. Na primer: 
>>> i = 10 
>>> print(i) 
10 
>>> 
se može napisati kao i :
>>> i = 10; 
>>> print(i); 
10 
>>> 
ili kao :
>>> i = 10; print(i); 
10 
>>> 
ili čak:
>>> i = 10; print(i) 
10 
>>> 
Međutim, preporučljivo je da pišemo maksimalno jednu logičku liniju na jednu fizičku liniju. Retko kada treba da koristiš tačku-zarez (verovatno samo u interaktivnom promptu). U stvari, retko ćete ikada i videti tačku-zarez u nekom Python programu.
Ali, šta se dešava kada želimo jednu LOGIČKU liniju da napišemo u više FIZIČKIH linija? 
Ajd da probamo u promptu:
>>> s = "Ko me tero 
  File "", line 1 
    s = "Ko me tero 
                  ^ 
SyntaxError: EOL while scanning string literal 
>>> 
Nisam ni stigao da otkucam nastavak.... Šteta što ne može....
Misliš?
Postoje situacije u kojima bi ova ideja bila stvarno korisna, pa su programeri davno smislili rešenje i za nju: ako imaš neku prilično dugačku liniju u programu, možeš je razbiti na više fizičkih linija koristeći oznaku obrnute kose crte (\). Ovaj način rada se naziva eksplicitno spajanje linija: 
>>> s = "Ovo je jedna linija.\ 
... Ali ovo, ne - nije druga, već ista!" 
>>> print(s) 
Ovo je jedna linija.Ali ovo, ne - nije druga, već ista! 
>>> 
Slično tome:
>>> print\ 
... (i) 
10 
>>> 
nam je dalo isti izlaz kao i print(i) ranije.
Eh, sad. Budući da je ovo „razbijanje“ logičke linije ne samo naporno za Python, već i za tebe, koji čitaš i pišeš u njemu, savet je – NE RADI TO! (poznat princip: ako nešto MOŽE, ne znači da tako i TREBA)
Pogotovo što nam Python daje i lakše načine....
Ako je slučaj da logička linija ima početnu zagradu, početnu uglastu zagradu ([) ili početnu vitičastu zagradu ({), mi možemo da „izbegnemo“ korišćenje obrnute kose crte, i da je „razbijemo“ na više fizičkih linija bez neke bojazni, iz razloga što će Python tražiti i krajnju oznaku (zatvorenu zagradu). To se zove implicitno spajanje linija. Ako nije najjasnije ajde da vidimo to u akciji (i još „akcije“ će biti kada budemo pisali programe koristeći liste i rečnike, koje ćemo kasnije učiti):
>>> print('Zdravo', 
... 'Pero', 
... 'kako si?' 
... ) 
Zdravo Pero kako si? 
>>> 
Ali, obrati pažnju:
>>> print('Zdravo 
  File "", line 1 
    print('Zdravo 
                ^ 
SyntaxError: EOL while scanning string literal 
>>> 
Ako nismo završili rečenicu, ipak je izbačena greška! Zašto? Rekli smo da je „rečenica“ neki „objekat“, a taj „objekat“ MORA biti u JEDNOJ FIZIČKOJ LINIJI! Ovako smo prekinuli Python u pola posla, pa se zato i malko naljutio i „izvikao“ na nas.
I još jedna stvar o kojoj ti treba da razmisliš. Rekli smo da kada Python naiđe na znak komentara odbaci tu liniju i nastavlja sa radom od sledeće. Pitanje za tebe je: na koju liniju se misli, i kako je to moguće ako Python sve posmatra kroz logičku liniju?
>>> print( 
... # Pozdrav 
... 'Zdravo' 
... , 
... # Ime 
... 'Pero', 
... # Poruka 
... 'Kako si?') 
Zdravo Pero Kako si? 
>>> 
Razmisli o ovome, igraj se u interaktivnom promptu, samo vežbom možeš steći kondiciju za trčanje maratona, i postati dobar košarkaš... Bzzzzzz... Ups, da. Ovo je tutorijal o programiranju... Samo zameni košarkaš sa programer....
Upomoć! Nešto me ne sluša.....
         Pokvario sam.....

6.4 Komentari i
još malo
Indeks 6.4.2 Uvlačenje

Primjedbe

Popularno

Kako televizija štetno utiče na Vaše zdravlje finansije?

Da li je TV kviz Slagalica "prevara"?

Tu je novi Qt creator 4.4.0!

Kada prijatelji odlaze

Microsoft objavio - nova verzija Windowsa stiže...

Sitnije promene na blogu...

Opet su se pojavili lažni kuponi brenda "IDEA" na društvenim mrežama

Poslednji pozdrav izgubljenom vremenu

Sistemska greška

Fake poet