Python lambda绑定到本地值
以下代码吐出1
两次,我期望看到0
然后1
def 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绑定到一个局部变量指向的引用,在场景后面。然而,情况似乎并非如此。我已经在一个大型系统中遇到了这个问题,其中lambda正在做现代C ++的一个绑定的等价物(例如'boost :: bind'),在这种情况下,你将绑定到智能ptr或复制contstruct lambda的副本。
那么,如何将局部变量绑定到lambda函数并在使用时保留正确的引用?我对这种行为非常惊讶,因为我不希望这种语言来自垃圾收集器。
有问题的代码如下所示(l3_e是导致问题的变量):
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
繁星点点滴滴
相关分类