global i nonlocal

Pozwalają funkcji zmieniać zmienne z zasięgu globalnego lub funkcji otaczającej.

Na tej stronie

Przykład

#
Python
def make_counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

counter = make_counter()
counter()
counter()
print(counter())

total = 0
def add_points(points):
    global total
    total += points

add_points(20)
add_points(30)
print(total)
Wynikzapisany wynik, możesz go sprawdzić
3
50

Definicja i zastosowanie

#

Zmienna przypisana wewnątrz funkcji jest domyślnie lokalna. Jeśli chcesz zmienić zmienną zdefiniowaną poza funkcją, musisz to zadeklarować: global dla zmiennych modułu, nonlocal dla zmiennych funkcji otaczającej.

nonlocal przydaje się w funkcjach zagnieżdżonych, na przykład przy tworzeniu licznika, który pamięta stan między wywołaniami (tak zwane domknięcie).

Nadużywanie global utrudnia śledzenie, kto i kiedy zmienia dane. Zwykle lepiej przekazać wartość jako argument i zwrócić nową przez return albo użyć klasy.

Składnia

#
Składnia
def funkcja():
    global zmienna
    zmienna = nowa_wartosc

Dobre praktyki

#
  • Zanim użyjesz global, sprawdź, czy nie wystarczy zwrócić wartości z funkcji.
  • Samo odczytywanie zmiennej globalnej nie wymaga global. Deklaracja jest potrzebna tylko do przypisania.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.