[Python-ideas] new format spec for iterable types

Wolfgang Maier wolfgang.maier at biologie.uni-freiburg.de
Tue Sep 8 14:55:43 CEST 2015


On 08.09.2015 14:24, Andrew Barnert via Python-ideas wrote:
 >
 > Formatting positional argument #2 with *{sep} as the format specifier 
makes no sense to me. Even knowing what you're trying to do, I can't 
understand what *(', ') is going to pass to data.__format__, or why it 
should do what you want. What is the * supposed to mean there? Is it 
akin to *args in a function call expression, so you get ',' and ' ' as 
separate positional arguments? If so, how does the fmt[1] do anything 
useful? It seems like you would be using [' '] as the separator, and in 
not sure what that would do that you'd want.
 >

Not sure what happened to the indentation in the posted code. Here's 
another attempt copy pasting from working code as I thought I had done 
before (sorry for the inconvenience):

class myList(list):
     def __format__ (self, fmt=''):
         if fmt == '':
             return str(self)
         if fmt[0] == '*':
             sep = fmt[1:] or ' '
             return sep.join(format(e) for e in self)
         else:
             raise TypeError()

head = 99
data = myList(range(10))
s = '{}, {:*, }'.format(head, data)
# or
s2 = '{}{sep}{:*{sep}}'.format(head, data, sep=', ')
print(s)
print(s2)
# 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Does that make things clearer?




More information about the Python-ideas mailing list