Python globális változók és másik file-ban lévő függvények

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?

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

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?

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/