Tartalom
- Változtathatóan meghatározott belső funkció és azon kívül használt
- Változtathatóan definiált külső funkció és benne használható
- A beágyazott függvények belsejében található változók
Szoftverfejlesztő vagyok, nagy érdeklődéssel bír az adatelemzés és a statisztika iránt.
Globális változók azok változók amelyek a funkció hatókörén kívül vannak deklarálva, de használhatók egy függvényben. Globális változó deklarálásához és használatához használhatjuk a „global” kulcsszót a változó neve előtt.
Néhány példával próbáljuk meg jobban megérteni a fogalmat.
Változtathatóan meghatározott belső funkció és azon kívül használt
Vegye figyelembe a következő kódot.
#! / usr / bin / python3 def myFunct (): a = 20 print (a) myFunct () print (a)
A kódból NameError lesz, mivel az a változó csak a myFunct nevű függvény számára látható. A (a) nyomtatás a program vége felé sikertelen, mivel a program feltételezi, hogy a változót még nem definiálták. Az "a" változó ugyanis lokális a myFunct () nevű függvény számára.
A fenti program kimenete a következő lesz: Traceback (a legutóbbi hívás utoljára): 20 Fájl "G: workspaces py_ws MyProj org pythontutorials globalvslocal globalAndLocal.py", 13. sor nyomtatásban (a) NameError: name 'a' nincs meghatározva
Az érték beállítása és nyomtatása előtt hozzáadhatunk egy globális értéket a myFunct () -hoz, hogy a kód működőképes legyen. Vegye figyelembe az alábbi továbbfejlesztett kódot:
#! / usr / bin / python3 def myFunct (): global aa = 20 print ("Inside myfunct (): a =", a) myFunct () print ("A myFunct első hívása utáni érték: a =", a) a = 10 print ("Miután új értéket adott meg a myFuncton kívül: a =", a) myFunct () print ("Miután másodszor hívta meg a myFunctot: a =", a)
A fenti kód kimenete a következő lesz:
Inside myfunct (): a = 20 Az első értéke a myFunct első hívása után: a = 20 Miután új értéket állított be a myFuncton kívül: a = 10 Inside myfunct (): a = 20 A myFunct második hívása után: a = 20
Változtathatóan definiált külső funkció és benne használható
Vegyünk egy másik példát:
#! / usr / bin / python3 def callMe (): print (msg) msg = "Hívott" msg = "Hívás ..." callMe () print (msg)
Mi fog történni, ha végrehajtjuk a kódot? Sikeresen fog futni?
A fenti kód kimenete így fog kinézni:
Traceback (a legutóbbi hívás utoljára): "G: munkaterületek py_ws MyProj org pythontutorials globalvslocal scopedOutside.py" 12. sor, a callMe () fájlban: File "G: munkaterületek py_ws MyProj org pythontutorials globalvslocal scopedOutside.py ", 8. sor, a callMe nyomtatásban UnboundLocalError: a hozzárendelés előtt hivatkozott 'msg' helyi változó
Ha alaposan megvizsgáljuk a kódot, láthatjuk, hogy az msg változóhoz a callMe függvényen kívül a „Calling” értéket rendeltük. Ezután a callMe () meghívásra kerül. Annak ellenére, hogy az msg a meghívás előtt a függvényen kívül van deklarálva, a Python „feltételezi”, hogy helyi változóra van szükségünk a callMe () belsejében az msg-hez való hozzárendelés miatt, ezért a nyomtatási utasítás dobja ezt a hibaüzenetet.
Általában egy változó, amelyet a egy függvény helyi változónak tekinthető, ha nem deklaráltuk globális változónak.
A hiba kijavításához a következőképpen kell módosítanunk a kódot:
#! / usr / bin / python3 def callMe (): globális msg print (msg) msg = "Hívott" msg = "Hívás ..." callMe () print (msg)
A célnak megfelelően két külön sorban kell kinyomtatnia a "Hívás" és a "Hívott" szavakat. A fenti program kimenete a következő lesz:
A beágyazott függvények belsejében található változók
Lehetséges meghatározni egy függvényt egy másik függvényen belül. Az ilyen funkciókat beágyazott függvényeknek nevezzük.
Vegye figyelembe a következő kódot:
#! / usr / bin / python3 def external (): x = 10 def internal (): globális xx = 2 print ("Mielőtt meghívnánk a belső (): x =", x) print ("A belső () hívása most .. . ") belső () nyomtatás (" A belső (): x = ", x) meghívása után külső () nyomtatás (" x fő: "+ str (x))
A fenti kód kimenete a következő lesz:
A belső () hívása előtt: x = 10 A belső () hívása most ... A belső () behívása után: x = 10 x fő: 2
A fenti programban x értéke 10 marad a külső () függvényben, függetlenül attól, hogy a belső () mit csinál a változóval. A belső () meghívása után létezik egy globális változó, amelynek értéke 2. Mivel a külső () viszont belsőnek () hívja, a main nyomtatási utasítás kinyomtatja a belső () által globális változóhoz rendelt értéket.