python 命名空間與作用域 可變與不可變對象 閉包

python 命名空間與作用域 可變與不可變對象 閉包

img
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 作用域規則順序為: L->E->G->B 如果變量在局部內找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再找不到就去內置中找。

  • 若要在函數內使用global variable,則要么使用global聲明,要么通過函數參數傳遞。

  • Python 中只有模塊(module),類(class)以及函數(def、lambda)才會引入新的作用域,其它的代碼塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的。

  • 相對于nonlocal,global 關鍵字可以用在任何地方,包括最上層函數中和嵌套函數中,即使之前未定義該變量,global 修飾后也可以直接使用,而 nonlocal 關鍵字只能用于嵌套函數中,并且外層函數中定義了相應的局部變量,否則會發生錯誤。函數內global聲明未定義的變量x,只要函數中對x符值了,則x就成為了一個全局變量,可以在后續程序中使用。(nonlocal無此特性,見下圖:不能通過nonlocal聲明一個未定義的量,即使在nonlocal空間/下方標黃的部分/聲明一個全局,也不能通過nonlocal關聯這個變量a)

在這里插入圖片描述
在這里插入圖片描述


對于可變對象類型,地址不固定,而是創建一個可變對象時,找到一個地址,作為這個對象實例。所以相同值的兩個對象也是不同地址的兩個對象,也因此,對對象如列表進行操作,不會影響這個列表的地址,只會對地址擴充。而不可變數據類型:變量所指向的內存地址處的值是不可以被改變。 因此對于兩個相同值的對象,他們指針都指向同一個地址。


閉包:在一些語言中,在函數中可以(嵌套)定義另一個函數時,如果內部的函數引用了外部的函數的變量,則可能產生閉包。閉包可以用來在一個函數與一組“私有”變量之間創建關聯關系。在給定函數被多次調用的過程中,這些私有變量能夠保持其持久性。

閉包作用就是:

  • 作用1:閉包是將外層函數內的局部變量和外層函數的外部連接起來的一座橋梁。(并且能保證全局命名空間不被污染)
  • 作用2:將外層函數的變量持久地保存在內存中。(這一步是因為調用閉包函數的父函數時,會返回閉包函數,如果這個返回被賦值到一個全局變量,則由于閉包函數的存在依賴于父函數中的nonlocal變量,導致父函數不會在調用后被垃圾回收機制(garbage collection)回收)

ref:

python 命名空間和作用域詳解 - 知乎

閉包,看這一篇就夠了——帶你看透閉包的本質,百發百中-CSDN博客

【Python面試】 說說Python可變與不可變數據類型?-騰訊云開發者社區-騰訊云

Python閉包(Closure)詳解 - 知乎

閉包,看這一篇就夠了——帶你看透閉包的本質,百發百中-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74554.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74554.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74554.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安裝 TabbyAPI+Exllamav2 和 vLLM 的詳細步驟

在 5090 顯卡上成功安裝 TabbyAPIExllamav2 和 vLLM 并非易事,經過一番摸索,我總結了以下詳細步驟,希望能幫助大家少走彎路。 重要提示: 用戶提供的 PyTorch 安裝使用了 cu128,這并非標準 CUDA 版本。請根據你的系統實…

使用url-loader處理圖片等資源文件

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

EIP-712:類型化結構化數據的哈希與簽名

1. 引言 以太坊 EIP-712: 類型化結構化數據的哈希與簽名,是一種用于對類型化結構化數據(而不僅僅是字節串)進行哈希和簽名 的標準。 其包括: 編碼函數正確性的理論框架,類似于 Solidity 結構體并兼容的結構化數據規…

contourformer:實時的輪廓分割transformer

論文地址:https://arxiv.org/abs/2501.17688 github:https://github.com/talebolano/Contourformer 模型結構 框架建立在 D-FINE 對象檢測模型之上,并將邊界框的回歸擴展到輪廓的回歸。為了實現高效的訓練,Contourformer 采用迭代方法進行輪廓變形,并引入降噪機制來加速…

【JavaScript】原型鏈 prototype 和 this 關鍵字的練習(老虎機)

這個老虎機練習主要考察JavaScript中的原型鏈(prototype)和this關鍵字的使用。 主要思路 創建三個輪盤(reels)實例:我們需要創建3個獨立的輪盤對象,它們都委托(delegate)到基礎的ree…

vue項目data functions should return an object

