0
votes

Le fonctionnement automatique des fonctions en Python?

"Je fais une liste de fonctions en Python, mais lorsque j'exécute le programme, toutes les fonctions de la liste sont appelles automatiquement."

"Je l'ai essayé sur Python 3.7.3 et le même concept que j'ai essayé aussi en C ++, mais il fait aussi la même chose." P>

    def a():
        print ('a')
    def b():
        print('b')
    def c():
        print('c')
    def d():
        print('d')
    aa=[a(),b(),c(),d()]
    print(aa[1])


5 commentaires

Vos fonctions ne retournent rien.


Changez votre impression (#) sur retour #


Vous appelez explicitement toutes vos fonctions ici: AA = [A (), B (), C (), D (), D ()] .


Vos fonctions sont courir, bien que non automatiquement; Vous les appelez explicitement dans l'expression qui définit aa . Le problème est que vous confondez la sortie standard avec la valeur d'un appel de la fonction.


Voir cette belle Blog de débogage pour obtenir de l'aide. Essayez également de travailler via un tutoriel sur les appels de fonction. Ceux-ci devraient aider à éliminer quelques problèmes et à réduire la confusion à un ou deux points que vous pouvez gérer.


3 Réponses :


1
votes

Vos fonctions ne renvoient rien. Ils impriment une lettre et ne renvoient aucune lettre.

Utilisez P>

def a():
    print ('a')
    return 'a'

...


0 commentaires

1
votes

Vous avez explicitement appelé toutes les fonctions lorsque vous avez écrit [a B c d()] Donc, tous courir (dans ce cas, l'impression d'une lettre) est la production attendue en effet. Je crois ce que vous voulez, c'est collecter les appelables dans une liste d'abord sans les appeler strong>. Si vous voulez, une fonction souhaitée sur cette liste est exécutée par indexation, vous pouvez le faire en appelant seulement après.

Par exemple, P>

# call any of them by indexing whenever you feel like it.
funcs[1]()

Output: b


0 commentaires

1
votes

Utiliser retour au lieu de Imprimer . Lorsque vous créez votre liste aa , chaque élément est appelé immédiatement, car vous avez écrit () après chaque élément - donc par conséquent chaque instruction d'impression est en cours d'exécution comme votre liste est construit. Additinally, lorsqu'une fonction ne renvoie pas explicitement une valeur, elle renvoie Aucun . Lorsque vous Imprimer (AA [1]) , vous imprimez ensuite la valeur de retour de B (), qui n'en est pas. Tellement, vous obtenez: xxx

si vous utilisez retour au lieu de Imprimer dans chaque fonction, chaque élément de la liste contiendra la Valeur renvoyée par chaque fonction (votre liste deviendrait effectivement aa = ['a', 'B', 'c', 'd'] ). Ensuite, lorsque vous Imprimer (AA [1]) , vous imprimeriez la valeur de AA dans la position 1, qui serait 'B' . xxx

Alternativement, si vous souhaitez conserver vos instructions d'impression dans chaque fonction, vous pouvez créer votre liste avec références à chaque fonction à la place. d'appeler chaque fonction - puis exécutez le résultat: xxx

en mettant () après le aa [1] , vous dites, essayez de courir tout ce qui est retourné de AA [1] . Étant donné que aa [1] contient une référence to fonction b , vous appelez efficacement b () à cette Point, qui exécutera ensuite votre impression ('B') instruction.


0 commentaires