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

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

Python lambda綁定到本地值

Python lambda綁定到本地值

Qyouu 2019-08-02 17:03:54
Python lambda綁定到本地值以下代碼吐出1兩次,我期望看到0然后1def pv(v) :   print vdef test() :   value = []   value.append(0)   value.append(1)   x=[]   for v in value :     x.append(lambda : pv(v))   return x x = test()for xx in x:   xx()我希望python lambdas綁定到一個(gè)局部變量指向的引用,在場(chǎng)景后面。然而,情況似乎并非如此。我已經(jīng)在一個(gè)大型系統(tǒng)中遇到了這個(gè)問題,其中l(wèi)ambda正在做現(xiàn)代C ++的一個(gè)綁定的等價(jià)物(例如'boost :: bind'),在這種情況下,你將綁定到智能ptr或復(fù)制contstruct lambda的副本。那么,如何將局部變量綁定到lambda函數(shù)并在使用時(shí)保留正確的引用?我對(duì)這種行為非常驚訝,因?yàn)槲也幌M@種語言來自垃圾收集器。有問題的代碼如下所示(l3_e是導(dǎo)致問題的變量): for category in cat :       for l2 in cat[category].entries :         for l3 in cat[category].entries[l2].entry["sub_entries"] :           l3_e = cat[category].entries[l2].entry["sub_entries"][l3]           url = "http://forums.heroesofnewerth.com/" + l3_e.entry["url"]           self.l4_processing_status[l3_e] = 0           l3_discovery_requests.append( Request(             url, callback = lambda response : self.parse_l4(response,l3_e)))           print l3_e.entry["url"]     return l3_discovery_requests
查看完整描述

2 回答

?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

更改x.append(lambda : pv(v))x.append(lambda v=v: pv(v))

你希望“python lambdas綁定到一個(gè)局部變量指向的引用,在場(chǎng)景后面”,但這不是Python的工作原理。Python在調(diào)用函數(shù)時(shí)查找變量名稱,而不是在創(chuàng)建函數(shù)時(shí)查找。使用默認(rèn)參數(shù)是有效的,因?yàn)槟J(rèn)參數(shù)在創(chuàng)建函數(shù)時(shí)計(jì)算,而不是在調(diào)用函數(shù)時(shí)計(jì)算。

這對(duì)lambdas來說并不特別。考慮:

x = "before foo defined"def foo():
    print x
x = "after foo was defined"foo()

版畫

after foo was defined


查看完整回答
反對(duì) 回復(fù) 2019-08-02
  • 2 回答
  • 0 關(guān)注
  • 485 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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