Úvod do rozsahu v Pythone

Rozsah definuje prístupnosť pythonového objektu. Pre prístup ku konkrétnej premennej v kóde je potrebné definovať rozsah, pretože k nemu nie je možné pristupovať odkiaľkoľvek v programe. Konkrétna oblasť kódovania, kde sú premenné viditeľné, sa nazýva rozsah. Premenné nie sú viditeľné pre celý kód, jeho viditeľnosť môže byť obmedzená. Rozsah overuje, ktorá premenná môže byť „videná“. Rozsah definuje súbor pravidiel, ktoré nám hovoria, ako a kde možno hľadať premennú. Vyhľadá sa premenná, aby sa získala hodnota alebo aby sa priradila hodnota. Namespace je jedinečná identifikácia premennej alebo metódy. Namespace hovorí tlmočníkovi pythonu o názve objektu a mieste, odkiaľ sa snaží získať prístup k nemu.

V priestore názvov sa vyhľadáva rozlíšenie rozsahu podľa pravidla LEGB. LEGB znamená: L: miestne, E: uzavreté, G: globálne, B: vstavané. Poradie LEGB je dôležité. Premenná sa najprv vyhľadáva v miestnom, potom v uzavretom, potom globálnom a nakoniec zabudovanom stave.

Typy rozsahu v Pythone

Pozrime sa, ako deklarovať premennú a ako získať jej rozsah:

1. Miestny rozsah

Premenné, ktoré sú definované vo funkcii, sú miestnym rozsahom premennej. Tieto premenné sú definované v tele funkcie. Pochopme tento koncept pomocou príkladu. V tomto príklade 1 sme vzali jednu premennú num. Num = 0 je definované mimo funkcie, takže nejde o lokálnu premennú. Podľa našej definície sú premenné, ktoré sú deklarované vo vnútri tela funkcie, lokálnou premennou. Tu je num = 1 lokálna premenná, ktorá je deklarovaná a vytlačená vo funkcii ukážky. Ak spustíme tento kód, výstup je uvedený nižšie.

Príklad č. 1:

kód:

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

Výkon:

Číslo je lokálne pre funkciu. Ak vo funkcii použijeme hodnotu num premennej, potom ju lokálne vyhlásime, nastane chyba.

Pozrite si príklad 2: Tu prvý príkaz na tlač vyvoláva chybu pythonu, keď sa k nej snažíme dostať pred priradením.

Príklad č. 2:

kód:

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

Výkon:

2. Globálny rozsah

Premenná, ktorú je možné čítať odkiaľkoľvek v programe, sa nazýva globálny rozsah. Tieto premenné sú prístupné vo vnútri aj mimo funkcie. Ak chceme použiť tú istú premennú vo zvyšku programu, deklarujeme ju ako globálnu.

V nasledujúcom príklade 1 sme deklarovali premennú Str, ktorá je mimo funkcie. Nazýva sa funkčné demo a vytlačí sa hodnota premennej Str. Na použitie globálnej premennej vo funkcii nie je potrebné použiť globálne kľúčové slovo.

Príklad č. 1:

kód:

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

Výkon:

V nasledujúcom príklade 2 sme sa pokúsili zmeniť hodnotu globálnej premennej Str vo vnútri funkcie, a preto vyvolala výnimku. Ak modifikujeme alebo priraďujeme novú hodnotu premennej vo funkcii, musíme napísať globálne. Ak chcete tlmočníkovi pythonu povedať, že chcete použiť globálnu premennú, použije sa kľúčové slovo „global“. Ak to nebolo deklarované ako globálne, potom python zaobchádza s touto premennou ako s lokálnou, ak je vo funkcii vytvorená alebo upravená. V tomto prvom riadku vyvolá výnimku, pretože python predpokladá, že chceme priradenie ako lokálnu premennú kvôli priradeniu str vo vnútri funkcie demo ().

Príklad č. 2:

kód:

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

Výkon:

Ak chceme zmeniť hodnotu globálnej premennej vo funkcii, použije sa globálne kľúčové slovo.

Nasledujúci príklad 3 vyriešil problém, ktorý sa vyskytol vyššie.

Prí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ýkon:

3. NonLocal alebo Enclosing Scope

Nelokálna premenná je premenná, ktorá je definovaná vo vnorenej funkcii. Znamená to, že premenná nemôže byť ani v lokálnom, ani v globálnom rozsahu. Na vytvorenie nelokálnej premennej sa používa nelokálne kľúčové slovo. V nasledujúcom kóde sme vytvorili vonkajšiu funkciu a existuje vnorenú funkciu inside (). V rozsahu vonkajšej () funkcie je definovaná vnútorná () funkcia. Ak zmeníme nelokálnu premennú tak, ako je definovaná vo vnútornej () funkcii, zmeny sa prejavia aj vo vonkajšej funkcii.

Prí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ýkon:

Ak chceme iba použiť hodnotu vonkajšej funkcie a nechceme robiť žiadne zmeny, potom komentár (nelokálne a) riadok.

Prí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ýkon:

4. Vstavaný rozsah

Ak premenná nie je definovaná v lokálnom, uzavretom alebo globálnom rozsahu, potom ho Python hľadá v zabudovanom rozsahu. V nasledujúcom príklade je importovaný 1 z matematického modulu pi a hodnota pi nie je definovaná v globálnom, lokálnom a uzavretom tvare. Python potom v zabudovanom rozsahu vyhľadá hodnotu pi a vytlačí ju. Názov, ktorý je už v zabudovanom rozsahu, by sa preto nemal používať ako identifikátor.

Prí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ýkon:

Záver - Rozsah pôsobnosti v Pythone

V tomto článku sme sa dozvedeli o rozsahu premennej python. Naučili sme sa štyri typy rozsahu - globálny rozsah, miestny rozsah, uzavretý rozsah a zabudovaný rozsah. Dozvedeli sme sa tiež, kedy používať globálne a nelokálne kľúčové slová. Dúfam, že ste pochopili tento koncept.

Odporúčaný článok

Toto je sprievodca Scope v Pythone. Tu diskutujeme typy rozsahu v Pythone a jeho príklady spolu s implementáciou a výstupom kódu. Viac informácií nájdete aj v ďalších súvisiacich článkoch -

  1. Zvyšky v Pythone s typmi
  2. Prehľad zapuzdrenia v Pythone
  3. Alternatívy Pythonu Top 6
  4. Úvod do dedičstva v Pythone

Kategórie: