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