def out():
var1 = "abc"
print(var1)
def inner():
var2 = "def"
は、私が唯一の「インナー」機能を呼び出したい...のみ印刷する必要があり、最終的な出力は 関数を呼び出す方法は、別の関数で定義されていますか?
あなたはからinner
を呼び出すことができなくなります
def out():
var1 = "abc"
print(var1)
def inner():
var2 = "def"
は、私が唯一の「インナー」機能を呼び出したい...のみ印刷する必要があり、最終的な出力は 関数を呼び出す方法は、別の関数で定義されていますか?
あなたはからinner
を呼び出すことができなくなります
事前にありがとう... VAR1ないVAR2 out
関数の外部からinner
への参照を作成しないかぎり、inner
はout
の中でのみ定義されているため、関数out
の外にあります。さらに、inner
はprintステートメントを持たないので何も出力しません。これに対処するには
は、次の2つのオプションがあります:
out
外)より広い範囲に入れinner
をし、それにprint(var1)
ステートメントを追加します。inner
機能がout
内側にある持っている必要であれば、単にもinner
内のprint文で、out
からclosureとしてinner
を返します。またはout
の中から電話するだけです。これには、クロージャを返すまでout
の中にあるステートメントを実行するという副作用があります。"あなたはout関数の外からinnerを呼び出すことはできません" < - うーん、技術的には、最初の呼び出しで外部関数に 'globals()'の内部関数への参照を強制することは可能です。あなたが今やりたいことではありません。 – timgeb
方法あなたのつらいがネストされた関数として呼び出されます。
あなたは情報に関する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
あなたの最初の例は間違っています。 aが定義されていないというエラーが返されます。また、 'def fun2(a = a)'の最後にコロンが必要です。 – alanf
私は結腸didntの通知を逃したこと..あなたは定義されていないログを提供しますか?ここではPythonで内部関数の使用法を説明しました。 – LethalProgrammer
「out」関数の一部を実行したくない場合は、パラメータを使用できます。
def out(choice=True):
if choice :
var1 = "abc"
print(var1)
else :
def inner():
var2 = "def"
print(var2)
inner()
'inner()'を移動し、 'var2'の' print'呼び出しを追加する必要があります。これはdjangoとtkinter btwとは無関係です。 –
なぜあなたは2つの異なる機能を持っていませんか?それはあなたのプロジェクトのいくつかの要件ですか? – LethalProgrammer
'print(var2)'がないときに、 'var2'をどのように印刷したいのですか?どのように関数を返さない場合でも、関数をどのように呼び出したいのですか?あなたの質問を明確にしてください。 –