[python] globalni a lokalni promenne

Radek Kanovsky rk na dat.cz
Úterý Prosinec 10 10:32:30 CET 2002


On Mon, Dec 09, 2002 at 10:59:06PM -0500, Petr Vanek wrote:

> def connect(self,db,dir):
> 	import gadfly
> 	conn=gadfly.gadfly()
> 	conn.startup=(db,dir)
> 	return conn
> 
> co musim udelat, abych mohl v cele aplikaci pouzivat tuhle connekci? ted
> mi to vraci asi (logicky): raise error, "not bound to database"
> ja v tech lokalnich a globalnich promennych mam takovy chaos, vzdycky
> to nejak zmastim, ale nejak to preci musi byt korektne, ne?

Zdravim,

vono neni jasne, co chtej vlastne delat. Pokud gadfly nedela nejake
kejkle s importem, tak jim tahle funkce vrati vzdy nove spojeni do
databaze a to by melo fungovat i mimo tuto funkci. Mozna by bylo dobre,
kdyby poslali nejaky kratky priklad, ktery jim takto havaruje.

Pokud by chteli, aby tato funkce vratila vzdy stejne spojeni (nejaka
obdoba singletonu), tj. stejnou instanci spojeni, musej to udelat trosku
jinak.

Von ten "import gadfly" je sice volan lokalne, ale muze mit dalekosahle
globalni ucinky. Minimalne by mel v sys.modules zanechat tento modul
naimportovany. Gadly nepouzivam, ale ta jejich funkce by mela urcite
fungovat.

--------------------------------------------------------
#!/usr/bin/env python

import sys

def connect (db, dir) :
    import gadfly
    conn=gadfly.gadfly()
    conn.startup=(db,dir)
    return conn

print sys.modules.has_key('gadfly') and 'gadfly importovan' or 'no gadfly'
conn1 = connect('ahoj', '/tmp')
print "connect('ahoj'):", conn1
print sys.modules.has_key('gadfly') and 'gadfly importovan' or 'no gadfly'
conn2 = connect('ahoj', '/tmp')
print "connect('ahoj'):", conn2
print sys.modules.has_key('gadfly') and 'gadfly importovan' or 'no gadfly'
--------------------------------------------------------

Tento skript mne vypise:

--------------------------------------------------------
no gadfly
connect('ahoj'): <gadfly.database.gadfly instance at 0x815104c>
gadfly importovan
connect('ahoj'): <gadfly.database.gadfly instance at 0x821962c>
gadfly importovan
--------------------------------------------------------

Ve vystupu je videt, ze gadfly je importovan az pri prvnim volani funkce
connect, a ze funkce connect vratila pokazde jinou instanci spojeni do
gadfly databaze. Je otazka, jestli je to presne to, co chtej.


Radek Kaòovský


Další informace o konferenci Python