Fascinating material André. I am sure that some people would love the idea of a fractional or decimal iterator, (as long as they don’t try to use it as an index). Steve From: André Roberge <andre.roberge@gmail.com> Sent: 05 March 2020 09:56 To: Steve Barnes <GadgetSteve@live.co.uk> Cc: python-ideas@python.org Subject: Re: [Python-ideas] IDEA: Allow override of all assignments of a built in type to be a different type On Thu, Mar 5, 2020 at 5:29 AM Steve Barnes <GadgetSteve@live.co.uk<mailto:GadgetSteve@live.co.uk>> wrote: One of the lovely things about Python is that we have the capability to avoid issues such as the vagaries of the floating point type with libraries such as decimal and fractions. This is wonderous to me but comes with an issue that I suspect is limiting its usage. That issue is that you have to litter your code with constructors of those types, e.g. ``` a = 0.1 b = 0.2 c = 0.3 a + b == c # This doesn’t work but it is easy to forget why ``` vs: ``` from decimal import * # I know why this is bad but it comes straight from the examples a = Decimal("0.1") # Needs to be a string to avoid being temporarily a float b = Decimal("0.2") # Ditto c = Decimal("0.3") # Ditto a + b == c # Magic this works! ``` While this works it is not very friendly to users and there will often be cases where people forget to quote the values, etc. and there are similar issues with using the fractions library and I am sure with others. I suspect that this is why the decimals library, and some others, is not used as widely as it possibly should be. Wouldn’t it be possible to have something along the lines of: ``` from decimal import TreatFloatsAsDecimal @TreatFloatsAsDecimal a = 0.1 # These are all now decimals b = 0.2 c = 0.3 a + b == c # This now works ``` It is possible, and quite straightforward, to do this as an import hook or a custom encoding. I will try to do so and document it later today, and post it on this list. Less obviously this sort of approach could also apply to making all integers into Fractions or other base types into something else. Also a bit tricky since you don't want to end up with for i in range(Fraction(4)) ... However, have a look at https://aroberge.github.io/ideas/docs/html/fractional_math_tok.html André Roberge I do know that this goes against the explicit is better than implicit so an alternative might be to have a flexible base modifier, something like: ``` from decimal import DecimalBase as D a = 0D0.1 # These are all now decimals b = 0D0.2 c = 0D0.3 a + b == c # This now works ``` Since anything like this would require overriding at least part of the base interpreter I do not think that this is a suitable one for an external PyPi library or at least some hooks in the interpreter would be required to make it possible. Any thoughts, feedback, interest, expressions of horror? Or is this already there and I have missed it? Steve Barnes _______________________________________________ Python-ideas mailing list -- python-ideas@python.org<mailto:python-ideas@python.org> To unsubscribe send an email to python-ideas-leave@python.org<mailto:python-ideas-leave@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/7EF5MO... Code of Conduct: http://python.org/psf/codeofconduct/