Sari la conținutul principal

Funcții în Python: Cum să apelezi și să scrii funcții

Descoperă cum să scrii funcții Python reutilizabile și eficiente. Stăpânește parametrii, instrucțiunile return și subiecte avansate precum funcțiile lambda. Organizează-ți mai bine codul cu main() și alte bune practici.
Actualizat 18 mai 2026  · 14 min. citire
banner competențe Python pentru carieră cu datacamp

Funcțiile sunt o parte esențială a limbajului de programare Python: e posibil să fi întâlnit deja și să fi folosit unele dintre multele funcții grozave incluse în Python sau care vin odată cu ecosistemul său de biblioteci. Totuși, ca data scientist, vei avea constant nevoie să scrii propriile funcții ca să rezolvi problemele pe care ți le pune datele.

Acest tutorial folosește sintaxa Python 3. Toate exemplele funcționează pe Python 3.10+ și au fost actualizate pentru a reflecta convențiile moderne (f-string-uri, adnotări de tip, parametri doar poziționali și doar cuvânt-cheie). Versiunea stabilă curentă este Python 3.14.

Pentru a rula ușor singur tot codul exemplu din acest tutorial, poți crea gratuit un caiet DataLab care are Python preinstalat și conține toate mostrele de cod. Pentru mai mult exercițiu la scrierea funcțiilor în Python, aruncă o privire la acest exercițiu practic pe DataCamp sau încearcă cursul nostru Python Data Science Toolbox!

Funcții în Python

Folosești funcțiile în programare pentru a grupa un set de instrucțiuni pe care vrei să le reutilizezi sau care, datorită complexității lor, e mai bine să fie izolate într-un subprogram și apelate la nevoie. Asta înseamnă că o funcție este un fragment de cod scris pentru a îndeplini o sarcină specificată. Pentru a realiza acea sarcină, funcția poate avea nevoie sau nu de mai multe intrări. După ce sarcina este îndeplinită, funcția poate sau nu să returneze una sau mai multe valori.

Există trei tipuri de funcții în Python:

  • Funcții încorporate, cum ar fi help() pentru a cere ajutor, min() pentru a obține valoarea minimă, print() pentru a afișa un obiect în terminal, … Poți găsi o prezentare cu mai multe dintre aceste funcții aici.

  • Funcții definite de utilizator (UDF), adică funcții pe care utilizatorii le creează ca să îi ajute; și

  • Funcții anonime, numite și funcții lambda pentru că nu sunt declarate cu cuvântul-cheie standard def.

Funcții vs. metode

O metodă se referă la o funcție care face parte dintr-o clasă. O accesezi cu o instanță sau un obiect al clasei. O funcție nu are această restricție: se referă pur și simplu la o funcție independentă. Asta înseamnă că toate metodele sunt funcții, dar nu toate funcțiile sunt metode.

Ia în considerare acest exemplu, în care mai întâi definești o funcție plus() și apoi o clasă Summation cu o metodă sum():

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGEgZnVuY3Rpb24gYHBsdXMoKWBcbmRlZiBwbHVzKGEsYik6XG4gIHJldHVybiBhICsgYlxuICBcbiMgQ3JlYXRlIGEgYFN1bW1hdGlvbmAgY2xhc3NcbmNsYXNzIFN1bW1hdGlvbihvYmplY3QpOlxuICBkZWYgc3VtKHNlbGYsIGEsIGIpOlxuICAgIHNlbGYuY29udGVudHMgPSBhICsgYlxuICAgIHJldHVybiBzZWxmLmNvbnRlbnRzICJ9

Dacă acum vrei să apelezi metoda sum() care face parte din clasa Summation, mai întâi trebuie să definești o instanță sau un obiect al acelei clase. Așadar, hai să definim un astfel de obiect:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiZGVmIHBsdXMoYSxiKTpcbiAgcmV0dXJuIGEgKyBiXG4gIFxuY2xhc3MgU3VtbWF0aW9uKG9iamVjdCk6XG4gIGRlZiBzdW0oc2VsZiwgYSwgYik6XG4gICAgc2VsZi5jb250ZW50cyA9IGEgKyBiXG4gICAgcmV0dXJuIHNlbGYuY29udGVudHMgIiwic2FtcGxlIjoiIyBJbnN0YW50aWF0ZSBgU3VtbWF0aW9uYCBjbGFzcyB0byBjYWxsIGBzdW0oKWBcbnN1bUluc3RhbmNlID0gU3VtbWF0aW9uKClcbnN1bUluc3RhbmNlLnN1bSgxLDIpIn0=

