2016-09-03 1 views
-1

に機能して関数を呼び出す方法、感謝私はpythonで機能に関する問題を持っている、と私は最も簡単な方法であなたの例を挙げてください、プログラミングにはかなり新しいですパイソン

は、私が電話をかけたいですこのような関数内の関数:私はfunc1の内側にfunc1のかFUNC3内func2を呼び出すことができますどのように

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

func1(5).func2() 

?はい、私はfunc1、func2、func3が必要です。クラスを使いたくないです。

+1

他の関数... func2()とfunc3()が定義されたのと同じ方法... –

+1

あなたはそれらを呼び出してみましたか?私はなぜあなたがこれをしたいと思うのか分かりませんが。 –

+1

と呼ぶだけですか? ..... –

答えて

1

あなたはそれを呼び出しようとしましたか? とヒントは:あなたは本当にこのような単純なタスクを実行するための新しい機能を必要はありませんがインデント

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

私は何かのようにすることができます:func1()。func2()??? –

+0

うん、JS内のように** b **が両方の関数で表示されます。スコープは機能しています。 –

+1

@MinhHiếuĐàoいいえあなたは__cannot__ do 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 

クロージャーについて覚えているかもしれ別の関数内の関数を呼び出し、

+0

これは' func1'の中の 'func2'か' func3'を呼びません... –

+0

これは私ができることです:func1(5)。 func2 ?? –

+0

最初にfunct1は(タプルで)2つの関数をパックして返します。このようにこの関数を呼び出すことはできません。 –

0

の作品

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 

、最終的には、たとえば入力、5を使用して関数を呼び出す:

func1(5) 
0

あり、必要な構文を達成するための方法があるが、それは非常に不規則であり、私はそれを使用して反対を強くアドバイスをでしょう。それはハッキーです。

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 

さて、インタプリタシェルの内側:

>>> 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 
>>> 

は、グイドのために、これを実行しないでください。

0

機能はfunc2オブジェクトとfunc3func1が明示的に呼び出し元の環境にそれらを返さない限り、彼らはfunc1の外に存在しないことを意味機能func1にローカルです。

だから、あなたは(あなたの投稿コードが何をしようとすると)、これらの機能func1の外を呼び出したい場合は、このような何かをする必要があります。

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() 

出力

18.0 
1.2 

f2およびf3は、aパラメータの値をfunc1に渡します。作成されました。別のaを使用する場合は、単にfunc1を再度呼び出します。呼び出すたびにfunc2func3関数オブジェクトの新しいインスタンスが作成されます。私はfunc15.0ではなく5の引数を渡す


別に

注意。これは、のfunc3がフロート分割を使用することを保証するためです。これは、Python 3には必要はありません、あなたはあなたのスクリプトの先頭に

from __future__ import division 

を置くことができるのPython 2でのPythonの3動作を取得します。

+0

ありがとう –

関連する問題