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

    def inner(): 
     var2 = "def" 

我想打電話給唯一的「內在」的功能......最後的輸出應該只打印VAR2不VAR1 ...如何調用一個函數,它在python的另一個函數中定義?

預先感謝您

+0

您必須移動'inner()'併爲'var2'添加一個'print'調用。這與django和tkinter btw無關。 –

+0

爲什麼你不只有兩個不同的功能?在你的項目中有一些要求嗎? – LethalProgrammer

+0

如何在'print(var2)'沒有'print'時打印var2'?如果您甚至沒有以任何方式返回,您希望如何調用該函數?請澄清你的問題。 –

回答

0

您將無法調用inner從除out函數以外,因爲inner僅在out內部定義,除非您從out函數外部創建對inner的引用。此外,inner不會輸出任何內容,因爲它沒有打印語句。

爲了解決這個問題,你有兩個選擇:

  • inner在更廣的範圍內(即外out),並給它添加一個print(var1)聲明。
  • 如果需要有inner功能在裏面out然後就返回inner作爲closureout,用print語句也在裏面inner;或者只是從out內部調用它。這有一個副作用,即在返回閉包之前還執行out內的任何語句。
+0

「你將無法從out函數外部調用內部」< - Well *技術上*可以強制外部函數在第一次調用時在'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

我錯過了冒號沒有注意到..你會提供未定義的日誌,我在這裏解釋了Python中內部函數的用法。 – LethalProgrammer

1

如果您不想運行「out」功能的某個部分,則可以使用參數。

def out(choice=True): 
    if choice : 
    var1 = "abc" 
    print(var1) 
else : 
    def inner(): 
     var2 = "def" 
     print(var2) 
    inner() 
相關問題