[Python-3000] PEP 3101 Updated
Ron Adam
rrr at ronadam.com
Thu Aug 23 00:43:03 CEST 2007
Eric Smith wrote:
> Eric Smith wrote:
>> Talin wrote:
>>> A new version is up, incorporating material from the various discussions
>>> on this list:
>>>
>>> http://www.python.org/dev/peps/pep-3101/
>> self.assertEquals('{0[{1}]}'.format('abcdefg', 4), 'e')
>> self.assertEquals('{foo[{bar}]}'.format(foo='abcdefg', bar=4), 'e')
>
> I've been re-reading the PEP, in an effort to make sure everything is
> working. I realized that these tests should not pass. The PEP says
> that "Format specifiers can themselves contain replacement fields". The
> tests above have replacement fields in the field name, which is not
> allowed. I'm going to remove this functionality.
>
> I believe the intent is to support a replacement for:
> "%.*s" % (4, 'how now brown cow')
>
> Which would be:
> "{0:.{1}}".format('how now brown cow', 4)
>
> For this, there's no need for replacement on field name. I've taken it
> out of the code, and made these tests in to errors.
>
> Eric.
I think it should work myself, but it could be added back in later if there
is a need to.
I'm still concerned about the choice of {{ and }} as escaped brackets.
What does the following do?
"{0:{{^{1}}".format('Python', '12')
"{{{{Python}}}}"
"{{{0:{{^{1}}}}".format('Python', '12')
"{{{{{Python}}}}}"
class ShowSpec(str):
def __format__(self, spec):
return spec
ShowSpec("{0:{{{1}}}}").format('abc', 'xyz')
"{{xyz}}"
"{0}".format('{value:{{^{width}}', width='10', value='Python')
"{{Python}}"
_RON
More information about the Python-3000
mailing list