
On Oct 3, 2015, at 09:20, Steve Dower <steve.dower@python.org> wrote:
"Something else that's neat with this: you could use the struct module for more complex subsections of a binary protocol"
Personally, if binary f-strings did struct packing by default, I'd want to use them all the time.
bf'{header}{record:<10sHHb}{footer}'
I love that at first glance. But if the point of bf-strings (like the point of bytes.__mod__ and the other str-like stuff added back to bytes since 3.0) is for things like ascii-based, partly-human-readable protocols and formats, it's obviously important to do things like hex and octal, space- and zero-padding, etc., and if the format specifier always means struct, there's no way to do that.
Practically, if they aren't equivalent to removing the b and encoding the resulting f-string, I expect we'll regularly hit confusion and misunderstanding.
But removing the b and encoding the resulting f-string is useless. For example: header = b'Spam' value = 42 lines.append(bf'{header}: {value}\r\n') This gives you b"b'Spam': 42\r\n". Can you imagine ever wanting that? The only way the feature makes sense is if it does something different. Nick's suggestion of having it do %-formatting makes sense. Yes, it means that {count:03} is an error and you need '{count:03d}', which is inconsistent with f-strings. But that seems like a much less serious problem than bytes formatting not being able to handle bytes.