Python閉包探索,釋放函數記憶的秘術

引言

hello,大家好,我是一點,專注于Python編程,如果你也對感Python感興趣,歡迎關注交流。

希望可以持續更新一些有意思的文章,如果覺得還不錯,歡迎點贊關注,有啥想說的,可以留言或者私信交流。

如果你想看什么主題的文章,歡迎留言交流,關注公號,領取編程資料。

閉包的概念

閉包說白了就是函數中嵌套函數,是定義在一個函數內部的另一個函數,內部函數可以訪問創建時所在作用域的變量,即使外部函數已經執行完畢。閉包使得這些變量的值被保持在內存中,即使外部函數已經退出。

創建閉包

在Python中,閉包通常通過嵌套函數來創建。以下是一個簡單的閉包示例:

def outer_function(x):def inner_function(y):return x + yreturn inner_function# 創建閉包
closure = outer_function(10)
print(closure(5))  # 輸出: 15

在這個例子中,outer_function 返回了 inner_function 函數,inner_function 可以訪問 outer_function 的參數 x

閉包的應用

一個技術誕生肯定不是為了裝逼,肯定是有其存在的意義。那么閉包在Python中的肯定也是有其應用的場景。

數據封裝和隱私

閉包可以用來封裝數據,實現類似于私有變量的功能。

def create_counter():count = 0def counter():nonlocal countcount += 1return countreturn countermy_counter = create_counter()
print(my_counter())  # 輸出: 1
print(my_counter())  # 輸出: 2

柯里化(Currying)

閉包可以用于實現函數的柯里化,即把接受多個參數的函數轉換成接受單一參數(或不接受參數)的函數,并且返回接受余下參數的新函數。

def add(x):def inner_add(y):return x + yreturn inner_addadd_five = add(5)
print(add_five(3))  # 輸出: 8

延遲計算

閉包可以用于延遲計算,即只在需要時才執行計算。

def lazy_computation():x = Nonedef compute():nonlocal xif x is None:x = 5return xreturn computecompute_lazy = lazy_computation()
print(compute_lazy())  # 第一次調用時計算
print(compute_lazy())  # 后續調用使用緩存的值

裝飾器

Python中的裝飾器本質上也是閉包的一種應用。

def decorator(func):def wrapper():print("Something before")func()print("Something after")return wrapper@decorator
def my_function():print("Function executed")my_function()

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

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

相關文章

docker搭建gitlab及默認密碼修改及配置修改

推薦官方文檔 https://docs.gitlab.com/17.0/ee/install/docker.html 我使用的是docker run的方式,官方文檔后面有docker-compose、swarm、k8s的部署文檔 版本說明 1:可以部署gitlab-ce社區版和gitlab-ee企業版,然后,鑒于是個人…

Mysql總結2

Mysql慢優化 在mysql中,long_query_time的值為10,當sql語句執行的時間超過這個數值時,則會被記錄到慢查詢日志中。 Mysql語句查詢流程 1、客戶端發送sql語句到服務端; 2、服務端查看是否打開了緩存,若緩存打開&…

AIGC繪畫設計基礎-建筑設計應用

一、AI及AIGC 對于AI大家都不陌生,但是AIGC這個概念好多人其實不大清楚。“AI”是指人工智能技術本身,而“AIGC”是指基于人工智能技術而生成的內容。 生成式人工智能——AIGC(Artificial Intelligence Generated Content)&…

近鄰算法詳解

近鄰算法(Nearest Neighbor Algorithm),也稱為K-近鄰算法(K-Nearest Neighbors,KNN),是一種基本的分類和回歸方法。它的工作原理非常直觀:通過測量不同特征點之間的距離來進行預測。…

使用CommandLine庫創建.NET命令行應用

CommandLine是一個.NET庫,用于創建命令行應用程序。它提供了一種簡單的方法來解析命令行參數,并且可以幫助您構建一個功能強大的命令行界面。在本文中,我們將介紹如何使用CommandLine庫創建.NET命令行應用程序。 1. 背景 在.NET開發中&#…

SpringFramework實戰指南

二、SpringFramework實戰指南 目錄 一、技術體系結構 1.1 總體技術體系1.2 框架概念和理解 二、SpringFramework介紹 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模塊2.3 SpringFramework 主要優勢 三、Spring IoC容器和核心概念 3.1 組件和組件管理概念3…

起底震網病毒的來龍去脈

2010年,震網病毒被發現,引起世界嘩然,在后續的10年間,陸陸續續有更多關于該病毒的背景和細節曝光。今年,《以色列時報》和《荷蘭日報》又披露了關于此事件的更多信息,基于這些信息,我們重新梳理…

