簡體   English   中英

Python:在函數內部定義函數

[英]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

iinteger_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"

這取決於您打算如何處理。

  1. 您可以在函數內部調用它。

    如果內部函數需要訪問外部函數的局部變量,則可能是這種情況。

  2. 您可以返回它以便從外部調用。

    這是很常見的,例如在裝飾器的情況下。

如果要創建函數工廠,只需返回創建的函數!

def factory():
    def new_func():
        print 'Hello!'
  return new_func

f = factory()
f()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM