Van egy adatszerkezetem (1 darab rekord).
A benne lévő adatokat szeretném függvényekből piszkálni.
Az átláthatóság miatt a függvényeket kitenném egy file-ba.Kb. ilyen a kód:
------------------------------------ main.py
from fgv import *
globálisVáltozó=5
fgv1() # kiírja: 5
fgv2() # bekér értéket
fgv1() # kiírja amit az előbb beírtunk (valszeg nem 5)
------------------------------------ fgv.py
def fgv1():
print(globálisVáltozó)
def fgv2():
globálisVáltozó=str(raw_input("GV? ")
A kérdés: miért van az, hogy ha a fenti módon szervezem a dolgokat, akkor elszáll az egész a francba:
Traceback (most recent call last):
File "./main.py", line 13, in <module>
fgv1()
File "/bla/bla/bla/fgv.py", line 3, in fgv1
print(globálisVáltozó)
NameError: global name 'globálisVáltozó' is not defined
Próbáltam guglizni, amit találtam nem volt releváns vagy nem értettem. :)
Úgy működik, hogy az fgv.py tartalmát berakom a main.py elejébe, de ez meg nem tetszik, mert böhöm nagy lesz végül a main.py.
Mi a helyes módszer?
- 1581 megtekintés
Hozzászólások
A globalis valtozo Pythonban nem igazi globalis (szerencsere), csak modulon belul lathato.
Azon tul, hogy ne hasznalj globalis valtozokat, itt egy meg elfogadhato megoldas:
http://stackoverflow.com/a/13034908
- A hozzászóláshoz be kell jelentkezni
Elolvastam, értem, gázos.
Viszont ha nincsenek globális változók, akkor hogyan szokás/illik megoldani egy olyan feladatot, ahol a program futása során egy adathalmazt, a felhasználói inputok alapján függvények manipulálnak? Mint mondjuk egy játékban az életek száma, vagy a gyűjtött tárgyak?
- A hozzászóláshoz be kell jelentkezni
Csinalsz egy modult es beimportalod mindegyik fajlba pl.:
config.py
eletek = 10
modul1.py
import config
print config.eletek
modul2.py
import config
print config.eletek
- A hozzászóláshoz be kell jelentkezni
Értem, köszi!
- A hozzászóláshoz be kell jelentkezni
Jobb ha a globálisnak szánt változókat a függvény argumentumaként adjuk meg, méghozzá "becsomagolva" például egy listába vagy egy osztályba.
globVált=[5]
def fgv(globi):
print( globi[0])
Vagy:
class globVált:
x=5
def fgv(globi):
print( globi.x)
Vagy szótárban:
globVált={"x":5}
def fgv(globi):
print( globi["x"])
________________________________________
https://sites.google.com/site/eutlantis/
- A hozzászóláshoz be kell jelentkezni