Python閉包函式定義與用法分析

2022-09-28 09:15:09 字數 1278 閱讀 6407

python的閉包

首先python閉包的作用,乙個是自帶作用域,另乙個是延遲計算。

閉包是裝飾器的基礎。

閉包的基本形式:

def 外部函式名():

內部函式需要的變數

def 內部函式名()

引用外部的變數

return 內部函式

需要注意的是:

函式的作用域關係在函式定義階段就已經固定,與呼叫位置無關。

無論函式在何處呼叫,都需要回到定義階段去找對應的作用域關係。

例子:# -*- coding:utf-8 -*-

#! python2

def tell_info(name):

"%s h**e money %s" %(name,money))

def foo():

money = 100

tell_info("bill")

foo()

該**tell_info("bill")是在foo函式中調程式設計客棧用,但仍然需要回到定義階段去找作用域關係,而定義的時候引用的money就是全域性的money,當全域性不存在money的時候則報錯,丟擲未定義錯誤。

所以該段**會報錯,如下所示:

traceback (most recent call last):

file "c:\py\jb51pydemo\src\demo\test.py", line 8, in

foo()

file "c:\py\jb51pydemo\src\demo\test.py", line 7, in foo

tell_info("bill")

file "c:www.cppcns.com\py\jb51pydemo\src\demo\test.py", line 4, in tell_info

print("%s h**e money %s" %(name,money))

nameerror: global www.cppcns.comname 'money' is not defined

改成如下**:

# -*- coding:utf-8程式設計客棧 -*-

#! python2

def foo():

money = 100

name = "bill"

def tell_info():

print("%s h**e money %s" %(name,money))

return tell_info()

foo()

則輸出:

bill h**e money 100

python函式巢狀閉包 閉包與巢狀函式

沒有區別,因為沒有閉合函式,不是真的。有closures,但這一術語指的是在外部和內部範圍中儲存變數的技術。只剩下巢狀函式。在 巢狀函式只是在另乙個函式內部定義的函式 def outer def inner 當outer 定義了乙個inner 然後也使用的名稱,則該變數名稱為閉包單元,儲存在inne...

Python 函式物件與閉包

函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用。def index print from index a index a def foo x,y,func print x,y func def bar print from bar foo 1,2,bar 1 2 from b...

python閉包函式

python函式閉包 closure 比較抽象,在函式式程式設計中運用地比較多,通俗點就是子函式 內嵌函式 呼叫上層函式 閉包函式 的變數,且上層函式 閉包函式 接收的變數會儲存在子函式 內嵌函式 的變數中可以供子函式 內嵌函式 呼叫 概念很抽象,但是實現的例子還是比較容易理解的,這裡記住實現函式閉...