2.14. Definirea funcțiilor

O funcție grupează un bloc de cod sub un nume, astfel încât să poată fi apelat din mai multe locuri. Oriunde un calcul, o acțiune sau o lucrare structurată apare de mai multe ori, o funcție o transformă într-un singur lucru cu nume.

Cuvântul-cheie este def:

def greet(name):
    print("hello,", name)

greet("Alice")
greet("Bob")

Ieșire:

hello, Alice
hello, Bob

Linia care începe cu def este definiția – creează funcția, dar nu execută corpul. Abia apelul greet("Alice") execută blocul indentat.

2.14.1. Parametri și argumente

Numele dintre parantezele de pe linia def sunt parametri – substituenți pentru valorile pe care le va furniza apelantul. Valorile efective transmise sunt argumentele. O funcție poate avea zero sau mai mulți parametri:

def square(x):
    return x * x

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

def is_even(n):
    return n % 2 == 0

Un apel cu un număr greșit de argumente generează imediat TypeError.

2.14.2. return

O instrucțiune return încheie funcția imediat și returnează o valoare apelantului:

def absolute(x):
    if x < 0:
        return -x
    return x

O funcție care nu ajunge niciodată la un return (sau are un return simplu, fără valoare) returnează None:

>>> def shout(text):
...     print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None

O funcție poate avea mai multe instrucțiuni return; câștigă prima la care se ajunge, iar restul corpului este omis.

2.14.2.1. Returnarea mai multor valori

Python returnează un singur obiect per apel, dar acel obiect poate fi un tuple – iar apelantul îl poate despacheta pe loc:

def minmax(values):
    return (min(values), max(values))

lo, hi = minmax([3, 1, 4, 1, 5, 9])

Parantezele din jurul valorii returnate sunt opționale; return a, b și return (a, b) sunt identice.

2.14.3. Docstring-uri

Un literal de tip șir plasat ca prima instrucțiune din corpul unei funcții este un docstring. El este stocat pe obiectul funcție și este ceea ce afișează help():

def scale(value, factor):
    """Multiply ``value`` by ``factor`` and return the result."""
    return value * factor

IDE-ul afișează docstring-urile în indicatoare (tooltips) când cursorul trece deasupra numelui funcției, așa că până și un rezumat de o linie își merită efortul. Șirurile cu ghilimele triple permit docstring-ului să se întindă pe mai multe linii când sunt utile mai multe detalii.

2.14.4. Convenții de denumire

Numele funcțiilor folosesc snake_case – cuvinte cu litere mici separate prin underscore. Numele ar trebui să descrie ce face funcția:

  • Bine: read_temperature, parse_header, is_valid.

  • De evitat: do_stuff, handle1, temp_func.

Un underscore la început (_helper) marchează o funcție ca fiind internă modulului său. Convenția este larg respectată, dar nu este impusă de Python.