"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])
3 Réponses :
Vos fonctions ne renvoient rien. Ils impriment une lettre et ne renvoient aucune lettre.
Utilisez P>
def a():
print ('a')
return 'a'
...
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 Par exemple, P> # call any of them by indexing whenever you feel like it.
funcs[1]()
Output: b
Utiliser si vous utilisez Alternativement, si vous souhaitez conserver vos instructions d'impression dans chaque fonction, vous pouvez créer votre liste avec références em> à chaque fonction à la place. d'appeler chaque fonction - puis exécutez le résultat: p> en mettant retour code> au lieu de Imprimer code>. Lorsque vous créez votre liste aa code>, chaque élément est appelé immédiatement, car vous avez écrit () code> 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 code>. Lorsque vous Imprimer (AA [1]) CODE>, vous imprimez ensuite la valeur de retour de B (), qui n'en est pas. Tellement, vous obtenez: retour code> au lieu de Imprimer code> dans chaque fonction, chaque élément de la liste contiendra la Valeur renvoyée em> par chaque fonction (votre liste deviendrait effectivement aa = ['a', 'B', 'c', 'd'] code>). Ensuite, lorsque vous Imprimer (AA [1]) CODE>, vous imprimeriez la valeur de AA code> dans la position 1, qui serait 'B' code>. p> () code> après le aa [1] code> , vous dites, essayez de courir tout ce qui est retourné de AA [1] code> em>. Étant donné que aa [1] code> contient une référence em> to fonction b code>, vous appelez efficacement b () code> à cette Point, qui exécutera ensuite votre impression ('B') code> instruction. p> p>
Vos fonctions ne retournent rien.
Changez votre
impression (#) code> surretour # code>Vous appelez explicitement toutes vos fonctions ici:
AA = [A (), B (), C (), D (), D ()] code>.Vos fonctions sont i> courir, bien que non automatiquement; Vous les appelez explicitement dans l'expression qui définit
aa code>. 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.