<p>Note that that's just pythons late binding semantics, nothing twistedy going on here :)</p>
<div class="gmail_quote">On Jan 25, 2012 2:24 PM, "Аркадий Левин" <<a href="mailto:poisonoff@gmail.com">poisonoff@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi, you need add "grid" to lambda arguments,<br>
<br>
f = lambda _, grip=grip:self.gotDataBin(_, grid)<br>
<br>
On Wed, Jan 25, 2012 at 6:04 PM, Tech Aficionado1743<br>
<<a href="mailto:techaficionado1743@gmail.com">techaficionado1743@gmail.com</a>> wrote:<br>
> Hello, can anyone help ?<br>
> i can't understand why, in the piece of code below (S1),<br>
> the parameter (grid) passed to the callback is the same,<br>
> while i have 2 grid, 2 deferred and 2 lambda.<br>
> The source S2 is working (2 different grid), but inelegant...<br>
><br>
> Thank you.<br>
><br>
><br>
> #----------- S1 ------------------------<br>
> def OnSubscribe(self):<br>
> for pool, grid in self.grids.items():<br>
> print 'grid = ',grid<br>
> d = self.frame.dbpoolMiddle.runQuery(allSelect.stmts['Set0'],<br>
> (pool, self.frame.ctxName))<br>
> print 'deferred = ', d<br>
> f = lambda _:self.gotDataBin(_, grid)<br>
> print 'lambda =', f<br>
> d.addCallback(f)<br>
><br>
> def gotDataBin(self, result, grid):<br>
> print 'callback = ', grid<br>
> grid.ReplaceRowsFromSQL(result)<br>
><br>
> #----------- Output S1 ----------------<br>
><br>
> grid = <cfm.wx.CfmGrid.CfmGrid; proxy of <Swig Object of type 'wxGrid *' at<br>
> 0x2d61b48> ><br>
> deferred = <Deferred at 0x2e6bd28><br>
> lambda = <function <lambda> at 0x02DCDCF0><br>
><br>
> grid = <cfm.wx.CfmGrid.CfmGrid; proxy of <Swig Object of type 'wxGrid *' at<br>
> 0x2d5e788> ><br>
> deferred = <Deferred at 0x2e6bdc8><br>
> lambda = <function <lambda> at 0x02DCDCB0><br>
><br>
> callback = <cfm.wx.CfmGrid.CfmGrid; proxy of <Swig Object of type 'wxGrid<br>
> *' at 0x2d5e788> > # expected to get 1st grid here: 0x2d61b48, not two times<br>
> 2nd grid<br>
> callback = <cfm.wx.CfmGrid.CfmGrid; proxy of <Swig Object of type 'wxGrid<br>
> *' at 0x2d5e788> ><br>
><br>
> #----------- S2 ------------------------<br>
> def OnSubscribe(self):<br>
> for pool, grid in self.grids.items():<br>
> d = self.frame.dbpoolMiddle.runQuery(allSelect.stmts['Set0'],<br>
> (pool, self.frame.ctxName))<br>
><br>
> def toto(grid):<br>
> d.addCallback(lambda _:self.gotDataBin(_, grid))<br>
><br>
> toto(grid)<br>
><br>
> def gotDataBin(self, result, grid):<br>
> print 'callback = ', grid<br>
> grid.ReplaceRowsFromSQL(result)<br>
><br>
><br>
> _______________________________________________<br>
> Twisted-Python mailing list<br>
> <a href="mailto:Twisted-Python@twistedmatrix.com">Twisted-Python@twistedmatrix.com</a><br>
> <a href="http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python" target="_blank">http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python</a><br>
><br>
<br>
_______________________________________________<br>
Twisted-Python mailing list<br>
<a href="mailto:Twisted-Python@twistedmatrix.com">Twisted-Python@twistedmatrix.com</a><br>
<a href="http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python" target="_blank">http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python</a><br>
</blockquote></div>