Python進階如何修改閉包內使用的外部變數?
在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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python進階(12)閉包Python
- Python如何訪問閉包中的變數Python變數
- Python 中的閉包和自由變數Python變數
- Python進階之閉包和裝飾器Python
- Python閉包和儲存自由變數Python變數
- Python高階--閉包Python
- 閉包裡的自由變數變數
- Python閉包區域性變數問題Python變數
- Python進階:如何將字串常量轉化為變數?Python字串變數
- 變數的作用域--js閉包變數JS
- 進階11 閉包、定時器、BOM定時器
- Transact-SQL 示例 - 如何在拼接的動態sql內呼叫外部變數SQL變數
- python高階-閉包-裝飾器Python
- JavaScript進階系列01,函式的宣告,函式引數,函式閉包JavaScript函式
- 【譯】JavaScript進階 從實現理解閉包JavaScript
- Zsh 開發指南(第十一篇 變數的進階內容)變數
- JavaScript閉包與變數的經典問題JavaScript變數
- Python高階 -- 11 閉包、裝飾器Python
- 前端入門19-JavaScript進階之閉包前端JavaScript
- Rust 程式設計影片教程(進階)——007_1 使用外部包例子複習Rust程式設計
- Python的閉包Python
- 迴圈輸出——閉包、變數作用域變數
- 修改jar包內的classJAR
- Rust 程式設計視訊教程(進階)——007_1 使用外部包例子複習Rust程式設計
- 【Python語法】循序漸進理解閉包Python
- 測開之函式進階· 第6篇《閉包》函式
- python進階(一)變數與資料型別、python之禪Python變數資料型別
- Spark 外部變數和BroadCast變數的區別Spark變數AST
- 外部程式::Vim進階索引[6]索引
- C#由變數捕獲引起對閉包的思考C#變數
- 閉包 pythonPython
- Go | 閉包的使用Go
- go語言採坑:閉包共享變數問題Go變數
- 【譯】終極指南:變數提升、作用域和閉包變數
- python基礎知識之函式初階——閉包Python函式
- js閉包及閉包的經典使用場景JS
- 聊聊 Python 中的閉包Python
- Rust 程式設計影片教程(進階)——025_4 訪問或者修改可變靜態變數Rust程式設計變數