![](https://secure.gravatar.com/avatar/daa45563a98419bb1b6b63904ce71f95.jpg?s=120&d=mm&r=g)
When I really need such function, I define it like this: def clamp(min_val, value, max_val): return min(max(min_val, value), max_val) Test: min_val <= result <= max_val. The parameter order is chosen to get something looking like min_val <= value (result in fact) <= max_val. If you need special handling of NaN, I suggest to add a special version in the math module. I'm not sure that it's worth it to add such new function to the standard library. Victor Le 31 juil. 2016 6:13 AM, "Neil Girdhar" <mistersheik@gmail.com> a écrit :
It's common to want to clip (or clamp) a number to a range. This feature is commonly needed for both floating point numbers and integers:
http://stackoverflow.com/questions/9775731/clamping- floating-numbers-in-python http://stackoverflow.com/questions/4092528/how-to- clamp-an-integer-to-some-range-in-python
There are a few approaches:
* use a couple ternary operators (e.g. https://github.com/ scipy/scipy/pull/5944/files line 98, which generated a lot of discussion) * use a min/max construction, * call sorted on a list of the three numbers and pick out the first, or * use numpy.clip.
Am I right that there is no *obvious* way to do this? If so, I suggest adding math.clip (or math.clamp) to the standard library that has the meaning:
def clip(number, lower, upper): return lower if number < lower else upper if number > upper else number
This would work for non-numeric types so long as the non-numeric types support comparison. It might also be worth adding
assert lower < upper
to catch some bugs.
Best,
Neil
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/