Úvod do předmětu v Pythonu

Rozsah definuje přístupnost pythonového objektu. Pro přístup ke konkrétní proměnné v kódu je nutné definovat obor, protože k němu nelze přistupovat odkudkoli v programu. Konkrétní oblast kódování, kde jsou proměnné viditelné, se nazývá rozsah. Proměnné nejsou viditelné pro celý kód, jeho viditelnost může být omezena. Rozsah ověřuje, která proměnná může být „viděna“. Rozsah definuje sadu pravidel, která nám říkají, jak a kde lze proměnnou prohledávat. Proměnná je prohledávána buď pro načtení hodnoty, nebo pro přiřazení hodnoty. Jmenný prostor je jedinečná identifikace proměnné nebo metody. Namespace vypráví interpretovi pythonu o názvu objektu a umístění, odkud se k němu pokouší získat přístup.

Hledané prostory jsou prohledávány pro rozlišení oboru podle pravidla LEGB. LEGB znamená: L: Local, E: Enclosed, G: Global, B: Built-in. Sled LEGB je důležitý. Proměnná je nejprve prohledána v Local, následuje Enclosed, poté globální a nakonec vestavěná.

Typy působnosti v Pythonu

Podívejme se, jak deklarovat proměnnou a jak získat její rozsah:

1. Místní rozsah

Proměnné definované ve funkci jsou lokálním rozsahem proměnné. Tyto proměnné jsou definovány v těle funkce. Pojďme pochopit tento koncept pomocí příkladu. V tomto příkladu 1 jsme vzali jednu proměnnou num. Num = 0 je definováno mimo funkci, takže se nejedná o lokální proměnnou. Podle naší definice jsou proměnné deklarované uvnitř těla funkce lokální proměnnou. Zde num = 1 je lokální proměnná, která je deklarována a vytištěna uvnitř ukázky funkce. Pokud spustíme tento kód, výstup je uveden níže.

Příklad č. 1:

Kód:

num=0
def demo():
#print(num)
num=1
print("The Number is:", num)
demo()

Výstup:

Číslo je místní funkcí. Pokud ve funkci použijeme hodnotu num proměnné, než ji deklarujeme místně, vyvolá to chybu.

Viz Příklad 2: Zde první příkaz print vyvolá chybu pythonu, když se k ní pokoušíme přistoupit před přiřazením.

Příklad č. 2:

Kód:

num=0
def demo():
print(num) //Raises an Error
num=1
print("The Number is:", num)
demo()

Výstup:

2. Globální působnost

Proměnná, kterou lze číst odkudkoli v programu, se nazývá globální rozsah. K těmto proměnným lze přistupovat uvnitř i vně funkce. Pokud chceme použít stejnou proměnnou ve zbytku programu, deklarujeme ji jako globální.

V následujícím příkladu 1 jsme deklarovali proměnnou Str, která je mimo funkci. Vyvolá se demo funkce a vytiskne hodnotu proměnné Str. Pro použití globální proměnné uvnitř funkce není nutné použít globální klíčové slovo.

Příklad č. 1:

Kód:

def demo():
print(Str)
# Global
Str = "You are clever"
demo()

Výstup:

V následujícím příkladu 2 jsme se pokusili změnit hodnotu globální proměnné Str uvnitř funkce, proto vyvolala výjimku. Pokud upravíme nebo přiřadíme nové hodnotě proměnné uvnitř funkce, musíme napsat globální. Pokud chcete tlumočníkovi pythonu říct, že chcete použít globální proměnnou, použije se klíčové slovo „global“. Pokud nebyla deklarována jako globální, pak python zachází s touto proměnnou jako s místní, pokud je vytvořena nebo změněna uvnitř funkce. V tomto prvním řádku vyvolá výjimku, protože python předpokládá, že chceme přiřazení jako lokální proměnnou kvůli přiřazení str uvnitř funkce demo ().

Příklad č. 2:

Kód:

def demo():
print(Str)
Str = "You are smart"
print(Str)
# Global scope
Str = "You are Clever"
demo()
print(Str)

Výstup:

Když chceme změnit hodnotu globální proměnné uvnitř funkce, použije se globální klíčové slovo.

Následující příklad 3 vyřešil problém, se kterým se setkáváme výše.

Příklad č. 3:

Kód:

def demo():
global Str
print(Str)
Str = "You are smart"
print(Str)
# Global scope
Str = "You are Clever"
demo()
print(Str)

Výstup:

3. NonLocal nebo Enclosing Scope

Nonlocal Proměnná je proměnná, která je definována ve vnořené funkci. To znamená, že proměnná nemůže být ani v lokálním, ani v globálním rozsahu. K vytvoření nelokální proměnné se používá nelokální klíčové slovo. V následujícím kódu jsme vytvořili vnější funkci a existuje vnořená funkce inside (). V rámci funkce vnější () je definována funkce vnitřní (). Pokud změníme nlokální proměnnou tak, jak je definována ve vnitřní () funkci, změny se projeví také ve vnější funkci.

Příklad č. 1:

Kód:

def func_outer():
x = "local"
def func_inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
func_inner()
print("outer:", x)
func_outer()

Výstup:

Pokud chceme pouze použít hodnotu vnější funkce a nechceme provádět žádné změny, pak komentář (nelokální a) řádek.

Příklad č. 2:

Kód:

def func_outer():
a = "local"
def func_inner():
#nonlocal a
a = "nonlocal"
print("inner:", a)
func_inner()
print("outer:", a)
func_outer()

Výstup:

4. Vestavěný rozsah

Pokud proměnná není definována v lokálním, uzavřeném nebo globálním oboru, pak ji Python hledá ve vestavěném oboru. V následujícím příkladu je importován 1 z matematického modulu pi a hodnota pi není definována v globálním, lokálním a uzavřeném stavu. Python poté ve vestavěném rozsahu vyhledá hodnotu pi a vytiskne hodnotu. Název, který je již obsažen ve vestavěné oblasti, by proto neměl být používán jako identifikátor.

Příklad č. 1:

Kód:

# Built-in Scope
from math import pi
# pi = 'Not defined in global pi'
def func_outer():
# pi = 'Not defined in outer pi'
def inner():
# pi = 'not defined in inner pi'
print(pi)
inner()
func_outer()

Výstup:

Závěr - rozsah v Pythonu

V tomto článku jsme se dozvěděli o rozsahu proměnné python. Naučili jsme se čtyři typy oborů - globální rozsah, místní rozsah, uzavřený rozsah a vestavěný rozsah. Dozvěděli jsme se také, kdy použít globální a nelokální klíčová slova. Doufám, že jste pochopili tento koncept.

Doporučený článek

Toto je průvodce Scope v Pythonu. Zde diskutujeme typy Scope v Pythonu a jeho příklady spolu s implementací a výstupem kódu. Další informace naleznete také v dalších souvisejících článcích -

  1. Tuples v Pythonu s typy
  2. Přehled zapouzdření v Pythonu
  3. Pythonovy alternativy Top 6
  4. Úvod do dědičnosti v Pythonu

Kategorie: