<div class="gmail_quote">On Tue, Mar 29, 2011 at 2:41 PM, Prasad, Ramit <span dir="ltr">&lt;<a href="mailto:ramit.prasad@jpmchase.com">ramit.prasad@jpmchase.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Is there a difference (or preference) between using the following?<br>
&quot;%s %d&quot; % (var,num)<br>
VERSUS<br>
&quot;{0} {1}&quot;.format(var,num)<br></blockquote><div><br></div><div>Practically there&#39;s no difference. In reality (and under the hood) there are more differences, some of which are subtle.</div><div><br></div><div>

For instance, in the first example, var = 3, num = &#39;hi&#39; will error, while with .format, it won&#39;t. If you are writing code that should be backwards compatible, pre-2.6, then you should use the % formatting.</div>

<div><br></div><div>My personal preference is to use .format() as it (usually) feels more elegant:</div><div><br></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">

<div class="gmail_quote"><div>(&quot;{0} &quot;*8+&quot;{1}&quot;).format(&quot;na&quot;, &quot;batman&quot;)</div></div><div class="gmail_quote"><div><br></div></div><div class="gmail_quote"><div>vs:</div></div><div class="gmail_quote">

<div><br></div></div><div class="gmail_quote"><div>&quot;%s %s&quot; % (&quot;na&quot; * 8, &quot;batman&quot;)</div></div></blockquote><div class="gmail_quote"><div><br></div><div>And named arguments:</div><div><br></div>

</div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div class="gmail_quote"><div>&quot;Name: {name}\nAddress: {address}&quot;.format(name=&quot;Bob&quot;, address=&quot;123 Castle Auuurrggh&quot;)</div>

</div><div class="gmail_quote"><div><br></div></div><div class="gmail_quote"><div>vs</div></div><div class="gmail_quote"><div><br></div></div><div class="gmail_quote"><div>&quot;Name: %(name)\nAddress: %(address)&quot; % {&quot;name&quot;: &quot;Bob&quot;, &quot;address&quot;, &quot;123 Castle Auurgh&quot;)</div>

</div></blockquote><div class="gmail_quote"><div><br></div><div>But when I&#39;m dealing with floating point, especially if it&#39;s a simple output value, I will usually use % formatting:</div><div><br></div></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">

<div class="gmail_quote"><div>&quot;Money left: %8.2f&quot; % (money,)</div></div><div class="gmail_quote"><div><br></div></div><div class="gmail_quote"><div>vs. </div></div><div class="gmail_quote"><div><br></div></div>
<div class="gmail_quote">
<div>&quot;Money Left: {0:8.2f)&quot;.format(money)</div><div><br></div></div></blockquote>Of course, it&#39;s best to pick a style and stick to it - having something like this:<div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">

<div>print &quot;Name: %s&quot; % (name)</div><div>print &quot;Address: {address}&quot;.format(address=street)</div><div><br></div></blockquote>is bad enough, but...<div><br><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">

<div>print &quot;This is %s {0}&quot;.format(&quot;horrible&quot;) % (&quot;just&quot;)</div><div><br></div></blockquote>My recommendation would be to use what feels most natural to you. I think I read somewhere that % formatting is so ingrained that even though the .format() method is intended to replace it, it&#39;s probably going to stick around for a while. But if you want to be on the safe side, you can always just use .format() - it certainly won&#39;t hurt anything, and the fact that it says &quot;format&quot; is more explicit. If you didn&#39;t know Python, you would know that &quot;{0} {1} {2}&quot;.format(3,2,1) is doing some type of formatting, and since &quot;Explicit is better than implicit.&quot;*, that should be a good thing.</div>

<div><br></div><div>HTH,</div><div>Wayne</div><div><br></div><div>* see:</div><div>import this</div><div><div>this.s.encode(&#39;rot13&#39;).split(&#39;\n&#39;)[3]</div></div>