[Python] Funzioni come moduli

Daniele Varrazzo piro a develer.com
Lun 30 Giu 2008 19:00:39 CEST


<20080630160218.095007C070 a python.it> <20080630162621.GA27142 a ubuntu>
Message-ID: <1105215af1310b8a081ac5f5ef292eac a develer.com>
X-Sender: piro a develer.com
Received: from 82.111.147.97 [82.111.147.97] with HTTP/1.1 (POST); Mon, 30 Jun
	2008 19:00:39 +0200
User-Agent: RoundCube Webmail/0.1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit



On Mon, 30 Jun 2008 18:26:21 +0200, Alessandro Dentella <sandro a e-den.it>
wrote:
>> > e di volerlo usare così
>> > 
>> >     LOCS = {}
>> >     execfile('plugin_A.py', {}, LOCS)
>> >     
>> >     a = LOCS['A']()
>> >     a.test()
>> >     
>> > 
>> > ti verrà sollevato l'errore che perchè 'a' non vede __più__ il
> modulo
>> > sys.
>> 
>> Il problema e' che usi un dizionario per ambiente globale che pero' poi
>> butti via.
>> 
>> Il codice seguente funziona come ci si aspetta:
>> 
>> In [1]: ENV = {}
>> In [3]: execfile('plugin_A.py', ENV)
>> In [5]: a = ENV['A']()
>> In [6]: a.test()
> 
> 
> certo ma a quel punto ogni variabile viene importata nel namespace del
> chiamante e -proprio per dei plugin che possono essre fatti da terze
> parti-
> non so quanto sia opportuno. Chi mi assicura che non ridefinisca nomi di
> variabili che ho in uso?

A me non sembra che il global namespace del chiamante venga inquinato:

    In [1]: ENV = {}

    In [2]: execfile('plugin_A.py', ENV)

    In [3]: a = ENV['A']()

    In [4]: a.test()
    [ ...roba... ]

    In [5]: sys
   
---------------------------------------------------------------------------
    <type 'exceptions.NameError'>             Traceback (most recent call
last)

    /home/piro/py/<ipython console> in <module>()

    <type 'exceptions.NameError'>: name 'sys' is not defined

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com



Maggiori informazioni sulla lista Python