[英]Python: defining a function inside of a function
我正在嘗試編寫一個可以定義函數的函數。
我嘗試了這個:
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
pass
pass
function_writer()
new_function()
但是,我的調試器抱怨沒有定義new_function,因此這顯然不是實現它的方法。
有誰知道如何做到這一點?
謝謝。
您的代碼失敗的原因與以下代碼抱怨未定義i
原因完全相同 :
def integer_writer():
i = 0
integer_writer()
i
i
是integer_writer
函數中的局部變量,而new_function
是function_writer function_writer
的局部變量。
您可以執行以下操作:
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
return new_function
new_function = function_writer()
new_function()
在這種情況下,似乎沒有太多意義(就像定義通常返回0
的函數通常不會有太多意義一樣),但是如果function_writer
要采用一些參數,以及這些參數是否在函數中使用它返回,那么您就可以做生意。
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
return new_function
fn_dynamic = function_writer()
fn_dynamic() #call new_function
也許您在尋找什么? (這幾乎是裝飾器的工作……除了它們修改傳入的方法外)
另一個解決方案(這不是一個好的建議,但可以回答問題)
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
globals()['new_function'] = new_function
function_writer()
new_function()
在python中通常避免這種類型的功能,除非您有一個非常令人震驚的原因,這絕對是您所需要的...
當然,這將導致錯誤,因為new_function
僅限於function_writer
范圍。
def function_writer():
print "I am a function writer"
def new_function():
print "I am a new function"
pass
return new_function
a = function_writer()
#output: "I am a function writer"
a()
#output: "I am a new function"
這取決於您打算如何處理。
您可以在函數內部調用它。
如果內部函數需要訪問外部函數的局部變量,則可能是這種情況。
您可以返回它以便從外部調用。
這是很常見的,例如在裝飾器的情況下。
如果要創建函數工廠,只需返回創建的函數!
def factory():
def new_func():
print 'Hello!'
return new_func
f = factory()
f()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.