<div dir="ltr"><div class="gmail_extra">That&#39;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">&lt;<a href="mailto:jason-sage@creativetrax.com" target="_blank">jason-sage@creativetrax.com</a>&gt;</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&#39;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&#39;s a bad idea, but it&#39;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&#39;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=&quot;time: %d&quot;\<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&#39;t be trivial:<br>

<br></div><div>a = &quot;&quot;&quot;<br></div><div>%%foo<br>&quot;&quot;&quot;<br></div><div> <br>&gt; ...<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&#39;s pretty clear which statement is more readable.  This focus<br>
on readability over brevity (remember, &quot;Readability counts&quot;) 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 &#39;%run -d foo&#39; than &#39;pdb.runcall(execfile, &quot;foo.py&quot;)&#39;.<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&#39;t hugely important. When you&#39;re writing &amp; publishing a notebook, readability is a much bigger deal. But I&#39;ve yet to see a particular problem with people abusing magic syntax and making notebooks hard to read.<br>

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


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

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