您的位置:首页 > 编程语言 > Python开发

python2.X和python3.X的区别

2017-12-25 10:05 253 查看
<!--done-->
<div id="topics">
<div class="post">
<h1 class="postTitle">
<a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/kaitoex/p/6085606.html">【学习笔记】python2的print和python3的print()</a>
</h1>
<div class="clear"></div>
<div class="postBody">
<div id="cnblogs_post_body" class="blogpost-body"><p>python2.x和3.x中的输出语句有着明显不同</p>
<p>2.x中的print不是个函数,输出格式如下</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> Python 2.7.12+ (default, Aug  4 2016, 20:04:34<span style="color: #000000">)
</span><span style="color: #008080">2</span> [GCC 6.1.1 20160724<span style="color: #000000">] on linux2
</span><span style="color: #008080">3</span> Type <span style="color: #800000">"</span><span style="color: #800000">help</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">copyright</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">credits</span><span style="color: #800000">"</span> <span style="color: #0000ff">or</span> <span style="color: #800000">"</span><span style="color: #800000">license</span><span style="color: #800000">"</span> <span style="color: #0000ff">for</span><span style="color: #000000"> more information.
</span><span style="color: #008080">4</span> >>> <span style="color: #0000ff">print</span> <span style="color: #800000">"</span><span style="color: #800000">There is only %d %s in the sky.</span><span style="color: #800000">"</span>%(1,<span style="color: #800000">'</span><span style="color: #800000">sun</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #008080">5</span> There <span style="color: #0000ff">is</span> only 1 sun <span style="color: #0000ff">in</span> the sky.</pre>
</div>
<p>3.x中的print成了函数,输出格式如下</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> Python 3.5.2+ (default, Aug  5 2016, 08:07:14<span style="color: #000000">)
</span><span style="color: #008080">2</span> [GCC 6.1.1 20160724<span style="color: #000000">] on linux
</span><span style="color: #008080">3</span> Type <span style="color: #800000">"</span><span style="color: #800000">help</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">copyright</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">credits</span><span style="color: #800000">"</span> <span style="color: #0000ff">or</span> <span style="color: #800000">"</span><span style="color: #800000">license</span><span style="color: #800000">"</span> <span style="color: #0000ff">for</span><span style="color: #000000"> more information.
</span><span style="color: #008080">4</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">There is only %d %s in the sky.</span><span style="color: #800000">"</span>%(1,<span style="color: #800000">'</span><span style="color: #800000">sun</span><span style="color: #800000">'</span><span style="color: #000000">))
</span><span style="color: #008080">5</span> There <span style="color: #0000ff">is</span> only 1 sun <span style="color: #0000ff">in</span> the sky.</pre>
</div>
<p>为什么要做出这样的变化,主要原因有以下几点:</p>
<p>1.print不是函数,不能使用help(),对使用者不方便。</p>
<p>python2中help(print)会报错。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> help(<span style="color: #0000ff">print</span><span style="color: #000000">)
</span><span style="color: #008080">2</span>   File <span style="color: #800000">"</span><span style="color: #800000"><stdin></span><span style="color: #800000">"</span>, line 1
<span style="color: #008080">3</span>     help(<span style="color: #0000ff">print</span><span style="color: #000000">)
</span><span style="color: #008080">4</span>              ^
<span style="color: #008080">5</span> SyntaxError: invalid syntax</pre>
</div>
<p>python3中,可以使用help(print),清楚的看到print的参数。</p>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080"> 1</span> Help on built-<span style="color: #0000ff">in</span> function <span style="color: #0000ff">print</span> <span style="color: #0000ff">in</span><span style="color: #000000"> module builtins:
</span><span style="color: #008080"> 2</span>
<span style="color: #008080"> 3</span> <span style="color: #0000ff">print</span><span style="color: #000000">(...)
</span><span style="color: #008080"> 4</span>     <span style="color: #0000ff">print</span>(value, ..., sep=<span style="color: #800000">'</span> <span style="color: #800000">'</span>, end=<span style="color: #800000">'</span><span style="color: #800000">\n</span><span style="color: #800000">'</span>, file=sys.stdout, flush=<span style="color: #000000">False)
</span><span style="color: #008080"> 5</span>
<span style="color: #008080"> 6</span>     Prints the values to a stream, <span style="color: #0000ff">or</span><span style="color: #000000"> to sys.stdout by default.
</span><span style="color: #008080"> 7</span> <span style="color: #000000">    Optional keyword arguments:
</span><span style="color: #008080"> 8</span>     file:  a file-<span style="color: #000000">like object (stream); defaults to the current sys.stdout.
</span><span style="color: #008080"> 9</span> <span style="color: #000000">    sep:   string inserted between values, default a space.
</span><span style="color: #008080">10</span> <span style="color: #000000">    end:   string appended after the last value, default a newline.
</span><span style="color: #008080">11</span> <span style="color: #000000">    flush: whether to forcibly flush the stream.
</span><span style="color: #008080">12</span> (END)</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>2.从上面的help(print)中我们也可以看到在print()中的两个重要参数,sep和end。这两个参数使print()相比print多了两个新功能,自定义间隔符(默认空格)和结束符(默认回车)。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">123</span><span style="color: #800000">"</span>,<span style="color: #800000">"</span><span style="color: #800000">456</span><span style="color
4000
: #800000">"</span>,<span style="color: #800000">"</span><span style="color: #800000">789</span><span style="color: #800000">"</span><span style="color: #000000">)
</span><span style="color: #008080">2</span> 123 456 789
<span style="color: #008080">3</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">123</span><span style="color: #800000">"</span>,<span style="color: #800000">"</span><span style="color: #800000">456</span><span style="color: #800000">"</span>,<span style="color: #800000">"</span><span style="color: #800000">789</span><span style="color: #800000">"</span>,sep=<span style="color: #800000">'</span><span style="color: #800000">-</span><span style="color: #800000">'</span><span style="color: #000000">)
</span><span style="color: #008080">4</span> 123-456-789</pre>
</div>
<div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div>
<pre><span style="color: #008080">1</span> >>> x=1024
<span style="color: #008080">2</span> >>> <span style="color: #0000ff">print</span><span style="color: #000000">(t)
</span><span style="color: #008080">3</span> 256
<span style="color: #008080">4</span> >>> <span style="color: #0000ff">print</span>(t,end=<span style="color: #800000">"</span><span style="color: #800000"> end</span><span style="color: #800000">"</span><span style="color: #000000">)
</span><span style="color: #008080">5</span> 256 end>>>
<span style="color: #008080">6</span> >>> <span style="color: #0000ff">print</span>(t,end=<span style="color: #800000">"</span><span style="color: #800000"> end\n</span><span style="color: #800000">"</span><span style="color: #000000">)
</span><span style="color: #008080">7</span> 256 end</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="复制代码"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></a></span></div></div>
<p>3.print()重定向输出文件更加方便。</p>
<p>2.x需要print>>重定向输出,感觉代码很混乱。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> out=open(<span style="color: #800000">"</span><span style="color: #800000">test.txt</span><span style="color: #800000">"</span>,<span style="color: #800000">"</span><span style="color: #800000">w</span><span style="color: #800000">"</span><span style="color: #000000">)
</span><span style="color: #008080">2</span> >>> <span style="color: #0000ff">print</span>>>out,<span style="color: #800000">"</span><span style="color: #800000">123</span><span style="color: #800000">"</span></pre>
</div>
<p>3.x中输出文件成了一个参数,使用更方便。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> out=open(<span style="color: #800000">"</span><span style="color: #800000">test.txt</span><span style="color: #800000">"</span>,<span style="color: #800000">"</span><span style="color: #800000">w</span><span style="color: #800000">"</span><span style="color: #000000">)
</span><span style="color: #008080">2</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">123</span><span style="color: #800000">"</span>,file=out)</pre>
</div>
<p>4.python2.x中print语句的格式化输出源自于C语言的格式化输出,这种语法对于C这种静态语言比较适用,但是对于拥有很多先进数据结构的python来说就有点力不从心了。python的元组,列表,字典,集合等不适合用这种结构表示,这些数据结构大多元素用下标表示,在这种结构中写出来很混乱。python3.x的print()函数提供了有点类似C#(不知道这么说对不对)中的格式化输出函数format()。另外print()也兼容原来的格式化输出方式。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">%s is %s.</span><span style="color: #800000">"</span>%(<span style="color: #800000">'</span><span style="color: #800000">Aoko</span><span style="color: #800000">'</span>,<span style="color: #800000">'</span><span style="color: #800000">good</span><span style="color: #800000">'</span><span style="color: #000000">))
</span><span style="color: #008080">2</span> Aoko <span style="color: #0000ff">is</span> good.</pre>
</div>
<p>format()让输出格式更清晰。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">{0} is {1}.</span><span style="color: #800000">"</span>.format(<span style="color: #800000">'</span><span style="color: #800000">Aoko</span><span style="color: #800000">'</span>,<span style="color: #800000">'</span><span style="color: #800000">good</span><span style="color: #800000">'</span><span style="color: #000000">))
</span><span style="color: #008080">2</span> Aoko <span style="color: #0000ff">is</span> good.</pre>
</div>
<p>format()支持数组下标,使python中的一些数据结构输出更加方便。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> name=[<span style="color: #800000">"</span><span style="color: #800000">Kaito</span><span style="color: #800000">"</span>,5<span style="color: #000000">]
</span><span style="color: #008080">2</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">{0[0]} has {0[1]} dollars.</span><span style="color: #800000">"</span><span style="color: #000000">.format(name))
</span><span style="color: #008080">3</span> Kaito has 5 dollars.</pre>
</div>
<p>format()下的格式限定符,和原来的差不多。</p>
<div class="cnblogs_code">
<pre><span style="color: #008080">1</span> >>> x=5.6
<span style="color: #008080">2</span> >>> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">{0:4f}</span><span style="color: #800000">"</span><span style="color: #000000">.format(x))
</span><span style="color: #008080">3</span> 5.600000</pre>
</div>
<p>由此看来,print()相比print还是有很大进步的。说句题外话,我希望更多的python用户多花点时间实现代码对新版本的兼容,而不是花时间用在争论“python2和python3谁更好”的口水战上。python作为一种免费语言给我们带来了很多方便,我们不应该吝惜自己那么一点时间。花一点时间让python发展下去,变得更强。</p></div><div id="MySignature"></div>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="BlogPostCategory">分类: <a href="http://www.cnblogs.com/kaitoex/category/911690.html" target="_blank">Python</a></div>
<div id="EntryTag"></div>
<div id="blog_post_info"><div id="green_channel">
<a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(6085606,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>
<a id="green_channel_follow" onclick="follow('bf2ce7d4-3bc3-e511-9fc1-ac853d9f53cc');" href="javascript:void(0);">关注我</a>
<a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>
<a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="//common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>
<a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="//common.cnblogs.com/images/wechat.png" alt=""></a>
</div>
<div id="author_profile">
<div id="author_profile_info" class="author_profile_info">
<a href="http://home.cnblogs.com/u/kaitoex/" target="_blank"><img src="//pic.cnblogs.com/face/886652/20161120094544.png" class="author_avatar" alt=""></a>
<div id="author_profile_detail" class="author_profile_info">
<a href="http://home.cnblogs.com/u/kaitoex/">快斗之翼</a><br>
<a href="http://home.cnblogs.com/u/kaitoex/followees">关注 - 6</a><br>
<a href="http://home.cnblogs.com/u/kaitoex/followers">粉丝 - 1</a>
</div>
</div>
<div class="clear"></div>
<div id="author_profile_honor"></div>
<div id="author_profile_follow">
<a href="javascript:void(0);" onclick="follow('bf2ce7d4-3bc3-e511-9fc1-ac853d9f53cc');return false;">+加关注</a>
</div>
</div>
<div id="div_digg">
<div class="diggit" onclick="votePost(6085606,'Digg')">
<span class="diggnum" id="digg_count">2</span>
</div>
<div class="buryit" onclick="votePost(6085606,'Bury')">
<span class="burynum" id="bury_count">0</span>
</div>
<div class="clear"></div>
<div class="diggword" id="digg_tips">
</div>
</div>
</div>
<div class="clear"></div>
<div id="post_next_prev"><a href="http://www.cnblogs.com/kaitoex/p/6082197.html" class="p_n_p_prefix">« </a> 上一篇:<a href="http://www.cnblogs.com/kaitoex/p/6082197.html" title="发布于2016-11-20 10:39">STL中优先队列的使用</a><br><a href="http://www.cnblogs.com/kaitoex/p/6086280.html" class="p_n_p_prefix">» </a> 下一篇:<a href="http://www.cnblogs.com/kaitoex/p/6086280.html" title="发布于2016-11-24 17:25">【学习笔记】python2和python3的input()</a><br></div>
</div>

</div>
<div class="postDesc">posted @ <span id="post-date">2016-11-21 17:33</span> <a href="http://www.cnblogs.com/kaitoex/">快斗之翼</a> 阅读(<span id="post_view_count">19317</span>) 评论(<span id="post_comment_count">0</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=6085606" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(6085606);return false;">收藏</a></div>
</div>
<script type="text/javascript">var allowComments=true,cb_blogId=265069,cb_entryId=6085606,cb_blogApp=currentBlogApp,cb_blogUserGuid='bf2ce7d4-3bc3-e511-9fc1-ac853d9f53cc',cb_entryCreatedDate='2016/11/21 17:33:00';loadViewCount(cb_entryId);var cb_postType=1;</script>

</div><!--end: topics 文章、评论容器-->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: