Clarity vs. code reuse/generality
Tue Jul 7 21:24:28 EDT 2009
pdpi <pdpinheiro at gmail.com> writes:
> while abs(func(guess) - target) > epsilon:
> guess = (lo + hi) / 2.
> if sense * func(guess) > sense * target:
> hi = guess
> elif sense * func(guess) < sense * target:
> lo = guess
> elif lo == hi:
> return None
> return guess
That is completely confusing. I get the, er, impression that "sense"
is supposed to change during the loop, and it takes much head
scratching to tell whether what you have there is right or not. Also,
it calls func 3 times on each loop, which could be extremely slow.
You don't know what func does, so eliminating 2/3 of the calls to it
is not a micro-optimization--it could be a major time saving.
Yet another version:
def _binary_search(x0, x1, func, target, epsilon):
y0,y1 = func(x0), func(x1)
while abs(y1 - target) > epsilon:
if x0 == x1 or cmp(y0,target) == cmp(y1,target):
xn = (x0 + x1) / 2.
yn = func(xn)
if cmp(yn,target) == cmp(y0,target):
x0,y0 = xn,yn
x1,y1 = xn,yn
More information about the Python-list