[Python] Si possono creare variabili globali all'interno di una funzione che si trova a sua volta all'interno di un modulo?
Manlio Perillo
manlio.perillo a gmail.com
Lun 13 Maggio 2013 18:08:34 CEST
-----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-----
Maggiori informazioni sulla lista
Python