您好,登錄后才能下訂單哦!
如何在Python中定義閉包函數?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
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
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。