Dan Sommers wrote:
On Wed, 5 Feb 2020 11:09:16 +0000 Jonathan Fine email@example.com wrote:
How about something like: def t1(argv): ... value = 0 ... for n in argv: ... value = 1_000 ... value += n ... return value t1(123, 456, 789) 123456789 Similarly, for define t2 to use 1_000_000, t3 to use 1_000_000_000 and so on, instead of 1_000. For really big numbers, you might want to use t10. Someone previously asked about a "base"; your idea could be extended to
def tbuilder(base): def t(argv): value = 0 for n in argv: value = base value += n return value return t tbuilder(1000)(123, 456, 789) 123456789
This won't work when leading zeros are involved, e.g. consider `123_006_789`: `t(123, 006, 789)` gives a SyntaxError. Also it's weird that when we want to write an int literal that we end up with two function calls and individual numbers as arguments (+ you'd need to have that function handy in the first place). It would be clearer to use a kw-only argument `base=1000` but even then it doesn't really convey they idea of a literal.
If you're dealing with really big integers (say 1000 digits or more) then you might be want to use https://pypi.org/project/gmpy2/, in which case you'll appreciate the extra flexibility provided by t10. (This would allow t10 to return a gmpy integer, if import gmpy2 succeeds.) +1 Finally, perhaps really big numbers should be stored as data, rather than placed in source code files. (For example, this would allow these large pieces of data to be verified, via a secure hash.) +1