Amintește-ți că această instanțiere nu este necesară atunci când vrei să apelezi funcția plus()! Ai putea executa plus(1,2) în blocul de cod DataCamp Light fără nicio problemă!

Parametri vs. argumente

Parametrii sunt numele folosite când definești o funcție sau o metodă și în care vor fi mapate argumentele. Cu alte cuvinte, argumentele sunt lucrurile care sunt furnizate oricărui apel de funcție sau metodă, în timp ce codul funcției sau metodei se referă la argumente prin numele parametrilor.

Analizează următorul exemplu și uită-te înapoi la blocul DataCamp Light de mai sus: transmiți două argumente metodei sum() a clasei Summation, deși anterior ai definit trei parametri, și anume, self, a și b.

Ce s-a întâmplat cu self?

Primul argument al fiecărei metode de clasă este întotdeauna o referință la instanța curentă a clasei, care în acest caz este Summation. Prin convenție, acest argument se numește self.

Toate acestea înseamnă că nu transmiți referința la self în acest caz, deoarece self este numele parametrului pentru un argument transmis implicit, care se referă la instanța prin care este invocată o metodă. Este inserat implicit în lista de argumente.

Cum să definești o funcție: Funcții definite de utilizator (UDF)

Cei patru pași pentru a defini o funcție în Python sunt următorii:

  1. Folosește cuvântul-cheie def pentru a declara funcția și apoi numele funcției.

  2. Adaugă parametri la funcție: ar trebui să fie între parantezele funcției. Încheie linia cu două puncte.

  3. Adaugă instrucțiunile pe care funcția ar trebui să le execute.

  4. Încheie funcția cu o instrucțiune return dacă funcția ar trebui să producă un rezultat. Fără instrucțiunea return, funcția ta va returna un obiect None.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImRlZiBoZWxsbygpOlxuICBwcmludChcIkhlbGxvIFdvcmxkXCIpIFxuICByZXR1cm4gIn0=

Desigur, funcțiile tale vor deveni mai complexe pe parcurs: poți adăuga bucle for, control al fluxului, … și altele pentru a o rafina:

def hello():
    name = input("Enter your name: ")
    if name:
        print(f"Hello {name}")
    else:
        print("Hello World")

hello()

În funcția de mai sus, îi ceri utilizatorului să introducă un nume. Dacă nu este furnizat niciun nume, funcția va afișa „Hello World”. În caz contrar, utilizatorul va primi un răspuns „Hello” personalizat.

Amintește-ți și că poți defini unul sau mai mulți parametri de funcție pentru UDF-ul tău. Vei învăța mai multe despre asta când ajungi la secțiunea Argumente de funcție. În plus, poți sau nu să returnezi una sau mai multe valori ca rezultat al funcției tale.

Instrucțiunea return

Observă că, din moment ce afișezi ceva în UDF-ul tău hello(), nu trebuie neapărat să îl și returnezi. Nu va exista nicio diferență între funcția de mai sus și aceasta:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImRlZiBoZWxsb19ub3JldHVybigpOlxuICBwcmludChcIkhlbGxvIFdvcmxkXCIpICJ9

Totuși, dacă vrei să continui să lucrezi cu rezultatul funcției tale și să încerci unele operații pe acesta, va trebui să folosești instrucțiunea return pentru a returna efectiv o valoare, cum ar fi un șir de caractere, un întreg, …. Ia în considerare următorul scenariu, în care hello() returnează un șir "hello", în timp ce funcția hello_noreturn() returnează None:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImRlZiBoZWxsbygpOlxuICBwcmludChcIkhlbGxvIFdvcmxkXCIpIFxuICByZXR1cm4oXCJoZWxsb1wiKVxuXG5kZWYgaGVsbG9fbm9yZXR1cm4oKTpcbiAgcHJpbnQoXCJIZWxsbyBXb3JsZFwiKVxuICBcbiMgTXVsdGlwbHkgdGhlIG91dHB1dCBvZiBgaGVsbG8oKWAgd2l0aCAyIFxuaGVsbG8oKSAqIDJcblxuIyAoVHJ5IHRvKSBtdWx0aXBseSB0aGUgb3V0cHV0IG9mIGBoZWxsb19ub3JldHVybigpYCB3aXRoIDIgXG5oZWxsb19ub3JldHVybigpICogMiJ9

