QNA > C > Come Chiamare Una Variabile Da Un'altra Funzione In Python

Come chiamare una variabile da un'altra funzione in Python

TLDR: restituire la variabile. Ci sono altri metodi ma non sono così puliti.

Ecco come ho capito la tua domanda: Come faccio ad accedere ad una variabile definita in una funzione in Python?

Presumo che tu abbia qualcosa come questo:

  1. def foo(): 
  2. # Fai alcune cose. 
  3. a = 42 
  4. return 10 

We define a function, say foo, doing some very important stuff and returning 10. All'interno di pippo definiamo una variabile a, a cui si vuole accedere al di fuori di pippo.

Soluzione 1: Usare return.

Il modo pulito per accedere a al di fuori di pippo è restituirlo. Si possono restituire oggetti arbitrari, quindi si può restituire la risposta di default (nel nostro caso 10) e la variabile a, entrambe avvolte in una tupla, lista, dizionario o anche un'istanza di una classe personalizzata.

  1. # Soluzione usando le tuple. 
  2.  
  3. def foo(): 
  4. # Fai alcune cose. 
  5. a = 42 
  6. return (10,a) 
  7.  
  8. foo()[0] # 10 
  9. foo()[1] # 42 

I regard this soultion as “clean”, because it doesn’t introduce hidden elements to your namespaces (neither the module namespace as with global, nor your functions namespace as with function attributes. The input-output system is the default interface for functions.

That being said, maybe one of these other solutions matches your use-case.

Solution 2: Using global.

Global variables are accesible everywhere. You can define global variables from within functions. You cannot edit them from within a function without declaring them as global first.

  1. def foo(): 
  2. # Fa alcune cose. 
  3. global a 
  4. a = 42 
  5. return 10 
  6.  
  7. foo() # 10 
  8. a # 42 

Inside foo we declare a as a global variable. a is now accesible everywhere.

Note that we still have to call foo. La sola definizione di una funzione non eseguirà il suo codice a runtime. Uno svantaggio di questo approccio è che lo stato globale del vostro modulo ora dipende dal fatto che foo sia stato chiamato almeno una volta a runtime.

Soluzione 3: usare gli attributi di funzione.

Tutto è un oggetto in Python, anche le funzioni. Ecco perché potete assegnare attributi alle funzioni proprio come fareste con un oggetto.

  1. def foo(): 
  2. # Do some things. 
  3. foo.a = 42 
  4. return 10 
  5.  
  6. foo() # 10 
  7. foo.a # 42 

This solutuon is essentially the same as the previous one, with the exception that the namespace you’re modifying is the one of foo.

It has the same type of drawbacks. State essenzialmente memorizzando valori nei namespace in modo dinamico e poi vi aspettate che il codice che lo usa sappia sia dove guardare sia se è stato messo lì o no.

Di Thurnau

Come si calcolano le probabilità del poker? :: L'algoritmo del play money di PokerStars è leggermente truccato per far sì che i giocatori comprino più play money?
Link utili