[Python] R: Si possono creare variabili globali all'interno di una funzione che si trova a sua volta all'interno di un modulo?

Germano Carella germano.carella a gmail.com
Lun 13 Maggio 2013 19:39:38 CEST


Grazie mille...
Sto usando semplicemente Microsoft Outlook, sotto windows 7.
Non so perché si legge male, io leggo bene, cioè il lettore di schermo me la
legge bene... Bho!


-----Messaggio originale-----
Da: python-bounces a lists.python.it [mailto:python-bounces a lists.python.it]
Per conto di Manlio Perillo
Inviato: lunedì 13 maggio 2013 18:09
A: python a lists.python.it
Oggetto: Re: [Python] Si possono creare variabili globali all'interno di una
funzione che si trova a sua volta all'interno di un modulo?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 13/05/2013 17:40, Germano Carella ha scritto:
> [...]
> def setglobals(name,value):
> 
> “””Name è la stringa contenente il nome della variabile; value è il 
> suo valore…”””
> 
> If type(name) is str:
> 
>   Globals()[‘%s’%name]=value
> 

Sono curioso di sapere con che editor hai scritto questo codice...

> Else:
> 
>   Raise TypeError(“richiesta una stringa come primo argomento.”)
> 
>  
> 
> Ok, la funzione, come detto, si trova all’interno di un modulo.
> 
> [...]
> Poi mi viene in mente di scrivere:
> 
> utils.nome
> 
> ‘germano’
> 
> Ops, allora l’ha creata!
> 
> Naturalmente l’ha creata a livello di modulo.
> 

globals restituisce il dizionario contenenti le variabili definite in quel
modulo.  Grazie al cielo, direi.

> Purtroppo, se invece di importare il modulo scrivo
> 
> From utils import setglobals
> 
> Setglobals(“nome”,”germano”)
> 
> Non dà errore, ma non crea la variabile.
> 

Forse fai confusione.  Stai comunque importando setglobals dal modulo utils,
esattamente come prima.

> 
> Ora la domanda: come faccio a impostare questa variabile nel 
> dizionario globale delle variabili globali?
> Si può fare o sto dicendo scemenze?
>

Non si può fare, ma ci sono alternative.

Ad esempio Python ha il dizionario speciale __builtins__, dove ci sono tutti
gli identificatori built-in di Python; **abusandone** puoi fare qualcosa
tipo:

def setglobals(name, value):
    """Name è la stringa contenente il nome della variabile; value è il
       suo valore...
    """

    if type(name) is str:
        __builtins__['%s' % name] = value
    else:
        raise TypeError("richiesta una stringa come primo argomento.")


Ma rischi di confondere lo sfortunato che dovrà manutenere il codice in
futuro.

La soluzione più semplice e pulita è utilizzare un modulo dove memorizzare
tutte le variabili a cui devono accedere gli altri moduli; esattamente come
facevi nel primo esempio.

> [...]


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlGREAIACgkQscQJ24LbaUSlrACfatUKG/vl18uMoSi4N0xzd4z9
0LEAmwap+4VrAjwOHoHWwj5nzJtkZ5gE
=YF7O
-----END PGP SIGNATURE-----
_______________________________________________
Python mailing list
Python a lists.python.it
http://lists.python.it/mailman/listinfo/python



Maggiori informazioni sulla lista Python