<div>Hello, can anyone help ?</div><div>i can&#39;t understand why, in the piece of code below (S1),</div><div>the parameter (grid) passed to the callback is the same, </div><div>while i have 2 grid, 2 deferred and 2 lambda.</div>
<div>The source S2 is working (2 different grid), but inelegant...</div><div><br></div><div>Thank you.</div><div><br></div><div><br></div><div>#----------- S1 ------------------------</div><div>    def OnSubscribe(self):</div>
<div>        for pool, grid in self.grids.items():</div><div>            print &#39;grid = &#39;,grid</div><div>            d = self.frame.dbpoolMiddle.runQuery(allSelect.stmts[&#39;Set0&#39;], (pool, self.frame.ctxName))</div>
<div>            print &#39;deferred = &#39;, d</div><div>            f = lambda _:self.gotDataBin(_, grid)</div><div>            print &#39;lambda =&#39;, f</div><div>            d.addCallback(f)</div><div><br></div><div>
    def gotDataBin(self, result, grid):</div><div>        print &#39;callback = &#39;, grid</div><div>        grid.ReplaceRowsFromSQL(result)</div><div><br></div><div>#----------- Output S1 ----------------</div><div><br>
</div><div>grid =  &lt;cfm.wx.CfmGrid.CfmGrid; proxy of &lt;Swig Object of type &#39;wxGrid *&#39; at 0x2d61b48&gt; &gt;</div><div>deferred =  &lt;Deferred at 0x2e6bd28&gt;</div><div>lambda = &lt;function &lt;lambda&gt; at 0x02DCDCF0&gt;</div>
<div><br></div><div>grid =  &lt;cfm.wx.CfmGrid.CfmGrid; proxy of &lt;Swig Object of type &#39;wxGrid *&#39; at 0x2d5e788&gt; &gt;</div><div>deferred =  &lt;Deferred at 0x2e6bdc8&gt;</div><div>lambda = &lt;function &lt;lambda&gt; at 0x02DCDCB0&gt;</div>
<div><br></div><div>callback =  &lt;cfm.wx.CfmGrid.CfmGrid; proxy of &lt;Swig Object of type &#39;wxGrid *&#39; at 0x2d5e788&gt; &gt; # expected to get 1st grid here: 0x2d61b48, not two times 2nd grid</div><div>callback =  &lt;cfm.wx.CfmGrid.CfmGrid; proxy of &lt;Swig Object of type &#39;wxGrid *&#39; at 0x2d5e788&gt; &gt;</div>
<div><br></div><div>#----------- S2 ------------------------</div><div>    def OnSubscribe(self):</div><div>        for pool, grid in self.grids.items():</div><div>            d = self.frame.dbpoolMiddle.runQuery(allSelect.stmts[&#39;Set0&#39;], (pool, self.frame.ctxName))</div>
<div>            </div><div>            def toto(grid):</div><div>                d.addCallback(lambda _:self.gotDataBin(_, grid))</div><div>            </div><div>            toto(grid)</div><div><br></div><div>    def gotDataBin(self, result, grid):</div>
<div>        print &#39;callback = &#39;, grid</div><div>        grid.ReplaceRowsFromSQL(result)</div><div><br></div>