閉包的應用與理解

2022-07-02 02:27:11 字數 1047 閱讀 4960

普通函式能完成大功能編寫,匿名函式能完成小功能**編寫,而且當作實參非常方便;而閉包比函式方便,擁有函式**的功能(類似於匿名函式),還能有**所需要使用資料;而面向對像,例項物件賦值給引數,裡面的引數和方法都有,但應用中往往只要一部分,而不是全部,故閉包的優點就能體現出來,就是比物件導向更輕量,不會有多餘的東西

def line(k,b):

def create_y(x):

print(k*x+b)

return create_y

line_1 = line(1,2)

line_1(0)

line_1(1)

line_1(2)

line_1 = line(11,22)

line_1(0)

line_1(1)

line_1(2)

輸出內容以下:

234

2233

44

**說明:

1、line方法返回的是方法create_y的引用,並定義變更k=1,b=2,賦值給變數line_1

2、執行line_1(0)是,就相當於執行方法create_y,那0就為引數x的值

3、在create_y方法中,執行k*x+b,在當前方法找不到變數和k,b,因為當前函式是內部函式,就往外部函式找,即往上一層找,在方法line中找到k=1,b=2

4、再根據這三個引數的值計算返回值

閉包就是乙個函式裡面套著另乙個函式的定義,一般情況內部函式的功能會用到外部函式的變數,把內部函式和用到的外部函式的變數整體稱之為閉包

函式、匿名函式、閉包、物件,都作為實參時,有什麼區別?

匿名函式能夠完成基本的簡單功能,傳遞是這個函式的引用,只有功能

普通函式能夠完成較為複雜的功能,傳遞是這個函式的引用,只有功能

閉包能夠將較為複雜的功能,傳遞是這個閉包中的函式以及資料,因為傳遞是功能+資料

物件能夠完成最為複雜的功能,傳遞是很多資料+很多功能,因此傳遞是功能+資料

閉包的修改,使用nonlocal 語句

js中閉包的理解和閉包的應用

通俗一點,個人理解 閉包是函式內部 定義乙個在函式作用域下的函式 作為返回值,該函式的的變數外部無法修改。function f1 f1得到乙個函式 變數的作用域是在定義時候確認,而不是執行時確認 var f1 f1 var a 200 f1 輸出 100 乙個函式變數的作用域是在定義時候的作用域 而...

mysql閉包錶應用場景 閉包的理解和應用場景

1.什麼是閉包?在了解閉包之前,我們要清楚js的另乙個知識,那就是作用域鏈。什麼是作用域鏈,比如乙個函式裡面包含著另乙個函式,裡面的函式在使用乙個變數的時候會在函式自己的作用域內去查詢這個變數,如果沒有,就會沿著作用域鏈向上級函式的作用域去查詢,這樣的乙個過程我們就叫做作用域鏈。作用域鏈是可以有函式...

閉包的理解

閉包 是指有權訪問另乙個函式作用域中的變數的函式。建立閉包的常見方式就是在乙個函式內部建立另乙個函式 在函式createcomparisonfunction 中返回了乙個匿名函式,建立了乙個閉包。當匿名函式被返回時,其作用域鏈包含外部函式createcomparisonfunction的作用域鏈,這...