<div dir="ltr">(Our posts crossed, to some extent.)<br><div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 20, 2015 at 8:41 PM, Steve Dower <span dir="ltr"><<a href="mailto:Steve.Dower@microsoft.com" target="_blank">Steve.Dower@microsoft.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Eric V. Smith wrote:<br>
> On 07/20/2015 01:25 PM, Guido van Rossum wrote:<br>
>> Perhaps surprisingly, I find myself leaning in favor of the<br>
>> f'...{var}...' form. It is explicit in the variable name.<br></span></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">[...]<br></span></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
> So the idea is that<br>
> f'x:{a.x} y:{y}'<br>
> would translate to bytecode that does:<br>
> 'x:{a.x} y:{y}'.format(a=a, y=y)<br>
><br>
> Correct?<br>
<br>
</span>That's exactly what I had in mind, at least. Indexing is supported in format strings too, so f'{a[1]}' also becomes '{a[1]}'.format(a=a), but I don't think there are any other strange cases here. I would vote for f'{}' or f'{0}' to just be a SyntaxError.<br></blockquote><div><br></div><div>+1 on that last sentence. But I prefer a slightly different way of implementing (see my reply to Eric).<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I briefly looked into how this would be implemented and while it's not quite trivial/localized, it should be relatively straightforward if we don't allow implicit merging of f'' strings. If we wanted to allow implicit merging then we'd need to touch more code, but I don't see any benefit from allowing it at all, let alone enough to justify seriously messing with this part of the parser.</blockquote><div><br></div><div>Not sure what you mean by "implicit merging" -- if you mean literal concatenation (e.g. 'foo' "bar" == 'foobar') then I think it should be allowed, just like we support mixing quotes and r''.<br></div><div> </div></div>-- <br><div class="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</div></div></div>