RISOLTO Python eseguire funzioni

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

OttoOtti

Nuovo Utente
Messaggi
83
Reazioni
7
Punteggio
26
Salve mi sono imbattuto in questo errore "TypeError: 'NoneType' object is not callable" spiego il mio problema :
dovrei eseguire una funzione da un altra funzione passandogli tramite una variabile e possibile fare cioe ?

Python:
def stampa(text):
    print(text)
    
def main(funzione):
  while (True):
    funzione()
    
a = stampa("ciao")
main(a)
 
beh, nella prima istruzione eseguibile assegni ad 'a' il valore di ritorno di "stampa", che non ritorna un bel nulla, per cui la variabile 'a' non e' assegnata, per cui la prima volta che cerchi di usarla (passandola alla funzione 'main') ti ritrovi quel tipo di errore.
Quello che devi fare e' non chiamare la funzione, bensi' assegnarla direttamente come a = stampa

Ma attento: hai creato un loop infinito (while True:)
 
si ne sono consapevole del loop infinito io pero volevo integrare nel nella variabile anche l'argomento per questo ho scritto cosi stampa("ciao") e possibile passare l'argomento direttamente nel var incluso o e impossibile ?
 
si ne sono consapevole del loop infinito io pero volevo integrare nel nella variabile anche l'argomento per questo ho scritto cosi stampa("ciao") e possibile passare l'argomento direttamente nel var incluso o e impossibile ?
Allora nella funzione stampa devi far ritornare un valore e non printarlo.
Quindi una bella return invece di una print risolverebbe i tuoi problemi. Ovviamente dovrai ritornare una variabile alla quale è assegnata l'argomento della funzione.
Solo in questo modo puoi fare l'assegnazione di a come vorresti.

Se non sono stato chiaro chiedi che ti spiego meglio :)
 
Ultima modifica:
Allora nella funzione stampa devi far ritornare un valore e non printarlo.
Quindi una bella return invece di una print risolverebbe i tuoi problemi.
No, non vuoi assegnare ad 'a' il valore di ritorno della funzione, vuoi assegnare LA funzione (come si farebbe in C con un puntatore di funzione o con un delegate in C#), in modo da chiamare la funzione con la variabile 'a'.
--- i due messaggi sono stati uniti ---
.. e possibile passare l'argomento direttamente nel var incluso o e impossibile ?
Si e' possibile, ma hai bisogno di una tuple con due elementi, dove memorizzi sia la funzione che il parametro che vuoi passare. Non lo ho mai provato, ma dovrebbe funzionare.
Qualcosa come
Python:
mytuple = ( stampa, "ciao")

mytuple[0](mytuple[1])
 
Tu vuoi qualcosa del genere

Python:
def stampa(text):
    return lambda x: print(text, x)
    
def main(funzione):
    while (True):
        funzione("mondo")
        
a = stampa("Ciao")
main(a)

Passare le funzioni tramite variabili, in Python si fa con le lambda.
 
No, non vuoi assegnare ad 'a' il valore di ritorno della funzione, vuoi assegnare LA funzione (come si farebbe in C con un puntatore di funzione o con un delegate in C#), in modo da chiamare la funzione con la variabile 'a'.
Esattamente, mi sono spiegato male io, grazie per la correzione! :)
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top