[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