adders [for in range( )adders append(lambda mm+ [adder( for adder in adders[ [adder( for adder in adders[ fortunatelya small change brings behavior that probably better meets our goaladders [for in range( )adders append(lambda mn=nm+ [adder( for adder in adders[ [adder( for adder in adders[ add adders[ add ( can override the bound value notice that using the keyword argument scope-binding trick allows you to change the closed-over valuebut this poses much less of danger for confusion than in the class instance the overriding value for the named variable must be passed explictly in the call itselfnot rebound somewhere remote in the program flow yesthe name add is no longer accurately descriptive for "add any two numbers,but at least the change in result is syntactically local methods of classes all methods of classes are callables for the most parthowevercalling method of an instance goes against the grain of functional programming styles usually we use methods because we want to reference mutable data that is bundled in the attributes of the instanceand hence each call to method may produce different result that varies independently of the arguments passed to it accessors and operators even accessorswhether created with the @property decorator or otherwiseare technically callablesalbeit accessors are callables with methods of classes