[Python-ideas] SI scale factors in Python
Ken Kundert
python-ideas at shalmirane.com
Thu Aug 25 14:02:11 EDT 2016
All,
This proposal basically has two parts. One part is that Python should
naturally support printing real numbers with SI scale factors. Currently there
are three formats for printing real number: %f, %d, %g. They all become
difficult to read for even moderately large or small numbers. Exponential
notation is hard for humans to read. That is why SI scale factors have largely
replaced exponential notation everywhere except in programming. Adding another
format for printing real numbers in human readable form seems like a modest
extension that is long past due in all programming languages. I am asking that
Python be the leader here. I am sure other languages will pick it up once it is
implemented in Python.
The second part is the logical dual to the first: input. People should be able
to enter numbers in Python using SI scale factors. This means as real literals,
such as 2.4G, but it should also work with casting, float('2.4G'). Once you
allow SI scale factors on numbers, the natural tendency is for people to want to
add units, which is a good thing because it gives important information about
the number. We should allow it because it improves the code by making it more
self documenting. Even if the language completely ignores the units, we have
still gained by allowing the units to be there, just like we gain when we allow
user to add comments to their code even though the compiler ignores them.
Some people have suggested that we take the next step and use the units for
dimensional analysis, but that is highly problematic because you cannot do
dimensional analysis unless everything is specified with the correct units, and
that can be a huge burden for the user. So instead, I am suggesting that we
provide simple hooks that simply allow access to the units. That way people can
build dimensional analysis packages using the units if they felt the need.
-Ken
More information about the Python-ideas
mailing list