Dezvoltatorii care trec la programarea Python din alte limbaje precum C++ și Java sunt adesea confuzi de procesul de transmitere a argumentelor în Python. Modelul de date centrat pe obiect și tratarea atribuirii acestuia sunt cauzele confuziei la nivel fundamental.
În articol, vom discuta despre conceptul de cum se transmite o valoare prin referință în Python și încercați să înțelegeți exemple de referință în Python.
Cuprins
- Treci după valoare și Treci după referință în Python
- Variabila nu este obiectul
- Ce este trecerea prin referință în Python?
- Ce este Pass by Value în Python?
Treci după valoare și Treci după referință în Python
S-ar putea să vrei să permiți ceva după ce ai citit înainte, așa că pregătește-te. Modelul Python de trecere a argumentelor este nu trece prin valoare și nici nu trece prin referință, dar este Tresare prin referință obiect.
parseint java
În funcție de tipul de obiect pe care îl treceți în funcție, funcția se comportă diferit. Obiectele imuabile arată trecerea prin valoare, în timp ce obiectele mutabile arată trecerea prin referință.
Puteți verifica diferența dintre valoarea de trecere și referință de trecere în exemplul de mai jos:
Python3
def> call_by_value(x):> > x> => x> *> 2> > print> (> 'in function value updated to'> , x)> > return> > def> call_by_reference(> list> ):> > list> .append(> 'D'> )> > print> (> 'in function list updated to'> ,> list> )> > return> > my_list> => [> 'E'> ]> num> => 6> print> (> 'number before='> , num)> call_by_value(num)> print> (> 'after function num value='> , num)> print> (> 'list before'> ,my_list)> call_by_reference(my_list)> print> (> 'after function list is '> ,my_list)> |
inurl:.git/head
>
>
Ieșire
number before= 6 in function value updated to 12 after function num value= 6 list before ['E'] in function list updated to ['E', 'D'] after function list is ['E', 'D']>
În codul de mai sus, am arătat cum Python utilizează conceptul de obiect apel prin referință în programul său.
Trecem un număr întreg în funcția call_by_value(). Numerele întregi sunt obiecte imuabile, prin urmare, Python funcționează conform apelului după valoare, iar modificările efectuate în funcție nu sunt reflectate în afara funcției.
Apoi trecem lista la funcție prin referință. În funcția call_by_reference() trecem o listă care este un obiect mutabil. Python funcționează conform apelului prin referință în această funcție, iar modificările făcute în interiorul funcției pot fi văzute și în afara funcției.
Variabila nu este obiectul
Aici a este o variabilă care indică o listă care conține elementele X și Y. Dar a în sine nu este o listă. Considerați că a este o găleată care conține obiectul X și Y.
a = ['X', 'Y']>
Ce este trecerea prin referință în Python?
Trecerea prin referință înseamnă că trebuie să treceți funcția (referința) unei variabile, ceea ce înseamnă că variabila există deja în memorie.
Aici, variabila (găleata) este transmisă direct în funcție. Variabila acționează ca un pachet care vine cu conținutul său (obiectele).
În imaginea de cod de mai sus, atât listă, cât și my_list sunt aceeași variabilă container și, prin urmare, se referă la același obiect din memorie. Orice operație efectuată de funcție asupra variabilei sau obiectului va fi reflectată direct de apelantul funcției. De exemplu, funcția ar putea schimba complet conținutul variabilei și o poate îndrepta către un obiect complet diferit:
De asemenea, funcția poate reatribui conținutul variabilei cu același efect ca mai jos:
Pentru a rezuma, în trecere prin referință, funcția și apelantul folosesc aceeași variabilă și același obiect.
java do while
Treceți prin referință în exemplul Python
În acest exemplu, funcția modify_list preia o listă prin referință. Funcția adaugă șirul Geeks la lista transmisă din interiorul funcției și o tipărește. Deoarece listele sunt tipuri de date modificabile, modificările aduse listei în interiorul funcției sunt reflectate și în afara funcției, așa cum puteți vedea în rezultat.
Python3
def> modify_list(x):> > x.append(> 'Geeks'> )> > print> (> 'Inside function:'> , x)> > my_list> => [> 'Geeks'> ,> 'for'> ]> modify_list(my_list)> print> (> 'Outside function:'> , my_list)> |
>
>
lista de latex
Ieșire
Inside function: ['Geeks', 'for', 'Geeks'] Outside function: ['Geeks', 'for', 'Geeks']>
Ce este Pass by Value în Python?
În această abordare, transmitem o copie a cel variabilele reale în funcție ca parametru. Prin urmare, orice modificare a parametrilor din interiorul funcției nu se va reflecta în variabila reală.
Același lucru este valabil și pentru orice operație efectuată de funcție asupra variabilei sau a obiectului
Pentru a rezuma, copiile variabilelor și ale obiectelor în contextul apelantului funcției sunt complet izolate.
Treci după valoare în exemplul Python
Aici, vom transmite întregul x funcției care este un tip de date imuabil. Apoi actualizăm valoarea întregului din interiorul funcției și imprimăm valoarea actualizată. Modificările nu sunt văzute în afara funcției, deoarece numerele întregi sunt tipuri de date imuabile.
Python3
def> modify_integer(x):> > x> => x> +> 10> > print> (> 'Inside function:'> , x)> > x> => 5> print> (> 'Before function call:'> , x)> modify_integer(x)> print> (> 'After function call:'> , x)> |
java multithreading
>
>
Ieșire:
Before function call: 5 Inside function: 15 After function call: 5>
Programarea Python folosește conceptul de obiect de referință în timp ce transmite valori către funcții. Acest articol încearcă să vă arate conceptul de trecere prin valoare și trecere prin referință în Python. Am arătat diferite cazuri de trecere a valorilor cu exemple. Transmiterea de valori unei funcții în Python este diferită de alte limbaje de codare, dar cu acest tutorial, puteți înțelege cu ușurință conceptul și îl puteți implementa în munca dvs.
Citește și:
Este apelul Python prin referință sau apelul după valoare