在vue項目中提示錯誤,data functions should return an object Message.error(err)錯了,Message.error()是element-ui的組件,只能接受字符串,不能接受對象。 改為Message.error(err.message)就好了 我的錯誤是 Message.error(er…

leetcode刷題 - 數組理論基礎

數組是內存空間連續存儲、相同類型數據的集合。遍歷方式:下標索引 下標:從 0 開始 數組的元素不能刪除,只能覆蓋 定義一維數組: int arr0[10]; int arr1[10] { 100, 90,80,70,60,50,40,30,20,10 }; int arr2[ ] { 100,90,80,7…

狀態機思想編程練習

狀態機實現LED流水燈 本次實驗,我們將利用狀態機的思想來進行Verilog編程實現一個LED流水燈,并通過Modelsim來進行模擬仿真,再到DE2-115開發板上進行驗證。 ? 首先進行主要代碼的編寫。 module led (input sys_clk,input sys_…

數據結構|排序算法(一)快速排序

一、排序概念 排序是數據結構中的一個重要概念,它是指將一組數據元素按照特定的順序進行排列的過程,默認是從小到大排序。 常見的八大排序算法: 插入排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序、歸并排序、基數排序 二、快速…

如何確保MQ消息隊列不丟失:Java實現與流程分析

前言 在分布式系統中,消息隊列(Message Queue, MQ)是核心組件之一,用于解耦系統、異步處理和削峰填谷。然而,消息的可靠性傳遞是使用MQ時需要重點考慮的問題。如果消息在傳輸過程中丟失,可能會導致數據不一…

關于termux運行pc交叉編譯的aarch64 elf的問題

在Linux系統上交叉編譯Nim程序到Android Termux環境需要特殊處理,以下是詳細的解決方案: 問題根源分析 ??ABI不兼容?? Android使用bionic libc而非標準glibc,直接編譯的Linux ARM二進制無法直接運行 ??動態鏈接錯誤?? 默認編譯會鏈…

為PXIe控制器配置NI Linux實時操作系統安裝軟件

一、升級BIOS 使用NI Linux Real-Time操作系統的PXI硬件支持頁面來確定NI Linux Real-Time是否支持您的PXIe控制器,以及是否需要更新控制器BIOS。 按照BIOS下載頁面上的“安裝說明”部分安裝BIOS更新。 注意:NI在NI 2020軟件版本中刪除對cRIO的Phar Lap和…

《汽車噪聲控制》課程作業

作業內容 在MATLAB繪制給出單個正弦波或余弦波的時域圖和頻域圖 繪制實測數據的時域圖和頻域圖 圖1 單個正弦波的時頻圖 圖1 單個正弦波的時頻圖 % 正弦波參數設置 f0 1000; % 信號頻率 1kHz Fs 16384; % 采樣頻率 16kHz T 0.05; % 信號持續時間 0.05秒 A 0.8; % 信號幅度…

Baklib內容中臺AI技術協同應用

內容中臺與AI協同創新 在數字化轉型進程中,內容中臺通過人工智能技術的深度整合,正重塑企業信息管理范式。以Baklib內容中臺為例,其通過智能語義分析引擎解析用戶意圖,結合知識圖譜構建技術動態關聯碎片化信息,實現從…

壓測工具開發實戰篇(二)——構建側邊欄以及設置圖標字體

你好,我是安然無虞。 文章目錄 構建側邊欄QtAwesome使用調整側邊欄寬度了解: sizePolicy屬性偽狀態 在閱讀本文之前, 有需要的老鐵可以先回顧一下上篇文章: 壓測工具開發(一)——使用Qt Designer構建簡單界面 構建側邊欄 我們要實現類似于下面這樣的側邊欄功能: …

Axure RP9.0教程: 查詢條件隱藏與顯示(綜合了動態面板狀態切換及展開收縮效果實現)

文章目錄 引言I 原型顯示/隱藏搜索框思路步驟詳細操作II 若依 ruoyi 顯示/隱藏搜索框 & 顯示隱藏列自定義設置顯示隱藏列顯示/隱藏搜索框引言 數據篩選有大量的查詢條件時,可以選擇查詢隱藏效果。 I 原型顯示/隱藏搜索框 綜合了動態面板狀態切換及展開收縮效果實現 思…

解鎖工業通信:Profibus DP到ModbusTCP網關指南!

解鎖工業通信:Profibus DP到ModbusTCP網關指南! 在工業自動化領域,隨著技術的不斷進步和應用場景的日益復雜,不同設備和系統之間的通訊協議兼容性問題成為了工程師們面臨的一大挑戰。尤其是在Profibus DP和Modbus/TCP這兩種廣泛應…

3維格式轉換(二)

基于python的三維模型演化可視化 本項目的主要內容為總結了3種不同的可視化方案( trimesh + matplotlib 庫、 pyvista 庫、 vedo 庫),并通過案例對可視化效果進行展示,最終通過模型動態演化案例給出最佳效果的可視化方案 本期結構圖為 本期博客結構圖 0 環境搭建 項目開…

docker導出image再導入到其它docker中

導出image docker save -o gxc_tenant.tar vue_tenant:1.0 eitc_tenant:1.0 redis:latest docker.io/mysql:8.0 minio/minio導入image docker load -i gxc_tenant.tar

Spring-IOC部分

Spring-IOC部分 1.SpringBean的配置詳解(Bean標簽) (1)scope 默認情況下,單純的Spring環境Bean的作用范圍有兩個:Singleton和Prototype singleton:單例,默認值,Spring…