亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

閉包不太懂,請大神賜教

我的理解是f1,f2,f3在for循環中沒有進行相乘的計算,等循環完它們的值都是3后再進行計算,

如果我的理解沒問題,那么我想知道,3是怎么賦予f1,f2,f3,的,然后它們是怎么最后計算成9的,不是不進行return i*i嗎?

如果理解有誤懇請大神解釋,希望可以通俗一點,小白聽不太懂專業術語,十分感謝!

正在回答

2 回答

fs=[]

? ? for i in range(1,4):

? ? ? ? def f():

? ? ? ? ? ? return i*i

? ? ? ? fs.append(f)

? ? return fs

f1,f2,f3=count()

print f1(),f2(),f3()

? ? ? ??

注意到?? fs.append(f)中傳入的為一個函數f,即在list中對應著三個函數地址(試試print f1,f2,f3 會顯示為三個地址),調用f1,f2,f3 時則都對應著調用f函數,此時for循環已經結束,最終賦值為3,即return 3*3。

嘗試改寫函數:?fs.append(f()),此時傳入list為三個值1,4,9.即[1,4,9],當執行f1,f2,f3=count()語句時,為依次取出list表中的值,即1,4,9

4 回復 有任何疑惑可以回復我~
#1

weibo_墨鴉墨鴉1_mrAN04 提問者

這下理解了,十分感謝!
2018-11-17 回復 有任何疑惑可以回復我~
#2

shellywsm

更改為fs.append(f())時程序報錯,大神我是不是哪里還是沒有理解?
2018-12-18 回復 有任何疑惑可以回復我~
#3

慕用6484265 回復 shellywsm

改寫成fs.append(f())后,輸出的f1,f2,f3就是值而不是函數了,輸出改為print f1,f2,f3即可
2018-12-18 回復 有任何疑惑可以回復我~

閉包最大用處有兩個,一個是可以讀取函數內部的變量,另一個讓這些變量的值始終保持在內存中

2 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

閉包不太懂,請大神賜教

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號