Python閉包執(zhí)行時值的傳遞方式實例分析
本文實例分析了Python閉包執(zhí)行時值的傳遞方式。分享給大家供大家參考,具體如下:
代碼中有問題和問題的解釋。
#!/usr/bin/python
#coding: utf-8
# 判斷一個人是否及格,如果滿分150,則90及格,如果滿分100,則60及格
# 開始的疑惑:當fun函數(shù)執(zhí)行完以后,對應的val的值就應該消失,但是,
# 當下面代碼再次調(diào)用f(60)的時候(這個f()函數(shù)就是fun_c()函數(shù))
# 卻能夠打印出val的值???
def fun(val):
'val是得到的分數(shù)'
# 打印此時存儲的val的地址
print("%x" % id(val))
def fun_c(passline):
'passline是及格線'
if val >= passline:
print("通過")
else:
print("不及格")
return fun_c
f = fun(89) # f就是fun_c函數(shù)
# 利用__closure__打印出fun_c()函數(shù)的屬性,可以發(fā)現(xiàn)f中第一個元素的id值和val的id值地址相同
# 這說明如果引用了外部的變量(enclosing變量)的話,會將這個變量添加到函數(shù)屬性中
# 當再次進行查找(即f(60))的時候,并不是到代碼中去查找,而是到函數(shù)屬性中去查找
# 也就是上面的fun_c的屬性中有val的值,是一個元組,不能夠改變
print(f.__closure__)
f(60)
f = fun(89)
f(90)
運行結果:
12ee0b0
(<cell at 0x017B24B0: int object at 0x012EE0B0>,)
通過
12ee0b0
不及格
閉包的作用:
1. 代碼的封裝
2. 代碼復用
更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結》、《Python數(shù)學運算技巧總結》、《Python數(shù)據(jù)結構與算法教程》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Python NumPy創(chuàng)建數(shù)組方法
這篇文章主要介紹了Python NumPy創(chuàng)建數(shù)組方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-09-09
Python實現(xiàn)在Word中創(chuàng)建表格并填入數(shù)據(jù)與圖片
在Word中,表格是一個強大的工具,本文主要為大家介紹了如何使用Python在Word中創(chuàng)建表格并填入數(shù)據(jù)、圖片,以及設置表格樣式等,感興趣的可以了解下2024-03-03
使用Python的urllib和urllib2模塊制作爬蟲的實例教程
這篇文章主要介紹了使用Python的urllib和urllib2模塊制作爬蟲的實例教程,展現(xiàn)了這兩個常用爬蟲制作模塊的基本用法,極度推薦!需要的朋友可以參考下2016-01-01
利用Python實現(xiàn)自動生成圖文并茂的數(shù)據(jù)分析
這篇文章主要介紹了利用Python實現(xiàn)自動生成圖文并茂的數(shù)據(jù)分析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08
python定時采集攝像頭圖像上傳ftp服務器功能實現(xiàn)
本文程序實現(xiàn)python定時采集攝像頭圖像上傳ftp服務器功能,大家參考使用吧2013-12-12