A doua funcție îți dă o eroare pentru că nu poți efectua nicio operație cu un None. Vei primi un TypeError care spune că nu poți face operația de înmulțire pentru NoneType (None care este rezultatul lui hello_noreturn()) și int (2).

Sfat: funcțiile ies imediat când întâlnesc o instrucțiune return, chiar dacă asta înseamnă că nu vor returna nicio valoare:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImRlZiBydW4oKTpcbiAgZm9yIHggaW4gcmFuZ2UoMTApOlxuICAgICBpZiB4ID09IDI6XG4gICAgICAgcmV0dXJuXG4gIHByaW50KFwiUnVuIVwiKVxuICBcbnJ1bigpIn0=

Un alt lucru care merită menționat când lucrezi cu instrucțiunea return este faptul că o poți folosi pentru a returna mai multe valori. Pentru asta, folosești tuple.

Amintește-ți că această structură de date este foarte similară cu cea a unei liste: poate conține mai multe valori. Totuși, tuplurile sunt imuabile, ceea ce înseamnă că nu poți modifica niciun element stocat în ele! Le construiești cu ajutorul parantezelor rotunde (). Poți despacheta tupluri în mai multe variabile cu ajutorul virgulei și al operatorului de atribuire.

Consultă următorul exemplu ca să înțelegi cum funcția ta poate returna mai multe valori:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGBwbHVzKClgXG5kZWYgcGx1cyhhLGIpOlxuICBzdW0gPSBhICsgYlxuICByZXR1cm4gKHN1bSwgYSlcblxuIyBDYWxsIGBwbHVzKClgIGFuZCB1bnBhY2sgdmFyaWFibGVzIFxuc3VtLCBhID0gcGx1cygzLDQpXG5cbiMgUHJpbnQgYHN1bSgpYFxucHJpbnQoc3VtKSJ9

Notă că instrucțiunea return return sum, a ar avea același rezultat ca return (sum, a): prima de fapt împachetează sum și a într-un tuplu „sub capotă”!

Cum să apelezi o funcție

În secțiunile anterioare ai văzut deja multe exemple despre cum poți apela o funcție. A apela o funcție înseamnă să execuți funcția pe care ai definit-o — fie direct din promptul Python, fie prin intermediul altei funcții (așa cum vei vedea în secțiunea „Funcții imbricate”).

Apelează funcția ta nou definită hello() pur și simplu executând hello(), exact ca în blocul DataCamp Light de mai jos:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiZGVmIGhlbGxvKCk6XG4gIHByaW50KFwiSGVsbG8gV29ybGRcIikgXG4gIHJldHVybiAiLCJzYW1wbGUiOiJoZWxsbygpIn0=

Cum să adaugi docstring-uri unei funcții Python

Un alt aspect esențial al scrierii funcțiilor în Python: docstring-urile. Docstring-urile descriu ce face funcția ta, cum ar fi calculele pe care le execută sau valorile pe care le returnează. Aceste descrieri servesc drept documentație pentru funcția ta, astfel încât oricine îți citește docstring-ul funcției să înțeleagă ce face funcția, fără a fi nevoit să urmărească tot codul din definiție.

Docstring-urile funcțiilor sunt plasate pe linia imediat următoare antetului funcției și sunt puse între ghilimele triple. Un Docstring potrivit pentru funcția ta hello() este „Afișează „Hello World””.

def hello() -> None:
    """Prints "Hello World"."""
    print("Hello World")

Notă că docstring-urile pot fi mai ample decât cel dat aici ca exemplu. Dacă vrei să studiezi docstring-urile mai în detaliu, cel mai bine ar fi să verifici câteva depozitoare Github ale unor biblioteci Python precum scikit-learn sau pandas, unde vei găsi o mulțime de exemple!

Adnotări de tip (type hints)

Înrudite îndeaproape cu docstring-urile — și aproape la fel de comune în codul Python modern — sunt adnotările de tip. Din Python 3.5, poți adnota parametrii funcției și valoarea de retur cu tipurile pe care te aștepți să le aibă. Iată cel mai simplu exemplu posibil:

