2016-09-03 2 views
-1

J'ai un problème sur la fonction en python, et je suis assez nouveau dans la programmation, veuillez donner vos exemples dans la façon la plus simple, grâceComment appeler une fonction dans une fonction en python

Je veux appeler une fonction dans une fonction comme celle-ci:

def func1 (a): 
    b = a + 1 
    def func2(): 
     c = b*3 
     print c 
    def func3(): 
     c = b/5 
     print c 

func1(5).func2() 

comment puis-je appeler func2 l'intérieur func1 ou fonc3 à l'intérieur func1? et oui, j'ai besoin de func1, func2 et func3, je ne veux pas utiliser la classe

+1

De la même manière que vous appelez une autre fonction ... 'func2()' et 'func3()' après leur définition ... –

+1

Avez-vous essayé de les appeler? Bien que je ne puisse pas voir pourquoi vous voudriez faire ceci. –

+1

suffit de l'appeler? ..... –

Répondre

1

Avez-vous essayé de l'appeler? et TIPS: Rappelez-vous au sujet de tiret

def func1 (a): 
    b = a + 1 
    def func2(): 
     c = b*3 
     print c 
    def func3(): 
     c = b/5 
     print c 
    funct2() #function called , WORKS ! 

+0

alors je peux faire quelque chose comme: func1(). Func2() ??? –

+0

Oui, ** b ** sera visible pour les deux fonctions, tout comme JS fonctionnent. –

+1

@ MinhHiếuĐào Non vous __cannot__ fais 'func1(). Func2()' –

0
def func1 (a): 
    b = a + 1 
    def func2(): 
     c = b*3 
     print c 
    def func3(): 
     c = b/5 
     print c 
    return func2,func3 

fermeture peut fonctionne

+0

Cela n'appelle pas 'func2' ou' func3''a l'intérieur de 'func1' ... –

+0

alors je peux faire ceci: func1 (5). func2 ?? –

+0

Tout d'abord, funct1 retourne deux fonctions (en tuple) de sorte que vous ne puissiez pas appeler cette fonction comme ceci. –

0

Bien que vous n'avez pas vraiment besoin de nouvelles fonctions pour faire des tâches simples, appeler des fonctions dans une autre fonction serait quelque chose comme ceci:

def func2(b): 
    return b*3 

def func3(b): 
    return b/5 

def func1(a): 
    b = a + 1 
    c = func2(b) 
    print c 
    c = func3(b) 
    print c 

et enfin appeler votre fonction avec une entrée, 5 par exemple:

func1(5) 
0

Il est un moyen d'atteindre la syntaxe que vous voulez, mais il est très irrégulière et je voudrais fortement conseiller contre son utilisation. C'est hacky.

def func1(a): 
    b = a + 1 
    def func2(): 
     c = b*3 
     print c 
    def func3(): 
     c = b/5 
     print c 
    func1.func2 = func2 
    func1.func3 = func3 
    return func1 

Maintenant, à l'intérieur du shell interprète:

>>> def func1(a): 
...  b = a + 1 
...  def func2(): 
...  c = b*3 
...  print c 
...  def func3(): 
...  c = b/5 
...  print c 
...  func1.func2 = func2 
...  func1.func3 = func3 
...  return func1 
... 
>>> func1(5).func2() 
18 
>>> 

S'il vous plaît, pour Guido, ne le font pas.

0

Les objets fonction func2 et func3 sont locales à la fonction func1, ce qui signifie qu'ils n'existent pas en dehors de func1 à moins func1 les renvoie explicitement à l'environnement appelant.

Donc, si vous voulez appeler ces fonctions en dehors de func1 (comme votre code affiché tente de le faire), vous devez faire quelque chose comme ceci:

def func1(a): 
    b = a + 1 
    def func2(): 
     c = b*3 
     print c 
    def func3(): 
     c = b/5 
     print c 
    return func2, func3 

f2, f3 = func1(5.0) 
f2() 
f3() 

sortie

18.0 
1.2 

f2 et f3 utilisera la valeur du paramètre a qui a été donné à func1 quand ils ont été créés. Si vous souhaitez utiliser un a différent, appelez simplement func1 à nouveau; Chaque fois que vous l'appelez, de nouvelles instances des objets fonction func2 et func3 sont créées.


En plus

Notez que je suis passé un argument de 5.0 plutôt que 5-func1. C'est pour s'assurer que b/5 en func3 utilise la division flottante. Ce n'est pas nécessaire en Python 3, et pour obtenir le comportement Python 3 en Python 2, vous pouvez mettre

from __future__ import division 

en haut de votre script.

+0

Merci beaucoup –