This class or closure to clamp at specific bounds is nice. But I want to clamp based on runtime values for upper/lower fairly often. A function is much better for that use.
On Wed, Jul 8, 2020, 11:22 AM Jonathan Fine <jfine2...@gmail.com> wrote: > Hi All > > This is related to discussion > https://mail.python.org/archives/list/python-ideas@python.org/thread/KWAOQFSV3YJYQV2Y5JXGXFCXHJ3WFLRS/#ZT3OBOPNIMXQ2MU7N5RFBL5AJSYRZJ6Q > > In Python, lists don't have a join method. Instead, it's strings that have > the join method. Hence we have: > >>> ', '.join('abcde') > 'a, b, c, d, e' > > The intermediate method we can save and store and use again. > >>> joiner = ', '.join > >>> joiner('fghijk') > 'f, g, h, i, j, k' > > We can do something similar when clamping, clipping or trimming a value. > For example, suppose we want limits on the room temperature, that the > thermostat cannot override. > >>> aircon_clipper = Clamper(50, 80) > > >>> thermostat_temp = 40 > >>> target_temp = aircon_temp_clipper(thermostat_temp) > >>> target_temp > 50 > > What I like best about this is that the name of the function -- > aircon_temp_clipper -- gives the reason for the clipping (or clamping). And > this name can be chosen to suit the domain. I also like that it wraps the > high and low values (50 and 80) as data used by a method. > > Here's an implementation of Clamper. > > class Clamper: > def __init__(self, lo, hi): > > if not lo <= hi: > raise ValueError > self._lo = lo > self._hi = hi > > def __call__(self, num): > lo, hi = self._lo, self._hi > > at_least_lo = (lo <= num) > at_most_hi = (hi >= num) > > if at_least_lo and at_most_hi: > return num > elif at_least_lo: > return hi > elif at_most_hi: > return lo > else: > raise ValueError > > If performance is important to you, you could instead use a closure to > create a function. This would also allow you to provide a docstring. > > I hope this helps at least some of the people some of the time. > > -- > Jonathan > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/SXECQDXUJ7J5J4YOIFYJL3VNS757PTNI/ > Code of Conduct: http://python.org/psf/codeofconduct/ >
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/IWVMIURULLW5IOZGFHIDNEIYBN5IJIWM/ Code of Conduct: http://python.org/psf/codeofconduct/