New restrain builtin function?

John Roth newsgroups at jhrothjr.com
Sat Mar 20 16:14:08 EST 2004


"Pierre Rouleau" <prouleau at impathnetworks.com> wrote in message
news:xK17c.26714$Eb6.852981 at news20.bellglobal.com...
> Hi all,
>
> In several occasions, I found myself looking for a function that would
> take a value and restrict is within a specified set of boundaries.   For
> a 1-dimension value, I could simply write
>
> min(max(value,theMin),theMax)
>
> to restrict value within the range made of theMin to theMax.
> It assumes that theMax >= theMin.
>
> I was looking for a single call to restrict a value within bounds that
> would do pretty much that, so i wrote this trivial one:
>
> def restrain(value, theMin, theMax) :
>      """Return a value that is in restricted to the [theMin, theMax]
range.
>
>      **Example**
>
>      >>> for val in xrange(-1,7,1):
>      ...   print "restrain(%d,1,5) = %d" % (val, restrain(val,1,5))
>      ...
>      restrain(-1,1,5) = 1
>      restrain(0,1,5) = 1
>      restrain(1,1,5) = 1
>      restrain(2,1,5) = 2
>      restrain(3,1,5) = 3
>      restrain(4,1,5) = 4
>      restrain(5,1,5) = 5
>      restrain(6,1,5) = 5
>      >>>
>      """
>
>      assert(theMax >= theMin)
>      return min(max(value,theMin),theMax)
>
>
> Without the assertion check, the restrain() named function runs
> expectedly slower than the explicit min(max()) calls:
>
> C:\Python23\Lib>timeit "min(max(5,1),0)"
> 1000000 loops, best of 3: 1.02 usec per loop
>
> C:\Python23\Lib>timeit -s"from ut import restrain" "restrain(5,1,6)"
> 1000000 loops, best of 3: 1.53 usec per loop
>
> Again, I found myself writing code that has to restrain the values to
> some range and prefer using the restrain() function instead of the
> min(max()) one.
>
> Therefore, I was wondering if it would it make sense to add a function
> like restrain() to the list of Python built-ins.  Or is there something
> like that already in the Python library?
>
>
> Thanks
>
> Pierre

I know I've wanted that on (infrequent) occasion. I think
"minmax" makes a better name, though, and I suspect it
would have to be implemented in C to make any sense,
performancewise.

John Roth
>
>
>
>
>





More information about the Python-list mailing list