<div id="page" class="hfeed site"> | |
<header id="masthead" class="site-header" role="banner"> | |
<div class="site-branding"> | |
<h1 class="site-title"><a href="http://wuzhiwei.net/" rel="home">Tim's Blog</a></h1> | |
<div class="site-description">Thinking, Coding && Writing</div> | |
</div> | |
<div class="main-navigation-wrapper"> | |
<nav id="site-navigation" class="main-navigation" role="navigation"> | |
<h1 class="menu-toggle">Menu</h1> | |
<a class="skip-link screen-reader-text" href="#content">Skip to content</a> | |
<div class="menu"><ul><li ><a href="http://wuzhiwei.net/">首页</a></li><li class="page_item page-item-2"><a href="http://wuzhiwei.net/about/">关于</a></li><li class="page_item page-item-14"><a href="http://wuzhiwei.net/lab/">实验室</a></li></ul></div> | |
<form role="search" method="get" class="search-form" action="http://wuzhiwei.net/"> | |
<label> | |
<span class="screen-reader-text">搜索:</span> | |
<input type="search" class="search-field" placeholder="搜索…" value="" name="s" /> | |
</label> | |
<input type="submit" class="search-submit" value="搜索" /> | |
</form> </nav><!-- #site-navigation --> | |
</div> | |
</header><!-- #masthead --> | |
<div id="content" class="site-content"> | |
<div id="primary" class="content-area"> | |
<main id="main" class="site-main" role="main"> | |
<article id="post-318" class="post-318 post type-post status-publish format-standard hentry category-python tag-python-2 tag-pythonic tag-32 tag-31"> | |
<header class="entry-header"> | |
<h1 class="entry-title">让你的Python代码更加pythonic</h1> | |
<div class="entry-meta"> | |
<span class="posted-on">Posted on <a href="http://wuzhiwei.net/be_pythonic/" rel="bookmark"><time class="entry-date published" datetime="2014-03-24T20:52:32+00:00">2014/03/24</time></a> </span> | |
<span class="comments-link">· <a href="http://wuzhiwei.net/be_pythonic/#comments">22 Comments</a></span> | |
</div><!-- .entry-meta --> | |
</header><!-- .entry-header --> | |
<div class="entry-content"> | |
<h2>何为pythonic?</h2> | |
<p>pythonic如果翻译成中文的话就是<code>很python</code>。<code>很</code>+<code>名词</code>结构的用法在中国不少,比如:很娘,很国足,很CCTV等等。</p> | |
<p>我的理解为,<code>很</code>+<code>名词</code>表达了一种特殊和强调的意味。所以<code>很python</code>可以理解为:只有python能做到的,区别于其他语言的写法,其实就是python的惯用和特有写法。</p> | |
<img src="http://wuzhiwei.net/articlePic/jugelizi.jpg"></img> | |
<h4>置换两个变量的值。</h4> | |
<h5>很python的写法:</h5> | |
<!-- Crayon Syntax Highlighter v_2.7.2_beta --> | |
<div id="crayon-5811b5a4ef98c359612558" class="crayon-syntax crayon-theme-classic-copy crayon-font-courier-new crayon-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-mouseover" style=" max-width: 650px; margin-top: 12px; margin-bottom: 12px; float: none; margin-left: auto; margin-right: auto; font-size: 16px !important; line-height: 20px !important;"> | |
<div class="crayon-plain-wrap"></div> | |
<div class="crayon-main" style=" max-width: 650px;"> | |
<table class="crayon-table"> | |
<tr class="crayon-row"> | |
<td class="crayon-nums " data-settings="hide"> | |
<div class="crayon-nums-content" style="font-size: 16px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5811b5a4ef98c359612558-1">1</div></div> | |
</td> | |
<td class="crayon-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5811b5a4ef98c359612558-1"><span class="crayon-v">a</span><span class="crayon-sy">,</span><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">b</span><span class="crayon-sy">,</span><span class="crayon-v">a</span></div></div></td> | |
</tr> | |
</table> | |
</div> | |
</div> | |
<!-- [Format Time: 0.0008 seconds] --> | |
<h5>不python的写法:</h5> | |
<!-- Crayon Syntax Highlighter v_2.7.2_beta --> | |
<div id="crayon-5811b5a4ef996451068450" class="crayon-syntax crayon-theme-classic-copy crayon-font-courier-new crayon-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-mouseover" style=" max-width: 650px; margin-top: 12px; margin-bottom: 12px; float: none; margin-left: auto; margin-right: auto; font-size: 16px !important; line-height: 20px !important;"> | |
<div class="crayon-plain-wrap"></div> | |
<div class="crayon-main" style=" max-width: 650px;"> | |
<table class="crayon-table"> | |
<tr class="crayon-row"> | |
<td class="crayon-nums " data-settings="hide"> | |
<div class="crayon-nums-content" style="font-size: 16px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5811b5a4ef996451068450-1">1</div><div class="crayon-num" data-line="crayon-5811b5a4ef996451068450-2">2</div><div class="crayon-num" data-line="crayon-5811b5a4ef996451068450-3">3</div></div> | |
</td> | |
<td class="crayon-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5811b5a4ef996451068450-1"><span class="crayon-v">temp</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">a</span></div><div class="crayon-line" id="crayon-5811b5a4ef996451068450-2"><span class="crayon-v">a</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-i">b</span></div><div class="crayon-line" id="crayon-5811b5a4ef996451068450-3"><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">temp</span></div></div></td> | |
</tr> | |
</table> | |
</div> | |
</div> | |
<!-- [Format Time: 0.0005 seconds] --> | |
<p>上面的例子通过了元组的pack和unpack完成了对a,b的互换,避免了使用临时变量temp,而且只用了一行代码。</p> | |
<span id="more-318"></span> | |
<p>以下为了简略,我们用<strong>P</strong>表示pythonic的写法,<strong>NP</strong>表示non-pythonic的写法,当然此P-NP非彼P-NP。</p> | |
<h2>为什么要追求pythonic?</h2> | |
<p>相比于NP,P的写法简练,明确,优雅,绝大部分时候执行效率高,代码越少也就越不容易出错。我认为好的程序员在写代码时,应该追求代码的正确性,简洁性和可读性,这恰恰就是pythonic的精神所在。</p> | |
<p>对于具有其他编程语言经验而初涉Python的程序员(比如我自己)来说,在写Python代码时,认识到pythonic的写法,会带来更多的便利和高效,而本文的主要读者也将是这群程序员。</p> | |
<p>以下将给出P和NP的n种示例,供读者和自己参考,查阅。</p> | |
<p>本文最后会列出参考资料,这些参考资料在我看来都极具价值。</p> | |
<h2>P vs. NP的示例</h2> | |
<h3>链式比较</h3> | |
<h5>P:</h5> | |
<!-- Crayon Syntax Highlighter v_2.7.2_beta --> | |
<div id="crayon-5811b5a4ef99c922221466" class="crayon-syntax crayon-theme-classic-copy crayon-font-courier-new crayon-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-mouseover" style=" max-width: 650px; margin-top: 12px; margin-bottom: 12px; float: none; margin-left: auto; margin-right: auto; font-size: 16px !important; line-height: 20px !important;"> | |
<div class="crayon-plain-wrap"></div> | |
<div class="crayon-main" style=" max-width: 650px;"> | |
<table class="crayon-table"> | |
<tr class="crayon-row"> | |
<td class="crayon-nums " data-settings="hide"> | |
<div class="crayon-nums-content" style="font-size: 16px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5811b5a4ef99c922221466-1">1</div><div class="crayon-num" data-line="crayon-5811b5a4ef99c922221466-2">2</div><div class="crayon-num" data-line="crayon-5811b5a4ef99c922221466-3">3</div><div class="crayon-num" data-line="crayon-5811b5a4ef99c922221466-4">4</div></div> | |
</td> | |
<td class="crayon-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5811b5a4ef99c922221466-1"><span class="crayon-v">a</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">3</span></div><div class="crayon-line" id="crayon-5811b5a4ef99c922221466-2"><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5811b5a4ef99c922221466-3"> </div><div class="crayon-line" id="crayon-5811b5a4ef99c922221466-4"><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-o"><=</span><span class="crayon-h"> </span><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o"><=</span><span class="crayon-h"> </span><span class="crayon-v">a</span><span class="crayon-h"> </span><span class="crayon-o"><</span><span class="crayon-h"> </span><span class="crayon-cn">10</span><span class="crayon-h"> </span><span class="crayon-c">#True</span></div></div></td> | |
</tr> | |
</table> | |
</div> | |
</div> | |
<!-- [Format Time: 0.0008 seconds] --> | |
<h5>NP:</h5> | |
<!-- Crayon Syntax Highlighter v_2.7.2_beta --> | |
<div id="crayon-5811b5a4ef9a1256856713" class="crayon-syntax crayon-theme-classic-copy crayon-font-courier-new crayon-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-mouseover" style=" max-width: 650px; margin-top: 12px; margin-bottom: 12px; float: none; margin-left: auto; margin-right: auto; font-size: 16px !important; line-height: 20px !important;"> | |
<div class="crayon-plain-wrap"></div> | |
<div class="crayon-main" style=" max-width: 650px;"> | |
<table class="crayon-table"> | |
<tr class="crayon-row"> | |
<td class="crayon-nums " data-settings="hide"> | |
<div class="crayon-nums-content" style="font-size: 16px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5811b5a4ef9a1256856713-1">1</div></div> | |
</td> | |
<td class="crayon-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5811b5a4ef9a1256856713-1"><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o">>=</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-st">and</span><span class="crayon-h"> </span><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o"><=</span><span class="crayon-h"> </span><span class="crayon-i">a</span><span class="crayon-h"> </span><span class="crayon-st">and</span><span class="crayon-h"> </span><span class="crayon-v">a</span><span class="crayon-h"> </span><span class="crayon-o"><</span><span class="crayon-h"> </span><span class="crayon-cn">10</span><span class="crayon-h"> </span><span class="crayon-c">#True</span></div></div></td> | |
</tr> | |
</table> | |
</div> | |
</div> | |
<!-- [Format Time: 0.0007 seconds] --> | |
<p>P是小学生都能看懂的语法,简单直接省代码~</p> | |
<h3>真值测试</h3> | |
<h5>P:</h5> | |
<!-- Crayon Syntax Highlighter v_2.7.2_beta --> | |
<div id="crayon-5811b5a4ef9a9304528166" class="crayon-syntax crayon-theme-classic-copy crayon-font-courier-new crayon-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-mouseover" style=" max-width: 650px; margin-top: 12px; margin-bottom: 12px; float: none; margin-left: auto; margin-right: auto; font-size: 16px !important; line-height: 20px !important;"> | |
<div class="crayon-plain-wrap"></div> | |
<div class="crayon-main" style=" max-width: 650px;"> | |
<table class="crayon-table"> | |
<tr class="crayon-row"> | |
<td class="crayon-nums " data-settings="hide"> | |
<div class="crayon-nums-content" style="font-size: 16px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5811b5a4ef9a9304528166-1">1</div><div class="crayon-num" data-line="crayon-5811b5a4ef9a9304528166-2">2</div><div class="crayon-num" data-line="crayon-5811b5a4ef9a9304528166-3">3</div><div class="crayon-num" data-line="crayon-5811b5a4ef9a9304528166-4">4</div><div class="crayon-num" data-line="crayon-5811b5a4ef9a9304528166-5">5</div><div class="crayon-num" data-line="crayon-5811b5a4ef9a9304528166-6">6</div></div> | |
</td> | |
<td class="crayon-code"><div class="crayon-pre" style="font-size: 16px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5811b5a4ef9a9304528166-1"><span class="crayon-v">name</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-s">'Tim'</span></div><div class="crayon-line" id="crayon-5811b5a4ef9a9304528166-2"><span class="crayon-v">langs</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-s">'AS3'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'Lua'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'C'</span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5811b5a4ef9a9304528166-3"><span class="crayon-v">info</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">{</span><span class="crayon-s">'name'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'Tim'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'sex'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'Male'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'age'</span><span class="crayon-o">:</span><span class="crayon-cn">23</span><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5811b5a4ef9a9304528166-4"> </div><div class="crayon-line" id="crayon-5811b5a4ef9a9304528166-5"><span class="crayon-st">if</span><span class="crayon-h"> </span><span class="crayon-e">name </span><span class="crayon-st">and</span><span class="crayon-h"> </span><span class="crayon-e">langs </span><span class="crayon-st">and</span><span class="crayon-h"> </span><span class="crayon-v">info</span><span class="crayon-o">:</span></div><div class="crayon-line" id="crayon-5811b5a4ef9a9304528166-6"><span class="crayon-h"> </span><span class="crayon-k ">print</span><span class="crayon-sy">(</span><span class="crayon-s">'All True!'</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-c">#All True!</span></div></div></td> | |
</tr> | |
</table> | |
</div> | |
</div> | |
<!-- [Format Time: 0.0014 seconds] --> | |
<h5>NP:</h5> | |
<!-- Crayon Syntax Highlighter v_2.7.2_beta --> | |
<div id="crayon-5811b5a4ef9af913410811" class="crayon-syntax crayon-theme-classic-copy crayon-font-courier-new crayon-os-pc print-yes notranslate" data-settings=" no-popup minimize scroll-mouseover" style=" max-width: 650px; margin-top: 12px; margin-bottom: 12px; float: none; margin-left: auto; margin-right: auto; font-size: 16px !important; line-height: 20px !important;"> | |
<div class="crayon-plain-wrap"></div> | |
<div class="crayon-main" style=" max-width: 650px;"> | |
<t |
让你的Python代码更加pythonic
最新推荐文章于 2024-02-20 16:52:56 发布