🐍

Funcții în Python

Programare Python Intermediate 1 min read 0 words

Funcții în Python

Definirea Funcțiilor

Forma de bază

def salut():
    print("Salut, lume!")

salut()  # Apelarea funcției

Cu parametri

def salut(nume):
    print(f"Salut, {nume}!")

salut("Ana")  # Salut, Ana!

Cu valoare returnată

def aduna(a, b):
    return a + b

rezultat = aduna(3, 5)  # 8

Parametri și Argumente

Parametri cu valori implicite

def salut(nume, mesaj="Bună ziua"):
    print(f"{mesaj}, {nume}!")

salut("Ana")                # Bună ziua, Ana!
salut("Ion", "Salutare")    # Salutare, Ion!

Argumente poziționale și cu nume

def info(nume, varsta, oras):
    print(f"{nume}, {varsta} ani, din {oras}")

# Poziționale
info("Ana", 25, "București")

# Cu nume (keyword arguments)
info(oras="Cluj", nume="Ion", varsta=30)

# Mixte (poziționale ÎNTÂI)
info("Maria", oras="Iași", varsta=22)

*args - Număr variabil de argumente

def suma(*numere):
    total = 0
    for n in numere:
        total += n
    return total

suma(1, 2)        # 3
suma(1, 2, 3, 4)  # 10

**kwargs - Argumente cu nume variabile

def afiseaza(**kwargs):
    for cheie, val in kwargs.items():
        print(f"{cheie}: {val}")

afiseaza(nume="Ana", varsta=25)
# nume: Ana
# varsta: 25

Scope și Variabile

Variabile locale

def functie():
    x = 10  # Variabilă locală
    print(x)

functie()
# print(x)  # Eroare! x nu există aici

Variabile globale

x = 100  # Variabilă globală

def citeste():
    print(x)  # OK - citire

def modifica():
    global x
    x = 200  # Necesită 'global' pentru modificare

citeste()   # 100
modifica()
citeste()   # 200

Funcții și Mutabilitate

Parametri imutabili (pass by value-like)

def modifica_int(x):
    x = x + 1
    return x

n = 5
modifica_int(n)
print(n)  # 5 - nu s-a modificat!

Parametri mutabili (pass by reference-like)

def modifica_lista(L):
    L.append(4)

lista = [1, 2, 3]
modifica_lista(lista)
print(lista)  # [1, 2, 3, 4] - s-a modificat!

Reatribuirea nu modifică originalul

def f(L):
    L = [10, 20]  # Reatribuire - nou obiect
    return L

lista = [1, 2, 3]
rezultat = f(lista)
print(lista)    # [1, 2, 3] - neschimbat
print(rezultat) # [10, 20]

Funcții ca Obiecte

def dublu(x):
    return x * 2

# Funcția este un obiect
f = dublu
print(f(5))  # 10

# Poate fi pasată ca argument
numere = [1, 2, 3]
rezultat = list(map(dublu, numere))
print(rezultat)  # [2, 4, 6]

De Reținut

Când pasați o listă sau dicționar unei funcții și o modificați în loc (cu .append(), [key]=val), modificați originalul. Dar dacă reatribuiți parametrul (L = [...]), creați un obiect nou.

Întrebări de Verificare

  1. Ce diferență este între parametri și argumente?
  2. Cum definești un parametru cu valoare implicită?
  3. Ce se întâmplă când modifici o listă primită ca parametru?
  4. De ce trebuie să folosești global pentru a modifica variabile globale?

📚 Related Articles