By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,444 Members | 1,634 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,444 IT Pros & Developers. It's quick & easy.

New restrain builtin function?

P: n/a
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

Jul 18 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
"Pierre Rouleau" <pr******@impathnetworks.com> wrote in message
news:xK********************@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

Jul 18 '05 #2

P: n/a
John Roth wrote:
"Pierre Rouleau" <pr******@impathnetworks.com> wrote in message
news:xK********************@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

I would prefer 'limit' than 'minmax' myself if 'restrain' was not
'retained' ;-)

Pierre Rouleau

Jul 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.