Python進階如何修改閉包內使用的外部變數?

金木大大大發表於2023-12-05

  在Python中,閉包是指一個函式物件,它可以訪問並記住在其定義範圍內的非全域性變數。閉包可以在函式內部定義一個內嵌函式,並返回內嵌函式作為結果。內嵌函式可以訪問外部函式的變數,即使外部函式已經執行完畢。


  當閉包內部使用外部變數時,如果想要修改這個外部變數的值,可以透過以下兩種方式實現:


  使用nonlocal關鍵字:在閉包內部,可以透過nonlocal關鍵字宣告一個變數,使得閉包內部的變數與外部函式的變數繫結在一起。這樣,當在閉包內部修改這個變數時,會直接修改外部函式的變數。


  示例:


  def outer_func():


  x=10


  def inner_func():


  nonlocal x


  x+=1


  print(x)


  return inner_func


  closure=outer_func()


  closure()#輸出11


  closure()#輸出12


  在上面的示例中,inner_func是一個閉包函式,它使用了外部函式outer_func的變數x。透過在inner_func中使用nonlocal關鍵字宣告x,可以在閉包內部修改外部函式的變數x的值。


  將外部變數封裝成可變物件:如果外部變數是不可變物件(如數字、字串、元組等),則無法直接修改其值。但可以將其封裝成可變物件(如列表),然後在閉包內部修改列表中的元素。


  示例:


  def outer_func():


  x=[10]


  def inner_func():


  x[0]+=1


  print(x[0])


  return inner_func


  closure=outer_func()


  closure()#輸出11


  closure()#輸出12


  在上面的示例中,將外部變數x封裝成了一個列表,然後在閉包內部透過修改列表的元素來修改外部變數的值。


  無論是使用nonlocal關鍵字還是封裝成可變物件,都可以實現在閉包內部修改外部變數的值。具體選擇哪種方式取決於外部變數的型別和使用場景。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70032566/viewspace-2998805/,如需轉載,請註明出處,否則將追究法律責任。

相關文章