第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何用 python 寫出像 javascript 這樣的閉包?

如何用 python 寫出像 javascript 這樣的閉包?

qq_遁去的一_1 2019-04-13 08:45:47
varfoo=function(n){varcount=n;functionbar(){n=countcount+=1;returnn}returnbar}>>>p=foo(10)>>>p()10>>>p()11>>>p()12python由于作用域的關(guān)系,函數(shù)內(nèi)可以訪問函數(shù)外部環(huán)境變量的值。但是不能對這個外部的環(huán)境變量進(jìn)行操作。好像python的閉包不是這么用的?兩個函數(shù)之間共享一個變量最方便的還是在一個class中用self?deffunc(data):count=datadefwrap():count+=1returncountreturnwrap>>>p=func(10)>>>p()UnboundLocalError:localvariable'count'referencedbeforeassignment#但是不是賦值,而是用一個數(shù)組保存數(shù)組,就可以deffunc(data):count=[data]defwrap():count[0]+=1returncount[0]returnwrap>>>p=func(10)>>>p()11>>p()12>>p()13誰能具體解釋一下這個的原因?
查看完整描述

2 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個贊

有yield嘻嘻
deffoo(n):
whileTrue:
yieldn
n+=1
>>>p=foo(10)
>>>p.next()
10
>>>p.next()
11
>>>p.next()
12
                            
查看完整回答
反對 回復(fù) 2019-04-13
?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個贊

這是因?yàn)閕nt是不可變的,你對它+=1,它會構(gòu)建出一個新的加了1的int,而count指向的那個int是沒有變的,這對所有的不可變對象都是一樣的道理。而list是可變的,就是說你可以不用改變count的指向就可以改變count的內(nèi)容。
至于為什么會有UnboundLocalError,參見這個官方faq。
                            
查看完整回答
反對 回復(fù) 2019-04-13
  • 2 回答
  • 0 關(guān)注
  • 338 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號