2017-04-06 13 views
0
def out(): 
    var1 = "abc" 
    print(var1) 

    def inner(): 
     var2 = "def" 

は、私が唯一の「インナー」機能を呼び出したい...のみ印刷する必要があり、最終的な出力は 関数を呼び出す方法は、別の関数で定義されていますか?

あなたはから innerを呼び出すことができなくなります

+0

'inner()'を移動し、 'var2'の' print'呼び出しを追加する必要があります。これはdjangoとtkinter btwとは無関係です。 –

+0

なぜあなたは2つの異なる機能を持っていませんか?それはあなたのプロジェクトのいくつかの要件ですか? – LethalProgrammer

+0

'print(var2)'がないときに、 'var2'をどのように印刷したいのですか?どのように関数を返さない場合でも、関数をどのように呼び出したいのですか?あなたの質問を明確にしてください。 –

答えて

0

事前にありがとう... VAR1ないVAR2 out関数の外部からinnerへの参照を作成しないかぎり、inneroutの中でのみ定義されているため、関数outの外にあります。さらに、innerはprintステートメントを持たないので何も出力しません。これに対処するには

は、次の2つのオプションがあります:

  • (すなわちout外)より広い範囲に入れinnerをし、それにprint(var1)ステートメントを追加します。
  • それはinner機能がout内側にある持っている必要であれば、単にもinner内のprint文で、outからclosureとしてinnerを返します。またはoutの中から電話するだけです。これには、クロージャを返すまでoutの中にあるステートメントを実行するという副作用があります。
+0

"あなたはout関数の外からinnerを呼び出すことはできません" < - うーん、技術的には、最初の呼び出しで外部関数に 'globals()'の内部関数への参照を強制することは可能です。あなたが今やりたいことではありません。 – timgeb

0

方法あなたのつらいがネストされた関数として呼び出されます。

あなたは情報に関するnested function in Pythonため、この答えをチェクすることができます。

についてclosure

別の方法があるいくつかの他の情報、

def fun1(): 
    x = 11 
    def fun2(a=a): 
     print x 
    fun2() 

fun1() 

出力:

prints 11 

例2:

def f1(x): 
    def add(y): 
     return x + y 
    return add 

res = f1(5) 
print(res(10)) # prints 15 
+0

あなたの最初の例は間違っています。 aが定義されていないというエラーが返されます。また、 'def fun2(a = a)'の最後にコロンが必要です。 – alanf

+0

私は結腸didntの通知を逃したこと..あなたは定義されていないログを提供しますか?ここではPythonで内部関数の使用法を説明しました。 – LethalProgrammer

1

「out」関数の一部を実行したくない場合は、パラメータを使用できます。

def out(choice=True): 
    if choice : 
    var1 = "abc" 
    print(var1) 
else : 
    def inner(): 
     var2 = "def" 
     print(var2) 
    inner() 
関連する問題