让你的Python代码更加pythonic

<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&#039;s Blog</a></h1>
 <div class="site-description">Thinking, Coding &amp;&amp; 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="搜索&hellip;" 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">&middot; <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">&nbsp;</div><div class="crayon-line" id="crayon-5811b5a4ef99c922221466-4"><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-o">&lt;=</span><span class="crayon-h"> </span><span class="crayon-v">b</span><span class="crayon-h"> </span><span class="crayon-o">&lt;=</span><span class="crayon-h"> </span><span class="crayon-v">a</span><span class="crayon-h"> </span><span class="crayon-o">&lt;</span><span class="crayon-h"> </span><span class="crayon-cn">10</span><span class="crayon-h">&nbsp;&nbsp;</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">&gt;=</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">&lt;=</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">&lt;</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">&nbsp;&nbsp;&nbsp;&nbsp;</span></div><div class="crayon-line" id="crayon-5811b5a4ef9a9304528166-4">&nbsp;</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">&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;&nbsp;</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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值