[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