def out():
var1 = "abc"
print(var1)
def inner():
var2 = "def"
我想打電話給唯一的「內在」的功能......最後的輸出應該只打印VAR2不VAR1 ...如何調用一個函數,它在python的另一個函數中定義?
預先感謝您
def out():
var1 = "abc"
print(var1)
def inner():
var2 = "def"
我想打電話給唯一的「內在」的功能......最後的輸出應該只打印VAR2不VAR1 ...如何調用一個函數,它在python的另一個函數中定義?
預先感謝您
您將無法調用inner
從除out
函數以外,因爲inner
僅在out
內部定義,除非您從out
函數外部創建對inner
的引用。此外,inner
不會輸出任何內容,因爲它沒有打印語句。
爲了解決這個問題,你有兩個選擇:
inner
在更廣的範圍內(即外out
),並給它添加一個print(var1)
聲明。inner
功能在裏面out
然後就返回inner
作爲closure從out
,用print語句也在裏面inner
;或者只是從out
內部調用它。這有一個副作用,即在返回閉包之前還執行out
內的任何語句。「你將無法從out函數外部調用內部」< - Well *技術上*可以強制外部函數在第一次調用時在'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
我錯過了冒號沒有注意到..你會提供未定義的日誌,我在這裏解釋了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無關。 –
爲什麼你不只有兩個不同的功能?在你的項目中有一些要求嗎? – LethalProgrammer
如何在'print(var2)'沒有'print'時打印var2'?如果您甚至沒有以任何方式返回,您希望如何調用該函數?請澄清你的問題。 –