2010-04-22 8 views
-1

J'ai une fonction, nous l'appellerons funcA qui retourne un objet. Je veux passer cet objet à funcB. Puis-je faire ceci?Fonction d'appel dans les arguments de la fonction

funcB(funcA()); 

de sorte que funcA() est appelé en premier et les résultats sont transmis à funcB()?

+8

Quelqu'un d'autre pense que ce serait plus rapide à tester que de poser la question? –

+0

Qu'est-ce que je pensais? – Yisroel

Répondre

3

Si ça aide, Yisroel, vous pouvez penser à l'objet retourné "remplace" la fonction en place. Ainsi, après l'exécution de funcA(), elle est "remplacée" par la valeur renvoyée et transmise à funcB().

Généralement, cependant, vous ne voudriez pas faire de telles fonctions d'imbrication pour plus de 3 niveaux. Si elle commence à devenir illisible, stockez l'objet dans une variable et en passant cette variable dans la fonction suivante peut rendre votre code beaucoup plus lisible.

Donc, la réponse est oui, comme tout le monde l'a souligné.

+0

effectivement, ce qui est une odeur de code et bien que je l'ai fait avant, je recommanderais de ne pas faire cela du tout, encore moins pour 3 niveaux (?!) –

+1

Parfois, il peut être lisible. c'est-à-dire Python 3: 'print (sum (len (getLines()))' –

+0

Darko, pourquoi recommanderiez-vous contre cela? – Yisroel

4

Oui, oui vous pouvez.

0

Je ne vois aucun problème avec ceci, avez-vous essayé un échantillon?

Cela devrait fonctionner correctement.

Si vous avez fait face à un problème spécifique s'il vous plaît le signaler.

Si vous voulez passer le FoncA en tant que paramètre à funB alors vous devez appeler FoncB comme FoncB (FoncA)

0

Oui. Les paramètres de la fonction sont des expressions qui sont évaluées avant que la valeur d'expression ne soit transmise à la fonction. Une expression peut bien sûr être un appel de fonction.

0

Oui, cela devrait fonctionner comme vous le souhaitez. funcB(funcA()) appels funcA() et transmet le résultat à funcB()

Peut-être que vous craignez que cela passerait la fonction funcA à funcB()? Pour cela, la syntaxe serait funcB(funcA)

Questions connexes