[PIPython] variabili globali

Carlo C8E Miron carlo.miron
Lun 6 Giu 2005 11:25:10 CEST


2005/6/6, Giorgio <g.climb a tiscali.it>:
> Ho qualche problema a passare delle variabili da una funzione all'altra ad esempio:
> 
> def calcola_scadenza(self,event):
> 
>         global scadx
>         global mesex
>         global giornox
>         global annox
>         annox=""
>         mesex=""
>         giornox=""
> #segue funzione
> quando chiamo la seguente funzione:
> 
> def metti_giorni_scad(self,event):

Qui manca un global mesex.

>         if mesex>12:
>             mesex=mesex-12
> #segue funzione
> 
> questo e' l'errore che ottengo:
> 
> Traceback (most recent call last):
>   File "D:\Python\Partitari.py", line 1121, in regisfor
>     self.calcola_scadenza(self)
>   File "D:\Python\Partitari.py", line 1179, in calcola_scadenza
>     self.metti_giorni_scad(self)
>   File "D:\Python\Partitari.py", line 1205, in metti_giorni_scad
>     if mesex>12:
> UnboundLocalError: local variable 'mesex' referenced before assignment
> 
> ma la variabile mesex l'ho definita global, o no?

No. La dichiarazione global e' valida solo all'interno della funzione
in cui e' utilizzata. Quindi, per la funzione calcola_scadenza()
i simboli scadx, mesex, giornox e annox sono globali, mentre in
metti_giorni_scad() mesex e' locale.

> Qualcuno puo' aiutarmi?

Io ti consiglio caldamente di non abusare troppo di global.
Puoi usare i parameteri della funzione. Tra l'altro la presenza
del parametro self mi fa' pensare che quelli siano in realta'
metodi di classe. O che ti diverti a confondere le acque ;)
Se e' vero il primo caso, potresti pensare di trasformare
le tue globali in attributi. Miniesempio (untested)::

class Scadenziario(object):
    def __init__(self, anno, mese, giorno):
        self.anno = anno
        self.mese = mese
        self.giorno = giorno
    def metti_giorni_scad(self, event):
        self.mese = self.mese % 12

Un ulteriore, gratuito, consiglio. Guardati
help("datetime") o help("mx.DateTime")

HTH, HAND
C8E
-- 
Disclaimer:
If I receive a message from you, you are agreeing that:
1. I am by definition, "the intended recipient".
2. All information in the email is mine to do with as I see fit and
 make such financial profit, political mileage, or good joke as it
 lends itself to. In particular, I may quote it on USENET or the WWW.
3. I may take the contents as representing the views of your company.
4. This overrides any disclaimer or statement of confidentiality that
 may be included on your message.


More information about the Python mailing list