<div dir="ltr"><div class="gmail_extra">That's quite a lot to read, but while I think about it in more detail, a couple of bits that jump out at me:<br></div><div class="gmail_extra"><div class="gmail_quote"><br>On 16 February 2013 22:07, Jason Grout <span dir="ltr"><<a href="mailto:jason-sage@creativetrax.com" target="_blank">jason-sage@creativetrax.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div id=":lk">%time some_function<br>
<br>
now I want to add a few more things to the time run.  All I have to do<br>
is change where the string is:<br>
<br>
%time<br>
some_function<br>
some_other function<br>
<br>
and the lack of a string after %time tells me that I should look below<br>
%time for the string.  I don't have to constantly keep adjusting the %<br>
character(s).<br></div></blockquote><div><br></div><div>For %%timeit, however, we use the remainder of the line as a setup statement, before timing the body. Now you can argue that that's a bad idea, but it's useful to have that distinction.<br>

</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div id=":lk">

P.S. Actually, after thinking about it more, since a single % is<br>
ambiguous syntax, I think I would prefer all string decorators be<br>
invoked with %%, which is invalid python syntax.  Then we won't have<br>
this problem:<br>
<br>
cd=5<br>
a=4\<br>
%cd<br>
<br>
or this problem:<br>
<br>
cd=4<br>
a="time: %d"\<br>
%cd<br></div></blockquote><div><br></div><div>My input transformation work should handle such cases. Arguably it could be done more easily if we used a syntax like %% that could never appear in a valid Python statement, but it still wouldn't be trivial:<br>

<br></div><div>a = """<br></div><div>%%foo<br>"""<br></div><div> <br>> ...<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div id=":lk">

I think it's pretty clear which statement is more readable.  This focus<br>
on readability over brevity (remember, "Readability counts") is part of<br>
why python is so good in general.</div></blockquote></div><br></div><div class="gmail_extra">And part of the reason IPython exists is to provide for the cases when you do want brevity. Because there are times when you want to type '%run -d foo' than 'pdb.runcall(execfile, "foo.py")'.<br>

<br></div><div class="gmail_extra">Of course, IPython has evolved - when it was only a shell, most of what you entered was just for single use, so readability wasn't hugely important. When you're writing & publishing a notebook, readability is a much bigger deal. But I've yet to see a particular problem with people abusing magic syntax and making notebooks hard to read.<br>

<br>> * backwards compatibility (with IPP and previous IPython versions, as<br>> well as IDL and matlab apparently?).  But I'll point out that we can<br>> easily support this too, in almost exactly the same invocation:<br>


> <br>> %timeit('-r 5 -and -other -options') 2+3<br><br></div><div class="gmail_extra">Honestly, I wouldn't call that 'almost the same invocation'. Moreover, it sacrifices the brevity without enforcing any corresponding gain in readability.<br>

<br></div><div class="gmail_extra">Thomas<br></div></div>