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:
- def foo():
- # Fai alcune cose.
- a = 42
- 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.
- # Soluzione usando le tuple.
- def foo():
- # Fai alcune cose.
- a = 42
- return (10,a)
- foo()[0] # 10
- 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.
- def foo():
- # Fa alcune cose.
- global a
- a = 42
- return 10
- foo() # 10
- 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.
- def foo():
- # Do some things.
- foo.a = 42
- return 10
- foo() # 10
- 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.
Articoli simili
- Come ottenere il valore di una variabile da una classe ad un'altra classe in Python
- Come restituire un nome di variabile in Python (ad esempio, b = 3, voglio stampare b come str)
- Perché non posso modificare la variabile del ciclo 'for' in Python?
- Qual è corretto, "Si prega di chiamare al più presto" o "Si prega di chiamare quando è conveniente"?