Curs 4 - Colecții, Clase Interne, Expresii Lambda și Streams în Python

Acest curs explorează colecțiile Python, clasele interne, expresiile lambda și lucrul cu fluxuri de date.

1. Colecții în Python

Colecțiile sunt structuri de date predefinite care permit stocarea și manipularea eficientă a informațiilor.

a) Liste

fructe = ["mere", "pere", "banane"]
fructe.append("portocale")
print(fructe)  # Output: ['mere', 'pere', 'banane', 'portocale']

b) Tuple

coordonate = (10, 20)
print(coordonate[0])  # Output: 10

c) Seturi

litere = {"a", "b", "c"}
litere.add("d")
print(litere)  # Output: {'a', 'b', 'c', 'd'}

d) Dicționare

student = {"nume": "Alex", "varsta": 22}
print(student["nume"])  # Output: Alex

2. Clase Interne

Clasele interne sunt clase definite în interiorul altor clase și sunt utile pentru capsularea logicii.

class Masina:
    class Motor:
        def __init__(self, putere):
            self.putere = putere
    
    def __init__(self, marca, putere_motor):
        self.marca = marca
        self.motor = self.Motor(putere_motor)

m = Masina("BMW", 300)
print(m.motor.putere)  # Output: 300

3. Expresii Lambda

Expresiile lambda permit definirea funcțiilor anonime într-un mod concis.

patrat = lambda x: x * x
print(patrat(5))  # Output: 25

a) Utilizare cu `map()`

numere = [1, 2, 3, 4]
patrate = list(map(lambda x: x**2, numere))
print(patrate)  # Output: [1, 4, 9, 16]

b) Utilizare cu `filter()`

numere = [1, 2, 3, 4, 5]
perechi = list(filter(lambda x: x % 2 == 0, numere))
print(perechi)  # Output: [2, 4]

4. Streams în Python

În Python, fluxurile de date pot fi manipulate eficient folosind iteratoare și generatoare.

a) Generatoare

def generator_numere(n):
    for i in range(n):
        yield i

for num in generator_numere(5):
    print(num)  # Output: 0 1 2 3 4

b) Manipularea fișierelor ca stream

with open("fisier.txt", "r") as f:
    for linie in f:
        print(linie.strip())

Resurse suplimentare: