Python閉包函數定義與用法分析
本文實例分析了Python閉包函數定義與用法。分享給大家供大家參考,具體如下:
python的閉包
首先python閉包的作用,一個是自帶作用域,另一個是延遲計算。
閉包是裝飾器的基礎。
閉包的基本形式:
def 外部函數名(): 內部函數需要的變量 def 內部函數名() 引用外部的變量 return 內部函數
需要注意的是:
函數的作用域關系在函數定義階段就已經固定,與調用位置無關。
無論函數在何處調用,都需要回到定義階段去找對應的作用域關系。
例子:
# -*- coding:utf-8 -*- #! python2 def tell_info(name): print("%s have 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 <module>
foo()
File "C:\py\jb51PyDemo\src\Demo\test.py", line 7, in foo
tell_info("bill")
File "C:\py\jb51PyDemo\src\Demo\test.py", line 4, in tell_info
print("%s have money %s" %(name,money))
NameError: global name 'money' is not defined
改成如下代碼:
# -*- coding:utf-8 -*- #! python2 def foo(): money = 100 name = "bill" def tell_info(): print("%s have money %s" %(name,money)) return tell_info() foo()
則輸出:
bill have money 100
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python函數使用技巧總結》、《Python數學運算技巧總結》、《Python數據結構與算法教程》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。