def plus(a: int, b: int) -> int:
    return a + b

: int după fiecare parametru spune „acesta ar trebui să fie un întreg”, iar -> int după paranteze spune „această funcție returnează un întreg”. Python însuși nu aplică aceste adnotări la rulare — poți totuși să transmiți un șir la plus() și Python nu se va plânge până nu se rupe ceva. Dar unelte precum mypy, pyright și verificatoarele de tip integrate în editori precum VS Code și PyCharm folosesc aceste indicii pentru a prinde erori înainte să rulezi codul.

Pentru tipuri mai complexe, poți folosi genericele încorporate direct (Python 3.9+) sau să imporți din modulul typing:

def greet(names: list[str]) -> None:
    for name in names:
        print(f"Hello {name}")

def find_user(user_id: int) -> dict | None:
    # returns the user dict, or None if not found
    ...
Adnotările de tip sunt opționale, dar sunt considerate bună practică pentru orice funcție pe care plănuiești să o reutilizezi, să o partajezi sau la care să revii peste șase luni. Ele funcționează ca documentație verificabilă de către mașină — IDE-ul tău va completa automat pe baza lor, va prinde greșeli de tastare și te va avertiza când transmiți tipul greșit.

Argumentele funcțiilor în Python

Mai devreme ai învățat despre diferența dintre parametri și argumente. Pe scurt, argumentele sunt lucrurile care sunt date oricărui apel de funcție sau metodă, în timp ce codul funcției sau metodei se referă la argumente prin numele parametrilor. Există patru tipuri de argumente pe care UDF-urile Python le pot primi:

  • Argumente implicite (default)
  • Argumente obligatorii
  • Argumente cuvânt-cheie
  • Număr variabil de argumente

Argumente implicite

Argumentele implicite sunt acelea care iau o valoare prestabilită dacă nu este transmisă nicio valoare a argumentului în timpul apelului funcției. Poți atribui această valoare implicită cu operatorul de atribuire =, exact ca în exemplul următor:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGBwbHVzKClgIGZ1bmN0aW9uXG5kZWYgcGx1cyhhLGIgPSAyKTpcbiAgcmV0dXJuIGEgKyBiXG4gIFxuIyBDYWxsIGBwbHVzKClgIHdpdGggb25seSBgYWAgcGFyYW1ldGVyXG5wbHVzKGE9MSlcblxuIyBDYWxsIGBwbHVzKClgIHdpdGggYGFgIGFuZCBgYmAgcGFyYW1ldGVyc1xucGx1cyhhPTEsIGI9MykifQ==

Argumente obligatorii

După cum sugerează și numele, argumentele obligatorii ale unui UDF sunt acelea care trebuie să fie prezente. Aceste argumente trebuie transmise în timpul apelului funcției și în exact ordinea corectă, exact ca în exemplul următor:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGBwbHVzKClgIHdpdGggcmVxdWlyZWQgYXJndW1lbnRzXG5kZWYgcGx1cyhhLGIpOlxuICByZXR1cm4gYSArIGIifQ==

Ai nevoie de argumente care să corespundă parametrilor a și b ca să apelezi funcția fără să primești erori. Dacă inversezi a și b, rezultatul nu va fi diferit, dar ar putea fi dacă schimbi plus() astfel:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGBwbHVzKClgIHdpdGggcmVxdWlyZWQgYXJndW1lbnRzXG5kZWYgcGx1cyhhLGIpOlxuICByZXR1cm4gYS9iIn0=

Argumente cuvânt-cheie

Dacă vrei să te asiguri că apelezi toți parametrii în ordinea corectă, poți folosi argumentele cuvânt-cheie în apelul funcției. Le folosești pentru a identifica argumentele după numele parametrilor. Să luăm exemplul de mai sus pentru a clarifica puțin:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGBwbHVzKClgIGZ1bmN0aW9uXG5kZWYgcGx1cyhhLGIpOlxuICByZXR1cm4gYSArIGJcbiAgXG4jIENhbGwgYHBsdXMoKWAgZnVuY3Rpb24gd2l0aCBwYXJhbWV0ZXJzIFxucGx1cygyLDMpXG5cbiMgQ2FsbCBgcGx1cygpYCBmdW5jdGlvbiB3aXRoIGtleXdvcmQgYXJndW1lbnRzXG5wbHVzKGE9MSwgYj0yKSJ9

