乱人伦 国语对白海角社区,五月激情丁香婷婷综合中文字幕,欧美伊人婷婷久久五月综合,亚洲精品无amm毛片,亚洲男人第一无码AV网站,国产日韩欧美丝袜一区二区,亚洲一区精品在线观看

Python基础之闭包-线上赌钱下载安装

Python基础之闭包

2026-01-17 12:03:39投稿人:線上賭錢下載安裝(南京)有限公司圍觀2784763 評論

Python基礎之閉包

一.閉包的定義:

在一個函數的內部,再定義一個函數(內部函數) 。這個內部函數引用了外部函數的變量,并且外部函數返回這個內部函數,我們把這個使用外部函數變量的內部函數稱為閉包。

簡而言之 ,閉包就是能夠讀取外部函數內的變量的函數。

例如 :

def f1():  # f1外部函數    n = 999  # n:外部函數的變量    def f2():  # 內部函數        print(n)  # f2中引用f1的變量    return f2  # 外部函數f1返回內部函數f2,函數f2即是閉包#調用法一f1()()# 調用法二# result=f1()# result()

形成閉包的兩個條件:

  • 函數的返回值必須是被包函數對象(函數名)
  • 閉包中必須引用了外層函數作用域內的變量或者形參

二.閉包的用途

可以讀取函數內部的變量

將一些變量的值始終保存到內存中

1.讀取函數內部的變量

在一般情況下,在函數外部我們是不能訪問到函數內部的變量的 。但是 ,有時想要在函數外部能夠訪問到函數內部的變量 ,那么就可以使用閉包 。

例如:

def f1():    a=100print(a) #NameError: name 'a' is not defined

上面的代碼可以看出 ,print(a)會拋異常NameError: name 'a' is not defined。在函數f1的外面無法訪問它的變量的 。

在函數f1里面定義一個閉包函數就可以訪問到了

例如 :

def f1():    a = 100    def f2():        return a    return f2result = f1()a = result()print(a)

2.將一些變量的值始終保存到內存中

def f1(n1):  # 外部函數    def f2(n2):  # 內部函數        result = n1 + n2  # 內部函數引用了外部函數的變量n1        print('計算結果:', result)    return f2f=f1(1) #創(chuàng)建閉包實例#執(zhí)行閉包f(2)f(3)

運行結果:

計算結果: 3計算結果: 4

通過上面的輸出結果可以看出閉包保存了外部函數內的變量n1的值1 ,每次執(zhí)行閉包都是在n1 = 1 基礎上進行計算的。

三.閉包的缺點

1.由于閉包會使得函數中的變量都被保存在內存中 ,會增加內存消耗,所以不能濫用閉包,否則會造成程序的性能問題,可能導致內存泄露

2.閉包無法改變外部函數局部變量指向的內存地址

3.返回閉包時,返回函數不要引用任何循環(huán)變量 ,或者后續(xù)會發(fā)生變化的變量

四.判斷一個函數是否是閉包

判斷一個函數是不是閉包 ,可以查看它的closure屬性 。如果該函數是閉包,查看該屬性將會返回一個cell對象組成的tuple 。如果我們分別對每個cell對象查看其cell_contents屬性,返回的內容就是閉包引用的自由變量的值 。

def outer(args):    a = 10    b = 15    c = 25    def inner():        return a + b+args    return innerout = outer(4)  # 閉包實例print(out.__closure__)

運行結果:

(  ,   ,   )

閉包的__closure__方法  ,可以展示出閉包儲存了外部函數的兩個變量,cell的內存地址是什么 ,在cell里面儲存的對象類型是int