Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Dec 2007
    Messaggi
    12

    [PYTHON] Variabili globali

    Salve. Da poco sto smanettando col python, ma ho incontrato un problema che non riesco a risolvere:

    ho una serie di funzioni chiamate in cascata, del tipo
    Funzione1(bla,bla):
    ...
    ...
    ...Funzione2(blo,blo)
    ......
    ......
    ......Funzione3(blu,ble)
    .........
    .........
    ............
    ..................FunzioneN(pippo,pluto)
    .......................
    .......................
    .......................

    all'interno della FunzioneN, mi serve una variabile (tipo list), creata nella Funzione1.
    E' vero che potrei passarla come argomento dalla Funzione1 alla Funzione2, alla F3, ... fino ad arrivare alla FunzioneN, però questo metodo, oltre a sembrarmi poco elegante, mi da l'impressione che consumi un sacco di memoria, creando numerose copie della variabile originale.

    Leggendo su docs.python.org, mi sembra di aver capito che posso dichiarare una variabile globale anteponendogli l'attributo global; tuttavia ho provato ma non riesco a farlo funzionare in quanto mi da un errore:
    global name variabile not defined

    dov'è che sbaglio?

    grazie.

  2. #2
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790

    Re: [PYTHON] Variabili globali

    Originariamente inviato da Alaunt
    Salve. Da poco sto smanettando col python, ma ho incontrato un problema che non riesco a risolvere:

    ho una serie di funzioni chiamate in cascata, del tipo
    Funzione1(bla,bla):
    ...
    ...
    ...Funzione2(blo,blo)
    ......
    ......
    ......Funzione3(blu,ble)
    .........
    .........
    ............
    ..................FunzioneN(pippo,pluto)
    .......................
    .......................
    .......................

    all'interno della FunzioneN, mi serve una variabile (tipo list), creata nella Funzione1.
    E' vero che potrei passarla come argomento dalla Funzione1 alla Funzione2, alla F3, ... fino ad arrivare alla FunzioneN, però questo metodo, oltre a sembrarmi poco elegante, mi da l'impressione che consumi un sacco di memoria, creando numerose copie della variabile originale.

    Leggendo su docs.python.org, mi sembra di aver capito che posso dichiarare una variabile globale anteponendogli l'attributo global; tuttavia ho provato ma non riesco a farlo funzionare in quanto mi da un errore:
    global name variabile not defined

    dov'è che sbaglio?

    grazie.
    ecco un esempio:
    codice:
    var=0 #globale
    def funzione():
         global var
         var=1
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  3. #3
    Utente bannato
    Registrato dal
    Dec 2007
    Messaggi
    12
    Modulo pippo.py:
    codice:
    CONNECTED_PLAYERS=[]  
    import os 
    import time
    ....
    Modulo pluto.py:
    codice:
    import pippo.py
    def cerca_player(target):
         x=0
         global CONNECTED_PLAYERS
         for con_player in CONNECTED_PLAYERS:
             if con_player[2].find(target)!=-1:
                 id=con_player[0]
                 x=x+1
    ....
    ....
    verificando tramite debugger trovi che nel namespace della funzione cerca_player(target) la variabile CONNECTED_PLAYERS non è definita, e quando cerco di eseguire il for ho questo errore:
    NameError: global name 'CONNECTED_PLAYERS' is not defined

  4. #4
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    cmq se nn erro nn serve che importi il modulo come pippo.py basta pippo, per il tuo problema dovrebbe bastare pippo.variabile senza usare global prova
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  5. #5
    Utente bannato
    Registrato dal
    Dec 2007
    Messaggi
    12
    ho già provato così:

    codice:
    import RedCap
    def cerca_player(target):
         x=0
         for con_player in RedCap.CONNECTED_PLAYERS:
             if con_player[2].find(target)!=-1:
                 id=con_player[0]
                 x=x+1
    ....
    ....
    mi dava questo errore:

    File "F:\\PythonProjects\\RedCap\\src\\plugins.py", line 133, in cerca_player
    for con_player in RedCap.CONNECTED_PLAYERS:
    ', "AttributeError: 'module' object has no attribute 'CONNECTED_PLAYERS'

  6. #6
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    guarda io ci ho provato e funziona

    c.py
    codice:
    LISTA=[]
    o.py
    codice:
    import c
    c.LISTA=[1,2,3]
    
    print c.LISTA
    nn saprei che dirti
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  7. #7
    Se ti ritorna questo errore:

    "AttributeError: 'module' object has no attribute 'CONNECTED_PLAYERS'"

    ...significa che quella variabile non l'hai definita da nessuna parte, nè nel modulo principale, nè in quello che importi.
    Per "definire" intendo una cosa del tipo:

    CONNECTED_PLAYERS = 0


    Inoltre ti consiglio di non utilizzare global a meno che tu non ci sia proprio costretto.
    Molto spesso è più saggio passarsi le variabili tra funzioni mediante argomento o molto più semplicemente utilizzare una classe.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.