On 8/13/07, Carl Johnson <[EMAIL PROTECTED]> wrote:
> I also like the idea of using "!r" for calling repr ...

> s = "10"
> print("{0!i:+d}".format(s)) #prints "+10"

> The !i attempts to cast the string to int. ...
> The logic is that ! commands are abbreviated functions ...

Which does the "i" mean?
    (1)  Call s.__format__(...) with a flag indicating that it should
format itself like an integer.
    (2)  Ignore s.__format__, and instead call s.__index__().__format__(...)

If it is (case 1) an instruction to the object, then I don't see why
it needs to be special-cased; objects can handle (or not) any format
string, and "i" may well typically mean integer, but not always.

If it is (case 2) an instruction to the format function, then what are
the limits?  I see the value of r for repr, because that is already a
built-in alternative representation.  If we also allow int, then we
might as well allow arbitrary functions to check for validity
constraints.


    def valcheck(val, spec=None):
        v=index(v)
        if not v in range(11):
            raise ValueError("Expected an integer in [0..10], but got
{0!r}".format(v))
        if spec is None:
            return v
        return spec.format(v)

...

    "You rated your experience as {0!valcheck:d} out of 10."

> ... is this too TMTOWTDI-ish, since one could
> just write int(s) instead?

You can't write int(s) if you're passing a mapping (or tuple) from
someone else; at best you can copy the mapping and modify certain
values.

-jJ
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to