Observă că folosind argumentele cuvânt-cheie, poți de asemenea să inversezi ordinea parametrilor și tot să obții același rezultat când execuți funcția:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGBwbHVzKClgIGZ1bmN0aW9uXG5kZWYgcGx1cyhhLGIpOlxuICByZXR1cm4gYSArIGJcbiAgXG4jIENhbGwgYHBsdXMoKWAgZnVuY3Rpb24gd2l0aCBrZXl3b3JkIGFyZ3VtZW50c1xucGx1cyhiPTIsIGE9MSkifQ==

Număr variabil de argumente

În cazurile în care nu știi numărul exact de argumente pe care vrei să le transmiți unei funcții, poți folosi următoarea sintaxă cu *args:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgRGVmaW5lIGBwbHVzKClgIGZ1bmN0aW9uIHRvIGFjY2VwdCBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHNcbmRlZiBwbHVzKCphcmdzKTpcbiAgcmV0dXJuIHN1bShhcmdzKVxuXG4jIENhbGN1bGF0ZSB0aGUgc3VtXG5wbHVzKDEsNCw1KSJ9

Asteriscul (*) este plasat înaintea numelui variabilei care reține valorile tuturor argumentelor variabile fără cuvânt-cheie. Observă aici că ai fi putut la fel de bine să transmiți *varint, *var_int_args sau orice alt nume funcției plus().

Sfat: încearcă să înlocuiești *args cu un alt nume care include asteriscul. Vei vedea că codul de mai sus continuă să funcționeze!

Vezi că funcția de mai sus folosește funcția încorporată Python sum() pentru a aduna toate argumentele transmise lui plus().

Variabile globale vs. locale

În general, variabilele definite în interiorul corpului unei funcții au un domeniu local, iar cele definite în afară au un domeniu global. Asta înseamnă că variabilele locale sunt definite în interiorul unui bloc de funcție și pot fi accesate doar în acea funcție, în timp ce variabilele globale pot fi accesate de toate funcțiile care ar putea fi în scriptul tău:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgR2xvYmFsIHZhcmlhYmxlIGBpbml0YFxuaW5pdCA9IDFcblxuIyBEZWZpbmUgYHBsdXMoKWAgZnVuY3Rpb24gdG8gYWNjZXB0IGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50c1xuZGVmIHBsdXMoKmFyZ3MpOlxuICAjIExvY2FsIHZhcmlhYmxlIGBzdW0oKWBcbiAgdG90YWwgPSAwXG4gIGZvciBpIG4gYXJnczoXG4gICAgdG90YWwgKz0gaVxuICByZXR1cm4gdG90YWxcbiAgXG4jIEFjY2VzcyB0aGUgZ2xvYmFsIHZhcmlhYmxlXG5wcmludChcInRoaXMgaXMgdGhlIGluaXRpYWxpemVkIHZhbHVlIFwiICsgc3RyKGluaXQpKVxuXG4jIChUcnkgdG8pIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVcbnByaW50KFwidGhpcyBpcyB0aGUgc3VtIFwiICsgc3RyKHRvdGFsKSkifQ==

Vei vedea că vei primi un NameError care spune că name 'total' is not defined când încerci să afișezi variabila locală total care a fost definită în interiorul corpului funcției. Variabila init, pe de altă parte, poate fi afișată fără probleme.

Parametri doar poziționali și doar cuvânt-cheie

Din Python 3.8, poți controla mai bine cum trebuie transmise argumentele folosind doi marcatori speciali în semnătura funcției: / și *. Orice se află înainte de / poate fi transmis doar pozițional; orice se află după * poate fi transmis doar prin cuvânt-cheie.

def greet(name, /, greeting="Hello", *, punctuation="!"):
    print(f"{greeting} {name}{punctuation}")

 Iată cum se vede asta la apel:

greet("Alice")                          # works
greet("Alice", greeting="Hi")           # works
greet("Alice", "Hi", punctuation="?")   # works

greet(name="Alice")                     # TypeError: name is positional-only
greet("Alice", "Hi", "?")               # TypeError: punctuation is keyword-only

De ce ai vrea asta? Două motive principale.

