[python] globalni promenne

Petr Mach gsl na seznam.cz
Úterý Únor 11 23:40:06 CET 2003


Dobry den,

z PHP jsem zvykly mit globalni promenne v jednom
souboru a ten pak includovat do funkci. Takze pak
mam jednoduchou spravu techto promenych. Kdyz
potrebuju dalsi, jednoduse ji pridam do toho souboru
a je pristupna automaticky ve vsech funkcich.

Nemusim pak jak osel do vsech funkci predavat
handler na databazi, informace o uzivateli jako
jeho id nebo ty nejcasteji pouzivane datove
promenne.

V pythonu mi to ale nefunguje, mam soubory

*** glob.py ***
global globVar
globVar="set from glob"

*** fun1.py ***
def fun1():
   global globVar
   globVar="set from fun1()"

*** main.py ***
from glob import *

from fun1 import *
from fun2 import *

def main():
   global globVar
   globVar='set from main()'

print globVar
main()
print globVar
fun1()
print globVar

********************
Kdyz spustim ten main.py soubor, dostanu tento
vysledek:
set from glob
set from main()
set from main()

A ja bych si predstavoval a potreboval, aby ten
posledni radek byl set from fun1(). Zkousel jsem
dat ten from global import * i do soubory fun1.py,
ale nicemu to nepomohlo, takze nevim, jak se
mezi funkcemi predavat globalni data.

Jak toho mam dosahnout?
Idealni by bylo, kdybych mohl psat:

def fun1():
   from global import *
   globVar="set from fun1()"

tedy obdobu toho co se v PHP dela takto:
function fun1(){
   include "global.php";
   globVar="set from fun1()";
}
Coz mi zpristupni ve funkci vsechny globalni promm.
at uz jsou kdekoliv, ale to Python zrejme nezvlada.
Tak doufam ze aspon zvlada sdileni globalnich promennych
mezi funkcemi z ruznych souboru, protoze psat vsechny
funkce do jednoho megoveho souboru je tezce neprehledny
a predavat je vsechny jako argument funkcce taky neni
zrovna to nejlepsi. Kazdopadne, jestlize v jednom
souboru nadefinuji nejaka staticka data, treba rozsahle
pole nejakych hodnot, tak k nemu potrebuju mit pristup
z ruznych funkci definovanych v ruznych souborech.

Petr Mach










Další informace o konferenci Python