RISOLTO Python eseguire funzioni

Stato
Discussione chiusa ad ulteriori risposte.

OttoOtti

Nuovo Utente
83
7
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)
 

Andretti60

Utente Èlite
6,440
5,091
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:)
 

OttoOtti

Nuovo Utente
83
7
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 ?
 

Dawking

Utente Attivo
369
119
CPU
Ryzen 3 1200
Scheda Madre
ASROCK AB350M
HDD
1 TB, 7200 RPM, SATA 6 GB/s, 64 MB Cache 3.5 " + SSD S3+ 240GB
RAM
16GB (2 x 8GB) DDR4, 3000MHz G.Skill Aegis
GPU
RX 570 4gb
Monitor
HP 22fw
PSU
Power SupplyBe Quiet System Power B9 450W
Case
Noua Noob X1 RGB
Net
TP-LINK – WIRELESS USB 300MBPS
OS
Windows 10 PRO
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:

Andretti60

Utente Èlite
6,440
5,091
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'.
Post unito automaticamente:

.. 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])
 
  • Mi piace
  • Adoro
Reazioni: OttoOtti e Dawking

pabloski

Utente Èlite
2,868
916
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.
 

Dawking

Utente Attivo
369
119
CPU
Ryzen 3 1200
Scheda Madre
ASROCK AB350M
HDD
1 TB, 7200 RPM, SATA 6 GB/s, 64 MB Cache 3.5 " + SSD S3+ 240GB
RAM
16GB (2 x 8GB) DDR4, 3000MHz G.Skill Aegis
GPU
RX 570 4gb
Monitor
HP 22fw
PSU
Power SupplyBe Quiet System Power B9 450W
Case
Noua Noob X1 RGB
Net
TP-LINK – WIRELESS USB 300MBPS
OS
Windows 10 PRO
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.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!