本文實例分析了Python閉包執行時值的傳遞方式。分享給大家供大家參考,具體如下:
代碼中有問題和問題的解釋。
#!/usr/bin/python#coding: utf-8# 判斷一個人是否及格,如果滿分150,則90及格,如果滿分100,則60及格# 開始的疑惑:當fun函數執行完以后,對應的val的值就應該消失,但是,# 當下面代碼再次調用f(60)的時候(這個f()函數就是fun_c()函數)# 卻能夠打印出val的值???def fun(val): 'val是得到的分數' # 打印此時存儲的val的地址 print("%x" % id(val)) def fun_c(passline): 'passline是及格線' if val >= passline: print("通過") else: print("不及格") return fun_cf = fun(89) # f就是fun_c函數# 利用__closure__打印出fun_c()函數的屬性,可以發現f中第一個元素的id值和val的id值地址相同# 這說明如果引用了外部的變量(enclosing變量)的話,會將這個變量添加到函數屬性中# 當再次進行查找(即f(60))的時候,并不是到代碼中去查找,而是到函數屬性中去查找# 也就是上面的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相關內容感興趣的讀者可查看本站專題:《Python函數使用技巧總結》、《Python數學運算技巧總結》、《Python數據結構與算法教程》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
新聞熱點
疑難解答