În primul rând, parametrii doar poziționali îți permit să le schimbi numele mai târziu fără a strica codul cuiva — din moment ce nimeni nu are voie să folosească numele parametrului ca și cuvânt-cheie, ești liber să îl schimbi.

În al doilea rând, parametrii doar cuvânt-cheie îi obligă pe apelanți să fie expliciți cu privire la ce transmit, ceea ce face apelurile mai lizibile când ai mai multe opțiuni sau setări opționale.

Pe scurt, sunt o modalitate curată de a impune intenția.

Funcții anonime în Python

Funcțiile anonime sunt numite și funcții lambda în Python pentru că, în loc să le declari cu cuvântul-cheie standard def, folosești cuvântul-cheie lambda.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImRvdWJsZSA9IGxhbWJkYSB4OiB4KjJcblxuZG91YmxlKDUpIn0=

În blocul DataCamp Light de mai sus, lambda x: x*2 este funcția anonimă sau lambda. x este argumentul, iar x*2 este expresia sau instrucțiunea care este evaluată și returnată. Ce este special la această funcție este că nu are nume, spre deosebire de exemplele pe care le-ai văzut în prima parte a acestui tutorial despre funcții. Dacă ar trebui să scrii funcția de mai sus ca UDF, rezultatul ar fi următorul:

def double(x):
  return x*2

Hai să analizăm un alt exemplu de funcție lambda în care lucrezi cu două argumente:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgYHN1bSgpYCBsYW1iZGEgZnVuY3Rpb25cbnN1bSA9IGxhbWJkYSB4LCB5OiB4ICsgeTtcblxuIyBDYWxsIHRoZSBgc3VtKClgIGFub255bW91cyBmdW5jdGlvblxuc3VtKDQsNSlcblxuIyBcIlRyYW5zbGF0ZVwiIHRvIGEgVURGXG5kZWYgc3VtKHgsIHkpOlxuICByZXR1cm4geCt5In0=

Folosești funcții anonime când ai nevoie de o funcție fără nume pentru o perioadă scurtă de timp și care este creată la rulare. Contexte specifice în care asta ar fi relevant sunt când lucrezi cu filter(), map() și reduce():

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2VcblxubXlfbGlzdCA9IFsxLDIsMyw0LDUsNiw3LDgsOSwxMF1cblxuIyBVc2UgbGFtYmRhIGZ1bmN0aW9uIHdpdGggYGZpbHRlcigpYFxuZmlsdGVyZWRfbGlzdCA9IGxpc3QoZmlsdGVyKGxhbWJkYSB4OiAoeCoyID4gMTApLCBteV9saXN0KSlcblxuIyBVc2UgbGFtYmRhIGZ1bmN0aW9uIHdpdGggYG1hcCgpYFxubWFwcGVkX2xpc3QgPSBsaXN0KG1hcChsYW1iZGEgeDogeCoyLCBteV9saXN0KSlcblxuIyBVc2UgbGFtYmRhIGZ1bmN0aW9uIHdpdGggYHJlZHVjZSgpYFxucmVkdWNlZF9saXN0ID0gcmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIG15X2xpc3QpXG5cbnByaW50KGZpbHRlcmVkX2xpc3QpXG5wcmludChtYXBwZWRfbGlzdClcbnByaW50KHJlZHVjZWRfbGlzdCkifQ==

Funcția filter() filtrează, așa cum sugerează și numele, lista de intrare originală my_list pe baza unui criteriu >10. Cu map(), pe de altă parte, aplici o funcție tuturor elementelor listei my_list. În acest caz, înmulțești toate elementele cu 2.

Observă că funcția reduce() face parte din biblioteca functools. Folosești această funcție cumulativ asupra elementelor listei my_list, de la stânga la dreapta, și reduci secvența la o singură valoare, 55, în acest caz.

Folosirea lui main() ca funcție în Python

Dacă ai vreo experiență cu alte limbaje de programare precum Java, știi că funcția main este necesară pentru a executa funcții. După cum ai văzut în exemplele de mai sus, asta nu este neapărat necesar în Python. Totuși, includerea unei funcții main() în programul tău Python poate fi utilă pentru a-ți structura codul logic — toate componentele cele mai importante sunt conținute în această funcție main().

