Python閉包函數(shù)定義與用法分析
本文實例分析了Python閉包函數(shù)定義與用法。分享給大家供大家參考,具體如下:
python的閉包
首先python閉包的作用,一個是自帶作用域,另一個是延遲計算。
閉包是裝飾器的基礎(chǔ)。
閉包的基本形式:
def 外部函數(shù)名(): 內(nèi)部函數(shù)需要的變量 def 內(nèi)部函數(shù)名() 引用外部的變量 return 內(nèi)部函數(shù)
需要注意的是:
函數(shù)的作用域關(guān)系在函數(shù)定義階段就已經(jīng)固定,與調(diào)用位置無關(guān)。
無論函數(shù)在何處調(diào)用,都需要回到定義階段去找對應(yīng)的作用域關(guān)系。
例子:
# -*- 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函數(shù)中調(diào)用,但仍然需要回到定義階段去找作用域關(guān)系,而定義的時候引用的money就是全局的Money,當(dāng)全局不存在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
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python數(shù)學(xué)運算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Python?DPED機器學(xué)習(xí)之實現(xiàn)照片美化
本篇文章主要介紹了利用Python中的DPED工具實現(xiàn)照片一鍵美化,可以實現(xiàn)照片亮度提高和色彩鮮明度提高,代碼簡潔易懂,具有一定學(xué)習(xí)價值,感興趣的小伙伴可以了解一下2021-11-11
python3.4 將16進制轉(zhuǎn)成字符串的實例
今天小編就為大家分享一篇python3.4 將16進制轉(zhuǎn)成字符串的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Pycharm同步遠程服務(wù)器調(diào)試的方法步驟
這篇文章主要介紹了Pycharm同步遠程服務(wù)器調(diào)試,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

