Home » Articole » Articole » Calculatoare » Programare » Python » Valori returnate în operațiile cu șiruri în Python: diva

Valori returnate în operațiile cu șiruri în Python: diva

postat în: Python 0

Următorul rezultat este destul de surprinzător:

diva = "Ariana Grande"
diva.upper()
print("I just love {}!".format(diva))
▌I just love Ariana Grande!

Stai…nu a funcționat partea „diva.upper()”? A fost omisă? Am greșit cumva?

Și mai confuz este faptul că introducerea apelului „.upper()” direct în instrucțiunea print pare să funcționeze…dar doar temporar. Accesarea comenzii diva un moment mai târziu pare să o readucă la vechea sa valoare:

diva = "Ariana Grande"
print("I just love {}!".format(diva.upper()))
print("When does the next {} album come out?".format(diva))
▌I just love ARIANA GRANDE!
▌When does the next Ariana Grande album come out?

Cauza principală a acesteia și practic a tuturor tipăririlor derutante în Python poate fi descoperită consultând imaginea memoriei. Iată cum începe atunci când definim pentru prima dată diva:

  Nume de variabile și date atomice Date agregate
diva ”Ariana Grande”  

 

Acum să presupunem că facem asta:

new_var_name = diva.upper()

 

Rezultatul este această imagine:

  Nume de variabile și date atomice Date agregate
diva ”Ariana Grande”  
new_var_name ”ARIANA GRANDE”  

Și acum vedem motivul pentru toate acestea. Conținutul variabilei diva în sine este neschimbat de apelul metodei. Apelul „.upper()” pe diva nu a modificat valoarea șirului în diva: a returnat doar o copie modificată a șirului.

Gândește-te așa: dacă te-aș întreba „cum te numești în Pig Latin?” și mi-ai spune, asta nu ți-ar schimba intrinsec numele real în Pig Latin. Pur și simplu mi-ai „returna” versiunea Pig Latin ca răspuns la interogarea mea.

Ai putea argumenta că acest comportament al lui Python este stupid sau, în cel mai bun caz, înșelător, iar eu sunt de fapt înclinat să fiu de acord cu tine în acest caz. Dar, desigur, cei care cer nu pot fi selectivi: cineva și-a făcut timp să scrie metoda .upper() pentru noi, așa că, dacă vrem să profităm de ea, trebuie să folosim manualul său de utilizare. Și adevărul este că multe (poate chiar majoritatea) funcțiilor/metodelor Python – inclusiv multe dintre cele de la Pandas, pe care le vom folosi pe scară largă – sunt codificate în acest stil: nu modifică efectiv variabilele care le sunt transmise, ci returnează o copie modificată pe care trebuie să o stochezi.

Acum, având în vedere că acesta este cazul, ar fi cel puțin frumos dacă ți-aș putea spune că a funcționat întotdeauna, în mod constant, așa. Atunci ai putea pur și simplu să accepți și să te obișnuiești cu el. Din păcate, nu. Există funcții/metode (multe) care modifică un parametru sau variabila la care au fost apelate. Așadar, uneori, abordarea noastră naivă de a apela metoda și de a aștepta ca variabila să se schimbe este exact ceea ce trebuie să facem. Concluzia este: nu există nicio modalitate de a ști fără să ți se spună sau fără să citești documentația. Vom învăța cum să facem ultima variantă într-un capitol viitor. Deocamdată, vă spun pur și simplu, spre evidență, că metodele din Figura 5.2 sunt toate de tipul „returnează o copie modificată” și vă anunț că ambele stiluri de metode există din abundență.

Încă câteva lucruri. În primul rând, ca un corolar al celor de mai sus, realizați că următoarea instrucțiune (pe o linie separată) este oficial 100% inutilă:

name_of_pet.lstrip()

Ați apelat metoda .lstrip() și apoi… nu ați făcut nimic cu valoarea returnată. Dacă nu o stocați într-o variabilă – sau dacă faceți ceva cu ea imediat, cum ar fi să o afișați înainte să vă alunece dintre degete – este pierdută irevocabil: nici măcar nu apare în imaginea de memorie, deoarece nu există un nume de variabilă. (Gândiți-vă la asta.)

În al doilea rând, observați următorul model, care este foarte des utilizat:

name_of_pet = name_of_pet.lstrip()

Aici, apelăm .lstrip() asupra variabilei name_of_pet și apoi stocăm valoarea returnată înapoi în variabila name_of_pet. S-ar putea să fie ceea ce ați crezut că s-ar fi întâmplat în primul rând – autorul liniei anterioare, inutile, probabil dorea ca spațiile inițiale ale variabilei în sine să fie eliminate permanent. Simplul apel al funcției .lstrip() asupra variabilei nu va face acest lucru, dar punerea valorii revizuite înapoi în aceeași casetă albastră din diagrama de memorie va face acest lucru.

Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 1: Introduction to Data Science, v. 1.1. Copyright © 2021 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2025 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 1

Big Data asset - Taxonomy
Procesarea Big Data

Datele trebuie procesate cu instrumente avansate de colectare și analiză, pe baza unor algoritmi prestabiliți, pentru a putea obține informații relevante. Algoritmii trebuie să ia în considerare și aspecte invizibile pentru percepțiile directe. Big Data în procesele guvernamentale cresc eficiența … Citeşte mai mult

Nu a fost votat 0.00 lei Adaugă în coș
Intelligence Info, Volumul 3, Numărul 2, Iunie 2024
Intelligence Info, Volumul 3, Numărul 2, Iunie 2024 – Rezumate

Revista Intelligence Info este o publicație trimestrială din domeniile intelligence, geopolitică și securitate, și domenii conexe de studiu și practică. Cuprins: EDITORIAL / EDITORIAL Nicolae SFETCU The Global Electronic Warfare Challenge in 2024: The Major Players Provocarea globală de război … Citeşte mai mult

Nu a fost votat 0.00 lei Adaugă în coș
Steagurile Uniunii Europene – Carte de colorat pentru copii
Steagurile Uniunii Europene – Carte de colorat pentru copii

Steagurile Uniunii Europene și statele membre ale Uniunii Europene: Austria, Belgia, Bulgaria, Croația, Cipru, Cehia, Danemarca, Estonia, Finlanda, Franța, Germania, Grecia, Ungaria, Irlanda, Italia, Letonia, Lituania, Luxemburg , Malta, Țările de Jos, Polonia, Portugalia, România, Slovacia, Slovenia, Spania, Suedia, și … Citeşte mai mult

Nu a fost votat 0.00 lei Adaugă în coș


Descoperă mai multe la MultiMedia

Abonează-te ca să primești ultimele articole prin email.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *