Raymond Hettinger wrote:
[andrew cooke]
would it break anything to also allow

format(1234567, 'd')       # what we have now
 '1234567'
format(1234567, '.d')      # proposed new option
 '1.234.567'
format(1234.5, ',2f')      # proposed new option
 '1234,50'
format(1234.5, '.,2f')     # proposed new option

Yes, that's allowed too!  The separators can be any one of COMMA,
SPACE, DOT, UNDERSCORE, or NON-BREAKING-SPACE.

What if I want other separators?

How about this idea: make the format has "long" format, which is a bit more verbose, flexible, and unambiguous, and the current proposal a "short" format, which is more concise.

The "long" format would be like this (this is much, much more featureful than the current proposition, I think I might have crossed far beyond the Mayan line):

[n|sign <signnegative>[[, <signzero>], <signpositive>] | ]
[w|min <minwidth>[, <align>[, <alignfill>]]]
[x|max <maxwidth>[, <overflowsign[, overflowalign]>]]
[s|sep [[...]<sep><sepwidth>]<sep><sepwidth> | ]
[dp|decpoint <decpoint> | ]
[ds|decsep <width><sep>[, <width><sep>[...]] | ]
[b|base <base-n>[, <charset>]]
[p|prec <prec> | ]
t|type <type>

The feel of "long" format
fmt_string: 'type f'

  number: 876543213456.98765445
  result: 876543213456.98765445

fmt_string: 'decpoint ^ | type f'

  number: 876543213456.98765445
  result: 876543213456^98765445

fmt_string: 'sep 2>1:3.4 | decpoint , | prec 3 | type f'

  number: 876543213456.98765445
  result: 87>65>4:321.3456,988

fmt_string: 'sep 2>1:3.4 | decpoint , | prec 3 | type f'

  number: 876543213456.98765445
  result: 87>65>4:321.3456,988

fmt_string: 'sep 2>1:3.4 | decpoint , | prec 3 | type f'

  number: 876543213456.98765445
  result: 87>65>4:321.3456,988

General Rules:
- every field, except type is optional
- fields are separated by | (this may change), escape literal | with ||
- every fields starts with an identifier then a mandatory whitespace
- subfields are separated by commas. Each identifier has long and short identifier. - Processing precedent is: type, base, prec, sep/decsep, decpoint, sign, min, max

Specific rules:
- min and max determines width, min determine the rule when the resulting string is shorter than minwidth, max determine rule when the resulting string is longer than maxwidth (basically trimming). alignfill is character/sequence of character to be used to make the resulting string as long as minwidth, overflowsign is character added when maxwidth is exceeded and trimming occurs - sep is basically a separator delimited for each width. The regular latin number system would be represented as sep 3.3 the leftmost number and separator would be repeated.
- decsep works similarly to sep
- base is the number base, charset is mapping of digits used to represent output number in the certain base.

PS: It is not designed for hand written, but is meant to be fairly readable
PPS: It is fairly modular too
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to