On 02/13/2014 01:59 PM, Ram Rachum wrote:
Hi everybody,
Please excuse the recent torrent of crazy ideas :)
I was reading code of the Shpaml project, trying to make a patch, while I saw code that looked inelegant to me. I considered how to improve it, but then saw I don't know how to.
The code paraphrased is this:
if expensive_computation_0(): x = expensive_computation_0() # Do something with x... elif expensive_computation_1(): x = expensive_computation_1() # Do something with x... elif expensive_computation_2(): x = expensive_computation_2() # Do something with x...
The problem here is that we're doing the expensive computation twice. That's because we first need to check its truth value, and if it's true we need to actually use the value and do stuff with it.
Use a pocket function: def pocket(value=None, _storage=[]): if value is not None: _storage[:] = [value] return _storage[0] and then: if pocket(expensive_computation_0()): x = pocket() # Do something with x... elif pocket(expensive_computation_1()): x = pocket() # Do something with x... elif pocket(expensive_computation_2()): x = pocket() # Do something with x... -- ~Ethan~