On 6 May 2015 at 10:26, Saoili <sao...@gmail.com> wrote: > Eg. code BEFORE > for loop_var in a_dict['loop_vars']: > d = self.returns_a_deferred(loop_var["x"]) > d.addCallback( > lambda ret_val: self.do_another_thing( > other_param, loop_var.copy(), ret_val > ) > ) > _dlist.append(d) > return defer.DeferredList(_dlist) > > Eg. code AFTER > def other_func(ret_val, other_param, loop_var): > return self.do_other_thing( > other_param, loop_var, ret_val > ) > > for loop_var in a_dict['loop_vars']: > d = self.returns_a_deferred(loop_var["x"]) > d.addCallback(other_func, other_param, loop_var) > _dlist.append(d) > return defer.DeferredList(_dlist)
There's another common trick for dealing with this, that relies on the fact that default argument values are evaluated when the lambda expression itself (not the body of the lambda!) is initially evaluated; basically, just add an extra parameter with a default value of the loop variable. For example: for loop_var in a_dict['loop_vars']: d = self.returns_a_deferred(loop_var["x"]) d.addCallback( lambda ret_val, loop_var=loop_var: self.do_another_thing( other_param, loop_var.copy(), ret_val ) ) _dlist.append(d) return defer.DeferredList(_dlist) However, separating the code out into a separate function may serve to make the code clearer. -- mithrandi, i Ainil en-Balandor, a faer Ambar _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python