優于InstantID!中山大學提出ConsistentID:可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像

給定一些輸入ID的圖像,ConsistentID可以僅使用單個圖像根據文本提示生成不同的個性化ID圖像。效果看起來也是非常不錯。 相關鏈接 Code:https://github.com/JackAILab/ConsistentID Paper:https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

計算機畢業設計 | springboot養老院管理系統 老人社區管理(附源碼)

1,緒論 1.1 背景調研 養老院是集醫療、護理、康復、膳食、社工等服務服務于一體的綜合行養老院,經過我們前期的調查,院方大部分工作采用手工操作方式,會帶來工作效率過低,運營成本過大的問題。 院方可用合理的較少投入取得更好…

Python數據可視化(七)

繪制 3D 圖形 到目前為止,我們一直在討論有關 2D 圖形的繪制方法和繪制技術。3D 圖形也是數據可視化的 一個很重要的應用方面,我們接下來就重點講解有關 3D 圖形的實現方法。繪制 3D 圖形通常需要導 入 mpl_toolkits 包中的 mplot3d 包的相關模塊&#x…

三、Gazebo中實現機器人仿真(小白上手)+ubuntu18.04

接上一篇文章 1、\導航 vim .bashrc \先采用Nanocar嘗試導航 關閉終端:roslaunch robot_navigation gmapping.launch simulation:true rosrun teleop_twist_keyboard teleop_twist_keyboard.py 重啟終端: cd catkin_ws source ./devel/setu…

護網經驗面試題目原版

文章目錄 一、護網項目經驗1.項目經驗**Hvv的分組和流程**有沒有遇到過有意思的邏輯漏洞?有沒有自己開發過武器/工具?有做過代碼審計嗎?有0day嗎有cve/cnvd嗎?有src排名嗎?有沒有寫過技戰法有釣魚經歷嗎?具…

【數據結構】哈夫曼樹和哈夫曼編碼

一、哈夫曼樹 1.1 哈夫曼樹的概念 給定一個序列,將序列中的所有元素作為葉子節點構建一棵二叉樹,并使這棵樹的帶權路徑長度最小,那么我們就得到了一棵哈夫曼樹(又稱最優二叉樹) 接下來是名詞解釋: 權&a…

VC++位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼

VC位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼 一、VC位移操作符<<和>>1、右位移操作符 >>&#xff1a;2、左位移操作符 <<&#xff1a; 二、邏輯驅動器插拔產生的掩碼 dbv.dbcv_unitmask 進行分析的…

如何使用Suno:免費的AI歌曲生成器

文章目錄 Suno AI 是什么&#xff1f;Suno AI 如何工作&#xff1f;選擇Suno AI的理由&#xff1a;核心優勢易于操作多樣化創作靈活的定價策略版權保障技術突破 如何使用Suno AI創作歌曲&#xff1f;第1步&#xff1a;注冊Suno AI賬戶第2步&#xff1a;輸入提示詞創建第 3 步&a…

作業-day-240522

思維導圖 使用IO多路復用實現并發 select實現TCP服務器端 #include <myhead.h>#define SER_IP "192.168.125.112" #define SER_PORT 8888int main(int argc, const char *argv[]) {int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd -1){perror("socket er…

脆皮之“字符函數與字符串函數”寶典

hello&#xff0c;大家好呀&#xff0c;感覺我之前有偷偷摸魚了&#xff0c;今天又開始學習啦。加油&#xff01;&#xff01;&#xff01; 文章目錄 1. 字符分類函數2. 字符轉換函數3. strlen的使用和模擬實現3.1 strlen 的使用3.1 strlen 的模擬1.計算器方法2.指針-指針的方…

Python的shutil模塊探索,文件操作的瑞士軍刀

hello&#xff0c;大家好&#xff0c;我是一點&#xff0c;專注于Python編程&#xff0c;如果你也對感Python感興趣&#xff0c;歡迎關注交流。 希望可以持續更新一些有意思的文章&#xff0c;如果覺得還不錯&#xff0c;歡迎點贊關注&#xff0c;有啥想說的&#xff0c;可以留…

每周刷題第三期

個人主頁&#xff1a;星紜-CSDN博客 系列文章專欄&#xff1a;Python 踏上取經路&#xff0c;比抵達靈山更重要&#xff01;一起努力一起進步&#xff01; 目錄 題目一&#xff1a;環形鏈表 題目二&#xff1a;刪除有序數組中的重復項 題目三&#xff1a;有效的括號 題…