Poți defini ușor o funcție main() și să o apelezi exact cum ai făcut cu toate celelalte funcții de mai sus:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiZGVmIGhlbGxvKCk6XG4gIHByaW50KFwiSGVsbG8gV29ybGRcIikgXG4gIHJldHVybiAiLCJzYW1wbGUiOiIjIERlZmluZSBgbWFpbigpYCBmdW5jdGlvblxuZGVmIG1haW4oKTpcbiAgaGVsbG8oKVxuICBwcmludChcIlRoaXMgaXMgYSBtYWluIGZ1bmN0aW9uXCIpXG5cbm1haW4oKSJ9

Totuși, așa cum este acum, codul funcției tale main() va fi apelat când o imporți ca modul. Ca să te asiguri că asta nu se întâmplă, apelezi funcția main() când __name__ == '__main__'.

Asta înseamnă că codul din fragmentul de cod de mai sus devine:

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiZGVmIGhlbGxvKCk6XG4gIHByaW50KFwiSGVsbG8gV29ybGRcIikgXG4gIHJldHVybiAiLCJzYW1wbGUiOiIjIERlZmluZSBgbWFpbigpYCBmdW5jdGlvblxuZGVmIG1haW4oKTpcbiAgaGVsbG8oKVxuICBwcmludChcIlRoaXMgaXMgYSBtYWluIGZ1bmN0aW9uXCIpXG4gIFxuIyBFeGVjdXRlIGBtYWluKClgIGZ1bmN0aW9uIFxuaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpcbiAgICBtYWluKCkifQ==

Notă că pe lângă funcția __main__, ai și o funcție __init__ care inițializează o instanță a unei clase sau un obiect. Pe scurt, acționează ca un constructor sau inițializator și este apelată automat când creezi o nouă instanță a unei clase. Cu acea funcție, obiectul nou creat este atribuit parametrului self, pe care l-ai văzut mai devreme în acest tutorial. Aruncă o privire la următorul exemplu:

class Dog:
    """A simple Dog class.

    Args:
        legs: Number of legs so that the dog can walk.
        color: The color of the fur.
    """

    def __init__(self, legs: int, color: str) -> None:
        self.legs = legs
        self.color = color

    def bark(self) -> str:
        return "bark" * 2

if __name__ == "__main__":
    dog = Dog(4, "brown")
    print(dog.bark())

Continuă să exersezi funcțiile în Python

Felicitări! Ai ajuns la finalul acestui scurt tutorial despre funcții în Python. Dacă vrei să recapitulezi alte materiale de bază din programarea Python, nu rata Data Types for Data Science, un curs în care îți vei consolida și exersa cunoștințele despre liste, dicționare, tupluri, mulțimi și date și ore.

Întrebări frecvente despre funcțiile în Python

Ce este o funcție în Python?

O funcție este un bloc de cod reutilizabil care îndeplinește o sarcină specifică. Poate primi intrări, le poate procesa și poate returna ieșiri.

Cum definești o funcție în Python?

Pentru a defini o funcție în Python, folosește cuvântul-cheie def, numește-ți funcția, adaugă parametri opționali între paranteze, scrie codul și opțional returnează o valoare.

Care e diferența dintre funcții și metode în Python?

Funcțiile sunt independente, dar metodele aparțin claselor. Toate metodele sunt funcții, dar nu toate funcțiile sunt metode.

Care sunt tipurile de funcții în Python?

Python are funcții încorporate (precum print()), funcții definite de utilizator (creațiile tale personalizate) și funcții anonime (lambda scurte).

Care e diferența dintre parametri și argumente?

Parametrii sunt locuri rezervate în definiția funcției, iar argumentele sunt valorile efective pe care le transmiți când apelezi funcția.

Ce este o funcție lambda?

O funcție lambda este o funcție fără nume, într-o singură linie, pentru sarcini rapide.

De ce să folosești funcția __main__?

Funcția __main__ îți păstrează codul organizat și asigură că anumite părți rulează doar când scriptul este executat direct, nu când este importat.

Care e diferența dintre variabile globale și locale?

Variabilele globale funcționează peste tot, în timp ce cele locale trăiesc doar în interiorul funcției lor.

Subiecte

Află mai multe despre Python

course

Introduction to Python

4 oră
6.8M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Vezi detaliiRight Arrow
Începeți cursul
Vezi mai multRight Arrow