<html><head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>Dive Into Python</title><link rev="made" href="mailto:f8dy@diveintopython.org"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><meta name="description" content=" &#26412;&#20070;&#23384;&#25918;&#22312; (&#33521;&#25991;&#21407;&#29256;) &#21644; (&#20013;&#25991;&#29256;)&#12290;&#22914;&#26524;&#20320;&#26159;&#20174;&#21035;&#30340;&#22320;&#26041;&#30475;&#21040;&#23427;&#30340;&#65292;&#21487;&#33021;&#30475;&#21040;&#30340;&#19981;&#26159;&#26368;&#26032;&#29256;&#26412;&#12290;"><meta name="keywords" content="Python, Dive Into Python, tutorial, object-oriented, programming, documentation, book, free"><meta name="description" content="Python from novice to pro"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="d0e1"></a>Dive Into <span class="application">Python</span></h1></div><div><p class="pubdate">&#23457;&#26657; (5.4b)&#65306;2007 &#24180; 6 &#26376;&#8212;9 &#26376;</p></div><div><p class="pubdate">&#35793;&#25991;&#29256; (5.4)&#65306;2005 &#24180; 12 &#26376;&#8212;2006 &#24180; 4 &#26376; (update-060425)</p></div><div><p class="pubdate">&#33521;&#25991;&#21407;&#29256; (5.4)&#65306;2004 &#24180; 5 &#26376; 20 &#26085;</p></div><div><p class="copyright">&#29256;&#26435; (c) 2000, 2001, 2002, 2003, 2004 Mark Pilgrim (<a href="mailto:mark@diveintopython.org">mailto:mark@diveintopython.org</a>)</p></div><div><p class="copyright">&#29256;&#26435; (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 CPyUG (&#37038;&#20214;&#21015;&#34920;) (<a href="mailto:python-cn@googlegroups.com">mailto:python-cn@googlegroups.com</a>)</p></div><div><div class="abstract"><p class="title"><b></b></p><p>&#26412;&#20070;&#23384;&#25918;&#22312; <a href="http://diveintopython.org/">http://diveintopython.org/</a> (&#33521;&#25991;&#21407;&#29256;) &#21644; <a href="http://www.woodpecker.org.cn/diveintopython">http://www.woodpecker.org.cn/diveintopython</a>(&#20013;&#25991;&#29256;)&#12290;&#22914;&#26524;&#20320;&#26159;&#20174;&#21035;&#30340;&#22320;&#26041;&#30475;&#21040;&#23427;&#30340;&#65292;&#21487;&#33021;&#30475;&#21040;&#30340;&#19981;&#26159;&#26368;&#26032;&#29256;&#26412;&#12290;</p></div></div><div><div class="legalnotice"><a name="d0e2899"></a><p>Permission is granted to copy, distribute, and/or modify this document under the terms of the <acronym class="acronym">GNU</acronym> Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license is included in <a class="link" href="#gfdl" title="&#38468;&#24405;&nbsp;G.&nbsp;GNU Free Documentation License">Appendix G, GNU Free Documentation License</a>.</p><p>&#20801;&#35768;&#22312; GNU &#33258;&#30001;&#25991;&#26723;&#21327;&#35758; (1.1 &#29256;&#65292;&#25110;&#33258;&#30001;&#36719;&#20214;&#22522;&#37329;&#20250;&#20986;&#29256;&#30340;&#20219;&#20309;&#26356;&#26032;&#29256;&#26412;) &#30340;&#35768;&#21487;&#19979;&#22797;&#21046;&#12289;&#21457;&#34892;&#19988;/&#25110;&#20462;&#25913;&#26412;&#25991;&#26723;&#65307;&#26412;&#25991;&#26723;&#27809;&#26377;&#19981;&#21464;&#37096;&#20998;&#65292;&#27809;&#26377;&#21069;&#23553;&#38754;&#25991;&#26412;&#65292;&#27809;&#26377;&#23553;&#24213;&#25991;&#26412;&#12290;&#35813;&#21327;&#35758;&#30340;&#19968;&#20221;&#20013;&#25991;&#29256;&#21442;&#32771;&#35793;&#25991;&#21253;&#21547;&#22312; <a class="xref" href="#gfdl_zh" title="&#38468;&#24405;&nbsp;H.&nbsp;GNU &#33258;&#30001;&#25991;&#26723;&#21327;&#35758;">&#38468;&#24405;&nbsp;H, <i><acronym class="acronym">GNU</acronym> &#33258;&#30001;&#25991;&#26723;&#21327;&#35758;</i></a> &#20013;&#12290;
</p><p>&#22312;&#36825;&#26412;&#20070;&#20013;&#30340;&#20363;&#31243;&#26159;&#33258;&#30001;&#36719;&#20214;&#12290;&#20320;&#21487;&#20197;&#22312;&#36981;&#23432; <span class="application">Python</span> &#21327;&#35758; (<span class="application">Python</span> &#36719;&#20214;&#22522;&#37329;&#20250;&#21457;&#24067;) &#26465;&#27454;&#30340;&#35268;&#23450;&#19979;&#65292;&#37325;&#26032;&#21457;&#24067;&#65292;&#19988;/&#25110;&#20462;&#25913;&#23427;&#20204;&#12290;&#22312; <a class="xref" href="#license" title="&#38468;&#24405;&nbsp;I.&nbsp;Python license">&#38468;&#24405;&nbsp;I, <i><span class="application">Python</span> license</i></a> &#20013;&#21253;&#21547;&#20102;&#27492;&#21327;&#35758;&#30340;&#19968;&#20221;&#25335;&#36125;&#12290;</p><p>&#26412;&#35793;&#26412;&#30001; Zoom.Quiet &#36127;&#36131;&#39033;&#30446;&#31649;&#29702;&#12290;&#24863;&#35874;&#21828;&#26408;&#40479;&#31038;&#21306; (<a href="http://www.woodpecker.org.cn">http://www.woodpecker.org.cn</a>)&#25552;&#20379; SVN &#39033;&#30446;&#31354;&#38388; (<a href="http://svn.woodpecker.org.cn/woodpecker/zh-translations/trunk/diveintopython/zh-cn/">http://svn.woodpecker.org.cn/woodpecker/zh-translations/trunk/diveintopython/zh-cn/</a>)&#21644; Wiki &#21327;&#20316;&#31354;&#38388; (<a href="http://wiki.woodpecker.org.cn/moin/DiveIntoPythonZh">http://wiki.woodpecker.org.cn/moin/DiveIntoPythonZh</a>)&#12290;</p><p>&#26412;&#35793;&#26412;&#30001; &#21828;&#26408;&#40479;/CPUG (<a href="http://wiki.woodpecker.org.cn/moin/CPUG">http://wiki.woodpecker.org.cn/moin/CPUG</a>) &#30340; obp &#22242;&#38431;&#23436;&#25104;&#12290;&#21487;&#20197;&#22312;<a class="xref" href="#revhistory" title="&#38468;&#24405;&nbsp;E.&nbsp;&#20462;&#35746;&#21382;&#21490;">&#38468;&#24405;&nbsp;E, <i>&#20462;&#35746;&#21382;&#21490;</i></a>&#20013;&#25214;&#21040;&#19968;&#20010;&#32763;&#35793;&#21644;&#20462;&#35746;&#20154;&#21592;&#30340;&#28165;&#21333;&#12290;&#22914;&#26524;&#24744;&#23545;&#24403;&#21069;&#29256;&#26412;&#30340; Dive Into Python &#20013;&#25991;&#29256;&#26377;&#20219;&#20309;&#24847;&#35265;&#21644;&#24314;&#35758;&#65292;&#21487;&#20197;&#21040;&#26412;&#20070;&#30340; Wiki &#21327;&#20316;&#31354;&#38388; (<a href="http://wiki.woodpecker.org.cn/moin/DiveIntoPythonZh">http://wiki.woodpecker.org.cn/moin/DiveIntoPythonZh</a>)&#20013;&#30041;&#19979;&#20320;&#30340;&#35780;&#35770;&#12290;</p><p>&#26412;&#35793;&#25991;&#36981;&#23432; GFDL &#30340;&#35268;&#23450;&#12290;&#20320;&#21487;&#20197;&#22797;&#21046;&#12289;&#21457;&#34892;&#12289;&#20462;&#25913;&#27492;&#25991;&#26723;&#65292;&#20294;&#35831;&#20445;&#30041;&#27492;&#29256;&#26435;&#20449;&#24687;&#12290;</p></div></div></div><hr></div><div class="toc"><ul><li><span class="chapter"><a href="#install">1. &#31532; 1 &#31456;</a></span><ul><li><span class="section"><a href="#install.choosing">1.1. &#21738;&#19968;&#31181; <span class="application">Python</span> &#36866;&#21512;&#24744;&#65311;</a></span></li><li><span class="section"><a href="#install.windows">1.2. Windows &#19978;&#30340; <span class="application">Python</span></a></span></li><li><span class="section"><a href="#install.macosx">1.3. <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#30340; <span class="application">Python</span> </a></span></li><li><span class="section"><a href="#install.macos9">1.4. <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> 9 &#19978;&#30340; <span class="application">Python</span> </a></span></li><li><span class="section"><a href="#install.redhat">1.5. RedHat Linux &#19978;&#30340; <span class="application">Python</span> </a></span></li><li><span class="section"><a href="#install.debian">1.6. Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#30340; <span class="application">Python</span> </a></span></li><li><span class="section"><a href="#install.source">1.7. &#20174;&#28304;&#20195;&#30721;&#23433;&#35013; <span class="application">Python</span> </a></span></li><li><span class="section"><a href="#install.shell">1.8. &#20351;&#29992; <span class="application">Python</span> &#30340;&#20132;&#20114; Shell</a></span></li><li><span class="section"><a href="#install.summary">1.9. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#odbchelper">2. &#31532; 2 &#31456;</a></span><ul><li><span class="section"><a href="#odbchelper.divein">2.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#odbchelper.funcdef">2.2. &#20989;&#25968;&#22768;&#26126;</a></span><ul><li><span class="section"><a href="#d0e4324">2.2.1. <span class="application">Python</span> &#21644;&#20854;&#20182;&#32534;&#31243;&#35821;&#35328;&#25968;&#25454;&#31867;&#22411;&#30340;&#27604;&#36739;</a></span></li></ul></li><li><span class="section"><a href="#odbchelper.docstring">2.3. &#25991;&#26723;&#21270;&#20989;&#25968;</a></span></li><li><span class="section"><a href="#odbchelper.objects">2.4. &#19975;&#29289;&#30342;&#23545;&#35937;</a></span><ul><li><span class="section"><a href="#d0e4686">2.4.1. &#27169;&#22359;&#23548;&#20837;&#30340;&#25628;&#32034;&#36335;&#24452;</a></span></li><li><span class="section"><a href="#d0e4801">2.4.2. &#20309;&#35859;&#23545;&#35937;&#65311;</a></span></li></ul></li><li><span class="section"><a href="#odbchelper.indenting">2.5. &#20195;&#30721;&#32553;&#36827;</a></span></li><li><span class="section"><a href="#odbchelper.testing">2.6. &#27979;&#35797;&#27169;&#22359;</a></span></li></ul></li><li><span class="chapter"><a href="#datatypes">3. &#31532; 3 &#31456;</a></span><ul><li><span class="section"><a href="#odbchelper.dict">3.1. Dictionary &#20171;&#32461;</a></span><ul><li><span class="section"><a href="#d0e5309">3.1.1. Dictionary &#30340;&#23450;&#20041;</a></span></li><li><span class="section"><a href="#d0e5404">3.1.2. Dictionary &#30340;&#20462;&#25913;</a></span></li><li><span class="section"><a href="#d0e5585">3.1.3. &#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;</a></span></li></ul></li><li><span class="section"><a href="#odbchelper.list">3.2. List &#20171;&#32461;</a></span><ul><li><span class="section"><a href="#d0e5762">3.2.1. List &#30340;&#23450;&#20041;</a></span></li><li><span class="section"><a href="#d0e6029">3.2.2. &#21521; list &#20013;&#22686;&#21152;&#20803;&#32032;</a></span></li><li><span class="section"><a href="#d0e6257">3.2.3. &#22312; list &#20013;&#25628;&#32034;</a></span></li><li><span class="section"><a href="#d0e6419">3.2.4. &#20174; list &#20013;&#21024;&#38500;&#20803;&#32032;</a></span></li><li><span class="section"><a href="#d0e6537">3.2.5. &#20351;&#29992; list &#30340;&#36816;&#31639;&#31526;</a></span></li></ul></li><li><span class="section"><a href="#odbchelper.tuple">3.3. Tuple &#20171;&#32461;</a></span></li><li><span class="section"><a href="#odbchelper.vardef">3.4. &#21464;&#37327;&#22768;&#26126;</a></span><ul><li><span class="section"><a href="#d0e7017">3.4.1. &#21464;&#37327;&#24341;&#29992;</a></span></li><li><span class="section"><a href="#odbchelper.multiassign">3.4.2. &#19968;&#27425;&#36171;&#22810;&#20540;</a></span></li></ul></li><li><span class="section"><a href="#odbchelper.stringformatting">3.5. &#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</a></span></li><li><span class="section"><a href="#odbchelper.map">3.6. &#26144;&#23556; list</a></span></li><li><span class="section"><a href="#odbchelper.join">3.7. &#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;</a></span><ul><li><span class="section"><a href="#d0e8123">3.7.1. &#23383;&#31526;&#20018;&#26041;&#27861;&#30340;&#21382;&#21490;&#27880;&#35299;</a></span></li></ul></li><li><span class="section"><a href="#odbchelper.summary">3.8. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#apihelper">4. &#31532; 4 &#31456;</a></span><ul><li><span class="section"><a href="#apihelper.divein">4.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#apihelper.optional">4.2. &#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;</a></span></li><li><span class="section"><a href="#apihelper.builtin">4.3. &#20351;&#29992; <code class="function">type</code>&#12289;<code class="function">str</code>&#12289;<code class="function">dir</code> &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;</a></span><ul><li><span class="section"><a href="#d0e8648">4.3.1. <code class="function">type</code> &#20989;&#25968;</a></span></li><li><span class="section"><a href="#d0e8758">4.3.2. <code class="function">str</code> &#20989;&#25968;</a></span></li><li><span class="section"><a href="#d0e9105">4.3.3. &#20869;&#32622;&#20989;&#25968;</a></span></li></ul></li><li><span class="section"><a href="#apihelper.getattr">4.4. &#36890;&#36807; <code class="function">getattr</code> &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;</a></span><ul><li><span class="section"><a href="#d0e9345">4.4.1. &#29992;&#20110;&#27169;&#22359;&#30340; <code class="function">getattr</code></a></span></li><li><span class="section"><a href="#d0e9513">4.4.2. <code class="function">getattr</code> &#20316;&#20026;&#19968;&#20010;&#20998;&#21457;&#32773;</a></span></li></ul></li><li><span class="section"><a href="#apihelper.filter">4.5. &#36807;&#28388;&#21015;&#34920;</a></span></li><li><span class="section"><a href="#apihelper.andor">4.6. <code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#29305;&#27530;&#24615;&#36136;</a></span><ul><li><span class="section"><a href="#d0e10128">4.6.1. &#20351;&#29992; <code class="literal">and-or</code> &#25216;&#24039;</a></span></li></ul></li><li><span class="section"><a href="#apihelper.lambda">4.7. &#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;</a></span><ul><li><span class="section"><a href="#d0e10549">4.7.1. &#30495;&#23454;&#19990;&#30028;&#20013;&#30340; <code class="literal">lambda</code> &#20989;&#25968;</a></span></li></ul></li><li><span class="section"><a href="#apihelper.alltogether">4.8. &#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a></span></li><li><span class="section"><a href="#apihelper.summary">4.9. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#fileinfo">5. &#31532; 5 &#31456;</a></span><ul><li><span class="section"><a href="#fileinfo.divein">5.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#fileinfo.fromimport">5.2. &#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;</a></span></li><li><span class="section"><a href="#fileinfo.class">5.3. &#31867;&#30340;&#23450;&#20041;</a></span><ul><li><span class="section"><a href="#d0e11869">5.3.1. &#21021;&#22987;&#21270;&#24182;&#24320;&#22987;&#31867;&#32534;&#30721;</a></span></li><li><span class="section"><a href="#d0e12045">5.3.2. &#20102;&#35299;&#20309;&#26102;&#21435;&#20351;&#29992; <code class="literal">self</code> &#21644; <code class="function">__init__</code></a></span></li></ul></li><li><span class="section"><a href="#fileinfo.create">5.4. &#31867;&#30340;&#23454;&#20363;&#21270;</a></span><ul><li><span class="section"><a href="#d0e12314">5.4.1. &#22403;&#22334;&#22238;&#25910;</a></span></li></ul></li><li><span class="section"><a href="#fileinfo.userdict">5.5. &#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;</a></span></li><li><span class="section"><a href="#fileinfo.specialmethods">5.6. &#19987;&#29992;&#31867;&#26041;&#27861;</a></span><ul><li><span class="section"><a href="#d0e13019">5.6.1. &#33719;&#24471;&#21644;&#35774;&#32622;&#25968;&#25454;&#39033;</a></span></li></ul></li><li><span class="section"><a href="#fileinfo.morespecial">5.7. &#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;</a></span></li><li><span class="section"><a href="#fileinfo.classattributes">5.8. &#31867;&#23646;&#24615;&#20171;&#32461;</a></span></li><li><span class="section"><a href="#fileinfo.private">5.9. &#31169;&#26377;&#20989;&#25968;</a></span></li><li><span class="section"><a href="#fileinfo.summary">5.10. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#filehandling">6. &#31532; 6 &#31456;</a></span><ul><li><span class="section"><a href="#fileinfo.exception">6.1. &#24322;&#24120;&#22788;&#29702;</a></span><ul><li><span class="section"><a href="#d0e14544">6.1.1. &#20026;&#20854;&#20182;&#29992;&#36884;&#20351;&#29992;&#24322;&#24120;</a></span></li></ul></li><li><span class="section"><a href="#fileinfo.files">6.2. &#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;</a></span><ul><li><span class="section"><a href="#d0e14868">6.2.1. &#35835;&#21462;&#25991;&#20214;</a></span></li><li><span class="section"><a href="#d0e14995">6.2.2. &#20851;&#38381;&#25991;&#20214;</a></span></li><li><span class="section"><a href="#d0e15122">6.2.3. &#22788;&#29702; <acronym class="acronym">I/O</acronym> &#38169;&#35823;</a></span></li><li><span class="section"><a href="#d0e15243">6.2.4. &#20889;&#20837;&#25991;&#20214;</a></span></li></ul></li><li><span class="section"><a href="#fileinfo.for">6.3. <code class="literal">for</code> &#24490;&#29615;</a></span></li><li><span class="section"><a href="#fileinfo.modules">6.4. &#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code></a></span></li><li><span class="section"><a href="#fileinfo.os">6.5. &#19982;&#30446;&#24405;&#20849;&#20107;</a></span></li><li><span class="section"><a href="#fileinfo.alltogether">6.6. &#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a></span></li><li><span class="section"><a href="#fileinfo.summary2">6.7. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#re">7. &#31532; 7 &#31456;</a></span><ul><li><span class="section"><a href="#re.intro">7.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#re.matching">7.2. &#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;</a></span></li><li><span class="section"><a href="#re.roman">7.3. &#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;</a></span><ul><li><span class="section"><a href="#d0e17763">7.3.1. &#26657;&#39564;&#21315;&#20301;&#25968;</a></span></li><li><span class="section"><a href="#d0e17955">7.3.2. &#26657;&#39564;&#30334;&#20301;&#25968;</a></span></li></ul></li><li><span class="section"><a href="#re.nm">7.4. &#20351;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;</a></span><ul><li><span class="section"><a href="#d0e18499">7.4.1. &#26657;&#39564;&#21313;&#20301;&#25968;&#21644;&#20010;&#20301;&#25968;</a></span></li></ul></li><li><span class="section"><a href="#re.verbose">7.5. &#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;</a></span></li><li><span class="section"><a href="#re.phone">7.6. &#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;</a></span></li><li><span class="section"><a href="#re.summary">7.7. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#dialect">8. &#31532; 8 &#31456;</a></span><ul><li><span class="section"><a href="#dialect.divein">8.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#dialect.sgmllib">8.2. <code class="filename">sgmllib.py</code> &#20171;&#32461;</a></span></li><li><span class="section"><a href="#dialect.extract">8.3. &#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;</a></span></li><li><span class="section"><a href="#dialect.basehtml">8.4. <code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;</a></span></li><li><span class="section"><a href="#dialect.locals">8.5. <code class="function">locals</code> &#21644; <code class="function">globals</code></a></span></li><li><span class="section"><a href="#dialect.dictsub">8.6. &#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a></span></li><li><span class="section"><a href="#dialect.quoting">8.7. &#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;</a></span></li><li><span class="section"><a href="#dialect.dialectizer">8.8. <code class="filename">dialect.py</code> &#20171;&#32461;</a></span></li><li><span class="section"><a href="#dialect.alltogether">8.9. &#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a></span></li><li><span class="section"><a href="#dialect.summary">8.10. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#kgp">9. &#31532; 9 &#31456;</a></span><ul><li><span class="section"><a href="#kgp.divein">9.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#kgp.packages">9.2. &#21253;</a></span></li><li><span class="section"><a href="#kgp.parse">9.3. <acronym class="acronym">XML</acronym> &#35299;&#26512;</a></span></li><li><span class="section"><a href="#kgp.unicode">9.4. Unicode</a></span></li><li><span class="section"><a href="#kgp.search">9.5. &#25628;&#32034;&#20803;&#32032;</a></span></li><li><span class="section"><a href="#kgp.attributes">9.6. &#35775;&#38382;&#20803;&#32032;&#23646;&#24615;</a></span></li><li><span class="section"><a href="#kgp.segue">9.7. Segue </a></span></li></ul></li><li><span class="chapter"><a href="#streams">10. &#31532; 10 &#31456;</a></span><ul><li><span class="section"><a href="#kgp.openanything">10.1. &#25277;&#35937;&#36755;&#20837;&#28304;</a></span></li><li><span class="section"><a href="#kgp.stdio">10.2. &#26631;&#20934;&#36755;&#20837;&#12289;&#36755;&#20986;&#21644;&#38169;&#35823;</a></span></li><li><span class="section"><a href="#kgp.cache">10.3. &#26597;&#35810;&#32531;&#20914;&#33410;&#28857;</a></span></li><li><span class="section"><a href="#kgp.child">10.4. &#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;</a></span></li><li><span class="section"><a href="#kgp.handler">10.5. &#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;</a></span></li><li><span class="section"><a href="#kgp.commandline">10.6. &#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;</a></span></li><li><span class="section"><a href="#kgp.alltogether">10.7. &#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a></span></li><li><span class="section"><a href="#kgp.summary">10.8. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#oa">11. &#31532; 11 &#31456;</a></span><ul><li><span class="section"><a href="#oa.divein">11.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#oa.review">11.2. &#36991;&#20813;&#36890;&#36807; HTTP &#37325;&#22797;&#22320;&#33719;&#21462;&#25968;&#25454;</a></span></li><li><span class="section"><a href="#oa.features">11.3. HTTP &#30340;&#29305;&#24615;</a></span><ul><li><span class="section"><a href="#d0e27782">11.3.1. &#29992;&#25143;&#20195;&#29702; (<code class="literal">User-Agent</code>)</a></span></li><li><span class="section"><a href="#d0e27806">11.3.2. &#37325;&#23450;&#21521; (Redirects)</a></span></li><li><span class="section"><a href="#d0e27880">11.3.3. <code class="literal">Last-Modified</code>/<code class="literal">If-Modified-Since</code></a></span></li><li><span class="section"><a href="#d0e27915">11.3.4. <code class="literal">ETag</code>/<code class="literal">If-None-Match</code></a></span></li><li><span class="section"><a href="#d0e27943">11.3.5. &#21387;&#32553; (Compression)</a></span></li></ul></li><li><span class="section"><a href="#oa.debug">11.4. &#35843;&#35797; HTTP web &#26381;&#21153;</a></span></li><li><span class="section"><a href="#oa.useragent">11.5. &#35774;&#32622; <code class="literal">User-Agent</code></a></span></li><li><span class="section"><a href="#oa.etags">11.6. &#22788;&#29702; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code></a></span></li><li><span class="section"><a href="#oa.redirect">11.7. &#22788;&#29702;&#37325;&#23450;&#21521;</a></span></li><li><span class="section"><a href="#oa.gzip">11.8. &#22788;&#29702;&#21387;&#32553;&#25968;&#25454;</a></span></li><li><span class="section"><a href="#oa.alltogether">11.9. &#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a></span></li><li><span class="section"><a href="#oa.summary">11.10. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#soap">12. &#31532; 12 &#31456;</a></span><ul><li><span class="section"><a href="#soap.divein">12.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#soap.install">12.2. &#23433;&#35013; SOAP &#24211;</a></span><ul><li><span class="section"><a href="#d0e30152">12.2.1. &#23433;&#35013; <span class="application">PyXML</span></a></span></li><li><span class="section"><a href="#d0e30255">12.2.2. &#23433;&#35013; <span class="application">fpconst</span></a></span></li><li><span class="section"><a href="#d0e30353">12.2.3. &#23433;&#35013; <span class="application">SOAPpy</span></a></span></li></ul></li><li><span class="section"><a href="#soap.firststeps">12.3. &#27493;&#20837; <acronym class="acronym">SOAP</acronym></a></span></li><li><span class="section"><a href="#soap.debug">12.4.  <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;</a></span></li><li><span class="section"><a href="#soap.wsdl">12.5. <acronym class="acronym">WSDL</acronym> &#20171;&#32461;</a></span></li><li><span class="section"><a href="#soap.introspection">12.6. &#20197; <acronym class="acronym">WSDL</acronym> &#36827;&#34892; <acronym class="acronym">SOAP</acronym> &#20869;&#30465;</a></span></li><li><span class="section"><a href="#soap.google">12.7. &#25628;&#32034; Google</a></span></li><li><span class="section"><a href="#soap.troubleshooting">12.8.  <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#25925;&#38556;&#25490;&#38500;</a></span></li><li><span class="section"><a href="#soap.summary">12.9. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#roman">13. &#31532; 13 &#31456;</a></span><ul><li><span class="section"><a href="#roman.intro">13.1. &#32599;&#39532;&#25968;&#23383;&#31243;&#24207;&#20171;&#32461; II</a></span></li><li><span class="section"><a href="#roman.divein">13.2. &#28145;&#20837;</a></span></li><li><span class="section"><a href="#roman.romantest">13.3. <code class="filename">romantest.py</code> &#20171;&#32461;</a></span></li><li><span class="section"><a href="#roman.success">13.4. &#27491;&#38754;&#27979;&#35797; (Testing for success)</a></span></li><li><span class="section"><a href="#roman.failure">13.5. &#36127;&#38754;&#27979;&#35797; (Testing for failure)</a></span></li><li><span class="section"><a href="#roman.sanity">13.6. &#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)</a></span></li></ul></li><li><span class="chapter"><a href="#roman1.5">14. &#31532; 14 &#31456;</a></span><ul><li><span class="section"><a href="#roman.stage1">14.1. <code class="filename">roman.py</code>, &#31532; 1 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#roman.stage2">14.2. <code class="filename">roman.py</code>, &#31532; 2 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#roman.stage3">14.3. <code class="filename">roman.py</code>, &#31532; 3 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#roman.stage4">14.4. <code class="filename">roman.py</code>, &#31532; 4 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#roman.stage5">14.5. <code class="filename">roman.py</code>, &#31532; 5 &#38454;&#27573;</a></span></li></ul></li><li><span class="chapter"><a href="#roman2">15. &#31532; 15 &#31456;</a></span><ul><li><span class="section"><a href="#roman.bugs">15.1. &#22788;&#29702; bugs</a></span></li><li><span class="section"><a href="#roman.change">15.2. &#24212;&#23545;&#38656;&#27714;&#21464;&#21270;</a></span></li><li><span class="section"><a href="#roman.refactoring">15.3. &#37325;&#26500;</a></span></li><li><span class="section"><a href="#roman.postscript">15.4. &#21518;&#35760;</a></span></li><li><span class="section"><a href="#roman.summary">15.5. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#regression">16. &#31532; 16 &#31456;</a></span><ul><li><span class="section"><a href="#regression.divein">16.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#regression.path">16.2. &#25214;&#21040;&#36335;&#24452;</a></span></li><li><span class="section"><a href="#regression.filter">16.3. &#37325;&#35782;&#21015;&#34920;&#36807;&#28388;</a></span></li><li><span class="section"><a href="#regression.map">16.4. &#37325;&#35782;&#21015;&#34920;&#26144;&#23556;</a></span></li><li><span class="section"><a href="#regression.datacentric">16.5. &#25968;&#25454;&#20013;&#24515;&#24605;&#24819;&#32534;&#31243;</a></span></li><li><span class="section"><a href="#regression.import">16.6. &#21160;&#24577;&#23548;&#20837;&#27169;&#22359;</a></span></li><li><span class="section"><a href="#regression.alltogether">16.7. &#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a></span></li><li><span class="section"><a href="#regression.summary">16.8. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#plural">17. &#31532; 17 &#31456;</a></span><ul><li><span class="section"><a href="#plural.divein">17.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#plural.stage1">17.2. <code class="filename">plural.py</code>, &#31532; 1 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#plural.stage2">17.3. <code class="filename">plural.py</code>, &#31532; 2 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#plural.stage3">17.4. <code class="filename">plural.py</code>, &#31532; 3 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#plural.stage4">17.5. <code class="filename">plural.py</code>, &#31532; 4 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#plural.stage5">17.6. <code class="filename">plural.py</code>, &#31532; 5 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#plural.stage6">17.7. <code class="filename">plural.py</code>, &#31532; 6 &#38454;&#27573;</a></span></li><li><span class="section"><a href="#plural.summary">17.8. &#23567;&#32467;</a></span></li></ul></li><li><span class="chapter"><a href="#soundex">18. &#31532; 18 &#31456;</a></span><ul><li><span class="section"><a href="#soundex.divein">18.1. &#27010;&#35272;</a></span></li><li><span class="section"><a href="#soundex.timeit">18.2. &#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;</a></span></li><li><span class="section"><a href="#soundex.stage1">18.3. &#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;</a></span></li><li><span class="section"><a href="#soundex.stage2">18.4. &#20248;&#21270;&#23383;&#20856;&#26597;&#25214;</a></span></li><li><span class="section"><a href="#soundex.stage3">18.5. &#20248;&#21270;&#21015;&#34920;&#25805;&#20316;</a></span></li><li><span class="section"><a href="#soundex.stage4">18.6. &#20248;&#21270;&#23383;&#31526;&#20018;&#25805;&#20316;</a></span></li><li><span class="section"><a href="#soundex.summary">18.7. &#23567;&#32467;</a></span></li></ul></li><li><span class="appendix"><a href="#furtherreading">A. &#36827;&#19968;&#27493;&#38405;&#35835;</a></span></li><li><span class="appendix"><a href="#abstracts">B. &#20116;&#20998;&#38047;&#22238;&#39038;</a></span></li><li><span class="appendix"><a href="#tips">C. &#25216;&#24039;&#21644;&#31373;&#38376;</a></span></li><li><span class="appendix"><a href="#examples">D. &#31034;&#20363;&#28165;&#21333;</a></span></li><li><span class="appendix"><a href="#revhistory">E. &#20462;&#35746;&#21382;&#21490;</a></span></li><li><span class="appendix"><a href="#about">F. &#20851;&#20110;&#26412;&#20070;</a></span></li><li><span class="appendix"><a href="#gfdl">G. <acronym class="acronym">GNU</acronym> Free Documentation License</a></span><ul><li><span class="section"><a href="#d0e40184">G.0. Preamble</a></span></li><li><span class="section"><a href="#d0e40193">G.1. Applicability and definitions</a></span></li><li><span class="section"><a href="#d0e40213">G.2. Verbatim copying</a></span></li><li><span class="section"><a href="#d0e40221">G.3. Copying in quantity</a></span></li><li><span class="section"><a href="#d0e40233">G.4. Modifications</a></span></li><li><span class="section"><a href="#d0e40290">G.5. Combining documents</a></span></li><li><span class="section"><a href="#d0e40300">G.6. Collections of documents</a></span></li><li><span class="section"><a href="#d0e40308">G.7. Aggregation with independent works</a></span></li><li><span class="section"><a href="#d0e40316">G.8. Translation</a></span></li><li><span class="section"><a href="#d0e40322">G.9. Termination</a></span></li><li><span class="section"><a href="#d0e40328">G.10. Future revisions of this license</a></span></li><li><span class="section"><a href="#d0e40339">G.11. How to use this License for your documents</a></span></li></ul></li><li><span class="appendix"><a href="#gfdl_zh">H. <acronym class="acronym">GNU</acronym> &#33258;&#30001;&#25991;&#26723;&#21327;&#35758;</a></span><ul><li><span class="section"><a href="#d0e40371">H.0. &#24207;</a></span></li><li><span class="section"><a href="#d0e40380">H.1. &#36866;&#29992;&#33539;&#22260;&#21644;&#23450;&#20041;</a></span></li><li><span class="section"><a href="#d0e40400">H.2. &#21407;&#26679;&#22797;&#21046;</a></span></li><li><span class="section"><a href="#d0e40408">H.3. &#22823;&#37327;&#22797;&#21046;</a></span></li><li><span class="section"><a href="#d0e40420">H.4. &#20462;&#25913;</a></span></li><li><span class="section"><a href="#d0e40477">H.5. &#21512;&#24182;&#25991;&#26723;</a></span></li><li><span class="section"><a href="#d0e40487">H.6. &#25991;&#26723;&#21512;&#38598;</a></span></li><li><span class="section"><a href="#d0e40495">H.7. &#29420;&#31435;&#33879;&#20316;&#32858;&#38598;</a></span></li><li><span class="section"><a href="#d0e40503">H.8. &#32763;&#35793;</a></span></li><li><span class="section"><a href="#d0e40509">H.9. &#32456;&#27490;&#21327;&#35758;</a></span></li><li><span class="section"><a href="#d0e40515">H.10. &#21327;&#35758;&#23558;&#26469;&#30340;&#20462;&#35746;</a></span></li><li><span class="section"><a href="#d0e40526">H.11. &#22914;&#20309;&#20026;&#20320;&#30340;&#25991;&#26723;&#20351;&#29992;&#26412;&#21327;&#35758;</a></span></li></ul></li><li><span class="appendix"><a href="#license">I. <span class="application">Python</span> license</a></span><ul><li><span class="section"><a href="#d0e40554">I.A. History of the software</a></span></li><li><span class="section"><a href="#d0e40565">I.B. Terms and conditions for accessing or otherwise using Python</a></span><ul><li><span class="section"><a href="#d0e40569">I.B.1. PSF license agreement</a></span></li><li><span class="section"><a href="#d0e40597">I.B.2. BeOpen Python open source license agreement version 1</a></span></li><li><span class="section"><a href="#d0e40622">I.B.3. CNRI open source GPL-compatible license agreement</a></span></li><li><span class="section"><a href="#d0e40650">I.B.4. CWI permissions statement and disclaimer</a></span></li></ul></li></ul></li><li><span class="appendix"><a href="#license_zh">J. <span class="application">Python</span> &#21327;&#35758;</a></span><ul><li><span class="section"><a href="#d0e40666">J.0. &#20851;&#20110;&#35793;&#25991;&#30340;&#22768;&#26126;</a></span></li><li><span class="section"><a href="#d0e40677">J.A. &#36719;&#20214;&#30340;&#21382;&#21490;</a></span></li><li><span class="section"><a href="#d0e40689">J.B. &#20351;&#29992; Python &#30340;&#26465;&#27454;&#21644;&#26465;&#20214;</a></span><ul><li><span class="section"><a href="#d0e40693">J.B.1. PSF &#21327;&#35758;</a></span></li><li><span class="section"><a href="#d0e40721">J.B.2. BeOpen Python &#24320;&#28304;&#21327;&#35758;&#31532; 1 &#29256;</a></span></li><li><span class="section"><a href="#d0e40746">J.B.3. CNRI &#24320;&#28304; GPL &#20860;&#23481;&#21327;&#35758;</a></span></li><li><span class="section"><a href="#d0e40774">J.B.4. CWI &#35768;&#21487;&#22768;&#26126;&#19982;&#20813;&#36131;&#22768;&#26126;</a></span></li></ul></li></ul></li></ul></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="install"></a>&#31532;&nbsp;1&nbsp;&#31456;&nbsp;&#23433;&#35013; <span class="application">Python</span></h1></div></div></div><div class="abstract"><p>&#27426;&#36814;&#26469;&#21040; <span class="application">Python</span> &#19990;&#30028;&#65292;&#35753;&#25105;&#20204;&#24320;&#22987;&#21543;&#12290;&#22312;&#26412;&#31456;&#20013;&#65292;&#23558;&#23398;&#20064;&#36866;&#21512;&#24744;&#30340; <span class="application">Python</span> &#23433;&#35013;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.choosing"></a>1.1.&nbsp;&#21738;&#19968;&#31181; <span class="application">Python</span> &#36866;&#21512;&#24744;&#65311;</h2></div></div></div><div class="abstract"><p>&#23398;&#20064; <span class="application">Python</span> &#30340;&#31532;&#19968;&#20214;&#20107;&#23601;&#26159;&#23433;&#35013;&#65292;&#19981;&#26159;&#21527;&#65311;</p></div><p>&#22914;&#26524;&#24744;&#22312;&#20844;&#32593;&#30340;&#26381;&#21153;&#22120;&#19978;&#26377;&#20010;&#29992;&#25143;&#36134;&#21495;&#65292;&#37027;&#20040;&#24744;&#30340; ISP &#25110;&#35768;&#24050;&#32463;&#23433;&#35013;&#20102; <span class="application">Python</span>&#12290;
&#22823;&#22810;&#25968; Linux &#21457;&#34892;&#29256;&#22312;&#40664;&#35748;&#23433;&#35013;&#30340;&#24773;&#20917;&#19979;&#23601;&#24050;&#32463;&#25552;&#20379;&#20102; <span class="application">Python</span>&#12290;
&#34429;&#28982;&#24744;&#21487;&#33021;&#24076;&#26395;&#22312;&#33529;&#26524;&#26426;&#19978;&#23433;&#35013;&#19968;&#20010;&#25317;&#26377;&#31867; Mac &#30340;&#22270;&#24418;&#25805;&#20316;&#30028;&#38754;&#65292;&#20294;&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X 10.2 &#25110;&#26356;&#39640;&#30340;&#29256;&#26412;&#19978;&#24050;&#32463;&#21253;&#21547;&#20102;&#19968;&#20010; <span class="application">Python</span> &#30340;&#21629;&#20196;&#34892;&#29256;&#26412;&#12290;</p><p>Windows &#29615;&#22659;&#40664;&#35748;&#19981;&#25552;&#20379;&#20219;&#20309;&#29256;&#26412;&#30340; <span class="application">Python</span>&#65292;&#20294;&#26159;&#19981;&#35201;&#25285;&#24515;&#65281;&#26412;&#31456;&#23558;&#25552;&#20379;&#20960;&#31181; Windows &#29615;&#22659;&#19979;&#23433;&#35013; <span class="application">Python</span> &#30340;&#26041;&#27861;&#12290;</p><p>&#27491;&#20687;&#24744;&#25152;&#30475;&#21040;&#30340;&#65292;<span class="application">Python</span> &#21487;&#20197;&#36816;&#34892;&#20110;&#24456;&#22810;&#25805;&#20316;&#31995;&#32479;&#24179;&#21488;&#12290;&#21253;&#25324; Windows&#12289;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym>&#12289;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X&#12289;&#25152;&#26377;&#20813;&#36153;&#30340;&#31867; <acronym class="acronym">UNIX</acronym> &#21464;&#31181; (&#22914; Linux)&#12290;&#20063;&#26377;&#36816;&#34892;&#20110; Sun Solaris&#12289;AS/400&#12289;Amiga&#12289;OS/2&#12289;BeOS &#30340;&#29256;&#26412;&#65292;&#29978;&#33267;&#26159;&#24744;&#20174;&#26469;&#27809;&#21548;&#35828;&#36807;&#30340;&#20854;&#20182;&#25805;&#20316;&#31995;&#32479;&#24179;&#21488;&#12290;</p><p>&#26377;&#22826;&#22810;&#30340;&#24179;&#21488;&#21487;&#20197;&#36816;&#34892; <span class="application">Python</span> &#20102;&#12290;&#22312;&#19968;&#31181;&#24179;&#21488;&#19979;&#32534;&#20889;&#30340; <span class="application">Python</span> &#31243;&#24207;&#31245;&#20316;&#20462;&#25913;&#65292;&#23601;&#21487;&#20197;&#36816;&#34892;&#20110;<span class="emphasis"><em>&#20219;&#20309;</em></span> &#20854;&#20182;&#25903;&#25345;&#30340;&#24179;&#21488;&#12290;&#20363;&#22914;&#65292;&#25105;&#36890;&#24120;&#22312; Windows &#24179;&#21488;&#19978;&#24320;&#21457; <span class="application">Python</span> &#31243;&#24207;&#65292;&#28982;&#21518;&#36866;&#24403;&#37197;&#32622;&#21518;&#20351;&#20043;&#33021;&#22312; Linux &#24179;&#21488;&#19978;&#36816;&#34892;&#12290;</p><p>&#22238;&#21040;&#24320;&#22987;&#30340;&#38382;&#39064;&#65292;"<span class="quote">&#21738;&#19968;&#31181; <span class="application">Python</span> &#36866;&#21512;&#24744;&#65311;</span>" &#22238;&#31572;&#26159;&#65306;&#21738;&#19968;&#20010;&#24050;&#32463;&#23433;&#35013;&#22312;&#24744;&#35745;&#31639;&#26426;&#19978;&#30340;&#22343;&#21487;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.windows"></a>1.2.&nbsp;Windows &#19978;&#30340; <span class="application">Python</span></h2></div></div></div><div class="abstract"><p>&#22312; Windows &#19978;&#65292;&#23433;&#35013; <span class="application">Python</span> &#26377;&#20004;&#31181;&#36873;&#25321;&#12290;</p></div><p>ActiveState &#21046;&#20316;&#30340; <span class="application">ActivePython</span> &#26159;&#19987;&#38376;&#38024;&#23545; Windows &#30340; <span class="application">Python</span> &#22871;&#20214;&#65292;&#23427;&#21253;&#21547;&#20102;&#19968;&#20010;&#23436;&#25972;&#30340; <span class="application">Python</span> &#21457;&#24067;&#12289;&#19968;&#20010;&#36866;&#29992;&#20110; <span class="application">Python</span> &#32534;&#31243;&#30340; <acronym class="acronym">IDE</acronym> &#20197;&#21450;&#19968;&#20123; <span class="application">Python</span> &#30340; Windows &#25193;&#23637;&#65292;&#25552;&#20379;&#20102;&#20840;&#37096;&#30340;&#35775;&#38382; Windows <acronym class="acronym">API</acronym>s &#30340;&#26381;&#21153;&#65292;&#20197;&#21450; Windows &#27880;&#20876;&#34920;&#30340;&#27880;&#20876;&#20449;&#24687;&#12290;</p><p>&#34429;&#28982; <span class="application">ActivePython</span> &#19981;&#26159;&#24320;&#28304;&#36719;&#20214;&#65292;&#20294;&#23427;&#21487;&#20197;&#33258;&#30001;&#19979;&#36733;&#12290;<span class="application">ActivePython</span> &#26159;&#25105;&#23398;&#20064; <span class="application">Python</span> &#26102;&#20351;&#29992;&#36807;&#30340; <acronym class="acronym">IDE</acronym>&#12290;&#38500;&#38750;&#26377;&#21035;&#30340;&#21407;&#22240;&#65292;&#25105;&#24314;&#35758;&#24744;&#20351;&#29992;&#23427;&#12290;&#21487;&#33021;&#30340;&#19968;&#20010;&#21407;&#22240;&#26159;&#65306;ActiveState &#36890;&#24120;&#35201;&#22312;&#26032;&#30340; <span class="application">Python</span> &#29256;&#26412;&#21457;&#24067;&#20960;&#20010;&#26376;&#20197;&#21518;&#25165;&#26356;&#26032;&#23427;&#30340;&#23433;&#35013;&#31243;&#24207;&#12290;&#22914;&#26524;&#24744;&#23601;&#38656;&#35201; <span class="application">Python</span> &#30340;&#26368;&#26032;&#29256;&#26412;&#65292;&#24182;&#19988; <span class="application">ActivePython</span> &#20173;&#28982;&#33853;&#21518;&#20110;&#26368;&#26032;&#29256;&#26412;&#30340;&#35805;&#65292;&#24744;&#24212;&#35813;&#30452;&#25509;&#36339;&#21040;&#22312; Windows &#19978;&#23433;&#35013; <span class="application">Python</span> &#30340;&#31532;&#20108;&#31181;&#36873;&#39033;&#12290;
</p><p>&#31532;&#20108;&#31181;&#36873;&#25321;&#26159;&#20351;&#29992;&#30001; <span class="application">Python</span> &#21457;&#24067;&#30340; "<span class="quote">&#23448;&#26041;</span>" <span class="application">Python</span> &#23433;&#35013;&#31243;&#24207;&#12290;&#22905;&#26159;&#21487;&#33258;&#30001;&#19979;&#36733;&#30340;&#24320;&#28304;&#36719;&#20214;&#65292;&#24182;&#19988;&#24744;&#24635;&#26159;&#21487;&#20197;&#33719;&#24471;&#24403;&#21069; <span class="application">Python</span> &#30340;&#26368;&#26032;&#29256;&#26412;&#12290;</p><div class="procedure"><a name="d0e3120"></a><p class="title"><b>&#36807;&#31243;&nbsp;1.1.&nbsp;&#36873;&#39033; 1&#65306;&#23433;&#35013; <span class="application">ActivePython</span></b></p><p>&#19979;&#38754;&#25551;&#36848; <span class="application">ActivePython</span> &#30340;&#23433;&#35013;&#36807;&#31243;&#65306;</p><ol type="1"><li><p>&#20174; <a href="http://www.activestate.com/Products/ActivePython/">http://www.activestate.com/Products/ActivePython/</a> &#19979;&#36733; <span class="application">ActivePython</span> &#12290;</p></li><li><p>&#22914;&#26524;&#24744;&#27491;&#22312;&#20351;&#29992; Windows 95&#12289;Windows 98 &#25110; Windows ME&#65292;&#36824;&#38656;&#35201;&#22312;&#23433;&#35013; <span class="application">ActivePython</span> &#20043;&#21069;&#19979;&#36733;&#24182;&#23433;&#35013;Windows Installer 2.0 (<a href="http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe">http://download.microsoft.com/download/WindowsInstaller/Install/2.0/W9XMe/EN-US/InstMsiA.exe</a>) &#12290;</p></li><li><p>&#21452;&#20987;&#23433;&#35013;&#31243;&#24207; <code class="filename">ActivePython-2.2.2-224-win32-ix86.msi</code>&#12290;</p></li><li><p>&#25353;&#29031;&#23433;&#35013;&#31243;&#24207;&#30340;&#25552;&#31034;&#20449;&#24687;&#19968;&#27493;&#27493;&#22320;&#25191;&#34892;&#12290;</p></li><li><p>&#22914;&#26524;&#30913;&#30424;&#31354;&#38388;&#19981;&#36275;&#65292;&#24744;&#21487;&#20197;&#25191;&#34892;&#23450;&#21046;&#23433;&#35013;&#65292;&#19981;&#36873;&#25991;&#26723;&#65292;&#20294;&#26159;&#31508;&#32773;&#19981;&#24314;&#35758;&#24744;&#36825;&#26679;&#20570;&#65292;&#38500;&#38750;&#24744;&#23454;&#22312;&#26159;&#25380;&#19981;&#20986;14M&#31354;&#38388;&#26469;&#12290;
</p></li><li><p>&#22312;&#23433;&#35013;&#23436;&#21518;&#20043;&#21518;&#65292;&#20851;&#38381;&#23433;&#35013;&#31243;&#24207;&#65292;&#25171;&#24320; <span class="guimenu">&#24320;&#22987;</span> &#8594; <span class="guimenuitem">&#31243;&#24207;</span> &#8594; <span class="guimenuitem">ActiveState ActivePython 2.2</span> &#8594; <span class="guimenuitem">PythonWin IDE</span>&#12290;&#24744;&#23558;&#30475;&#21040;&#31867;&#20284;&#22914;&#19979;&#30340;&#20449;&#24687;&#65306;</p></li></ol></div><div class="informalexample"><pre class="screen">
<font color="teal">PythonWin 2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)] on win32.
Portions Copyright 1994-2001 Mark Hammond (mhammond@skippinet.com.au) -
see 'Help/About PythonWin' for further copyright information.</font>
<code class="prompt">&gt;&gt;&gt; </code>
</pre></div><div class="procedure"><a name="d0e3181"></a><p class="title"><b>&#36807;&#31243;&nbsp;1.2.&nbsp;&#36873;&#39033; 2&#65306;&#23433;&#35013;&#26469;&#33258; Python.org (<a href="http://www.python.org/">http://www.python.org/</a>) &#30340; <span class="application">Python</span> </b></p><ol type="1"><li><p>&#20174; <a href="http://www.python.org/ftp/python/">http://www.python.org/ftp/python/</a> &#36873;&#25321;&#26368;&#26032;&#30340; <span class="application">Python</span> Windows &#23433;&#35013;&#31243;&#24207;&#65292;&#19979;&#36733; <code class="literal">.exe</code> &#23433;&#35013;&#25991;&#20214;&#12290;</p></li><li><p>&#21452;&#20987;&#23433;&#35013;&#31243;&#24207; <code class="filename">Python-2.xxx.yyy.exe</code>&#12290;&#25991;&#20214;&#21517;&#20381;&#36182;&#20110;&#24744;&#25152;&#19979;&#36733;&#30340; <span class="application">Python</span> &#23433;&#35013;&#31243;&#24207;&#25991;&#20214;&#12290;</p></li><li><p>&#25353;&#29031;&#23433;&#35013;&#31243;&#24207;&#30340;&#25552;&#31034;&#20449;&#24687;&#19968;&#27493;&#27493;&#22320;&#25191;&#34892;&#12290;</p></li><li><p>&#22914;&#26524;&#30913;&#30424;&#31354;&#38388;&#19981;&#36275;&#65292;&#21487;&#20197;&#21462;&#28040; HTMLHelp &#25991;&#20214;&#12289;&#23454;&#29992;&#33050;&#26412; (<code class="filename">Tools/</code>)&#12289;&#21644;/&#25110;&#27979;&#35797;&#22871;&#20214; (<code class="filename">Lib/test/</code>)&#12290;</p></li><li><p>&#22914;&#26524;&#24744;&#27809;&#26377;&#26426;&#22120;&#30340;&#31649;&#29702;&#21592;&#26435;&#38480;&#65292;&#24744;&#21487;&#20197;&#36873;&#25321; <span class="guibutton">Advanced Options</span>&#65292;&#28982;&#21518;&#36873;&#25321; <span class="guilabel">Non-Admin Install</span>&#12290;&#36825;&#21482;&#20250;&#23545;&#30331;&#35760;&#27880;&#20876;&#34920;&#21644;&#24320;&#22987;&#33756;&#21333;&#20013;&#21019;&#24314;&#30340;&#24555;&#25463;&#26041;&#24335;&#26377;&#24433;&#21709;&#12290;</p></li><li><p>&#22312;&#23433;&#35013;&#23436;&#25104;&#20043;&#21518;&#65292;&#20851;&#38381;&#23433;&#35013;&#31243;&#24207;&#65292;&#25171;&#24320; <span class="guimenu">&#24320;&#22987;</span> &#8594; <span class="guimenuitem">&#31243;&#24207;</span> &#8594; <span class="guimenuitem">Python 2.3</span> &#8594; <span class="guimenuitem">IDLE (Python GUI)</span>&#12290;&#24744;&#23558;&#30475;&#21040;&#31867;&#20284;&#22914;&#19979;&#30340;&#20449;&#24687;&#65306;</p></li></ol></div><div class="informalexample"><pre class="screen">
<font color="teal">Python 2.3.2 (#49, Oct  2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************
    
IDLE 1.0</font>
<code class="prompt">&gt;&gt;&gt; </code>
</pre></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.macosx"></a>1.3.&nbsp;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#30340; <span class="application">Python</span> </h2></div></div></div><div class="abstract"><p>&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#65292;&#23545;&#20110;&#23433;&#35013; <span class="application">Python</span> &#26377;&#20004;&#31181;&#36873;&#25321;&#65306;&#23433;&#35013;&#25110;&#19981;&#23433;&#35013;&#12290;&#24744;&#21487;&#33021;&#24819;&#35201;&#23433;&#35013;&#23427;&#12290;</p></div><p><abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X 10.2 &#21450;&#20854;&#21518;&#32493;&#29256;&#26412;&#24050;&#32463;&#39044;&#35013;&#20102;&#19968;&#20010; <span class="application">Python</span> &#30340;&#21629;&#20196;&#34892;&#29256;&#26412;&#12290;&#22914;&#26524;&#24744;&#20064;&#24815;&#20351;&#29992;&#21629;&#20196;&#34892;&#65292;&#37027;&#20040;&#24744;&#21487;&#20197;&#20351;&#29992;&#23427;&#23398;&#23436;&#26412;&#20070;&#30340;&#19977;&#20998;&#20043;&#19968;&#12290;&#28982;&#32780;&#65292;&#39044;&#23433;&#35013;&#30340;&#29256;&#26412;&#19981;&#24102; <acronym class="acronym">XML</acronym> &#35299;&#26512;&#22120;&#65292;&#25152;&#20197;&#24403;&#24744;&#23398;&#21040; <acronym class="acronym">XML</acronym> &#30340;&#31456;&#33410;&#26102;&#65292;&#24744;&#20250;&#38656;&#35201;&#23433;&#35013;&#23436;&#25972;&#29256;&#12290;</p><p>&#24744;&#36824;&#21487;&#20197;&#23433;&#35013;&#20248;&#20110;&#39044;&#35013;&#29256;&#26412;&#30340;&#26368;&#26032;&#30340;&#21253;&#21547;&#22270;&#24418;&#30028;&#38754; Shell &#30340;&#23436;&#25972;&#29256;&#26412;&#12290;</p><div class="procedure"><a name="d0e3296"></a><p class="title"><b>&#36807;&#31243;&nbsp;1.3.&nbsp;&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#36816;&#34892;&#39044;&#35013;&#29256;&#26412;&#30340; <span class="application">Python</span> </b></p><p>&#20351;&#29992;&#39044;&#35013;&#30340; <span class="application">Python</span> &#29256;&#26412;&#30340;&#27493;&#39588;&#65306;</p><ol type="1"><li><p>&#25171;&#24320; <code class="filename">/Applications</code> &#25991;&#20214;&#22841;&#12290;</p></li><li><p>&#25171;&#24320; <code class="filename">Utilities</code> &#25991;&#20214;&#22841;&#12290;</p></li><li><p>&#21452;&#20987; <code class="filename">Terminal</code> &#25171;&#24320;&#19968;&#20010;&#32456;&#31471;&#36827;&#20837;&#21629;&#20196;&#34892;&#31383;&#21475;&#12290;</p></li><li><p>&#22312;&#25552;&#31034;&#31526;&#19979;&#38190;&#20837; <strong class="userinput"><code>python</code></strong>&#12290;</p></li></ol></div><p>&#35797;&#39564;:</p><div class="informalexample"><pre class="screen">
<font color="teal">Welcome to Darwin!</font>
<code class="prompt">[localhost:~] you% </code><span class="userinput">python</span>
<font color="teal">Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits", or "license" for more information.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[press Ctrl+D to get back to the command prompt]</span>
<code class="prompt">[localhost:~] you% </code>
</pre></div><div class="procedure"><a name="d0e3362"></a><p class="title"><b>&#36807;&#31243;&nbsp;1.4.&nbsp;&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#23433;&#35013;&#26368;&#26032;&#29256;&#30340; <span class="application">Python</span> </b></p><p>&#19979;&#38754;&#20171;&#32461;&#19979;&#36733;&#24182;&#23433;&#35013; <span class="application">Python</span> &#26368;&#26032;&#29256;&#26412;&#30340;&#36807;&#31243;:</p><ol type="1"><li><p>&#20174; <a href="http://homepages.cwi.nl/~jack/macpython/download.html">http://homepages.cwi.nl/~jack/macpython/download.html</a> &#19979;&#36733; <code class="filename">MacPython-OSX</code> &#30913;&#30424;&#38236;&#20687; &#12290;</p></li><li><p>&#19979;&#36733;&#23436;&#27605;&#65292;&#21452;&#20987; <code class="filename">MacPython-OSX-2.3-1.dmg</code> &#23558;&#30913;&#30424;&#38236;&#20687;&#25346;&#36733;&#21040;&#26700;&#38754;&#12290;</p></li><li><p>&#21452;&#20987;&#23433;&#35013;&#31243;&#24207; <code class="filename">MacPython-OSX.pkg</code>.</p></li><li><p>&#23433;&#35013;&#31243;&#24207;&#23558;&#25552;&#31034;&#35201;&#27714;&#24744;&#30340;&#31649;&#29702;&#21592;&#29992;&#25143;&#21517;&#21644;&#21475;&#20196;&#12290;</p></li><li><p>&#25353;&#29031;&#23433;&#35013;&#31243;&#24207;&#30340;&#25552;&#31034;&#19968;&#27493;&#27493;&#25191;&#34892;&#12290;</p></li><li><p>&#23433;&#35013;&#23436;&#27605;&#21518;&#65292;&#20851;&#38381;&#23433;&#35013;&#31243;&#24207;&#65292;&#25171;&#24320; <code class="filename">/Applications</code> &#25991;&#20214;&#22841;&#12290;</p></li><li><p>&#25171;&#24320; <code class="filename">MacPython-2.3</code> &#25991;&#20214;&#22841;&#12290;</p></li><li><p>&#21452;&#20987; <code class="filename">PythonIDE</code> &#26469;&#36816;&#34892; <span class="application">Python</span> &#12290;</p></li></ol></div><p><span class="application">MacPython</span> <acronym class="acronym">IDE</acronym> &#23558;&#26174;&#31034;&#21551;&#21160;&#30011;&#38754;&#23558;&#24744;&#24102;&#36827;&#20132;&#20114; shell&#12290;&#22914;&#26524;&#20132;&#20114; shell &#27809;&#26377;&#20986;&#29616;&#65292;&#36873;&#25321; <span class="guimenu">Window</span> &#8594; <span class="guimenuitem">Python Interactive</span> (<span class="shortcut"><strong><span class="keycap"><strong>Cmd</strong></span>+<span class="keysym">0</span></strong></span>)&#12290;&#24744;&#23558;&#30475;&#21040;&#31867;&#20284;&#22914;&#19979;&#30340;&#20449;&#24687;:</p><div class="informalexample"><pre class="screen">
<font color="teal">Python 2.3 (#2, Jul 30 2003, 11:45:28)
[GCC 3.1 20020420 (prerelease)]
Type "copyright", "credits" or "license" for more information.
MacPython IDE 1.0.1</font>
<code class="prompt">&gt;&gt;&gt; </code>
</pre></div><p>
&#35831;&#27880;&#24847;&#65292;&#23433;&#35013;&#23436;&#26368;&#26032;&#29256;&#26412;&#21518;&#65292;&#39044;&#35013;&#29256;&#26412;&#20173;&#28982;&#23384;&#22312;&#12290;&#22914;&#26524;&#24744;&#20174;&#21629;&#20196;&#34892;&#36816;&#34892;&#33050;&#26412;&#65292;&#37027;&#24744;&#38656;&#35201;&#30693;&#36947;&#27491;&#22312;&#20351;&#29992;&#30340;&#26159;&#21738;&#19968;&#20010;&#29256;&#26412;&#30340; <span class="application">Python</span> &#12290;
</p><div class="example"><a name="d0e3460"></a><p class="title"><b>&#20363;&nbsp;1.1.&nbsp;&#20004;&#20010; <span class="application">Python</span> &#29256;&#26412;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">[localhost:~] you% </code><span class="userinput">python</span>
<font color="teal">Python 2.2 (#1, 07/14/02, 23:25:09)
[GCC Apple cpp-precomp 6.14] on darwin
Type "help", "copyright", "credits", or "license" for more information.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[press Ctrl+D to get back to the command prompt]</span>
<code class="prompt">[localhost:~] you% </code><span class="userinput">/usr/local/bin/python</span>
<font color="teal">Python 2.3 (#2, Jul 30 2003, 11:45:28)
[GCC 3.1 20020420 (prerelease)] on darwin
Type "help", "copyright", "credits", or "license" for more information.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[press Ctrl+D to get back to the command prompt]</span>
<code class="prompt">[localhost:~] you% </code>
</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.macos9"></a>1.4.&nbsp;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> 9 &#19978;&#30340; <span class="application">Python</span> </h2></div></div></div><div class="abstract"><p><abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> 9 &#19978;&#27809;&#26377;&#39044;&#35013;&#20219;&#20309;&#29256;&#26412;&#30340; <span class="application">Python</span>&#65292;&#23433;&#35013;&#30456;&#23545;&#31616;&#21333;&#65292;&#21482;&#26377;&#19968;&#31181;&#36873;&#25321;&#12290;</p></div><div class="procedure"><p>&#19979;&#38754;&#20171;&#32461;&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> 9 &#19978;&#23433;&#35013; <span class="application">Python</span> &#30340;&#36807;&#31243;:</p><ol type="1"><li><p>&#20174; <a href="http://homepages.cwi.nl/~jack/macpython/download.html">http://homepages.cwi.nl/~jack/macpython/download.html</a> &#19979;&#36733; <code class="filename">MacPython23full.bin</code>&#12290;</p></li><li><p>&#22914;&#26524;&#27983;&#35272;&#22120;&#19981;&#33021;&#33258;&#21160;&#35299;&#21387;&#25991;&#20214;&#65292;&#37027;&#20040;&#21452;&#20987; <code class="filename">MacPython23full.bin</code> &#29992; <span class="application">Stuffit Expander</span> &#35299;&#21387;&#12290;</p></li><li><p>&#21452;&#20987;&#23433;&#35013;&#31243;&#24207; <code class="filename">MacPython23full</code>&#12290;</p></li><li><p>&#25353;&#29031;&#23433;&#35013;&#31243;&#24207;&#30340;&#25552;&#31034;&#19968;&#27493;&#27493;&#25191;&#34892;&#12290;</p></li><li><p>&#23433;&#35013;&#23436;&#27605;&#21518;&#65292;&#20851;&#38381;&#23433;&#35013;&#31243;&#24207;&#65292;&#25171;&#24320; <code class="filename">/Applications</code> &#25991;&#20214;&#22841;&#12290;</p></li><li><p>&#25171;&#24320; <code class="filename">MacPython-OS9 2.3</code> &#25991;&#20214;&#22841;&#12290;</p></li><li><p>&#21452;&#20987; <code class="filename">PythonIDE</code> &#26469;&#36816;&#34892; <span class="application">Python</span> &#12290;</p></li></ol></div><p><span class="application">MacPython</span> <acronym class="acronym">IDE</acronym> &#23558;&#26174;&#31034;&#21551;&#21160;&#30011;&#38754;&#23558;&#24744;&#24102;&#36827;&#20132;&#20114; shell&#12290;&#22914;&#26524;&#20132;&#20114; shell &#27809;&#26377;&#20986;&#29616;&#65292;&#36873;&#25321; <span class="guimenu">Window</span> &#8594; <span class="guimenuitem">Python Interactive</span> (<span class="shortcut"><strong><span class="keycap"><strong>Cmd</strong></span>+<span class="keysym">0</span></strong></span>)&#12290;&#24744;&#23558;&#30475;&#21040;&#31867;&#20284;&#22914;&#19979;&#30340;&#20449;&#24687;:</p><div class="informalexample"><pre class="screen">
<font color="teal">Python 2.3 (#2, Jul 30 2003, 11:45:28)
[GCC 3.1 20020420 (prerelease)]
Type "copyright", "credits" or "license" for more information.
MacPython IDE 1.0.1</font>
<code class="prompt">&gt;&gt;&gt; </code>
</pre></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.redhat"></a>1.5.&nbsp;RedHat Linux &#19978;&#30340; <span class="application">Python</span> </h2></div></div></div><p>&#22312;&#31867; <acronym class="acronym">UNIX</acronym> &#30340;&#25805;&#20316;&#31995;&#32479; (&#22914; Linux) &#19978;&#23433;&#35013;&#20108;&#36827;&#21046;&#21253;&#24456;&#23481;&#26131;&#12290;&#39044;&#32534;&#35793;&#22909;&#30340;&#20108;&#36827;&#21046;&#21253;&#23545;&#22823;&#22810;&#25968; Linux &#21457;&#34892;&#29256;&#26159;&#21487;&#29992;&#30340;&#12290;&#25110;&#32773;&#24744;&#21487;&#20197;&#36890;&#36807;&#28304;&#30721;&#36827;&#34892;&#32534;&#35793;&#12290;</p><div class="abstract"><p>&#22312; <a href="http://www.python.org/ftp/python/">http://www.python.org/ftp/python/</a> &#36873;&#25321;&#21015;&#20986;&#30340;&#26368;&#26032;&#30340;&#29256;&#26412;&#21495;, &#28982;&#21518;&#36873;&#25321;
&#20854;&#20013;&#30340;<code class="filename">rpms/</code> &#30446;&#24405;&#19979;&#36733;&#26368;&#26032;&#30340; <span class="application">Python</span> <acronym class="acronym">RPM</acronym> &#21253;&#12290;
&#20351;&#29992; <span class="command"><strong>rpm</strong></span> &#21629;&#20196;&#36827;&#34892;&#23433;&#35013;&#65292;&#25805;&#20316;&#22914;&#19979;&#25152;&#31034;:</p></div><div class="example"><a name="d0e3640"></a><p class="title"><b>&#20363;&nbsp;1.2.&nbsp;&#22312; RedHat Linux 9 &#19978;&#23433;&#35013;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">localhost:~$ </code><span class="userinput">su -</span>
<code class="prompt">Password: </code><span class="userinput">[enter your root password]</span>
<code class="prompt">[root@localhost root]# </code><span class="userinput">wget http://python.org/ftp/python/2.3/rpms/redhat-9/python2.3-2.3-5pydotorg.i386.rpm</span>
<font color="teal">Resolving python.org... done.
Connecting to python.org[194.109.137.226]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7,495,111 [application/octet-stream]
...</font>
<code class="prompt">[root@localhost root]# </code><span class="userinput">rpm -Uvh python2.3-2.3-5pydotorg.i386.rpm</span>
<font color="teal">Preparing...                ########################################### [100%]
   1:python2.3              ########################################### [100%]</font>
<code class="prompt">[root@localhost root]# </code><span class="userinput">python</span>          <a name="install.unix.1.1"></a>circled_1_delcric
<font color="teal">Python 2.2.2 (#1, Feb 24 2003, 19:13:11)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-4)] on linux2
Type "help", "copyright", "credits", or "license" for more information.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[press Ctrl+D to exit]</span>
<code class="prompt">[root@localhost root]# </code><span class="userinput">python2.3</span>       <a name="install.unix.1.2"></a>circled_2_delcric
<font color="teal">Python 2.3 (#1, Sep 12 2003, 10:53:56)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-5)] on linux2
Type "help", "copyright", "credits", or "license" for more information.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[press Ctrl+D to exit]</span>
<code class="prompt">[root@localhost root]# </code><span class="userinput">which python2.3</span> <a name="install.unix.1.3"></a>circled_3_delcric
<font color="teal">/usr/bin/python2.3</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#install.unix.1.1">circled_1_delcric</a> </dt><dd>&#20165;&#20165;&#38190;&#20837; <strong class="userinput"><code>python</code></strong> &#36816;&#34892;&#30340;&#26159;&#32769;&#29256;&#26412;&#30340; <span class="application">Python</span> &#8213;&#8213;&#23427;&#26159;&#32570;&#30465;&#23433;&#35013;&#30340;&#29256;&#26412;&#12290;&#23427;&#19981;&#26159;&#25105;&#20204;&#24819;&#35201;&#30340;&#12290;</dd><dt><a href="#install.unix.1.2">circled_2_delcric</a> </dt><dd>&#25130;&#27490;&#21040;&#31508;&#32773;&#20889;&#20316;&#26102;&#65292;&#26032;&#30340;&#29256;&#26412;&#26159; <strong class="userinput"><code>python2.3</code></strong>&#12290;&#24744;&#21487;&#33021;&#20250;&#38656;&#35201;&#20462;&#25913;&#31034;&#20363;&#33050;&#26412;&#30340;&#31532;&#19968;&#34892;&#30340;&#36335;&#24452;&#25351;&#21521;&#26032;&#29256;&#26412;&#12290;</dd><dt><a href="#install.unix.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#25105;&#20204;&#21018;&#23433;&#35013;&#30340; <span class="application">Python</span> &#26032;&#29256;&#26412;&#30340;&#20840;&#36335;&#24452;&#12290;&#22312; <code class="literal">#!</code> &#34892;&#20013; (&#27599;&#20010;&#33050;&#26412;&#30340;&#31532;&#19968;&#34892;) &#20351;&#29992;&#23427;&#26469;&#30830;&#20445;&#33050;&#26412;&#36816;&#34892;&#22312;&#26368;&#26032;&#29256;&#30340; <span class="application">Python</span> &#19979;&#65292;&#24182;&#19988;&#30830;&#20445;&#25970;&#20837;&#30340;&#26159; <strong class="userinput"><code>python2.3</code></strong> &#36827;&#20837;&#20132;&#20114;shell&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.debian"></a>1.6.&nbsp;Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#30340; <span class="application">Python</span> </h2></div></div></div><div class="abstract"><p>&#22914;&#26524;&#24744;&#36816;&#34892;&#22312; Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#65292;&#23433;&#35013; <span class="application">Python</span> &#38656;&#35201;&#20351;&#29992; <span class="command"><strong>apt</strong></span> &#21629;&#20196;&#12290;</p></div><div class="example"><a name="d0e3765"></a><p class="title"><b>&#20363;&nbsp;1.3.&nbsp;&#22312; Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#23433;&#35013;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">localhost:~$ </code><span class="userinput">su -</span>
<code class="prompt">Password: </code><span class="userinput">[enter your root password]</span>
<code class="prompt">localhost:~# </code><span class="userinput">apt-get install python</span>
<font color="teal">Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  python2.3
Suggested packages:
  python-tk python2.3-doc
The following NEW packages will be installed:
  python python2.3
0 upgraded, 2 newly installed, 0 to remove and 3 not upgraded.
Need to get 0B/2880kB of archives.
After unpacking 9351kB of additional disk space will be used.</font>
<code class="prompt">Do you want to continue? [Y/n] </code><span class="userinput">Y</span>
<font color="teal">Selecting previously deselected package python2.3.
(Reading database ... 22848 files and directories currently installed.)
Unpacking python2.3 (from .../python2.3_2.3.1-1_i386.deb) ...
Selecting previously deselected package python.
Unpacking python (from .../python_2.3.1-1_all.deb) ...
Setting up python (2.3.1-1) ...
Setting up python2.3 (2.3.1-1) ...
Compiling python modules in /usr/lib/python2.3 ...
Compiling optimized python modules in /usr/lib/python2.3 ...</font>
<code class="prompt">localhost:~# </code><span class="userinput">exit</span>
<font color="teal">logout</font>
<code class="prompt">localhost:~$ </code><span class="userinput">python</span>
<font color="teal">Python 2.3.1 (#2, Sep 24 2003, 11:39:14)
[GCC 3.3.2 20030908 (Debian prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[press Ctrl+D to exit]</span>
</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.source"></a>1.7.&nbsp;&#20174;&#28304;&#20195;&#30721;&#23433;&#35013; <span class="application">Python</span> </h2></div></div></div><div class="abstract"><p>&#22914;&#26524;&#24744;&#23425;&#24895;&#20174;&#28304;&#30721;&#21019;&#24314;&#65292;&#21487;&#20197;&#20174; <a href="http://www.python.org/ftp/python/">http://www.python.org/ftp/python/</a>&#19979;&#36733; <span class="application">Python</span> &#30340;&#28304;&#20195;&#30721;&#12290;&#36873;&#25321;&#26368;&#26032;&#30340;&#29256;&#26412;&#65292;&#19979;&#36733;<code class="filename">.tgz</code> &#25991;&#20214;&#65292;&#25191;&#34892;&#36890;&#24120;&#30340; <strong class="userinput"><code>configure</code></strong>, <strong class="userinput"><code>make</code></strong>, <strong class="userinput"><code>make install</code></strong> &#27493;&#39588;&#12290;</p></div><div class="example"><a name="d0e3848"></a><p class="title"><b>&#20363;&nbsp;1.4.&nbsp;&#20174;&#28304;&#20195;&#30721;&#23433;&#35013;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">localhost:~$ </code><span class="userinput">su -</span>
<code class="prompt">Password: </code><span class="userinput">[enter your root password]</span>
<code class="prompt">localhost:~# </code><span class="userinput">wget http://www.python.org/ftp/python/2.3/Python-2.3.tgz</span>
<font color="teal">Resolving www.python.org... done.
Connecting to www.python.org[194.109.137.226]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8,436,880 [application/x-tar]
...</font>
<code class="prompt">localhost:~# </code><span class="userinput">tar xfz Python-2.3.tgz</span>
<code class="prompt">localhost:~# </code><span class="userinput">cd Python-2.3</span>
<code class="prompt">localhost:~/Python-2.3# </code><span class="userinput">./configure</span>
<font color="teal">checking MACHDEP... linux2
checking EXTRAPLATDIR...
checking for --without-gcc... no
...</font>
<code class="prompt">localhost:~/Python-2.3# </code><span class="userinput">make</span>
<font color="teal">gcc -pthread -c -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
-I. -I./Include  -DPy_BUILD_CORE -o Modules/python.o Modules/python.c
gcc -pthread -c -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
-I. -I./Include  -DPy_BUILD_CORE -o Parser/acceler.o Parser/acceler.c
gcc -pthread -c -fno-strict-aliasing -DNDEBUG -g -O3 -Wall -Wstrict-prototypes
-I. -I./Include  -DPy_BUILD_CORE -o Parser/grammar1.o Parser/grammar1.c
...</font>
<code class="prompt">localhost:~/Python-2.3# </code><span class="userinput">make install</span>
<font color="teal">/usr/bin/install -c python /usr/local/bin/python2.3
...</font>
<code class="prompt">localhost:~/Python-2.3# </code><span class="userinput">exit</span>
<font color="teal">logout</font>
<code class="prompt">localhost:~$ </code><span class="userinput">which python</span>
<font color="teal">/usr/local/bin/python</font>
<code class="prompt">localhost:~$ </code><span class="userinput">python</span>
<font color="teal">Python 2.3.1 (#2, Sep 24 2003, 11:39:14)
[GCC 3.3.2 20030908 (Debian prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[press Ctrl+D to get back to the command prompt]</span>
<code class="prompt">localhost:~$ </code>
</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.shell"></a>1.8.&nbsp;&#20351;&#29992; <span class="application">Python</span> &#30340;&#20132;&#20114; Shell</h2></div></div></div><div class="abstract"><p>&#26082;&#28982;&#25105;&#20204;&#24050;&#32463;&#23433;&#35013;&#20102; <span class="application">Python</span>&#65292;&#37027;&#20040;&#25105;&#20204;&#36816;&#34892;&#30340;&#36825;&#20010;&#20132;&#20114; shell &#26159;&#20160;&#20040;&#19996;&#35199;&#21602;&#65311;</p></div><p><span class="application">Python</span> &#25198;&#28436;&#30528;&#20004;&#31181;&#35282;&#33394;&#12290;&#39318;&#20808;&#23427;&#26159;&#19968;&#20010;&#33050;&#26412;&#35299;&#37322;&#22120;&#65292;&#21487;&#20197;&#20174;&#21629;&#20196;&#34892;&#36816;&#34892;&#33050;&#26412;&#65292;&#20063;&#21487;&#20197;&#22312;&#33050;&#26412;&#19978;&#21452;&#20987;&#65292;&#20687;&#36816;&#34892;&#20854;&#20182;&#24212;&#29992;&#31243;&#24207;&#19968;&#26679;&#12290;&#23427;&#36824;&#26159;&#19968;&#20010;&#20132;&#20114; shell&#65292;&#21487;&#20197;&#25191;&#34892;&#20219;&#24847;&#30340;&#35821;&#21477;&#21644;&#34920;&#36798;&#24335;&#12290;&#36825;&#19968;&#28857;&#23545;&#35843;&#35797;&#12289;&#24555;&#36895;&#32452;&#24314;&#21644;&#27979;&#35797;&#30456;&#24403;&#26377;&#29992;&#12290;&#25105;&#29978;&#33267;&#30693;&#36947;&#19968;&#20123;&#20154;&#25226; <span class="application">Python</span> &#30340;&#20132;&#20114; shell &#24403;&#20316;&#35745;&#31639;&#22120;&#26469;&#20351;&#29992;&#65281;
</p><p>&#22312;&#24744;&#30340;&#35745;&#31639;&#26426;&#24179;&#21488;&#19978;&#21551;&#21160; <span class="application">Python</span> &#30340;&#20132;&#20114; shell&#65292;&#25509;&#19979;&#26469;&#35753;&#25105;&#20204;&#23581;&#35797;&#30528;&#20570;&#20123;&#25805;&#20316;&#65306;</p><div class="example"><a name="d0e3963"></a><p class="title"><b>&#20363;&nbsp;1.5.&nbsp;&#21021;&#27425;&#20351;&#29992;&#20132;&#20114; Shell</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">1 + 1</span>               <a name="install.shell.1.1"></a>circled_1_delcric
<font color="teal">2</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print 'hello world'</span> <a name="install.shell.1.2"></a>circled_2_delcric
<font color="teal">hello world</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">x = 1</span>               <a name="install.shell.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">y = 2</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">x + y</span>
<font color="teal">3</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#install.shell.1.1">circled_1_delcric</a> </dt><dd><span class="application">Python</span> &#30340;&#20132;&#20114; shell &#21487;&#20197;&#35745;&#31639;&#20219;&#24847;&#30340; <span class="application">Python</span> &#34920;&#36798;&#24335;&#65292;&#21253;&#25324;&#20219;&#20309;&#22522;&#26412;&#30340;&#25968;&#23398;&#34920;&#36798;&#24335;&#12290;</dd><dt><a href="#install.shell.1.2">circled_2_delcric</a> </dt><dd>&#20132;&#20114; shell &#21487;&#20197;&#25191;&#34892;&#20219;&#24847;&#30340; <span class="application">Python</span> &#35821;&#21477;&#65292;&#21253;&#25324; <span class="command"><strong>print</strong></span> &#35821;&#21477;&#12290;</dd><dt><a href="#install.shell.1.3">circled_3_delcric</a> </dt><dd>&#20063;&#21487;&#20197;&#32473;&#21464;&#37327;&#36171;&#20540;&#65292;&#24182;&#19988;&#21464;&#37327;&#20540;&#22312; shell &#25171;&#24320;&#26102;&#19968;&#30452;&#26377;&#25928; (&#19968;&#26086;&#20851;&#27605;&#20132;&#20114; Sheel&#65292;&#21464;&#37327;&#20540;&#23558;&#20002;&#22833;)&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="install.summary"></a>1.9.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#24744;&#29616;&#22312;&#24212;&#35813;&#24050;&#32463;&#23433;&#35013;&#20102;&#19968;&#20010;&#21487;&#20197;&#24037;&#20316;&#30340; <span class="application">Python</span> &#29256;&#26412;&#20102;&#12290;</p></div><p>
&#26681;&#25454;&#24744;&#30340;&#36816;&#34892;&#24179;&#21488;&#65292;&#24744;&#21487;&#33021;&#23433;&#35013;&#26377;&#19981;&#27490;&#19968;&#20010; <span class="application">Python</span> &#29256;&#26412;&#12290;&#37027;&#26679;&#30340;&#35805;&#65292;&#24744;&#38656;&#35201;&#30693;&#36947; <span class="application">Python</span> &#30340;&#36335;&#24452;&#12290;&#33509;&#22312;&#21629;&#20196;&#34892;&#31616;&#21333;&#22320;&#38190;&#20837; <span class="command"><strong>python</strong></span> &#27809;&#26377;&#36816;&#34892;&#24744;&#24819;&#20351;&#29992;&#30340; <span class="application">Python</span> &#29256;&#26412;&#65292;&#21017;&#38656;&#35201;&#36755;&#20837;&#24819;&#35201;&#30340;&#29256;&#26412;&#30340;&#20840;&#36335;&#24452;&#12290;
</p><p>&#26368;&#21518;&#31069;&#36154;&#24744;&#65292;&#27426;&#36814;&#26469;&#21040; <span class="application">Python</span> &#19990;&#30028;&#12290;</p></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="odbchelper"></a>&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</h1></div></div></div><div class="abstract"><p>&#22823;&#23478;&#37117;&#24456;&#28165;&#26970;&#65292;&#20854;&#20182;&#20070;&#31821;&#26159;&#22914;&#20309;&#19968;&#27493;&#27493;&#20174;&#32534;&#31243;&#22522;&#30784;&#35762;&#36848;&#21040;&#26500;&#24314;&#23436;&#25972;&#30340;&#21487;&#36816;&#34892;&#31243;&#24207;&#30340;&#65292;&#20294;&#36824;&#26159;&#35753;&#25105;&#20204;&#36339;&#36807;&#36825;&#20010;&#37096;&#20998;&#21543;&#65281;
</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.divein"></a>2.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>&#36825;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#12289;&#21487;&#25191;&#34892;&#30340; <span class="application">Python</span> &#31243;&#24207;&#12290;</p></div><p>&#23427;&#21487;&#33021;&#23545;&#24744;&#26469;&#35828;&#26681;&#26412;&#26080;&#27861;&#29702;&#35299;&#12290;&#21035;&#30528;&#24613;&#65292;&#25105;&#20204;&#23558;&#36880;&#34892;&#22320;&#36827;&#34892;&#21078;&#26512;&#12290;&#19981;&#36807;&#39318;&#20808;&#25226;&#20195;&#30721;&#36890;&#35835;&#19968;&#36941;&#65292;&#30475;&#19968;&#30475;&#26159;&#21542;&#26377;&#20123;&#21487;&#20197;&#29702;&#35299;&#30340;&#20869;&#23481;&#12290;</p><div class="example"><a name="d0e4084"></a><p class="title"><b>&#20363;&nbsp;2.1.&nbsp;<code class="filename">odbchelper.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)</pre></div></div><br class="example-break"><p>&#29616;&#22312;&#36816;&#34892;&#19968;&#19979;&#36825;&#20010;&#31243;&#24207;&#65292;&#30475;&#19968;&#30475;&#32467;&#26524;&#26159;&#20160;&#20040;&#12290;</p><div class="tip"><blockquote><b class="title"><a name="tip.run.windows">&#25552;&#31034;: &#22312; Windows &#19978;&#36816;&#34892;</a></b><br>&#22312; Windows &#30340; <span class="application">ActivePython</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#21487;&#20197;&#36873;&#25321;
<span class="guimenu">File</span> &#8594; <span class="guimenuitem"><span class="accel">R</span>un...</span> (<span class="shortcut"><strong><span class="keycap"><strong>Ctrl</strong></span>+<span class="keysym">R</span></strong></span>) &#26469;&#36816;&#34892; <span class="application">Python</span> &#31243;&#24207;&#12290;&#36755;&#20986;&#32467;&#26524;&#23558;&#26174;&#31034;&#22312;&#20132;&#20114;&#31383;&#21475;&#20013;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="tip.run.mac">&#25552;&#31034;: &#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#19978;&#36816;&#34892;</a></b><br>&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#21487;&#20197;&#36873;&#25321;
<span class="guimenu">Python</span> &#8594; <span class="guimenuitem">Run window...</span> (<span class="shortcut"><strong><span class="keycap"><strong>Cmd</strong></span>+<span class="keysym">R</span></strong></span>) &#26469;&#36816;&#34892; <span class="application">Python</span> &#31243;&#24207;&#65292;&#20294;&#39318;&#20808;&#35201;&#35774;&#32622;&#19968;&#20010;&#37325;&#35201;&#30340;&#36873;&#39033;&#12290;&#22312; <acronym class="acronym">IDE</acronym> &#20013;&#25171;&#24320; <code class="filename">.py</code> &#27169;&#22359;&#65292;&#28857;&#20987;&#31383;&#21475;&#21491;&#19978;&#35282;&#30340;&#40657;&#33394;&#19977;&#35282;&#65292;&#24377;&#20986;&#36825;&#20010;&#27169;&#22359;&#30340;&#36873;&#39033;&#33756;&#21333;&#65292;&#28982;&#21518;&#23558; <span class="guimenuitem">Run as __main__</span> &#36873;&#20013;&#12290; &#36825;&#20010;&#35774;&#32622;&#26159;&#21516;&#27169;&#22359;&#19968;&#21516;&#20445;&#23384;&#30340;&#65292;&#25152;&#20197;&#23545;&#20110;&#27599;&#20010;&#27169;&#22359;&#24744;&#37117;&#38656;&#35201;&#36825;&#26679;&#20570;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="tip.run.unix">&#25552;&#31034;: &#22312; <acronym class="acronym">UNIX</acronym> &#19978;&#36816;&#34892;</a></b><br>&#22312; <acronym class="acronym">UNIX</acronym> &#20860;&#23481;&#30340;&#25805;&#20316;&#31995;&#32479;&#20013; (&#21253;&#25324; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X)&#65292;&#21487;&#20197;&#36890;&#36807;&#21629;&#20196;&#34892;&#65306;<strong class="userinput"><code>python <code class="filename">odbchelper.py</code></code></strong> &#36816;&#34892;&#27169;&#22359;&#12290;
</blockquote></div><div class="informalexample"><a name="odbchelper.output"></a><p><code class="filename">odbchelper.py</code> &#30340;&#36755;&#20986;&#32467;&#26524;&#65306;</p><pre class="screen"><font color="teal">server=mpilgrim;uid=sa;database=master;pwd=secret</font></pre></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.funcdef"></a>2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;</h2></div></div></div><div class="abstract"><p>&#19982;&#20854;&#23427;&#22823;&#22810;&#25968;&#35821;&#35328;&#19968;&#26679; <span class="application">Python</span> &#26377;&#20989;&#25968;&#65292;&#20294;&#26159;&#23427;&#27809;&#26377;&#20687; <span class="application"><acronym class="acronym">C++</acronym></span> &#19968;&#26679;&#30340;&#29420;&#31435;&#30340;&#22836;&#25991;&#20214;&#65307;&#25110;&#32773;&#20687; <span class="application">Pascal</span> &#19968;&#26679;&#30340;&#20998;&#31163;&#30340; <code class="literal">interface</code>/<code class="literal">implementation</code> &#27573;&#12290;&#22312;&#38656;&#35201;&#20989;&#25968;&#26102;&#65292;&#20687;&#19979;&#38754;&#36825;&#26679;&#22768;&#26126;&#21363;&#21487;&#65306;</p></div><div class="informalexample"><pre class="programlisting">
def buildConnectionString(params):</pre></div><p>&#39318;&#20808;&#65292;&#20989;&#25968;&#22768;&#26126;&#20197;&#20851;&#38190;&#23383; <code class="literal">def</code> &#24320;&#22987;&#65292;&#25509;&#30528;&#20026;&#20989;&#25968;&#21517;&#65292;&#20877;&#24448;&#21518;&#20026;&#21442;&#25968;&#65292;&#21442;&#25968;&#25918;&#22312;&#23567;&#25324;&#21495;&#37324;&#12290;&#22810;&#20010;&#21442;&#25968;&#20043;&#38388; (&#36825;&#37324;&#27809;&#26377;&#28436;&#31034;)&#29992;&#36887;&#21495;&#20998;&#38548;&#12290;</p><p>&#20854;&#27425;&#65292;&#20989;&#25968;&#27809;&#26377;&#23450;&#20041;&#36820;&#22238;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;<span class="application">Python</span> &#19981;&#38656;&#35201;&#25351;&#23450;&#36820;&#22238;&#20540;&#30340;&#25968;&#25454;&#31867;&#22411;&#65307;&#29978;&#33267;&#19981;&#38656;&#35201;&#25351;&#23450;&#26159;&#21542;&#26377;&#36820;&#22238;&#20540;&#12290;&#23454;&#38469;&#19978;&#65292;&#27599;&#20010; <span class="application">Python</span> &#20989;&#25968;&#37117;&#36820;&#22238;&#19968;&#20010;&#20540;&#65307;&#22914;&#26524;&#20989;&#25968;&#25191;&#34892;&#36807; <code class="literal">return</code> &#35821;&#21477;&#65292;&#23427;&#23558;&#36820;&#22238;&#25351;&#23450;&#30340;&#20540;&#65292;&#21542;&#21017;&#23558;&#36820;&#22238; <code class="literal">None</code> (<span class="application">Python</span> &#30340;&#31354;&#20540;)&#12290;
</p><div class="note"><blockquote><b class="title"><a name="compare.funcdef.vb">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Visual Basic</span> &#30340;&#36820;&#22238;&#20540;</a></b><br>&#22312; <span class="application">Visual Basic</span> &#20013;&#65292;&#20989;&#25968; (&#26377;&#36820;&#22238;&#20540;) &#20197; <code class="literal">function</code> &#24320;&#22987;&#65292;&#32780;&#23376;&#31243;&#24207; (&#26080;&#36820;&#22238;&#20540;) &#20197; <code class="literal">sub</code> &#24320;&#22987;&#12290;&#22312; <span class="application">Python</span> &#20013;&#27809;&#26377;&#23376;&#31243;&#24207;&#12290;&#21482;&#26377;&#20989;&#25968;&#65292;&#25152;&#26377;&#30340;&#20989;&#25968;&#37117;&#26377;&#36820;&#22238;&#20540; (&#23613;&#31649;&#21487;&#33021;&#20026; <code class="literal">None</code>)&#65292;&#24182;&#19988;&#25152;&#26377;&#30340;&#20989;&#25968;&#37117;&#20197; <code class="literal">def</code> &#24320;&#22987;&#12290;
</blockquote></div><p>&#26368;&#21518;&#38656;&#35201;&#25351;&#20986;&#30340;&#26159;&#65292;&#22312; <span class="application">Python</span> &#20013;&#21442;&#25968;&#65292;<code class="literal">params</code> &#19981;&#38656;&#35201;&#25351;&#23450;&#25968;&#25454;&#31867;&#22411;&#12290;<span class="application">Python</span> &#20250;&#21028;&#23450;&#19968;&#20010;&#21464;&#37327;&#26159;&#20160;&#20040;&#31867;&#22411;&#65292;&#24182;&#22312;&#20869;&#37096;&#23558;&#20854;&#35760;&#24405;&#19979;&#26469;&#12290;</p><div class="note"><blockquote><b class="title"><a name="compare.funcdef.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span> &#30340;&#36820;&#22238;&#20540;</a></b><br>&#22312; <span class="application">Java</span>&#12289;<span class="application"><acronym class="acronym">C++</acronym></span> &#21644;&#20854;&#20182;&#38745;&#24577;&#31867;&#22411;&#35821;&#35328;&#20013;&#65292;&#24517;&#39035;&#35201;&#25351;&#23450;&#20989;&#25968;&#36820;&#22238;&#20540;&#21644;&#27599;&#20010;&#20989;&#25968;&#21442;&#25968;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#27704;&#36828;&#20063;&#19981;&#38656;&#35201;&#26126;&#30830;&#25351;&#23450;&#20219;&#20309;&#19996;&#35199;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;<span class="application">Python</span> &#20250;&#26681;&#25454;&#36171;&#32473;&#23427;&#30340;&#20540;&#22312;&#20869;&#37096;&#23558;&#20854;&#25968;&#25454;&#31867;&#22411;&#35760;&#24405;&#19979;&#26469;&#12290;</blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4324"></a>2.2.1.&nbsp;<span class="application">Python</span> &#21644;&#20854;&#20182;&#32534;&#31243;&#35821;&#35328;&#25968;&#25454;&#31867;&#22411;&#30340;&#27604;&#36739;</h3></div></div></div><p>&#19968;&#20301;&#21338;&#23398;&#30340;&#35835;&#32773;&#21457;&#32473;&#25105; <span class="application">Python</span> &#22914;&#20309;&#19982;&#20854;&#23427;&#32534;&#31243;&#35821;&#35328;&#30340;&#27604;&#36739;&#30340;&#35299;&#37322;&#65306;</p><div class="variablelist"><dl><dt><span class="term">&#38745;&#24577;&#31867;&#22411;&#35821;&#35328;</span></dt><dd>&#19968;&#31181;&#22312;&#32534;&#35793;&#26399;&#38388;&#23601;&#30830;&#23450;&#25968;&#25454;&#31867;&#22411;&#30340;&#35821;&#35328;&#12290;&#22823;&#22810;&#25968;&#38745;&#24577;&#31867;&#22411;&#35821;&#35328;&#26159;&#36890;&#36807;&#35201;&#27714;&#22312;&#20351;&#29992;&#20219;&#19968;&#21464;&#37327;&#20043;&#21069;&#22768;&#26126;&#20854;&#25968;&#25454;&#31867;&#22411;&#26469;&#20445;&#35777;&#36825;&#19968;&#28857;&#30340;&#12290;<span class="application">Java</span> &#21644; <span class="application"><acronym class="acronym">C</acronym></span> &#26159;&#38745;&#24577;&#31867;&#22411;&#35821;&#35328;&#12290;</dd><dt><span class="term">&#21160;&#24577;&#31867;&#22411;&#35821;&#35328;</span></dt><dd>&#19968;&#31181;&#22312;&#36816;&#34892;&#26399;&#38388;&#25165;&#21435;&#30830;&#23450;&#25968;&#25454;&#31867;&#22411;&#30340;&#35821;&#35328;&#65292;&#19982;&#38745;&#24577;&#31867;&#22411;&#30456;&#21453;&#12290;<span class="application">VBScript</span> &#21644; <span class="application">Python</span> &#26159;&#21160;&#24577;&#31867;&#22411;&#30340;&#65292;&#22240;&#20026;&#23427;&#20204;&#30830;&#23450;&#19968;&#20010;&#21464;&#37327;&#30340;&#31867;&#22411;&#26159;&#22312;&#24744;&#31532;&#19968;&#27425;&#32473;&#23427;&#36171;&#20540;&#30340;&#26102;&#20505;&#12290;</dd><dt><span class="term">&#24378;&#31867;&#22411;&#35821;&#35328;</span></dt><dd>&#19968;&#31181;&#24635;&#26159;&#24378;&#21046;&#31867;&#22411;&#23450;&#20041;&#30340;&#35821;&#35328;&#12290;<span class="application">Java</span> &#21644; <span class="application">Python</span> &#26159;&#24378;&#21046;&#31867;&#22411;&#23450;&#20041;&#30340;&#12290;&#24744;&#26377;&#19968;&#20010;&#25972;&#25968;&#65292;&#22914;&#26524;&#19981;&#26126;&#30830;&#22320;&#36827;&#34892;&#36716;&#25442; &#65292;&#19981;&#33021;&#23558;&#25226;&#23427;&#24403;&#25104;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;</dd><dt><span class="term">&#24369;&#31867;&#22411;&#35821;&#35328;</span></dt><dd>&#19968;&#31181;&#31867;&#22411;&#21487;&#20197;&#34987;&#24573;&#30053;&#30340;&#35821;&#35328;&#65292;&#19982;&#24378;&#31867;&#22411;&#30456;&#21453;&#12290;<span class="application">VBScript</span> &#26159;&#24369;&#31867;&#22411;&#30340;&#12290;&#22312; <span class="application">VBScript</span> &#20013;&#65292;&#24744;&#21487;&#20197;&#23558;&#23383;&#31526;&#20018; <code class="literal">'12'</code> &#21644;&#25972;&#25968; <code class="literal">3</code> &#36827;&#34892;&#36830;&#25509;&#24471;&#21040;&#23383;&#31526;&#20018;<code class="literal">'123'</code>&#65292;&#28982;&#21518;&#21487;&#20197;&#25226;&#23427;&#30475;&#25104;&#25972;&#25968; <code class="literal">123</code> &#65292;&#25152;&#26377;&#36825;&#20123;&#37117;&#19981;&#38656;&#35201;&#20219;&#20309;&#30340;&#26174;&#31034;&#36716;&#25442;&#12290;</dd></dl></div><p>&#25152;&#20197;&#35828; <span class="application">Python</span> &#26082;&#26159;<span class="emphasis"><em>&#21160;&#24577;&#31867;&#22411;&#35821;&#35328;</em></span> (&#22240;&#20026;&#23427;&#19981;&#20351;&#29992;&#26174;&#31034;&#25968;&#25454;&#31867;&#22411;&#22768;&#26126;)&#65292;&#21448;&#26159;<span class="emphasis"><em>&#24378;&#31867;&#22411;&#35821;&#35328;</em></span> (&#22240;&#20026;&#21482;&#35201;&#19968;&#20010;&#21464;&#37327;&#33719;&#24471;&#20102;&#19968;&#20010;&#25968;&#25454;&#31867;&#22411;&#65292;&#23427;&#23454;&#38469;&#19978;&#23601;&#19968;&#30452;&#26159;&#36825;&#20010;&#31867;&#22411;&#20102;)&#12290;</p></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.docstring"></a>2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;</h2></div></div></div><div class="abstract"><p>&#21487;&#20197;&#36890;&#36807;&#32473;&#20986;&#19968;&#20010; <code class="literal">doc string</code> (&#25991;&#26723;&#23383;&#31526;&#20018;) &#26469;&#25991;&#26723;&#21270;&#19968;&#20010; <span class="application">Python</span> &#20989;&#25968;&#12290;</p></div><div class="example"><a name="odbchelper.triplequotes"></a><p class="title"><b>&#20363;&nbsp;2.2.&nbsp;&#23450;&#20041; <code class="function">buildConnectionString</code> &#20989;&#25968;&#30340; <code class="literal">doc string</code></b></p><div class="example-contents"><pre class="programlisting">
def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""</pre><p>&#19977;&#37325;&#24341;&#21495;&#34920;&#31034;&#19968;&#20010;&#22810;&#34892;&#23383;&#31526;&#20018;&#12290;&#22312;&#24320;&#22987;&#19982;&#32467;&#26463;&#24341;&#21495;&#38388;&#30340;&#25152;&#26377;&#19996;&#35199;&#37117;&#34987;&#35270;&#20026;&#21333;&#20010;&#23383;&#31526;&#20018;&#30340;&#19968;&#37096;&#20998;&#65292;&#21253;&#25324;&#30828;&#22238;&#36710;&#21644;&#20854;&#23427;&#30340;&#24341;&#21495;&#23383;&#31526;&#12290;&#24744;&#21487;&#20197;&#22312;&#20219;&#20309;&#22320;&#26041;&#20351;&#29992;&#23427;&#20204;&#65292;&#20294;&#26159;&#24744;&#21487;&#33021;&#20250;&#21457;&#29616;&#65292;&#23427;&#20204;&#32463;&#24120;&#34987;&#29992;&#20110;&#23450;&#20041; <code class="literal">doc string</code>&#12290;</p></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.quoting.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span> &#20013;&#30340;&#24341;&#21495;</a></b><br>&#19977;&#37325;&#24341;&#21495;&#20063;&#26159;&#19968;&#31181;&#23450;&#20041;&#26082;&#21253;&#21547;&#21333;&#24341;&#21495;&#21448;&#21253;&#21547;&#21452;&#24341;&#21495;&#30340;&#23383;&#31526;&#20018;&#30340;&#31616;&#21333;&#26041;&#27861;&#65292;&#23601;&#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">qq/.../</code> &#12290;</blockquote></div><p>&#22312;&#19977;&#37325;&#24341;&#21495;&#20013;&#30340;&#20219;&#20309;&#19996;&#35199;&#37117;&#26159;&#36825;&#20010;&#20989;&#25968;&#30340; <code class="literal">doc string</code>&#65292;&#23427;&#20204;&#29992;&#26469;&#35828;&#26126;&#20989;&#25968;&#21487;&#20197;&#20570;&#20160;&#20040;&#12290;&#22914;&#26524;&#23384;&#22312; <code class="literal">doc string</code>&#65292;&#23427;&#24517;&#39035;&#26159;&#19968;&#20010;&#20989;&#25968;&#35201;&#23450;&#20041;&#30340;&#31532;&#19968;&#20010;&#20869;&#23481; (&#20063;&#23601;&#26159;&#35828;&#65292;&#22312;&#20882;&#21495;&#21518;&#38754;&#30340;&#31532;&#19968;&#20010;&#20869;&#23481;)&#12290;&#22312;&#25216;&#26415;&#19978;&#19981;&#35201;&#27714;&#32473;&#20986;&#20989;&#25968;&#30340; <code class="literal">doc string</code>&#65292;&#20294;&#26159;&#24744;&#24212;&#35813;&#36825;&#26679;&#20570;&#12290;&#25105;&#30456;&#20449;&#22312;&#24744;&#19978;&#36807;&#30340;&#27599;&#19968;&#31181;&#32534;&#31243;&#35838;&#19978;&#37117;&#21548;&#21040;&#36807;&#36825;&#19968;&#28857;&#65292;&#20294;&#26159; <span class="application">Python</span> &#24102;&#32473;&#24744;&#19968;&#20123;&#39069;&#22806;&#30340;&#21160;&#26426;&#65306;<code class="literal">doc string</code> &#22312;&#36816;&#34892;&#26102;&#21487;&#20316;&#20026;&#20989;&#25968;&#30340;&#23646;&#24615;&#12290;</p><div class="note"><blockquote><b class="title"><a name="tip.docstring">&#27880;&#24847;: &#20026;&#20160;&#20040;&#20351;&#29992; <code class="literal">doc string</code> &#26159;&#31181;&#22909;&#36873;&#25321;</a></b><br>&#35768;&#22810; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20351;&#29992; <code class="literal">doc string</code> &#26469;&#25552;&#20379;&#19978;&#19979;&#25991;&#25935;&#24863;&#30340;&#25991;&#26723;&#20449;&#24687;&#65292;&#25152;&#20197;&#24403;&#38190;&#20837;&#19968;&#20010;&#20989;&#25968;&#21517;&#26102;&#65292;&#23427;&#30340; <code class="literal">doc string</code> &#26174;&#31034;&#20026;&#19968;&#20010;&#24037;&#20855;&#25552;&#31034;&#12290;&#36825;&#19968;&#28857;&#21487;&#20197;&#35828;&#38750;&#24120;&#26377;&#29992;&#65292;&#20294;&#26159;&#23427;&#30340;&#22909;&#22351;&#21462;&#20915;&#20110;&#24744;&#20070;&#20889;&#30340; <code class="literal">doc string</code> &#30340;&#22909;&#22351;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>PEP 257 (<a href="http://www.python.org/peps/pep-0257.html">http://www.python.org/peps/pep-0257.html</a>) &#23450;&#20041;&#20102; <code class="literal">doc string</code> &#35268;&#33539;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Style Guide</em> (<a href="http://www.python.org/doc/essays/styleguide.html">http://www.python.org/doc/essays/styleguide.html</a>) &#35752;&#35770;&#20102;&#22914;&#20309;&#32534;&#20889;&#19968;&#20010;&#22909;&#30340; <code class="literal">doc string</code>&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#22312; <code class="literal">doc string</code> &#20013;&#22914;&#20309;&#20351;&#29992;&#31354;&#30333; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006750000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006750000000000000000</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.objects"></a>2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;</h2></div></div></div><p>&#20063;&#35768;&#24744;&#27809;&#22312;&#24847;&#65292;&#25105;&#21018;&#25165;&#30340;&#24847;&#24605;&#26159; <span class="application">Python</span> &#20989;&#25968;&#26377;&#23646;&#24615;&#65292;&#24182;&#19988;&#36825;&#20123;&#23646;&#24615;&#22312;&#36816;&#34892;&#26102;&#26159;&#21487;&#29992;&#30340;&#12290;</p><div class="abstract"><p>&#22312; <span class="application">Python</span> &#20013;&#65292;&#20989;&#25968;&#21516;&#20854;&#23427;&#19996;&#35199;&#19968;&#26679;&#20063;&#26159;&#23545;&#35937;&#12290;</p></div><p>&#25171;&#24320;&#24744;&#20064;&#24815;&#20351;&#29992;&#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#25191;&#34892;&#22914;&#19979;&#30340;&#25805;&#20316;&#65306;</p><div class="example"><a name="odbchelper.import"></a><p class="title"><b>&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; <code class="function">buildConnectionString</code> &#20989;&#25968;&#30340; <code class="literal">doc string</code></b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import odbchelper</span>                              <a name="odbchelper.objects.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print odbchelper.buildConnectionString(params)</span> <a name="odbchelper.objects.1.2"></a>circled_2_delcric
<font color="teal">server=mpilgrim;uid=sa;database=master;pwd=secret</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print odbchelper.buildConnectionString.__doc__</span> <a name="odbchelper.objects.1.3"></a>circled_3_delcric
<font color="teal">Build a connection string from a dictionary

Returns string.</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.objects.1.1">circled_1_delcric</a> </dt><dd>&#31532;&#19968;&#34892;&#23558; <code class="filename">odbchelper</code> &#31243;&#24207;&#20316;&#20026;&#27169;&#22359;&#23548;&#20837;&#12290;&#27169;&#22359;&#26159;&#25351;&#19968;&#20010;&#21487;&#20197;&#20132;&#20114;&#20351;&#29992;&#65292;&#25110;&#32773;&#20174;&#21478;&#19968; <span class="application">Python</span> &#31243;&#24207;&#35775;&#38382;&#30340;&#20195;&#30721;&#27573;&#12290;(&#24744;&#22312; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532; 4 &#31456;</a> &#23558;&#20250;&#30475;&#21040;&#22810;&#27169;&#22359; <span class="application">Python</span> &#31243;&#24207;&#30340;&#35768;&#22810;&#20363;&#23376;&#12290;)
&#21482;&#35201;&#23548;&#20837;&#20102;&#19968;&#20010;&#27169;&#22359;&#65292;&#23601;&#21487;&#20197;&#24341;&#29992;&#23427;&#30340;&#20219;&#20309;&#20844;&#20849;&#30340;&#20989;&#25968;&#12289;&#31867;&#25110;&#23646;&#24615;&#12290;&#27169;&#22359;&#21487;&#20197;&#36890;&#36807;&#36825;&#31181;&#26041;&#27861;&#26469;&#20351;&#29992;&#20854;&#23427;&#27169;&#22359;&#30340;&#21151;&#33021;&#65292;&#24744;&#20063;&#21487;&#20197;&#22312; <acronym class="acronym">IDE</acronym> &#20013;&#36825;&#26679;&#20570;&#12290;&#36825;&#26159;&#19968;&#20010;&#24456;&#37325;&#35201;&#30340;&#27010;&#24565;&#65292;&#22312;&#21518;&#38754;&#25105;&#20204;&#23558;&#35848;&#24471;&#26356;&#22810;&#12290;</dd><dt><a href="#odbchelper.objects.1.2">circled_2_delcric</a> </dt><dd>&#24403;&#20351;&#29992;&#22312;&#34987;&#23548;&#20837;&#27169;&#22359;&#20013;&#23450;&#20041;&#30340;&#20989;&#25968;&#26102;&#65292;&#24517;&#39035;&#21253;&#21547;&#27169;&#22359;&#30340;&#21517;&#23383;&#12290;&#25152;&#20197;&#19981;&#33021;&#21482;&#20351;&#29992; <code class="function">buildConnectionString</code>&#65292;&#32780;&#24212;&#35813;&#20351;&#29992; <code class="function">odbchelper.buildConnectionString</code>&#12290;&#22914;&#26524;&#24744;&#29992;&#36807; <span class="application">Java</span> &#30340;&#31867;&#65292;&#23545;&#27492;&#24212;&#35813;&#19981;&#24863;&#21040;&#38476;&#29983;&#12290;</dd><dt><a href="#odbchelper.objects.1.3">circled_3_delcric</a> </dt><dd>&#35775;&#38382;&#20989;&#25968;&#30340; <code class="literal">__doc__</code> &#23646;&#24615;&#19981;&#20687;&#24744;&#24819;&#35937;&#30340;&#37027;&#26679;&#26159;&#36890;&#36807;&#20989;&#25968;&#35843;&#29992;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.import.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: <code class="literal">import</code></a></b><br>&#22312; <span class="application">Python</span> &#20013;&#30340; <code class="literal">import</code> &#23601;&#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">require</code>&#12290;<code class="literal">import</code> &#19968;&#20010; <span class="application">Python</span> &#27169;&#22359;&#21518;&#65292;&#24744;&#23601;&#21487;&#20197;&#20351;&#29992; <code class="literal"><em class="replaceable">module</em>.<em class="replaceable">function</em></code> &#26469;&#35775;&#38382;&#23427;&#30340;&#20989;&#25968;&#65307;<code class="literal">require</code> &#19968;&#20010; <span class="application">Perl</span> &#27169;&#22359;&#21518;&#65292;&#24744;&#23601;&#21487;&#20197;&#20351;&#29992; <code class="literal"><em class="replaceable">module</em>::<em class="replaceable">function</em></code> &#26469;&#35775;&#38382;&#23427;&#30340;&#20989;&#25968;&#12290;</blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4686"></a>2.4.1.&nbsp;&#27169;&#22359;&#23548;&#20837;&#30340;&#25628;&#32034;&#36335;&#24452;</h3></div></div></div><p>&#22312;&#25105;&#20204;&#32487;&#32493;&#20043;&#21069;&#65292;&#25105;&#24819;&#31616;&#35201;&#22320;&#25552;&#19968;&#19979;&#24211;&#30340;&#25628;&#32034;&#36335;&#24452;&#12290;&#24403;&#23548;&#20837;&#19968;&#20010;&#27169;&#22359;&#26102;&#65292;<span class="application">Python</span> &#22312;&#20960;&#20010;&#22320;&#26041;&#36827;&#34892;&#25628;&#32034;&#12290;&#26126;&#30830;&#22320;&#65292;&#23427;&#20250;&#23545;&#23450;&#20041;&#22312; <code class="varname">sys.path</code> &#20013;&#30340;&#30446;&#24405;&#36880;&#20010;&#36827;&#34892;&#25628;&#32034;&#12290;&#23427;&#21482;&#26159;&#19968;&#20010;list (&#21015;&#34920;)&#65292;&#24744;&#21487;&#20197;&#23481;&#26131;&#22320;&#26597;&#30475;&#23427;&#25110;&#36890;&#36807;&#26631;&#20934;&#30340;list&#26041;&#27861;&#26469;&#20462;&#25913;&#23427;&#12290;(&#22312;&#26412;&#31456;&#30340;&#21518;&#38754;&#25105;&#20204;&#23558;&#23398;&#20064;&#26356;&#22810;&#20851;&#20110;list&#30340;&#30693;&#35782;&#12290;)</p><div class="example"><a name="odbchelper.objects.sys.path"></a><p class="title"><b>&#20363;&nbsp;2.4.&nbsp;&#27169;&#22359;&#23548;&#20837;&#30340;&#25628;&#32034;&#36335;&#24452;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import sys</span>                 <a name="odbchelper.objects.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys.path</span>                   <a name="odbchelper.objects.2.2"></a>circled_2_delcric
<font color="teal">['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2',
'/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages',
'/usr/local/lib/python2.2/site-packages/PIL', '/usr/local/lib/python2.2/site-packages/piddle']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys</span>                        <a name="odbchelper.objects.2.3"></a>circled_3_delcric
<font color="teal">&lt;module 'sys' (built-in)&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys.path.append('/my/new/path')</span> <a name="odbchelper.objects.2.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.objects.2.1">circled_1_delcric</a> </dt><dd>&#23548;&#20837; <code class="filename">sys</code> &#27169;&#22359;&#65292;&#20351;&#24471;&#23427;&#30340;&#25152;&#26377;&#20989;&#25968;&#21644;&#23646;&#24615;&#37117;&#26377;&#25928;&#12290;</dd><dt><a href="#odbchelper.objects.2.2">circled_2_delcric</a> </dt><dd><code class="varname">sys.path</code> &#26159;&#19968;&#20010;&#25351;&#23450;&#24403;&#21069;&#25628;&#32034;&#36335;&#24452;&#30340;&#30446;&#24405;&#21015;&#34920;&#12290;(&#24744;&#30340;&#36755;&#20986;&#32467;&#26524;&#21487;&#33021;&#26377;&#25152;&#19981;&#21516;&#65292;&#36825;&#21462;&#20915;&#20110;&#24744;&#30340;&#25805;&#20316;&#31995;&#32479;&#12289;&#27491;&#22312;&#36816;&#34892;&#30340; <span class="application">Python</span> &#29256;&#26412;&#21644;&#21021;&#22987;&#23433;&#35013;&#30340;&#20301;&#32622;&#12290;)<span class="application">Python</span> &#23558;&#25628;&#32034;&#36825;&#20123;&#30446;&#24405; (&#25353;&#39034;&#24207;) &#26469;&#26597;&#25214;&#19968;&#20010;&#19982;&#24744;&#27491;&#35797;&#30528;&#23548;&#20837;&#30340;&#27169;&#22359;&#21517;&#30456;&#21305;&#37197;&#30340; <code class="literal">.py</code> &#25991;&#20214;&#12290;</dd><dt><a href="#odbchelper.objects.2.3">circled_3_delcric</a> </dt><dd>&#23454;&#38469;&#19978;&#65292;&#25105;&#27809;&#35828;&#23454;&#35805;&#12290;&#30495;&#23454;&#24773;&#20917;&#35201;&#27604;&#36825;&#26356;&#22797;&#26434;&#65292;&#22240;&#20026;&#19981;&#26159;&#25152;&#26377;&#30340;&#27169;&#22359;&#37117;&#20445;&#23384;&#20026; <code class="literal">.py</code> &#25991;&#20214;&#12290;&#26377;&#19968;&#20123;&#27169;&#22359; (&#20687; <code class="filename">sys</code>)&#65292;&#26159;&#8220;&#20869;&#32622;&#27169;&#22359;&#8221;&#65292;&#23427;&#20204;&#23454;&#38469;&#19978;&#26159;&#32622;&#20110; <span class="application">Python</span> &#20869;&#37096;&#30340;&#12290;&#20869;&#32622;&#27169;&#22359;&#30340;&#34892;&#20026;&#22914;&#21516;&#19968;&#33324;&#30340;&#27169;&#22359;&#65292;&#20294;&#26159;&#23427;&#20204;&#30340; <span class="application">Python</span> &#28304;&#20195;&#30721;&#26159;&#19981;&#21487;&#29992;&#30340;&#65292;&#22240;&#20026;&#23427;&#20204;&#19981;&#26159;&#29992; <span class="application">Python</span> &#20889;&#30340;&#65281;(<code class="filename">sys</code> &#27169;&#22359;&#26159;&#29992; <span class="application"><acronym class="acronym">C</acronym></span> &#20889;&#30340;&#12290;)</dd><dt><a href="#odbchelper.objects.2.4">circled_4_delcric</a> </dt><dd>&#22312;&#36816;&#34892;&#26102;&#65292;&#36890;&#36807;&#21521; <code class="varname">sys.path</code> &#36861;&#21152;&#30446;&#24405;&#21517;&#65292;&#23601;&#21487;&#20197;&#22312; <span class="application">Python</span> &#30340;&#25628;&#32034;&#36335;&#24452;&#20013;&#22686;&#21152;&#26032;&#30340;&#30446;&#24405;&#65292;&#28982;&#21518;&#24403;&#24744;&#23548;&#20837;&#27169;&#22359;&#26102;&#65292;<span class="application">Python</span> &#20063;&#20250;&#22312;&#37027;&#20010;&#30446;&#24405;&#20013;&#36827;&#34892;&#25628;&#32034;&#12290;&#36825;&#20010;&#20316;&#29992;&#22312; <span class="application">Python</span> &#36816;&#34892;&#26102;&#19968;&#30452;&#29983;&#25928;&#12290;(&#22312; <a class="xref" href="#datatypes" title="&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;">&#31532; 3 &#31456;</a> &#25105;&#20204;&#23558;&#35752;&#35770;&#26356;&#22810;&#30340;&#20851;&#20110; <code class="function">append</code> &#21644;&#20854;&#23427;&#30340; list &#26041;&#27861;&#12290;)</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4801"></a>2.4.2.&nbsp;&#20309;&#35859;&#23545;&#35937;&#65311;</h3></div></div></div><p>&#22312; <span class="application">Python</span> &#20013;&#19968;&#20999;&#37117;&#26159;&#23545;&#35937;&#65292;&#24182;&#19988;&#20960;&#20046;&#19968;&#20999;&#37117;&#26377;&#23646;&#24615;&#21644;&#26041;&#27861;&#12290;&#25152;&#26377;&#30340;&#20989;&#25968;&#37117;&#26377;&#19968;&#20010;&#20869;&#32622;&#30340; <code class="literal">__doc__</code> &#23646;&#24615;&#65292;&#23427;&#20250;&#36820;&#22238;&#22312;&#20989;&#25968;&#28304;&#20195;&#30721;&#20013;&#23450;&#20041;&#30340; <code class="literal">doc string</code>&#65307;<code class="filename">sys</code> &#27169;&#22359;&#26159;&#19968;&#20010;&#23545;&#35937;&#65292;&#23427;&#26377;&#19968;&#20010;&#21483;&#20316; <code class="varname">path</code> &#30340;&#23646;&#24615;&#65307;&#31561;&#31561;&#12290;</p><p>&#25105;&#20204;&#20173;&#28982;&#22312;&#22238;&#36991;&#38382;&#39064;&#30340;&#23454;&#36136;&#65292;&#31350;&#31455;&#20309;&#35859;&#23545;&#35937;&#65311;&#19981;&#21516;&#30340;&#32534;&#31243;&#35821;&#35328;&#20197;&#19981;&#21516;&#30340;&#26041;&#24335;&#23450;&#20041; "<span class="quote">&#23545;&#35937;</span>" &#12290;
&#26576;&#20123;&#35821;&#35328;&#20013;&#65292;&#23427;&#24847;&#21619;&#30528;<span class="emphasis"><em>&#25152;&#26377;</em></span> &#23545;&#35937;<span class="emphasis"><em>&#24517;&#39035;</em></span> &#26377;&#23646;&#24615;&#21644;&#26041;&#27861;&#65307;&#21478;&#19968;&#20123;&#35821;&#35328;&#20013;&#65292;&#23427;&#24847;&#21619;&#30528;&#25152;&#26377;&#30340;&#23545;&#35937;&#37117;&#21487;&#20197;&#23376;&#31867;&#21270;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#23450;&#20041;&#26159;&#26494;&#25955;&#30340;&#65307;&#26576;&#20123;&#23545;&#35937;&#26082;&#27809;&#26377;&#23646;&#24615;&#20063;&#27809;&#26377;&#26041;&#27861; (&#20851;&#20110;&#36825;&#19968;&#28857;&#30340;&#35828;&#26126;&#22312; <a class="xref" href="#datatypes" title="&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;">&#31532; 3 &#31456;</a>)&#65292;&#32780;&#19988;&#19981;&#26159;&#25152;&#26377;&#30340;&#23545;&#35937;&#37117;&#21487;&#20197;&#23376;&#31867;&#21270; (&#20851;&#20110;&#36825;&#19968;&#28857;&#30340;&#35828;&#26126;&#22312;<a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532; 5 &#31456;</a>)&#12290;&#20294;&#26159;&#19975;&#29289;&#30342;&#23545;&#35937;&#20174;&#24863;&#24615;&#19978;&#21487;&#20197;&#35299;&#37322;&#20026;&#65306;&#19968;&#20999;&#37117;&#21487;&#20197;&#36171;&#20540;&#32473;&#21464;&#37327;&#25110;&#20316;&#20026;&#21442;&#25968;&#20256;&#36882;&#32473;&#20989;&#25968; (&#20851;&#20110;&#36825;&#19968;&#28857;&#30340;&#35828;&#26126;&#22312;<a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532; 4 &#31456;</a>)&#12290;</p><p>&#36825;&#19968;&#28857;&#22826;&#37325;&#35201;&#20102;&#65292;&#25152;&#20197;&#25105;&#20250;&#22312;&#21018;&#24320;&#22987;&#23601;&#19981;&#27490;&#19968;&#27425;&#22320;&#21453;&#22797;&#24378;&#35843;&#23427;&#65292;&#20197;&#20813;&#24744;&#27809;&#27880;&#24847;&#21040;&#65306;&#22312; <span class="application">Python</span> &#20013;<span class="emphasis"><em>&#19975;&#29289;&#30342;&#23545;&#35937;</em></span>&#12290;&#23383;&#31526;&#20018;&#26159;&#23545;&#35937;&#12290;&#21015;&#34920;&#26159;&#23545;&#35937;&#12290;&#20989;&#25968;&#26159;&#23545;&#35937;&#12290;&#29978;&#33267;&#27169;&#22359;&#20063;&#26159;&#23545;&#35937;&#65292;&#36825;&#19968;&#28857;&#25105;&#20204;&#24456;&#24555;&#20250;&#30475;&#21040;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#30830;&#20999;&#35299;&#37322;&#20102;&#22312; <span class="application">Python</span> &#20013;&#19975;&#29289;&#30342;&#23545;&#35937;&#30340;&#21547;&#20041; (<a href="http://www.python.org/doc/current/ref/objects.html">http://www.python.org/doc/current/ref/objects.html</a>)&#65292;&#22240;&#20026;&#26377;&#20123;&#20070;&#29983;&#27668;&#21313;&#36275;&#30340;&#20154;&#65292;&#21916;&#27426;&#33457;&#26102;&#38388;&#35752;&#35770;&#36825;&#31867;&#30340;&#38382;&#39064;&#12290;</li><li>eff-bot (<a href="http://www.effbot.org/guides/">http://www.effbot.org/guides/</a>) &#24635;&#32467;&#20102; <span class="application">Python</span> &#23545;&#35937; (<a href="http://www.effbot.org/guides/python-objects.htm">http://www.effbot.org/guides/python-objects.htm</a>).</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.indenting"></a>2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#20989;&#25968;&#27809;&#26377;&#26126;&#26174;&#30340; <code class="literal">begin</code> &#21644; <code class="literal">end</code>&#65292;&#27809;&#26377;&#26631;&#26126;&#20989;&#25968;&#30340;&#24320;&#22987;&#21644;&#32467;&#26463;&#30340;&#33457;&#25324;&#21495;&#12290;&#21807;&#19968;&#30340;&#20998;&#38548;&#31526;&#26159;&#19968;&#20010;&#20882;&#21495; (<code class="literal">:</code>)&#65292;&#25509;&#30528;&#20195;&#30721;&#26412;&#36523;&#26159;&#32553;&#36827;&#30340;&#12290;</p></div><div class="example"><a name="d0e4895"></a><p class="title"><b>&#20363;&nbsp;2.5.&nbsp;&#32553;&#36827; <code class="function">buildConnectionString</code> &#20989;&#25968;</b></p><div class="example-contents"><pre class="programlisting">
def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])</pre></div></div><br class="example-break"><p>&#20195;&#30721;&#22359;&#26159;&#36890;&#36807;&#23427;&#20204;&#30340;&#32553;&#36827;&#26469;&#23450;&#20041;&#30340;&#12290;&#25105;&#25152;&#35828;&#30340;&#8220;&#20195;&#30721;&#22359;&#8221;&#26159;&#25351;&#65306;&#20989;&#25968;&#12289;<code class="literal">if</code> &#35821;&#21477;&#12289;<code class="literal">for</code> &#24490;&#29615;&#12289;<code class="literal">while</code> &#24490;&#29615;&#65292;&#31561;&#31561;&#12290;&#24320;&#22987;&#32553;&#36827;&#34920;&#31034;&#22359;&#30340;&#24320;&#22987;&#65292;&#21462;&#28040;&#32553;&#36827;&#34920;&#31034;&#22359;&#30340;&#32467;&#26463;&#12290;&#19981;&#23384;&#22312;&#26126;&#26174;&#30340;&#25324;&#21495;&#65292;&#22823;&#25324;&#21495;&#25110;&#20851;&#38190;&#23383;&#12290;&#36825;&#23601;&#24847;&#21619;&#30528;&#31354;&#30333;&#26159;&#37325;&#35201;&#30340;&#65292;&#24182;&#19988;&#35201;&#19968;&#33268;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#20989;&#25968;&#20195;&#30721; (&#21253;&#25324; <code class="literal">doc string</code>) &#32553;&#36827;&#20102; 4 &#20010;&#31354;&#26684;&#12290;&#19981;&#19968;&#23450;&#38750;&#35201;&#26159; 4 &#20010;&#65292;&#21482;&#35201;&#19968;&#33268;&#23601;&#21487;&#20197;&#20102;&#12290;&#27809;&#26377;&#32553;&#36827;&#30340;&#31532;&#19968;&#34892;&#21017;&#34987;&#35270;&#20026;&#22312;&#20989;&#25968;&#20307;&#20043;&#22806;&#12290;</p><p><a class="xref" href="#odbchelper.indenting.if" title="&#20363;&nbsp;2.6.&nbsp;if &#35821;&#21477;">&#20363;&nbsp;2.6 &#8220;<code class="literal">if</code> &#35821;&#21477;&#8221;</a> &#23637;&#31034;&#20102;&#19968;&#20010; <code class="literal">if</code> &#35821;&#21477;&#32553;&#36827;&#30340;&#20363;&#23376;&#12290;</p><div class="example"><a name="odbchelper.indenting.if"></a><p class="title"><b>&#20363;&nbsp;2.6.&nbsp;<code class="literal">if</code> &#35821;&#21477;</b></p><div class="example-contents"><pre class="programlisting">
def fib(n):                   <a name="odbchelper.indenting.2.1"></a>circled_1_delcric
    print 'n =', n            <a name="odbchelper.indenting.2.2"></a>circled_2_delcric
    if n &gt; 1:                 <a name="odbchelper.indenting.2.3"></a>circled_3_delcric
        return n * fib(n - 1)
    else:                     <a name="odbchelper.indenting.2.4"></a>circled_4_delcric
        print 'end of the line'
        return 1
</pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.indenting.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010;&#21517;&#20026; <code class="function">fib</code> &#30340;&#20989;&#25968;&#65292;&#26377;&#19968;&#20010;&#21442;&#25968; <code class="varname">n</code>&#12290;&#22312;&#20989;&#25968;&#20869;&#30340;&#25152;&#26377;&#20195;&#30721;&#37117;&#26159;&#32553;&#36827;&#30340;&#12290;</dd><dt><a href="#odbchelper.indenting.2.2">circled_2_delcric</a> </dt><dd>&#22312; <span class="application">Python</span> &#20013;&#21521;&#23631;&#24149;&#36755;&#20986;&#20869;&#23481;&#38750;&#24120;&#23481;&#26131;&#65292;&#21482;&#35201;&#20351;&#29992; <code class="function">print</code> &#21363;&#21487;&#12290;<code class="function">print</code> &#35821;&#21477;&#21487;&#20197;&#25509;&#21463;&#20219;&#20309;&#25968;&#25454;&#31867;&#22411;&#65292;&#21253;&#25324;&#23383;&#31526;&#20018;&#12289;&#25972;&#25968;&#21644;&#20854;&#23427;&#31867;&#22411;&#65292;&#22914;&#23383;&#20856;&#21644;&#21015;&#34920; (&#25105;&#20204;&#23558;&#22312;&#19979;&#19968;&#31456;&#23398;&#20064;)&#12290;&#29978;&#33267;&#21487;&#20197;&#28151;&#22312;&#19968;&#36215;&#36755;&#20986;&#65292;&#21482;&#38656;&#29992;&#36887;&#21495;&#38548;&#24320;&#12290;&#25152;&#26377;&#20540;&#37117;&#36755;&#20986;&#21040;&#21516;&#19968;&#34892;&#65292;&#29992;&#31354;&#26684;&#38548;&#24320; (&#36887;&#21495;&#24182;&#19981;&#25171;&#21360;&#20986;&#26469;)&#12290;&#25152;&#20197;&#24403;&#29992; <code class="literal">5</code> &#26469;&#35843;&#29992; <code class="function">fib</code> &#26102;&#65292;&#23558;&#36755;&#20986;&#8220;n = 5&#8221;&#12290;</dd><dt><a href="#odbchelper.indenting.2.3">circled_3_delcric</a> </dt><dd><code class="literal">if</code> &#35821;&#21477;&#26159;&#19968;&#31181;&#30340;&#20195;&#30721;&#22359;&#12290;&#22914;&#26524; <code class="literal">if</code> &#34920;&#36798;&#24335;&#35745;&#31639;&#20026; true&#65292;&#32039;&#36319;&#30528;&#30340;&#32553;&#36827;&#22359;&#20250;&#34987;&#25191;&#34892;&#65292;&#21542;&#21017;&#36827;&#20837; <code class="literal">else</code> &#22359;&#25191;&#34892;&#12290;</dd><dt><a href="#odbchelper.indenting.2.4">circled_4_delcric</a> </dt><dd>&#24403;&#28982; <code class="literal">if</code> &#21644; <code class="literal">else</code> &#22359;&#21487;&#20197;&#21253;&#21547;&#35768;&#22810;&#34892;&#65292;&#21482;&#35201;&#23427;&#20204;&#37117;&#21516;&#26679;&#32553;&#36827;&#12290;&#36825;&#20010; <code class="literal">else</code> &#22359;&#20013;&#26377;&#20004;&#34892;&#20195;&#30721;&#12290;&#23545;&#20110;&#22810;&#34892;&#20195;&#30721;&#22359;&#27809;&#26377;&#20854;&#23427;&#29305;&#27530;&#30340;&#35821;&#27861;&#65292;&#21482;&#35201;&#32553;&#36827;&#23601;&#34892;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22312;&#32463;&#36807;&#19968;&#20123;&#26368;&#21021;&#30340;&#25239;&#35758;&#21644;&#20960;&#20010;&#19982; <span class="application">Fortran</span> &#30340;&#22066;&#35773;&#30340;&#31867;&#27604;&#20043;&#21518;&#65292;&#24744;&#20250;&#24515;&#24179;&#27668;&#21644;&#22320;&#23545;&#24453;&#20195;&#30721;&#32553;&#36827;&#65292;&#24182;&#19988;&#24320;&#22987;&#30475;&#21040;&#23427;&#30340;&#22909;&#22788;&#12290;&#19968;&#20010;&#20027;&#35201;&#30340;&#22909;&#22788;&#23601;&#26159;&#25152;&#26377;&#30340; <span class="application">Python</span> &#31243;&#24207;&#30475;&#19978;&#21435;&#37117;&#24046;&#19981;&#22810;&#65292;&#22240;&#20026;&#32553;&#36827;&#26159;&#19968;&#31181;&#35821;&#35328;&#30340;&#35201;&#27714;&#32780;&#19981;&#26159;&#19968;&#31181;&#39118;&#26684;&#12290;&#36825;&#26679;&#23601;&#20351;&#24471;&#38405;&#35835;&#21644;&#29702;&#35299;&#20182;&#20154;&#30340; <span class="application">Python</span> &#20195;&#30721;&#23481;&#26131;&#24471;&#22810;&#12290;</p><div class="note"><blockquote><b class="title"><a name="compare.lineend.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: &#35821;&#21477;&#21644;&#35821;&#21477;&#22359;&#20998;&#21106;</a></b><br><span class="application">Python</span> &#20351;&#29992;&#30828;&#22238;&#36710;&#26469;&#20998;&#21106;&#35821;&#21477;&#65292;&#20882;&#21495;&#21644;&#32553;&#36827;&#26469;&#20998;&#21106;&#20195;&#30721;&#22359;&#12290;<span class="application"><acronym class="acronym">C++</acronym></span> &#21644; <span class="application">Java</span> &#20351;&#29992;&#20998;&#21495;&#26469;&#20998;&#21106;&#35821;&#21477;&#65292;&#33457;&#25324;&#21495;&#26469;&#20998;&#21106;&#20195;&#30721;&#22359;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#35752;&#35770;&#20102;&#20132;&#21449;&#32553;&#36827;&#38382;&#39064;&#65292;&#24182;&#19988;&#28436;&#31034;&#20102;&#21508;&#31181;&#21508;&#26679;&#30340;&#32553;&#36827;&#38169;&#35823; (<a href="http://www.python.org/doc/current/ref/indentation.html">http://www.python.org/doc/current/ref/indentation.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Style Guide</em> (<a href="http://www.python.org/doc/essays/styleguide.html">http://www.python.org/doc/essays/styleguide.html</a>) &#35752;&#35770;&#20102;&#33391;&#22909;&#30340;&#32553;&#36827;&#39118;&#26684;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.testing"></a>2.6.&nbsp;&#27979;&#35797;&#27169;&#22359;</h2></div></div></div><div class="abstract"><p>&#25152;&#26377;&#30340; <span class="application">Python</span> &#27169;&#22359;&#37117;&#26159;&#23545;&#35937;&#65292;&#24182;&#19988;&#26377;&#20960;&#20010;&#26377;&#29992;&#30340;&#23646;&#24615;&#12290;&#24744;&#21487;&#20197;&#20351;&#29992;&#36825;&#20123;&#23646;&#24615;&#26041;&#20415;&#22320;&#27979;&#35797;&#24744;&#25152;&#32534;&#20889;&#30340;&#27169;&#22359;&#12290;&#19979;&#38754;&#26159;&#19968;&#20010;&#20351;&#29992; <code class="literal">if</code> <code class="literal">__name__</code> &#30340;&#25216;&#24039;&#12290;</p></div><div class="informalexample"><a name="odbchelper.ifnametrick"></a><pre class="programlisting">
if __name__ == "__main__":</pre></div><p>&#22312;&#32487;&#32493;&#23398;&#20064;&#26032;&#19996;&#35199;&#20043;&#21069;&#65292;&#26377;&#20960;&#20010;&#37325;&#35201;&#30340;&#35266;&#23519;&#32467;&#26524;&#12290;&#39318;&#20808;&#65292;<code class="literal">if</code> &#34920;&#36798;&#24335;&#26080;&#38656;&#20351;&#29992;&#22278;&#25324;&#21495;&#25324;&#36215;&#26469;&#12290;&#20854;&#27425;&#65292;<code class="literal">if</code> &#35821;&#21477;&#20197;&#20882;&#21495;&#32467;&#26463;&#65292;&#32039;&#36319;&#20854;&#21518;&#30340;&#26159;<a class="link" href="#odbchelper.indenting" title="2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;">&#32553;&#36827;&#20195;&#30721;</a>&#12290;</p><div class="note"><blockquote><b class="title"><a name="compare.equals.c">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application"><acronym class="acronym">C</acronym></span>: &#27604;&#36739;&#21644;&#36171;&#20540;</a></b><br>&#19982; <span class="application"><acronym class="acronym">C</acronym></span> &#19968;&#26679;&#65292;<span class="application">Python</span> &#20351;&#29992; <code class="literal">==</code> &#20570;&#27604;&#36739;&#65292;&#20351;&#29992; <code class="literal">=</code> &#20570;&#36171;&#20540;&#12290;&#19982; <span class="application"><acronym class="acronym">C</acronym></span> &#19981;&#19968;&#26679;&#65292;<span class="application">Python</span> &#19981;&#25903;&#25345;&#34892;&#20869;&#36171;&#20540;&#65292;&#25152;&#20197;&#19981;&#20250;&#20986;&#29616;&#24819;&#35201;&#36827;&#34892;&#27604;&#36739;&#21364;&#24847;&#22806;&#22320;&#20986;&#29616;&#36171;&#20540;&#30340;&#24773;&#20917;&#12290;</blockquote></div><p>&#37027;&#20040;&#20026;&#20160;&#20040;&#35828;&#36825;&#20010;&#29305;&#27530;&#30340; <code class="literal">if</code> &#35821;&#21477;&#26159;&#19968;&#20010;&#25216;&#24039;&#21602;&#65311;&#27169;&#22359;&#26159;&#23545;&#35937;&#65292;&#24182;&#19988;&#25152;&#26377;&#30340;&#27169;&#22359;&#37117;&#26377;&#19968;&#20010;&#20869;&#32622;&#23646;&#24615; <code class="literal">__name__</code>&#12290;&#19968;&#20010;&#27169;&#22359;&#30340; <code class="literal">__name__</code> &#30340;&#20540;&#21462;&#20915;&#20110;&#24744;&#22914;&#20309;&#24212;&#29992;&#27169;&#22359;&#12290;&#22914;&#26524; <code class="literal">import</code> &#27169;&#22359;&#65292;&#37027;&#20040; <code class="literal">__name__</code> &#30340;&#20540;&#36890;&#24120;&#20026;&#27169;&#22359;&#30340;&#25991;&#20214;&#21517;&#65292;&#19981;&#24102;&#36335;&#24452;&#25110;&#32773;&#25991;&#20214;&#25193;&#23637;&#21517;&#12290;&#20294;&#26159;&#24744;&#20063;&#21487;&#20197;&#20687;&#19968;&#20010;&#26631;&#20934;&#30340;&#31243;&#24207;&#19968;&#26679;&#30452;&#25509;&#36816;&#34892;&#27169;&#22359;&#65292;&#22312;&#36825;&#31181;&#24773;&#20917;&#19979; <code class="literal">__name__</code> &#30340;&#20540;&#23558;&#26159;&#19968;&#20010;&#29305;&#21035;&#30340;&#32570;&#30465;&#20540;&#65292;<code class="literal">__main__</code>&#12290;</p><div class="informalexample"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import odbchelper</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">odbchelper.<code class="literal">__name__</code></span>
<font color="teal">'odbchelper'</font></pre></div><p>&#21482;&#35201;&#20102;&#35299;&#21040;&#36825;&#19968;&#28857;&#65292;&#24744;&#23601;&#21487;&#20197;&#22312;&#27169;&#22359;&#20869;&#37096;&#20026;&#24744;&#30340;&#27169;&#22359;&#35774;&#35745;&#19968;&#20010;&#27979;&#35797;&#22871;&#20214;&#65292;&#22312;&#20854;&#20013;&#21152;&#20837;&#36825;&#20010; <code class="literal">if</code> &#35821;&#21477;&#12290;&#24403;&#24744;&#30452;&#25509;&#36816;&#34892;&#27169;&#22359;&#65292;<code class="literal">__name__</code> &#30340;&#20540;&#26159; <code class="literal">__main__</code>&#65292;&#25152;&#20197;&#27979;&#35797;&#22871;&#20214;&#25191;&#34892;&#12290;&#24403;&#24744;&#23548;&#20837;&#27169;&#22359;&#65292;<code class="literal">__name__</code> &#30340;&#20540;&#23601;&#26159;&#21035;&#30340;&#19996;&#35199;&#20102;&#65292;&#25152;&#20197;&#27979;&#35797;&#22871;&#20214;&#34987;&#24573;&#30053;&#12290;&#36825;&#26679;&#20351;&#24471;&#22312;&#23558;&#26032;&#30340;&#27169;&#22359;&#38598;&#25104;&#21040;&#19968;&#20010;&#22823;&#31243;&#24207;&#20043;&#21069;&#24320;&#21457;&#21644;&#35843;&#35797;&#23481;&#26131;&#22810;&#20102;&#12290;</p><div class="tip"><blockquote><b class="title"><a name="tip.mac.runasmain">&#25552;&#31034;: <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#19978;&#30340; <code class="literal">if</code> <code class="literal">__name__</code></a></b><br>&#22312; <span class="application">MacPython</span> &#19978;&#65292;&#38656;&#35201;&#19968;&#20010;&#39069;&#22806;&#30340;&#27493;&#32858;&#26469;&#20351;&#24471; <code class="literal">if</code> <code class="literal">__name__</code> &#25216;&#24039;&#26377;&#25928;&#12290;&#28857;&#20987;&#31383;&#21475;&#21491;&#19978;&#35282;&#30340;&#40657;&#33394;&#19977;&#35282;&#65292;&#24377;&#20986;&#27169;&#22359;&#30340;&#23646;&#24615;&#33756;&#21333;&#65292;&#30830;&#35748; <span class="guimenuitem">Run as __main__</span> &#34987;&#36873;&#20013;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#35752;&#35770;&#20102;&#23548;&#20837;&#27169;&#22359; (<a href="http://www.python.org/doc/current/ref/import.html">http://www.python.org/doc/current/ref/import.html</a>)&#30340;&#24213;&#23618;&#32454;&#33410;&#12290;</li></ul></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="datatypes"></a>&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;</h1></div></div></div><p>&#35753;&#25105;&#20204;&#29992;&#28857;&#20799;&#26102;&#38388;&#26469;&#22238;&#39038;&#19968;&#19979;&#24744;&#30340;&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;&#12290;&#20294;&#39318;&#20808;&#65292;&#20808;&#35828;&#20123;&#20854;&#20182;&#30340;&#20869;&#23481;&#65292;&#22240;&#20026;&#24744;&#38656;&#35201;&#20102;&#35299;&#19968;&#19979; dictionary (&#23383;&#20856;)&#12289;tuple (&#20803;&#32452;) &#21644; list (&#21015;&#34920;)(&#21734;&#65292;&#25105;&#30340;&#32769;&#22825;&#65281;)&#12290;&#22914;&#26524;&#24744;&#26159;&#19968;&#20010; <span class="application">Perl</span> hacker&#65292;&#24403;&#28982;&#21487;&#20197;&#25735;&#24320; dictionary &#21644; list&#65292;&#20294;&#26159;&#20173;&#28982;&#38656;&#35201;&#27880;&#24847; tuple&#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.dict"></a>3.1.&nbsp;Dictionary &#20171;&#32461;</h2></div></div></div><div class="abstract"><p>Dictionary &#26159; <span class="application">Python</span> &#30340;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;&#20043;&#19968;&#65292;&#23427;&#23450;&#20041;&#20102;&#38190;&#21644;&#20540;&#20043;&#38388;&#19968;&#23545;&#19968;&#30340;&#20851;&#31995;&#12290;</p></div><div class="note"><blockquote><b class="title"><a name="compare.dict.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: Dictionary</a></b><br><span class="application">Python</span> &#20013;&#30340; dictionary &#23601;&#20687; <span class="application">Perl</span> &#20013;&#30340; hash (&#21704;&#24076;&#25968;&#32452;)&#12290;&#22312; <span class="application">Perl</span> &#20013;&#65292;&#23384;&#20648;&#21704;&#24076;&#20540;&#30340;&#21464;&#37327;&#24635;&#26159;&#20197; <code class="literal">%</code> &#23383;&#31526;&#24320;&#22987;&#65307;&#22312; <span class="application">Python</span> &#20013;&#65292;&#21464;&#37327;&#21487;&#20197;&#20219;&#24847;&#21462;&#21517;&#65292;&#24182;&#19988; <span class="application">Python</span> &#22312;&#20869;&#37096;&#20250;&#35760;&#24405;&#19979;&#20854;&#25968;&#25454;&#31867;&#22411;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.dict.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: Dictionary</a></b><br><span class="application">Python</span> &#20013;&#30340; dictionary &#20687; <span class="application">Java</span> &#20013;&#30340; <code class="classname">Hashtable</code> &#31867;&#30340;&#23454;&#20363;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.dict.vb">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Visual Basic</span>: Dictionary</a></b><br><span class="application">Python</span> &#20013;&#30340; dictionary &#20687; <span class="application">Visual Basic</span> &#20013;&#30340; <code class="classname">Scripting.Dictionary</code> &#23545;&#35937;&#30340;&#23454;&#20363;&#12290;</blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5309"></a>3.1.1.&nbsp;Dictionary &#30340;&#23450;&#20041;</h3></div></div></div><div class="example"><a name="odbchelper.dict.define"></a><p class="title"><b>&#20363;&nbsp;3.1.&nbsp;&#23450;&#20041; Dictionary</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d = {"server":"mpilgrim", "database":"master"}</span> <a name="odbchelper.dict.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'database': 'master'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["server"]</span>                                    <a name="odbchelper.dict.1.2"></a>circled_2_delcric
<font color="teal">'mpilgrim'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["database"]</span>                                  <a name="odbchelper.dict.1.3"></a>circled_3_delcric
<font color="teal">'master'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["mpilgrim"]</span>                                  <a name="odbchelper.dict.1.4"></a>circled_4_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
KeyError: mpilgrim</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.dict.1.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#25105;&#20204;&#21019;&#24314;&#20102;&#26032; dictionary&#65292;&#23427;&#26377;&#20004;&#20010;&#20803;&#32032;&#65292;&#23558;&#20854;&#36171;&#32473;&#21464;&#37327; <code class="varname">d</code> &#12290;&#27599;&#19968;&#20010;&#20803;&#32032;&#37117;&#26159;&#19968;&#20010; key-value &#23545;&#65307;&#25972;&#20010;&#20803;&#32032;&#38598;&#21512;&#29992;&#22823;&#25324;&#21495;&#25324;&#36215;&#26469;&#12290;</dd><dt><a href="#odbchelper.dict.1.2">circled_2_delcric</a> </dt><dd><code class="literal">'server'</code> &#26159;&#19968;&#20010; key&#65292;&#23427;&#25152;&#20851;&#32852;&#30340;&#20540;&#26159;&#36890;&#36807; <code class="literal">d["server"]</code> &#26469;&#24341;&#29992;&#30340;&#65292;&#20026; <code class="literal">'mpilgrim'</code>&#12290;</dd><dt><a href="#odbchelper.dict.1.3">circled_3_delcric</a> </dt><dd><code class="literal">'database'</code> &#26159;&#19968;&#20010; key&#65292;&#23427;&#25152;&#20851;&#32852;&#30340;&#20540;&#26159;&#36890;&#36807; <code class="literal">d["database"]</code> &#26469;&#24341;&#29992;&#30340;&#65292;&#20026; <code class="literal">'master'</code>&#12290;</dd><dt><a href="#odbchelper.dict.1.4">circled_4_delcric</a> </dt><dd>&#24744;&#21487;&#20197;&#36890;&#36807; key &#26469;&#24341;&#29992;&#20854;&#20540;&#65292;&#20294;&#26159;&#19981;&#33021;&#36890;&#36807;&#20540;&#33719;&#21462; key&#12290;&#25152;&#20197; <code class="literal">d["server"]</code> &#30340;&#20540;&#20026; <code class="literal">'mpilgrim'</code>&#65292;&#32780;&#20351;&#29992; <code class="literal">d["mpilgrim"]</code> &#20250;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#65292;&#22240;&#20026; <code class="literal">'mpilgrim'</code> &#19981;&#26159;&#19968;&#20010; key&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5404"></a>3.1.2.&nbsp;Dictionary &#30340;&#20462;&#25913;</h3></div></div></div><div class="example"><a name="odbchelper.dict.modify"></a><p class="title"><b>&#20363;&nbsp;3.2.&nbsp;&#20462;&#25913; Dictionary</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'database': 'master'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["database"] = "pubs"</span> <a name="odbchelper.dict.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'database': 'pubs'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["uid"] = "sa"</span>        <a name="odbchelper.dict.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}</font></pre></div></div><br class="example-break"><div class="calloutlist"><dl compact><dt><a href="#odbchelper.dict.2.1">circled_1_delcric</a> </dt><dd>&#22312;&#19968;&#20010; dictionary &#20013;&#19981;&#33021;&#26377;&#37325;&#22797;&#30340; key&#12290;&#32473;&#19968;&#20010;&#23384;&#22312;&#30340; key &#36171;&#20540;&#20250;&#35206;&#30422;&#21407;&#26377;&#30340;&#20540;&#12290;</dd><dt><a href="#odbchelper.dict.2.2">circled_2_delcric</a> </dt><dd>&#22312;&#20219;&#20309;&#26102;&#20505;&#37117;&#21487;&#20197;&#21152;&#20837;&#26032;&#30340; key-value &#23545;&#12290;&#36825;&#31181;&#35821;&#27861;&#21516;&#20462;&#25913;&#23384;&#22312;&#30340;&#20540;&#26159;&#19968;&#26679;&#30340;&#12290;(&#26159;&#30340;&#65292;&#23427;&#21487;&#33021;&#26576;&#22825;&#20250;&#32473;&#24744;&#24102;&#26469;&#40635;&#28902;&#12290;&#20551;&#35774;&#20320;&#19968;&#27425;&#27425;&#22320;&#20462;&#25913;&#19968;&#20010; dictionary&#65292;&#20294;&#20854;&#38388;&#24744;&#20351;&#29992;&#30340; key &#24182;&#26410;&#25353;&#29031;&#24744;&#30340;&#24819;&#27861;&#36827;&#34892;&#25913;&#21464;&#12290;&#24744;&#21487;&#33021;&#20197;&#20026;&#21152;&#20837;&#20102;&#26032;&#20540;&#65292;&#20294;&#23454;&#38469;&#19978;&#21482;&#26159;&#19968;&#27425;&#21448;&#19968;&#27425;&#22320;&#20462;&#25913;&#20102;&#21516;&#19968;&#20010;&#20540;&#12290;)</dd></dl></div><p>&#35831;&#27880;&#24847;&#26032;&#30340;&#20803;&#32032; (key &#20026; <code class="literal">'uid'</code>&#65292;value &#20026; <code class="literal">'sa'</code>) &#20986;&#29616;&#22312;&#20013;&#38388;&#12290;&#23454;&#38469;&#19978;&#65292;&#22312;&#31532;&#19968;&#20010;&#20363;&#23376;&#20013;&#30340;&#20803;&#32032;&#30475;&#19978;&#21435;&#26159;&#30340;&#26377;&#24207;&#19981;&#36807;&#26159;&#19968;&#31181;&#24039;&#21512;&#12290;&#29616;&#22312;&#23427;&#20204;&#30475;&#19978;&#21435;&#30340;&#26080;&#24207;&#21516;&#26679;&#26159;&#19968;&#31181;&#24039;&#21512;&#12290;</p><div class="note"><blockquote><b class="title"><a name="tip.dictorder">&#27880;&#24847;: Dictionary &#26159;&#26080;&#24207;&#30340;</a></b><br>Dictionary &#27809;&#26377;&#20803;&#32032;&#39034;&#24207;&#30340;&#27010;&#24565;&#12290;&#35828;&#20803;&#32032; "<span class="quote">&#39034;&#24207;&#20081;&#20102;</span>" &#26159;&#19981;&#27491;&#30830;&#30340;&#65292;&#23427;&#20204;&#21482;&#26159;&#24207;&#20598;&#30340;&#31616;&#21333;&#25490;&#21015;&#12290;&#36825;&#26159;&#19968;&#20010;&#37325;&#35201;&#30340;&#29305;&#24615;&#65292;&#23427;&#20250;&#22312;&#24744;&#24819;&#35201;&#20197;&#19968;&#31181;&#29305;&#23450;&#30340;&#65292;&#21487;&#37325;&#29616;&#30340;&#39034;&#24207; (&#20687;&#20197; key &#30340;&#23383;&#27597;&#34920;&#39034;&#24207;) &#23384;&#21462; dictionary &#20803;&#32032;&#30340;&#26102;&#20505;&#39578;&#25200;&#24744;&#12290;&#26377;&#19968;&#20123;&#23454;&#29616;&#36825;&#20123;&#35201;&#27714;&#30340;&#26041;&#27861;&#65292;&#23427;&#20204;&#21482;&#26159;&#27809;&#26377;&#21152;&#21040; dictionary &#20013;&#21435;&#12290;</blockquote></div><p>&#24403;&#20351;&#29992; dictionary &#26102;&#65292;&#24744;&#38656;&#35201;&#30693;&#36947;&#65306;dictionary &#30340; key &#26159;&#22823;&#23567;&#20889;&#25935;&#24863;&#30340;&#12290;</p><div class="example"><a name="odbchelper.dict.case"></a><p class="title"><b>&#20363;&nbsp;3.3.&nbsp;Dictionary &#30340; key &#26159;&#22823;&#23567;&#20889;&#25935;&#24863;&#30340;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d = {}</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["key"] = "value"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["key"] = "other value"</span> <a name="odbchelper.dict.5.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'key': 'other value'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["Key"] = "third value"</span> <a name="odbchelper.dict.5.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'Key': 'third value', 'key': 'other value'}</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.dict.5.1">circled_1_delcric</a> </dt><dd>&#20026;&#19968;&#20010;&#24050;&#32463;&#23384;&#22312;&#30340; dictionary key &#36171;&#20540;&#65292;&#23558;&#31616;&#21333;&#35206;&#30422;&#21407;&#26377;&#30340;&#20540;&#12290;</dd><dt><a href="#odbchelper.dict.5.2">circled_2_delcric</a> </dt><dd>&#36825;&#19981;&#20250;&#20026;&#19968;&#20010;&#24050;&#32463;&#23384;&#22312;&#30340; dictionary key &#36171;&#20540;&#65292;&#22240;&#20026;&#22312; <span class="application">Python</span> &#20013;&#26159;&#21306;&#20998;&#22823;&#23567;&#20889;&#30340;&#65292;&#20063;&#23601;&#26159;&#35828; <code class="literal">'key'</code> &#19982; <code class="literal">'Key'</code> &#26159;&#19981;&#21516;&#30340;&#12290;&#25152;&#20197;&#36825;&#31181;&#24773;&#20917;&#23558;&#22312; dictionary &#20013;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340; key-value &#23545;&#12290;&#34429;&#28982;&#30475;&#19978;&#21435;&#24456;&#30456;&#36817;&#65292;&#20294;&#26159;&#22312; <span class="application">Python</span> &#30524;&#37324;&#26159;&#23436;&#20840;&#19981;&#21516;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="odbchelper.dictionarytypes"></a><p class="title"><b>&#20363;&nbsp;3.4.&nbsp;&#22312; dictionary &#20013;&#28151;&#29992;&#25968;&#25454;&#31867;&#22411;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d["retrycount"] = 3</span> <a name="odbchelper.dict.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d[42] = "douglas"</span>   <a name="odbchelper.dict.3.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
42: 'douglas', 'retrycount': 3}</font></pre></div></div><br class="example-break"><div class="calloutlist"><dl compact><dt><a href="#odbchelper.dict.3.1">circled_1_delcric</a> </dt><dd>Dictionary &#19981;&#21482;&#26159;&#29992;&#20110;&#23384;&#20648;&#23383;&#31526;&#20018;&#12290;Dictionary &#30340;&#20540;&#21487;&#20197;&#26159;&#20219;&#24847;&#25968;&#25454;&#31867;&#22411;&#65292;&#21253;&#25324;&#23383;&#31526;&#20018;&#12289;&#25972;&#25968;&#12289;&#23545;&#35937;&#65292;&#29978;&#33267;&#20854;&#23427;&#30340; dictionary&#12290;&#22312;&#21333;&#20010; dictionary &#37324;&#65292;dictionary &#30340;&#20540;&#24182;&#19981;&#38656;&#35201;&#20840;&#37117;&#26159;&#21516;&#19968;&#25968;&#25454;&#31867;&#22411;&#65292;&#21487;&#20197;&#26681;&#25454;&#38656;&#35201;&#28151;&#29992;&#21644;&#21305;&#37197;&#12290;</dd><dt><a href="#odbchelper.dict.3.2">circled_2_delcric</a> </dt><dd>Dictionary &#30340; key &#35201;&#20005;&#26684;&#22810;&#20102;&#65292;&#20294;&#26159;&#23427;&#20204;&#21487;&#20197;&#26159;&#23383;&#31526;&#20018;&#12289;&#25972;&#25968;&#25110;&#20960;&#31181;&#20854;&#23427;&#30340;&#31867;&#22411; (&#21518;&#38754;&#36824;&#20250;&#35848;&#21040;&#36825;&#19968;&#28857;)&#12290;&#20063;&#21487;&#20197;&#22312;&#19968;&#20010; dictionary &#20013;&#28151;&#29992;&#21644;&#21305;&#37197; key &#30340;&#25968;&#25454;&#31867;&#22411;&#12290;</dd></dl></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5585"></a>3.1.3.&nbsp;&#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;</h3></div></div></div><div class="example"><a name="odbchelper.dict.del"></a><p class="title"><b>&#20363;&nbsp;3.5.&nbsp;&#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
42: 'douglas', 'retrycount': 3}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">del d[42]</span> <a name="odbchelper.dict.4.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d.clear()</span> <a name="odbchelper.dict.4.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d</span>
<font color="teal">{}</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.dict.4.1">circled_1_delcric</a> </dt><dd><code class="function">del</code> &#20801;&#35768;&#24744;&#20351;&#29992; key &#20174;&#19968;&#20010; dictionary &#20013;&#21024;&#38500;&#29420;&#31435;&#30340;&#20803;&#32032;&#12290;</dd><dt><a href="#odbchelper.dict.4.2">circled_2_delcric</a> </dt><dd><code class="function">clear</code> &#20174;&#19968;&#20010; dictionary &#20013;&#28165;&#38500;&#25152;&#26377;&#20803;&#32032;&#12290;&#27880;&#24847;&#31354;&#30340;&#22823;&#25324;&#21495;&#38598;&#21512;&#34920;&#31034;&#19968;&#20010;&#27809;&#26377;&#20803;&#32032;&#30340; dictionary&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#35762;&#25480;&#20102; dictionary &#21644;&#22914;&#20309;&#20351;&#29992; dictionary &#27169;&#25311;&#31232;&#30095;&#30697;&#38453; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap10.htm">http://www.ibiblio.org/obp/thinkCSpy/chap10.htm</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#26377;&#35768;&#22810;&#20351;&#29992; dictionary &#30340;&#31034;&#20363;&#20195;&#30721; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/541">http://www.faqts.com/knowledge-base/index.phtml/fid/541</a>)&#12290;</li><li><span class="application">Python</span> Cookbook (<a href="http://www.activestate.com/ASPN/Python/Cookbook/">http://www.activestate.com/ASPN/Python/Cookbook/</a>) &#35752;&#35770;&#20102;&#22914;&#20309;&#36890;&#36807; key &#23545; dictionary &#30340;&#20540;&#36827;&#34892;&#25490;&#24207; (<a href="http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52306">http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52306</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#30340; dictionary &#26041;&#27861; (<a href="http://www.python.org/doc/current/lib/typesmapping.html">http://www.python.org/doc/current/lib/typesmapping.html</a>)&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.list"></a>3.2.&nbsp;List &#20171;&#32461;</h2></div></div></div><div class="abstract"><p>List &#26159; <span class="application">Python</span> &#20013;&#20351;&#29992;&#26368;&#39057;&#32321;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#22914;&#26524;&#24744;&#23545; list &#20165;&#26377;&#30340;&#32463;&#39564;&#23601;&#26159;&#22312; <span class="application">Visual Basic</span> &#20013;&#30340;&#25968;&#32452;&#25110; <span class="application">Powerbuilder</span> &#20013;&#30340;&#25968;&#25454;&#23384;&#20648;&#65292;&#37027;&#20040;&#23601;&#25171;&#36215;&#31934;&#31070;&#23398;&#20064; <span class="application">Python</span> &#30340; list &#21543;&#12290;</p></div><div class="note"><blockquote><b class="title"><a name="compare.list.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: list</a></b><br><span class="application">Python</span> &#30340; list &#22914;&#21516; <span class="application">Perl</span> &#20013;&#30340;&#25968;&#32452;&#12290;&#22312; <span class="application">Perl</span> &#20013;&#65292;&#29992;&#26469;&#20445;&#23384;&#25968;&#32452;&#30340;&#21464;&#37327;&#24635;&#26159;&#20197; <code class="literal">@</code> &#23383;&#31526;&#24320;&#22987;&#65307;&#22312; <span class="application">Python</span> &#20013;&#65292;&#21464;&#37327;&#21487;&#20197;&#20219;&#24847;&#21462;&#21517;&#65292;&#24182;&#19988; <span class="application">Python</span> &#22312;&#20869;&#37096;&#20250;&#35760;&#24405;&#19979;&#20854;&#25968;&#25454;&#31867;&#22411;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.list.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: list</a></b><br><span class="application">Python</span> &#20013;&#30340; list &#26356;&#20687; <span class="application">Java</span> &#20013;&#30340;&#25968;&#32452; (&#24744;&#21487;&#20197;&#31616;&#21333;&#22320;&#36825;&#26679;&#29702;&#35299;&#65292;&#20294; <span class="application">Python</span> &#20013;&#30340; list &#36828;&#27604; <span class="application">Java</span> &#20013;&#30340;&#25968;&#32452;&#24378;&#22823;)&#12290;&#19968;&#20010;&#26356;&#22909;&#30340;&#31867;&#27604;&#26159; <code class="classname">ArrayList</code> &#31867;&#65292;&#23427;&#21487;&#20197;&#20445;&#23384;&#20219;&#24847;&#23545;&#35937;&#65292;&#24182;&#19988;&#21487;&#20197;&#22312;&#22686;&#21152;&#26032;&#20803;&#32032;&#26102;&#21160;&#24577;&#25193;&#23637;&#12290;</blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5762"></a>3.2.1.&nbsp;List &#30340;&#23450;&#20041;</h3></div></div></div><div class="example"><a name="d0e5765"></a><p class="title"><b>&#20363;&nbsp;3.6.&nbsp;&#23450;&#20041; List</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ["a", "b", "mpilgrim", "z", "example"]</span> <a name="odbchelper.list.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'z', 'example']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[0]</span>                                       <a name="odbchelper.list.1.2"></a>circled_2_delcric
<font color="teal">'a'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[4]</span>                                       <a name="odbchelper.list.1.3"></a>circled_3_delcric
<font color="teal">'example'</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.1.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#25105;&#20204;&#23450;&#20041;&#20102;&#19968;&#20010;&#26377; 5 &#20010;&#20803;&#32032;&#30340; list&#12290;&#27880;&#24847;&#23427;&#20204;&#20445;&#25345;&#30528;&#21021;&#22987;&#30340;&#39034;&#24207;&#12290;&#36825;&#19981;&#26159;&#20598;&#28982;&#12290;List &#26159;&#19968;&#20010;&#29992;&#26041;&#25324;&#21495;&#21253;&#25324;&#36215;&#26469;&#30340;&#26377;&#24207;&#20803;&#32032;&#30340;&#38598;&#21512;&#12290;</dd><dt><a href="#odbchelper.list.1.2">circled_2_delcric</a> </dt><dd>List &#21487;&#20197;&#20316;&#20026;&#20197; 0 &#19979;&#26631;&#24320;&#22987;&#30340;&#25968;&#32452;&#12290;&#20219;&#20309;&#19968;&#20010;&#38750;&#31354; list &#30340;&#31532;&#19968;&#20010;&#20803;&#32032;&#24635;&#26159; <code class="literal">li[0]</code>&#12290;</dd><dt><a href="#odbchelper.list.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#21253;&#21547; 5 &#20010;&#20803;&#32032; list &#30340;&#26368;&#21518;&#19968;&#20010;&#20803;&#32032;&#26159; <code class="literal">li[4]</code>&#65292;&#22240;&#20026;&#21015;&#34920;&#24635;&#26159;&#20174; 0 &#24320;&#22987;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="odbchelper.negative.example"></a><p class="title"><b>&#20363;&nbsp;3.7.&nbsp;&#36127;&#30340; list &#32034;&#24341;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'z', 'example']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[-1]</span> <a name="odbchelper.list.2.1"></a>circled_1_delcric
<font color="teal">'example'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[-3]</span> <a name="odbchelper.list.2.2"></a>circled_2_delcric
<font color="teal">'mpilgrim'</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.2.1">circled_1_delcric</a> </dt><dd>&#36127;&#25968;&#32034;&#24341;&#20174; list &#30340;&#23614;&#37096;&#24320;&#22987;&#21521;&#21069;&#35745;&#25968;&#26469;&#23384;&#21462;&#20803;&#32032;&#12290;&#20219;&#20309;&#19968;&#20010;&#38750;&#31354;&#30340; list &#26368;&#21518;&#19968;&#20010;&#20803;&#32032;&#24635;&#26159; <code class="literal">li[-1]</code>&#12290;</dd><dt><a href="#odbchelper.list.2.2">circled_2_delcric</a> </dt><dd>&#22914;&#26524;&#36127;&#25968;&#32034;&#24341;&#20351;&#24744;&#24863;&#21040;&#31946;&#28034;&#65292;&#21487;&#20197;&#36825;&#26679;&#29702;&#35299;&#65306;<code class="literal">li[-n] == li[len(li) - n]</code>&#12290;&#25152;&#20197;&#22312;&#36825;&#20010; list &#37324;&#65292;<code class="literal">li[-3] == li[5 - 3] == li[2]</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="odbchelper.list.slice"></a><p class="title"><b>&#20363;&nbsp;3.8.&nbsp;list &#30340;&#20998;&#29255; (slice)</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'z', 'example']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[1:3]</span>  <a name="odbchelper.list.3.1"></a>circled_1_delcric
<font color="teal">['b', 'mpilgrim']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[1:-1]</span> <a name="odbchelper.list.3.2"></a>circled_2_delcric
<font color="teal">['b', 'mpilgrim', 'z']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[0:3]</span>  <a name="odbchelper.list.3.3"></a>circled_3_delcric
<font color="teal">['a', 'b', 'mpilgrim']</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.3.1">circled_1_delcric</a> </dt><dd>&#24744;&#21487;&#20197;&#36890;&#36807;&#25351;&#23450; 2 &#20010;&#32034;&#24341;&#24471;&#21040; list &#30340;&#23376;&#38598;&#65292;&#21483;&#20570;&#19968;&#20010; "<span class="quote">slice</span>" &#12290;&#36820;&#22238;&#20540;&#26159;&#19968;&#20010;&#26032;&#30340; list&#65292;&#23427;&#21253;&#21547;&#20102; list &#20013;&#25353;&#39034;&#24207;&#20174;&#31532;&#19968;&#20010; slice &#32034;&#24341; (&#36825;&#37324;&#20026; <code class="literal">li[1]</code>) &#24320;&#22987;&#65292;&#30452;&#21040;&#20294;&#26159;&#19981;&#21253;&#25324;&#31532;&#20108;&#20010; slice &#32034;&#24341; (&#36825;&#37324;&#20026; <code class="literal">li[3]</code>) &#30340;&#25152;&#26377;&#20803;&#32032;&#12290;</dd><dt><a href="#odbchelper.list.3.2">circled_2_delcric</a> </dt><dd>&#22914;&#26524;&#19968;&#20010;&#25110;&#20004;&#20010; slice &#32034;&#24341;&#26159;&#36127;&#25968;&#65292;slice &#20063;&#21487;&#20197;&#24037;&#20316;&#12290;&#22914;&#26524;&#23545;&#24744;&#26377;&#24110;&#21161;&#65292;&#24744;&#21487;&#20197;&#36825;&#26679;&#29702;&#35299;&#65306;&#20174;&#24038;&#21521;&#21491;&#38405;&#35835; list&#65292;&#31532;&#19968;&#20010; slice &#32034;&#24341;&#25351;&#23450;&#20102;&#24744;&#24819;&#35201;&#30340;&#31532;&#19968;&#20010;&#20803;&#32032;&#65292;&#31532;&#20108;&#20010; slice &#32034;&#24341;&#25351;&#23450;&#20102;&#31532;&#19968;&#20010;&#24744;&#19981;&#24819;&#35201;&#30340;&#20803;&#32032;&#12290;&#36820;&#22238;&#30340;&#20540;&#20026;&#22312;&#20854;&#38388;&#30340;&#27599;&#20010;&#20803;&#32032;&#12290;</dd><dt><a href="#odbchelper.list.3.3">circled_3_delcric</a> </dt><dd>List &#20174; 0 &#24320;&#22987;&#65292;&#25152;&#20197; <code class="literal">li[0:3]</code> &#36820;&#22238; list &#30340;&#21069; 3 &#20010;&#20803;&#32032;&#65292;&#20174; <code class="literal">li[0]</code> &#24320;&#22987;&#65292;&#30452;&#21040;&#20294;&#19981;&#21253;&#25324; <code class="literal">li[3]</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="odbchelper.list.slicing.example"></a><p class="title"><b>&#20363;&nbsp;3.9.&nbsp;Slice &#31616;&#20889;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'z', 'example']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[:3]</span> <a name="odbchelper.list.4.1"></a>circled_1_delcric
<font color="teal">['a', 'b', 'mpilgrim']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[3:]</span> <a name="odbchelper.list.4.2"></a>circled_2_delcric <a name="odbchelper.list.4.3"></a>circled_3_delcric
<font color="teal">['z', 'example']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[:]</span>  <a name="odbchelper.list.4.4"></a>circled_4_delcric
<font color="teal">['a', 'b', 'mpilgrim', 'z', 'example']</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.4.1">circled_1_delcric</a> </dt><dd>&#22914;&#26524;&#24038;&#20391;&#20998;&#29255;&#32034;&#24341;&#20026; 0&#65292;&#24744;&#21487;&#20197;&#23558;&#20854;&#30465;&#30053;&#65292;&#40664;&#35748;&#20026; 0&#12290;&#25152;&#20197; <code class="literal">li[:3]</code> &#21516; <a class="xref" href="#odbchelper.list.slice" title="&#20363;&nbsp;3.8.&nbsp;list &#30340;&#20998;&#29255; (slice)">&#20363;&nbsp;3.8 &#8220;list &#30340;&#20998;&#29255; (slice)&#8221;</a> &#30340; <code class="literal">li[0:3]</code> &#26159;&#19968;&#26679;&#30340;&#12290;</dd><dt><a href="#odbchelper.list.4.2">circled_2_delcric</a> </dt><dd>&#21516;&#26679;&#30340;&#65292;&#22914;&#26524;&#21491;&#20391;&#20998;&#29255;&#32034;&#24341;&#26159; list &#30340;&#38271;&#24230;&#65292;&#21487;&#20197;&#23558;&#20854;&#30465;&#30053;&#12290;&#25152;&#20197; <code class="literal">li[3:]</code> &#21516; <code class="literal">li[3:5]</code> &#26159;&#19968;&#26679;&#30340;&#65292;&#22240;&#20026;&#36825;&#20010; list &#26377; 5 &#20010;&#20803;&#32032;&#12290;</dd><dt><a href="#odbchelper.list.4.3">circled_3_delcric</a> </dt><dd>&#35831;&#27880;&#24847;&#36825;&#37324;&#30340;&#23545;&#31216;&#24615;&#12290;&#22312;&#36825;&#20010;&#21253;&#21547; 5 &#20010;&#20803;&#32032;&#30340; list &#20013;&#65292;<code class="literal">li[:3]</code> &#36820;&#22238;&#21069; 3 &#20010;&#20803;&#32032;&#65292;&#32780; <code class="literal">li[3:]</code> &#36820;&#22238;&#21518; 2 &#20010;&#20803;&#32032;&#12290;&#23454;&#38469;&#19978;&#65292;<code class="literal">li[:n]</code> &#24635;&#26159;&#36820;&#22238;&#21069; <code class="literal">n</code> &#20010;&#20803;&#32032;&#65292;&#32780; <code class="literal">li[n:]</code> &#23558;&#36820;&#22238;&#21097;&#19979;&#30340;&#20803;&#32032;&#65292;&#19981;&#31649; list &#26377;&#22810;&#38271;&#12290;</dd><dt><a href="#odbchelper.list.4.4">circled_4_delcric</a> </dt><dd>&#22914;&#26524;&#23558;&#20004;&#20010;&#20998;&#29255;&#32034;&#24341;&#20840;&#37096;&#30465;&#30053;&#65292;&#36825;&#23558;&#21253;&#25324; list &#30340;&#25152;&#26377;&#20803;&#32032;&#12290;&#20294;&#26159;&#19982;&#21407;&#22987;&#30340;&#21517;&#20026; <code class="varname">li</code> &#30340; list &#19981;&#21516;&#65292;&#23427;&#26159;&#19968;&#20010;&#26032; list&#65292;&#24688;&#22909;&#25317;&#26377;&#19982; <code class="varname">li</code> &#19968;&#26679;&#30340;&#20840;&#37096;&#20803;&#32032;&#12290;<code class="literal">li[:]</code> &#26159;&#29983;&#25104;&#19968;&#20010; list &#23436;&#20840;&#25335;&#36125;&#30340;&#19968;&#20010;&#31616;&#20889;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e6029"></a>3.2.2.&nbsp;&#21521; list &#20013;&#22686;&#21152;&#20803;&#32032;</h3></div></div></div><div class="example"><a name="d0e6032"></a><p class="title"><b>&#20363;&nbsp;3.10.&nbsp;&#21521; list &#20013;&#22686;&#21152;&#20803;&#32032;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'z', 'example']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.append("new")</span>               <a name="odbchelper.list.5.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'z', 'example', 'new']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.insert(2, "new")</span>            <a name="odbchelper.list.5.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.extend(["two", "elements"])</span> <a name="odbchelper.list.5.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.5.1">circled_1_delcric</a> </dt><dd><code class="function">append</code> &#21521; list &#30340;&#26411;&#23614;&#36861;&#21152;&#21333;&#20010;&#20803;&#32032;&#12290;</dd><dt><a href="#odbchelper.list.5.2">circled_2_delcric</a> </dt><dd><code class="function">insert</code> &#23558;&#21333;&#20010;&#20803;&#32032;&#25554;&#20837;&#21040; list &#20013;&#12290;&#25968;&#20540;&#21442;&#25968;&#26159;&#25554;&#20837;&#28857;&#30340;&#32034;&#24341;&#12290;&#35831;&#27880;&#24847;&#65292;list &#20013;&#30340;&#20803;&#32032;&#19981;&#24517;&#21807;&#19968;&#65292;&#29616;&#22312;&#26377;&#20004;&#20010;&#29420;&#31435;&#30340;&#20803;&#32032;&#20855;&#26377; <code class="literal">'new'</code> &#36825;&#20010;&#20540;&#65292;<code class="literal">li[2]</code> &#21644; <code class="literal">li[6]</code>&#12290;</dd><dt><a href="#odbchelper.list.5.3">circled_3_delcric</a> </dt><dd><code class="function">extend</code> &#29992;&#26469;&#36830;&#25509; list&#12290;&#35831;&#27880;&#24847;&#19981;&#35201;&#20351;&#29992;&#22810;&#20010;&#21442;&#25968;&#26469;&#35843;&#29992; <code class="function">extend</code>&#65292;&#35201;&#20351;&#29992;&#19968;&#20010; list &#21442;&#25968;&#36827;&#34892;&#35843;&#29992;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#36825;&#20010; list &#26377;&#20004;&#20010;&#20803;&#32032;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="odbchelper.list.append.vs.extend"></a><p class="title"><b>&#20363;&nbsp;3.11.&nbsp;<code class="function">extend</code> (&#25193;&#23637;) &#19982; <code class="function">append</code> (&#36861;&#21152;) &#30340;&#24046;&#21035;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ['a', 'b', 'c']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.extend(['d', 'e', 'f'])</span> <a name="odbchelper.list.5.4"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'c', 'd', 'e', 'f']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">len(li)</span>                    <a name="odbchelper.list.5.5"></a>circled_2_delcric
<font color="teal">6</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[-1]</span>
<font color="teal">'f'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ['a', 'b', 'c']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.append(['d', 'e', 'f'])</span> <a name="odbchelper.list.5.6"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'c', ['d', 'e', 'f']]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">len(li)</span>                    <a name="odbchelper.list.5.7"></a>circled_4_delcric
<font color="teal">4</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li[-1]</span>
<font color="teal">['d', 'e', 'f']</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.5.4">circled_1_delcric</a> </dt><dd>Lists &#30340;&#20004;&#20010;&#26041;&#27861; <code class="function">extend</code> &#21644; <code class="function">append</code> &#30475;&#36215;&#26469;&#31867;&#20284;&#65292;&#20294;&#23454;&#38469;&#19978;&#23436;&#20840;&#19981;&#21516;&#12290;<code class="function">extend</code> &#25509;&#21463;&#19968;&#20010;&#21442;&#25968;&#65292;&#36825;&#20010;&#21442;&#25968;&#24635;&#26159;&#19968;&#20010; list&#65292;&#24182;&#19988;&#25226;&#36825;&#20010; list &#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#28155;&#21152;&#21040;&#21407; list &#20013;&#12290;</dd><dt><a href="#odbchelper.list.5.5">circled_2_delcric</a> </dt><dd>&#22312;&#36825;&#37324; list &#20013;&#26377; 3 &#20010;&#20803;&#32032; (<code class="literal">'a'</code>&#12289;<code class="literal">'b'</code> &#21644; <code class="literal">'c'</code>)&#65292;&#24182;&#19988;&#20351;&#29992;&#21478;&#19968;&#20010;&#26377; 3 &#20010;&#20803;&#32032; (<code class="literal">'d'</code>&#12289;<code class="literal">'e'</code> &#21644; <code class="literal">'f'</code>) &#30340; list &#25193;&#23637;&#20043;&#65292;&#22240;&#27492;&#26032;&#30340; list &#20013;&#26377; 6 &#20010;&#20803;&#32032;&#12290;</dd><dt><a href="#odbchelper.list.5.6">circled_3_delcric</a> </dt><dd>&#21478;&#19968;&#26041;&#38754;&#65292;<code class="function">append</code> &#25509;&#21463;&#19968;&#20010;&#21442;&#25968;&#65292;&#36825;&#20010;&#21442;&#25968;&#21487;&#20197;&#26159;&#20219;&#20309;&#25968;&#25454;&#31867;&#22411;&#65292;&#24182;&#19988;&#31616;&#21333;&#22320;&#36861;&#21152;&#21040; list &#30340;&#23614;&#37096;&#12290;&#22312;&#36825;&#37324;&#20351;&#29992;&#19968;&#20010;&#21547;&#26377; 3 &#20010;&#20803;&#32032;&#30340; list &#21442;&#25968;&#35843;&#29992; <code class="function">append</code> &#26041;&#27861;&#12290;</dd><dt><a href="#odbchelper.list.5.7">circled_4_delcric</a> </dt><dd>&#21407;&#26469;&#21253;&#21547; 3 &#20010;&#20803;&#32032;&#30340; list &#29616;&#22312;&#21253;&#21547; 4 &#20010;&#20803;&#32032;&#12290;&#20026;&#20160;&#20040;&#26159; 4 &#20010;&#20803;&#32032;&#21602;&#65311;&#22240;&#20026;&#21018;&#21018;&#36861;&#21152;&#30340;&#26368;&#21518;&#19968;&#20010;&#20803;&#32032;<span class="emphasis"><em>&#26412;&#36523;&#26159;&#20010; list</em></span>&#12290;List &#21487;&#20197;&#21253;&#21547;&#20219;&#20309;&#31867;&#22411;&#30340;&#25968;&#25454;&#65292;&#20063;&#21253;&#25324;&#20854;&#20182;&#30340; list&#12290;&#36825;&#25110;&#35768;&#26159;&#24744;&#25152;&#35201;&#30340;&#32467;&#26524;&#65292;&#25110;&#35768;&#19981;&#26159;&#12290;&#22914;&#26524;&#24744;&#30340;&#24847;&#22270;&#26159; <code class="function">extend</code>&#65292;&#35831;&#19981;&#35201;&#20351;&#29992; <code class="function">append</code>&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e6257"></a>3.2.3.&nbsp;&#22312; list &#20013;&#25628;&#32034;</h3></div></div></div><div class="example"><a name="odbchelper.list.search"></a><p class="title"><b>&#20363;&nbsp;3.12.&nbsp;&#25628;&#32034; list</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.index("example")</span> <a name="odbchelper.list.6.1"></a>circled_1_delcric
<font color="teal">5</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.index("new")</span>     <a name="odbchelper.list.6.2"></a>circled_2_delcric
<font color="teal">2</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.index("c")</span>       <a name="odbchelper.list.6.3"></a>circled_3_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
ValueError: list.index(x): x not in list</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">"c" in li</span>           <a name="odbchelper.list.6.4"></a>circled_4_delcric
<font color="teal">False</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.6.1">circled_1_delcric</a> </dt><dd><code class="function">index</code> &#22312; list &#20013;&#26597;&#25214;&#19968;&#20010;&#20540;&#30340;&#39318;&#27425;&#20986;&#29616;&#24182;&#36820;&#22238;&#32034;&#24341;&#20540;&#12290;</dd><dt><a href="#odbchelper.list.6.2">circled_2_delcric</a> </dt><dd><code class="function">index</code> &#22312; list &#20013;&#26597;&#25214;&#19968;&#20010;&#20540;&#30340;<span class="emphasis"><em>&#39318;&#27425;</em></span> &#20986;&#29616;&#12290;&#36825;&#37324; <code class="literal">'new'</code> &#22312; list &#20013;&#20986;&#29616;&#20102;&#20004;&#27425;&#65292;&#22312; <code class="literal">li[2]</code> &#21644; <code class="literal">li[6]</code>&#65292;&#20294; <code class="function">index</code> &#21482;&#36820;&#22238;&#31532;&#19968;&#20010;&#32034;&#24341;&#65292;<code class="literal">2</code>&#12290;</dd><dt><a href="#odbchelper.list.6.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#22312; list &#20013;&#27809;&#26377;&#25214;&#21040;&#20540;&#65292;<span class="application">Python</span> &#20250;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#12290;&#36825;&#19968;&#28857;&#19982;&#22823;&#37096;&#20998;&#30340;&#35821;&#35328;&#25130;&#28982;&#19981;&#21516;&#65292;&#22823;&#37096;&#20998;&#35821;&#35328;&#20250;&#36820;&#22238;&#26576;&#20010;&#26080;&#25928;&#32034;&#24341;&#12290;&#23613;&#31649;&#36825;&#31181;&#22788;&#29702;&#21487;&#33021;&#20196;&#20154;&#35752;&#21388;&#65292;&#20294;&#23427;&#20173;&#28982;&#26159;&#20214;&#22909;&#20107;&#65292;&#22240;&#20026;&#23427;&#35828;&#26126;&#24744;&#30340;&#31243;&#24207;&#20250;&#30001;&#20110;&#28304;&#20195;&#30721;&#30340;&#38382;&#39064;&#32780;&#23849;&#28291;&#65292;&#22909;&#20110;&#22312;&#21518;&#38754;&#24403;&#24744;&#20351;&#29992;&#26080;&#25928;&#32034;&#24341;&#32780;&#24341;&#36215;&#23849;&#28291;&#12290;</dd><dt><a href="#odbchelper.list.6.4">circled_4_delcric</a> </dt><dd>&#35201;&#27979;&#35797;&#19968;&#20010;&#20540;&#26159;&#21542;&#22312; list &#20869;&#65292;&#20351;&#29992; <code class="function">in</code>&#12290;&#22914;&#26524;&#20540;&#23384;&#22312;&#65292;&#23427;&#36820;&#22238; <code class="constant">True</code>&#65292;&#21542;&#21017;&#36820;&#20026; <code class="constant">False</code> &#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="tip.boolean">&#27880;&#24847;: &#20309;&#35859; <span class="application">Python</span> &#20013;&#30340; True &#65311;</a></b><br>&#22312; 2.2.1 &#29256;&#26412;&#20043;&#21069;&#65292;<span class="application">Python</span> &#27809;&#26377;&#21333;&#29420;&#30340;&#24067;&#23572;&#25968;&#25454;&#31867;&#22411;&#12290;&#20026;&#20102;&#24357;&#34917;&#36825;&#20010;&#32570;&#38519;&#65292;<span class="application">Python</span> &#22312;&#24067;&#23572;&#29615;&#22659; (&#22914; <code class="literal">if</code> &#35821;&#21477;) &#20013;&#20960;&#20046;&#25509;&#21463;&#25152;&#26377;&#19996;&#35199;&#65292;&#36981;&#24490;&#19979;&#38754;&#30340;&#35268;&#21017;&#65306;<div class="itemizedlist"><ul><li><code class="constant">0</code> &#20026; false; &#20854;&#23427;&#25152;&#26377;&#25968;&#20540;&#30342;&#20026; true&#12290;</li><li>&#31354;&#20018; (<code class="literal">""</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377;&#23383;&#31526;&#20018;&#30342;&#20026; true&#12290;</li><li>&#31354; list (<code class="literal">[]</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377; list &#30342;&#20026; true&#12290;</li><li>&#31354; tuple (<code class="literal">()</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377; tuple &#30342;&#20026; true&#12290;</li><li>&#31354; dictionary (<code class="literal">{}</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377; dictionary &#30342;&#20026; true&#12290;</li></ul></div>&#36825;&#20123;&#35268;&#21017;&#20173;&#28982;&#36866;&#29992;&#20110; <span class="application">Python</span> 2.2.1 &#21450;&#20854;&#21518;&#32493;&#29256;&#26412;&#65292;&#20294;&#29616;&#22312;&#24744;&#20063;&#21487;&#20197;&#20351;&#29992;&#30495;&#27491;&#30340;&#24067;&#23572;&#20540;&#65292;&#23427;&#30340;&#20540;&#25110;&#32773;&#20026; <code class="literal">True</code> &#25110;&#32773;&#20026; <code class="literal">False</code>&#12290;&#35831;&#27880;&#24847;&#31532;&#19968;&#20010;&#23383;&#27597;&#26159;&#22823;&#20889;&#30340;&#65307;&#36825;&#20123;&#20540;&#22914;&#21516;&#22312; <span class="application">Python</span> &#20013;&#30340;&#20854;&#23427;&#19996;&#35199;&#19968;&#26679;&#37117;&#26159;&#22823;&#23567;&#20889;&#25935;&#24863;&#30340;&#12290;</blockquote></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e6419"></a>3.2.4.&nbsp;&#20174; list &#20013;&#21024;&#38500;&#20803;&#32032;</h3></div></div></div><div class="example"><a name="odbchelper.list.removingelements"></a><p class="title"><b>&#20363;&nbsp;3.13.&nbsp;&#20174; list &#20013;&#21024;&#38500;&#20803;&#32032;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.remove("z")</span>   <a name="odbchelper.list.7.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'new', 'mpilgrim', 'example', 'new', 'two', 'elements']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.remove("new")</span> <a name="odbchelper.list.7.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'example', 'new', 'two', 'elements']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.remove("c")</span>   <a name="odbchelper.list.7.3"></a>circled_3_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
ValueError: list.remove(x): x not in list</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.pop()</span>         <a name="odbchelper.list.7.4"></a>circled_4_delcric
<font color="teal">'elements'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'example', 'new', 'two']</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.7.1">circled_1_delcric</a> </dt><dd><code class="function">remove</code> &#20174; list &#20013;&#21024;&#38500;&#19968;&#20010;&#20540;&#30340;&#39318;&#27425;&#20986;&#29616;&#12290;</dd><dt><a href="#odbchelper.list.7.2">circled_2_delcric</a> </dt><dd><code class="function">remove</code> <span class="emphasis"><em>&#20165;&#20165;</em></span> &#21024;&#38500;&#19968;&#20010;&#20540;&#30340;&#39318;&#27425;&#20986;&#29616;&#12290;&#22312;&#36825;&#37324;&#65292;<code class="literal">'new'</code> &#22312; list &#20013;&#20986;&#29616;&#20102;&#20004;&#27425;&#65292;&#20294; <code class="literal">li.remove("new")</code> &#21482;&#21024;&#38500;&#20102; <code class="literal">'new'</code> &#30340;&#39318;&#27425;&#20986;&#29616;&#12290;</dd><dt><a href="#odbchelper.list.7.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#22312; list &#20013;&#27809;&#26377;&#25214;&#21040;&#20540;&#65292;<span class="application">Python</span> &#20250;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#26469;&#21709;&#24212; <code class="function">index</code> &#26041;&#27861;&#12290;</dd><dt><a href="#odbchelper.list.7.4">circled_4_delcric</a> </dt><dd><code class="function">pop</code> &#26159;&#19968;&#20010;&#26377;&#36259;&#30340;&#19996;&#35199;&#12290;&#23427;&#20250;&#20570;&#20004;&#20214;&#20107;&#65306;&#21024;&#38500; list &#30340;&#26368;&#21518;&#19968;&#20010;&#20803;&#32032;&#65292;&#28982;&#21518;&#36820;&#22238;&#21024;&#38500;&#20803;&#32032;&#30340;&#20540;&#12290;&#35831;&#27880;&#24847;&#65292;&#36825;&#19982; <code class="literal">li[-1]</code> &#19981;&#21516;&#65292;&#21518;&#32773;&#36820;&#22238;&#19968;&#20010;&#20540;&#20294;&#19981;&#25913;&#21464; list &#26412;&#36523;&#12290;&#20063;&#19981;&#21516;&#20110; <code class="literal">li.remove(<em class="replaceable">value</em>)</code>&#65292;&#21518;&#32773;&#25913;&#21464; list &#20294;&#24182;&#19981;&#36820;&#22238;&#20540;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e6537"></a>3.2.5.&nbsp;&#20351;&#29992; list &#30340;&#36816;&#31639;&#31526;</h3></div></div></div><div class="example"><a name="odbchelper.list.operators"></a><p class="title"><b>&#20363;&nbsp;3.14.&nbsp;List &#36816;&#31639;&#31526;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ['a', 'b', 'mpilgrim']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = li + ['example', 'new']</span> <a name="odbchelper.list.8.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'example', 'new']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li += ['two']</span>                <a name="odbchelper.list.8.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">['a', 'b', 'mpilgrim', 'example', 'new', 'two']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = [1, 2] * 3</span>              <a name="odbchelper.list.8.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">[1, 2, 1, 2, 1, 2]</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.list.8.1">circled_1_delcric</a> </dt><dd>Lists &#20063;&#21487;&#20197;&#29992; <code class="literal">+</code> &#36816;&#31639;&#31526;&#36830;&#25509;&#36215;&#26469;&#12290;<code class="literal"><em class="replaceable">list</em> = <em class="replaceable">list</em> + <em class="replaceable">otherlist</em></code> &#30456;&#24403;&#20110; <code class="literal"><em class="replaceable">list</em>.extend(<em class="replaceable">otherlist</em>)</code>&#12290;&#20294; <code class="literal">+</code> &#36816;&#31639;&#31526;&#25226;&#19968;&#20010;&#26032; (&#36830;&#25509;&#21518;) &#30340; list &#20316;&#20026;&#20540;&#36820;&#22238;&#65292;&#32780; <code class="function">extend</code> &#21482;&#20462;&#25913;&#23384;&#22312;&#30340; list&#12290;&#20063;&#23601;&#26159;&#35828;&#65292;&#23545;&#20110;&#22823;&#22411; list &#26469;&#35828;&#65292;<code class="function">extend</code> &#30340;&#25191;&#34892;&#36895;&#24230;&#35201;&#24555;&#19968;&#20123;&#12290;</dd><dt><a href="#odbchelper.list.8.2">circled_2_delcric</a> </dt><dd><span class="application">Python</span> &#25903;&#25345; <code class="literal">+=</code> &#36816;&#31639;&#31526;&#12290;<code class="literal">li += ['two']</code> &#31561;&#21516;&#20110; <code class="literal">li.extend(['two'])</code>&#12290;<code class="literal">+=</code> &#36816;&#31639;&#31526;&#21487;&#29992;&#20110; list&#12289;&#23383;&#31526;&#20018;&#21644;&#25972;&#25968;&#65292;&#24182;&#19988;&#23427;&#20063;&#21487;&#20197;&#34987;&#37325;&#36733;&#29992;&#20110;&#29992;&#25143;&#33258;&#23450;&#20041;&#30340;&#31867;&#20013; (&#26356;&#22810;&#20851;&#20110;&#31867;&#30340;&#20869;&#23481;&#21442;&#35265; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532; 5 &#31456;</a>)&#12290;</dd><dt><a href="#odbchelper.list.8.3">circled_3_delcric</a> </dt><dd><code class="literal">*</code> &#36816;&#31639;&#31526;&#21487;&#20197;&#20316;&#20026;&#19968;&#20010;&#37325;&#22797;&#22120;&#20316;&#29992;&#20110; list&#12290;<code class="literal">li = [1, 2] * 3</code> &#31561;&#21516;&#20110; <code class="literal">li = [1, 2] + [1, 2] + [1, 2]</code>&#65292;&#21363;&#23558;&#19977;&#20010; list &#36830;&#25509;&#25104;&#19968;&#20010;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#35762;&#36848;&#20102;list&#65292;&#24182;&#19988;&#37325;&#28857;&#35762;&#36848;&#20102;&#22914;&#20309;&#25226; list &#20316;&#20026;&#20989;&#25968;&#21442;&#25968;&#20256;&#36882; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap08.htm">http://www.ibiblio.org/obp/thinkCSpy/chap08.htm</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#25226; list &#20316;&#20026;&#22534;&#26632;&#21644;&#38431;&#21015;&#20351;&#29992; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007110000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007110000000000000000</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#26377;&#20851; list &#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/534">http://www.faqts.com/knowledge-base/index.phtml/fid/534</a>)&#24182;&#19988;&#26377;&#35768;&#22810;&#20351;&#29992; list &#30340;&#31034;&#20363;&#20195;&#30721; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/540">http://www.faqts.com/knowledge-base/index.phtml/fid/540</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#30340; list &#26041;&#27861; (<a href="http://www.python.org/doc/current/lib/typesseq-mutable.html">http://www.python.org/doc/current/lib/typesseq-mutable.html</a>)&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.tuple"></a>3.3.&nbsp;Tuple &#20171;&#32461;</h2></div></div></div><div class="abstract"><p>Tuple &#26159;&#19981;&#21487;&#21464;&#30340; list&#12290;&#19968;&#26086;&#21019;&#24314;&#20102;&#19968;&#20010; tuple&#65292;&#23601;&#19981;&#33021;&#20197;&#20219;&#20309;&#26041;&#24335;&#25913;&#21464;&#23427;&#12290;</p></div><div class="example"><a name="d0e6712"></a><p class="title"><b>&#20363;&nbsp;3.15.&nbsp;&#23450;&#20041; tuple</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t = ("a", "b", "mpilgrim", "z", "example")</span> <a name="odbchelper.tuple.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t</span>
<font color="teal">('a', 'b', 'mpilgrim', 'z', 'example')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t[0]</span>                                       <a name="odbchelper.tuple.1.2"></a>circled_2_delcric
<font color="teal">'a'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t[-1]</span>                                      <a name="odbchelper.tuple.1.3"></a>circled_3_delcric
<font color="teal">'example'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t[1:3]</span>                                     <a name="odbchelper.tuple.1.4"></a>circled_4_delcric
<font color="teal">('b', 'mpilgrim')</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.tuple.1.1">circled_1_delcric</a> </dt><dd>&#23450;&#20041; tuple &#19982;&#23450;&#20041; list &#30340;&#26041;&#24335;&#30456;&#21516;&#65292;&#20294;&#25972;&#20010;&#20803;&#32032;&#38598;&#26159;&#29992;&#23567;&#25324;&#21495;&#21253;&#22260;&#30340;&#65292;&#32780;&#19981;&#26159;&#26041;&#25324;&#21495;&#12290;</dd><dt><a href="#odbchelper.tuple.1.2">circled_2_delcric</a> </dt><dd>Tuple &#30340;&#20803;&#32032;&#19982; list &#19968;&#26679;&#25353;&#23450;&#20041;&#30340;&#27425;&#24207;&#36827;&#34892;&#25490;&#24207;&#12290;Tuples &#30340;&#32034;&#24341;&#19982; list &#19968;&#26679;&#20174; 0 &#24320;&#22987;&#65292;&#25152;&#20197;&#19968;&#20010;&#38750;&#31354; tuple &#30340;&#31532;&#19968;&#20010;&#20803;&#32032;&#24635;&#26159; <code class="literal">t[0]</code>&#12290;</dd><dt><a href="#odbchelper.tuple.1.3">circled_3_delcric</a> </dt><dd>&#36127;&#25968;&#32034;&#24341;&#19982; list &#19968;&#26679;&#20174; tuple &#30340;&#23614;&#37096;&#24320;&#22987;&#35745;&#25968;&#12290;</dd><dt><a href="#odbchelper.tuple.1.4">circled_4_delcric</a> </dt><dd>&#19982; list &#19968;&#26679;&#20998;&#29255; (slice) &#20063;&#21487;&#20197;&#20351;&#29992;&#12290;&#27880;&#24847;&#24403;&#20998;&#21106;&#19968;&#20010; list &#26102;&#65292;&#20250;&#24471;&#21040;&#19968;&#20010;&#26032;&#30340; list &#65307;&#24403;&#20998;&#21106;&#19968;&#20010; tuple &#26102;&#65292;&#20250;&#24471;&#21040;&#19968;&#20010;&#26032;&#30340; tuple&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="odbchelper.tuplemethods"></a><p class="title"><b>&#20363;&nbsp;3.16.&nbsp;Tuple &#27809;&#26377;&#26041;&#27861;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t</span>
<font color="teal">('a', 'b', 'mpilgrim', 'z', 'example')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t.append("new")</span>    <a name="odbchelper.tuple.2.1"></a>circled_1_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t.remove("z")</span>      <a name="odbchelper.tuple.2.2"></a>circled_2_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t.index("example")</span> <a name="odbchelper.tuple.2.3"></a>circled_3_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
AttributeError: 'tuple' object has no attribute 'index'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">"z" in t</span>           <a name="odbchelper.tuple.2.4"></a>circled_4_delcric
<font color="teal">True</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.tuple.2.1">circled_1_delcric</a> </dt><dd>&#24744;&#19981;&#33021;&#21521; tuple &#22686;&#21152;&#20803;&#32032;&#12290;Tuple &#27809;&#26377; <code class="function">append</code> &#25110; <code class="function">extend</code> &#26041;&#27861;&#12290;</dd><dt><a href="#odbchelper.tuple.2.2">circled_2_delcric</a> </dt><dd>&#24744;&#19981;&#33021;&#20174; tuple &#21024;&#38500;&#20803;&#32032;&#12290;Tuple &#27809;&#26377; <code class="function">remove</code> &#25110; <code class="function">pop</code> &#26041;&#27861;&#12290;</dd><dt><a href="#odbchelper.tuple.2.3">circled_3_delcric</a> </dt><dd>&#24744;&#19981;&#33021;&#22312; tuple &#20013;&#26597;&#25214;&#20803;&#32032;&#12290;Tuple &#27809;&#26377; <code class="function">index</code> &#26041;&#27861;&#12290;</dd><dt><a href="#odbchelper.tuple.2.4">circled_4_delcric</a> </dt><dd>&#28982;&#32780;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992; <code class="function">in</code> &#26469;&#26597;&#30475;&#19968;&#20010;&#20803;&#32032;&#26159;&#21542;&#23384;&#22312;&#20110; tuple &#20013;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#20351;&#29992; tuple &#26377;&#20160;&#20040;&#22909;&#22788;&#21602;&#65311;</p><div class="itemizedlist"><ul><li>Tuple &#27604; list &#25805;&#20316;&#36895;&#24230;&#24555;&#12290;&#22914;&#26524;&#24744;&#23450;&#20041;&#20102;&#19968;&#20010;&#20540;&#30340;&#24120;&#37327;&#38598;&#65292;&#24182;&#19988;&#21807;&#19968;&#35201;&#29992;&#23427;&#20570;&#30340;&#26159;&#19981;&#26029;&#22320;&#36941;&#21382;&#23427;&#65292;&#35831;&#20351;&#29992; tuple &#20195;&#26367; list&#12290;</li><li>&#22914;&#26524;&#23545;&#19981;&#38656;&#35201;&#20462;&#25913;&#30340;&#25968;&#25454;&#36827;&#34892; "<span class="quote">&#20889;&#20445;&#25252;</span>"&#65292;&#21487;&#20197;&#20351;&#20195;&#30721;&#26356;&#23433;&#20840;&#12290;&#20351;&#29992; tuple &#32780;&#19981;&#26159; list &#22914;&#21516;&#25317;&#26377;&#19968;&#20010;&#38544;&#21547;&#30340; <code class="literal">assert</code> &#35821;&#21477;&#65292;&#35828;&#26126;&#36825;&#19968;&#25968;&#25454;&#26159;&#24120;&#37327;&#12290;&#22914;&#26524;&#24517;&#39035;&#35201;&#25913;&#21464;&#36825;&#20123;&#20540;&#65292;&#21017;&#38656;&#35201;&#25191;&#34892; tuple &#21040; list &#30340;&#36716;&#25442; (&#38656;&#35201;&#20351;&#29992;&#19968;&#20010;&#29305;&#27530;&#30340;&#20989;&#25968;)&#12290;</li><li>&#36824;&#35760;&#24471;&#25105;&#35828;&#36807; <a class="link" href="#odbchelper.dictionarytypes" title="&#20363;&nbsp;3.4.&nbsp;&#22312; dictionary &#20013;&#28151;&#29992;&#25968;&#25454;&#31867;&#22411;">dictionary keys</a> &#21487;&#20197;&#26159;&#23383;&#31526;&#20018;&#65292;&#25972;&#25968;&#21644; "<span class="quote">&#20854;&#23427;&#20960;&#31181;&#31867;&#22411;</span>"&#21527;&#65311;Tuples &#23601;&#26159;&#36825;&#20123;&#31867;&#22411;&#20043;&#19968;&#12290;Tuples &#21487;&#20197;&#22312; dictionary &#20013;&#34987;&#29992;&#20570; key&#65292;&#20294;&#26159; list &#19981;&#34892;&#12290;&#23454;&#38469;&#19978;&#65292;&#20107;&#24773;&#35201;&#27604;&#36825;&#26356;&#22797;&#26434;&#12290;Dictionary key &#24517;&#39035;&#26159;&#19981;&#21487;&#21464;&#30340;&#12290;Tuple &#26412;&#36523;&#26159;&#19981;&#21487;&#25913;&#21464;&#30340;&#65292;&#20294;&#26159;&#22914;&#26524;&#24744;&#26377;&#19968;&#20010; list &#30340; tuple&#65292;&#37027;&#23601;&#35748;&#20026;&#26159;&#21487;&#21464;&#30340;&#20102;&#65292;&#29992;&#20570; dictionary key &#23601;&#26159;&#19981;&#23433;&#20840;&#30340;&#12290;&#21482;&#26377;&#23383;&#31526;&#20018;&#12289;&#25972;&#25968;&#25110;&#20854;&#23427;&#23545; dictionary &#23433;&#20840;&#30340; tuple &#25165;&#21487;&#20197;&#29992;&#20316; dictionary key&#12290;</li><li>Tuples &#21487;&#20197;&#29992;&#22312;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#20013;&#65292;&#25105;&#20204;&#20250;&#24456;&#24555;&#30475;&#21040;&#12290;</li></ul></div><div class="note"><blockquote><b class="title"><a name="tip.tuple">&#27880;&#24847;: Tuple &#21040; list &#20877;&#21040; tuple</a></b><br>Tuple &#21487;&#20197;&#36716;&#25442;&#25104; list&#65292;&#21453;&#20043;&#20134;&#28982;&#12290;&#20869;&#32622;&#30340; <code class="function">tuple</code> &#20989;&#25968;&#25509;&#25910;&#19968;&#20010; list&#65292;&#24182;&#36820;&#22238;&#19968;&#20010;&#26377;&#30528;&#30456;&#21516;&#20803;&#32032;&#30340; tuple&#12290;&#32780; <code class="function">list</code> &#20989;&#25968;&#25509;&#25910;&#19968;&#20010; tuple &#36820;&#22238;&#19968;&#20010; list&#12290;&#20174;&#25928;&#26524;&#19978;&#30475;&#65292;<code class="function">tuple</code> &#20923;&#32467;&#19968;&#20010; list&#65292;&#32780; <code class="function">list</code> &#35299;&#20923;&#19968;&#20010; tuple&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#35762;&#35299;&#20102; tuple &#24182;&#19988;&#23637;&#31034;&#20102;&#22914;&#20309;&#36830;&#25509; tuple (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap10.htm">http://www.ibiblio.org/obp/thinkCSpy/chap10.htm</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#23545;&#19968;&#20010; tuple &#25490;&#24207; (<a href="http://www.faqts.com/knowledge-base/view.phtml/aid/4553/fid/587">http://www.faqts.com/knowledge-base/view.phtml/aid/4553/fid/587</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#23450;&#20041;&#19968;&#20010;&#21482;&#21253;&#21547;&#19968;&#20010;&#20803;&#32032;&#30340; tuple (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007300000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007300000000000000000</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.vardef"></a>3.4.&nbsp;&#21464;&#37327;&#22768;&#26126;</h2></div></div></div><p>&#29616;&#22312;&#24744;&#24050;&#32463;&#20102;&#35299;&#20102;&#26377;&#20851; dictionary&#12289;tuple&#12289;&#21644; list &#30340;&#30456;&#20851;&#30693;&#35782; (&#21734;&#65292;&#25105;&#30340;&#32769;&#22825;&#65281;)&#65292;&#35753;&#25105;&#20204;&#22238;&#21040; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532; 2 &#31456;</a> &#30340;&#20363;&#23376;&#31243;&#24207; <code class="filename">odbchelper.py</code>&#12290;</p><div class="abstract"><p><span class="application">Python</span> &#19982;&#22823;&#22810;&#25968;&#20854;&#23427;&#35821;&#35328;&#19968;&#26679;&#26377;&#23616;&#37096;&#21464;&#37327;&#21644;&#20840;&#23616;&#21464;&#37327;&#20043;&#20998;&#65292;&#20294;&#26159;&#23427;&#27809;&#26377;&#26126;&#26174;&#30340;&#21464;&#37327;&#22768;&#26126;&#12290;&#21464;&#37327;&#36890;&#36807;&#39318;&#27425;&#36171;&#20540;&#20135;&#29983;&#65292;&#24403;&#36229;&#20986;&#20316;&#29992;&#33539;&#22260;&#26102;&#33258;&#21160;&#28040;&#20129;&#12290;</p></div><div class="example"><a name="myparamsdef"></a><p class="title"><b>&#20363;&nbsp;3.17.&nbsp;&#23450;&#20041; <code class="varname">myParams</code> &#21464;&#37327;</b></p><div class="example-contents"><pre class="programlisting">
if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }</pre></div></div><br class="example-break"><p>&#39318;&#20808;&#27880;&#24847;&#32553;&#36827;&#12290;<code class="literal">if</code> &#35821;&#21477;&#26159;&#20195;&#30721;&#22359;&#65292;&#38656;&#35201;&#20687;&#20989;&#25968;&#19968;&#26679;&#32553;&#36827;&#12290;</p><p>&#20854;&#27425;&#65292;&#21464;&#37327;&#30340;&#36171;&#20540;&#26159;&#19968;&#26465;&#34987;&#20998;&#25104;&#20102;&#22810;&#34892;&#30340;&#21629;&#20196;&#65292;&#29992;&#21453;&#26012;&#32447; ("<span class="quote"><code class="literal">\</code></span>") &#20316;&#20026;&#32493;&#34892;&#31526;&#12290;</p><div class="note"><blockquote><b class="title"><a name="tip.multiline">&#27880;&#24847;: &#20070;&#20889;&#22810;&#34892;&#21629;&#20196;</a></b><br>&#24403;&#19968;&#26465;&#21629;&#20196;&#29992;&#32493;&#34892;&#31526; ("<span class="quote"><code class="literal">\</code></span>") &#20998;&#21106;&#25104;&#22810;&#34892;&#26102;&#65292;&#21518;&#32493;&#30340;&#34892;&#21487;&#20197;&#20197;&#20219;&#20309;&#26041;&#24335;&#32553;&#36827;&#65292;&#27492;&#26102; <span class="application">Python</span> &#36890;&#24120;&#30340;&#20005;&#26684;&#30340;&#32553;&#36827;&#35268;&#21017;&#26080;&#38656;&#36981;&#23432;&#12290;&#22914;&#26524;&#24744;&#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#33258;&#30001;&#23545;&#21518;&#32493;&#34892;&#36827;&#34892;&#20102;&#32553;&#36827;&#65292;&#24744;&#24212;&#35813;&#25226;&#23427;&#24403;&#25104;&#26159;&#32570;&#30465;&#22788;&#29702;&#65292;&#38500;&#38750;&#24744;&#26377;&#29305;&#21035;&#30340;&#21407;&#22240;&#19981;&#36825;&#20040;&#20570;&#12290;</blockquote></div><p><a name="tip.implicitmultiline"></a>&#20005;&#26684;&#22320;&#35762;&#65292;&#22312;&#23567;&#25324;&#21495;&#65292;&#26041;&#25324;&#21495;&#25110;&#22823;&#25324;&#21495;&#20013;&#30340;&#34920;&#36798;&#24335; (&#22914;<a class="link" href="#myparamsdef" title="&#20363;&nbsp;3.17.&nbsp;&#23450;&#20041; myParams &#21464;&#37327;">&#23450;&#20041;&#19968;&#20010; dictionary</a>) &#21487;&#20197;&#29992;&#25110;&#32773;&#19981;&#29992;&#32493;&#34892;&#31526; ("<span class="quote"><code class="literal">\</code></span>") &#20998;&#21106;&#25104;&#22810;&#34892;&#12290;&#29978;&#33267;&#22312;&#19981;&#26159;&#24517;&#38656;&#30340;&#26102;&#20505;&#65292;&#25105;&#20063;&#21916;&#27426;&#20351;&#29992;&#32493;&#34892;&#31526;&#65292;&#22240;&#20026;&#25105;&#35748;&#20026;&#36825;&#26679;&#20250;&#35753;&#20195;&#30721;&#35835;&#36215;&#26469;&#26356;&#23481;&#26131;&#65292;&#20294;&#37027;&#21482;&#26159;&#39118;&#26684;&#38382;&#39064;&#12290;</p><p>&#31532;&#19977;&#65292;&#24744;&#20174;&#26410;&#22768;&#26126;&#36807;&#21464;&#37327; <code class="varname">myParams</code>&#65292;&#24744;&#21482;&#26159;&#32473;&#23427;&#36171;&#20102;&#19968;&#20010;&#20540;&#12290;&#36825;&#28857;&#23601;&#20687;&#26159; <span class="application">VBScript</span> &#27809;&#26377;&#35774;&#32622; <code class="option">option explicit</code> &#36873;&#39033;&#19968;&#26679;&#12290;&#24184;&#36816;&#30340;&#26159;&#65292;&#19982; <span class="application">VBScript</span> &#19981;&#21516;&#65292;<span class="application">Python</span> &#19981;&#20801;&#35768;&#24744;&#24341;&#29992;&#19968;&#20010;&#26410;&#34987;&#36171;&#20540;&#30340;&#21464;&#37327;&#65292;&#35797;&#22270;&#36825;&#26679;&#20570;&#20250;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e7017"></a>3.4.1.&nbsp;&#21464;&#37327;&#24341;&#29992;</h3></div></div></div><div class="example"><a name="odbchelper.unboundvariable"></a><p class="title"><b>&#20363;&nbsp;3.18.&nbsp;&#24341;&#29992;&#26410;&#36171;&#20540;&#30340;&#21464;&#37327;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">x</span>
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
NameError: There is no variable named 'x'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">x = 1</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">x</span>
<font color="teal">1</font></pre></div></div><br class="example-break"><p>&#36831;&#26089;&#26377;&#19968;&#22825;&#24744;&#20250;&#20026;&#27492;&#32780;&#24863;&#35874; <span class="application">Python</span> &#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="odbchelper.multiassign"></a>3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;</h3></div></div></div><p><span class="application">Python</span> &#20013;&#27604;&#36739; &#8220;&#37239;&#8221; &#30340;&#19968;&#31181;&#32534;&#31243;&#31616;&#20889;&#26159;&#20351;&#29992;&#24207;&#21015;&#26469;&#19968;&#27425;&#32473;&#22810;&#20010;&#21464;&#37327;&#36171;&#20540;&#12290;</p><div class="example"><a name="d0e7056"></a><p class="title"><b>&#20363;&nbsp;3.19.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">v = ('a', 'b', 'e')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">(x, y, z) = v</span>     <a name="odbchelper.multiassign.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">x</span>
<font color="teal">'a'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">y</span>
<font color="teal">'b'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">z</span>
<font color="teal">'e'</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.multiassign.1.1">circled_1_delcric</a> </dt><dd><code class="varname">v</code> &#26159;&#19968;&#20010;&#19977;&#20803;&#32032;&#30340; tuple&#65292;&#24182;&#19988; <code class="literal">(x, y, z)</code> &#26159;&#19968;&#20010;&#19977;&#21464;&#37327;&#30340; tuple&#12290;&#23558;&#19968;&#20010; tuple &#36171;&#20540;&#32473;&#21478;&#19968;&#20010; tuple&#65292;&#20250;&#25353;&#39034;&#24207;&#23558; <code class="varname">v</code> &#30340;&#27599;&#20010;&#20540;&#36171;&#20540;&#32473;&#27599;&#20010;&#21464;&#37327;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#31181;&#29992;&#27861;&#26377;&#35768;&#22810;&#31181;&#29992;&#36884;&#12290;&#25105;&#32463;&#24120;&#24819;&#35201;&#23558;&#19968;&#23450;&#33539;&#22260;&#30340;&#20540;&#36171;&#32473;&#22810;&#20010;&#21464;&#37327;&#12290;&#22312; <span class="application"><acronym class="acronym">C</acronym></span> &#35821;&#35328;&#20013;&#65292;&#21487;&#20197;&#20351;&#29992; <code class="literal">enum</code> &#31867;&#22411;&#65292;&#25163;&#24037;&#21015;&#20986;&#27599;&#20010;&#24120;&#37327;&#21644;&#20854;&#25152;&#23545;&#24212;&#30340;&#20540;&#65292;&#24403;&#20540;&#26159;&#36830;&#32493;&#30340;&#26102;&#20505;&#36825;&#19968;&#36807;&#31243;&#35753;&#20154;&#24863;&#21040;&#29305;&#21035;&#32321;&#29712;&#12290;&#32780;&#22312; <span class="application">Python</span> &#20013;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#20869;&#32622;&#30340; <code class="function">range</code> &#20989;&#25968;&#21644;&#22810;&#21464;&#37327;&#36171;&#20540;&#30340;&#26041;&#27861;&#26469;&#24555;&#36895;&#36827;&#34892;&#36171;&#20540;&#12290;</p><div class="example"><a name="odbchelper.multiassign.range"></a><p class="title"><b>&#20363;&nbsp;3.20.&nbsp;&#36830;&#32493;&#20540;&#36171;&#20540;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">rangecircled_7_delcric</span>                                                                    <a name="odbchelper.multiassign.2.1"></a>circled_1_delcric
<font color="teal">[0, 1, 2, 3, 4, 5, 6]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = rangecircled_7_delcric</span> <a name="odbchelper.multiassign.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">MONDAY</span>                                                                      <a name="odbchelper.multiassign.2.3"></a>circled_3_delcric
<font color="teal">0</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">TUESDAY</span>
<font color="teal">1</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">SUNDAY</span>
<font color="teal">6</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.multiassign.2.1">circled_1_delcric</a> </dt><dd>&#20869;&#32622;&#30340; <code class="function">range</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#20803;&#32032;&#20026;&#25972;&#25968;&#30340; list&#12290;&#36825;&#20010;&#20989;&#25968;&#30340;&#31616;&#21270;&#35843;&#29992;&#24418;&#24335;&#26159;&#25509;&#25910;&#19968;&#20010;&#19978;&#38480;&#20540;&#65292;&#28982;&#21518;&#36820;&#22238;&#19968;&#20010;&#21021;&#22987;&#20540;&#20174; 0 &#24320;&#22987;&#30340; list&#65292;&#23427;&#20381;&#27425;&#36882;&#22686;&#65292;&#30452;&#21040;&#20294;&#19981;&#21253;&#21547;&#19978;&#38480;&#20540;&#12290;(&#22914;&#26524;&#24744;&#24895;&#24847;&#65292;&#24744;&#21487;&#20197;&#20256;&#20837;&#20854;&#23427;&#30340;&#21442;&#25968;&#26469;&#25351;&#23450;&#19968;&#20010;&#38750; <code class="constant">0</code> &#30340;&#21021;&#22987;&#20540;&#21644;&#38750; <code class="constant">1</code> &#30340;&#27493;&#38271;&#12290;&#20063;&#21487;&#20197;&#20351;&#29992; <code class="literal">print range.__doc__</code> &#26469;&#20102;&#35299;&#26356;&#22810;&#30340;&#32454;&#33410;&#12290;)</dd><dt><a href="#odbchelper.multiassign.2.2">circled_2_delcric</a> </dt><dd><code class="varname">MONDAY</code>&#12289;<code class="varname">TUESDAY</code>&#12289;<code class="varname">WEDNESDAY</code>&#12289;<code class="varname">THURSDAY</code>&#12289;<code class="varname">FRIDAY</code>&#12289;<code class="varname">SATURDAY</code> &#21644; <code class="varname">SUNDAY</code> &#26159;&#25105;&#20204;&#23450;&#20041;&#30340;&#21464;&#37327;&#12290;(&#36825;&#20010;&#20363;&#23376;&#26469;&#33258; <code class="filename">calendar</code> &#27169;&#22359;&#12290;&#23427;&#26159;&#19968;&#20010;&#24456;&#26377;&#36259;&#30340;&#25171;&#21360;&#26085;&#21382;&#30340;&#23567;&#27169;&#22359;&#65292;&#20687; <acronym class="acronym">UNIX</acronym> &#30340; <code class="filename">cal</code> &#21629;&#20196;&#12290;&#36825;&#20010; <code class="filename">calendar</code> &#27169;&#22359;&#23450;&#20041;&#20102;&#19968;&#26143;&#26399;&#20013;&#27599;&#22825;&#30340;&#25972;&#25968;&#24120;&#37327;&#34920;&#31034;&#12290;)</dd><dt><a href="#odbchelper.multiassign.2.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#27599;&#20010;&#21464;&#37327;&#37117;&#25317;&#26377;&#20102;&#33258;&#24049;&#30340;&#20540;&#65306;<code class="varname">MONDAY</code> &#30340;&#20540;&#20026; <code class="constant">0</code>&#65292;<code class="varname">TUESDAY</code> &#30340;&#20540;&#20026; <code class="constant">1</code>&#65292;&#31561;&#31561;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#24744;&#20063;&#21487;&#20197;&#20351;&#29992;&#22810;&#21464;&#37327;&#36171;&#20540;&#26469;&#21019;&#24314;&#36820;&#22238;&#22810;&#20010;&#20540;&#30340;&#20989;&#25968;&#65292;&#21482;&#35201;&#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#25152;&#26377;&#20540;&#30340; tuple &#21363;&#21487;&#12290;&#35843;&#29992;&#32773;&#21487;&#20197;&#23558;&#20854;&#35270;&#20026;&#19968;&#20010; tuple&#65292;&#25110;&#23558;&#20540;&#36171;&#32473;&#29420;&#31435;&#30340;&#21464;&#37327;&#12290;&#35768;&#22810;&#26631;&#20934;&#30340; <span class="application">Python</span> &#24211;&#37117;&#26159;&#36825;&#26679;&#20570;&#30340;&#65292;&#21253;&#25324; <code class="filename">os</code> &#27169;&#22359;&#65292;&#25105;&#20204;&#23558;&#22312; <a class="xref" href="#filehandling" title="&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;">&#31532; 6 &#31456;</a> &#20013;&#35752;&#35770;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#23637;&#31034;&#20102;&#20160;&#20040;&#26102;&#20505;&#21487;&#20197;&#24573;&#30053;&#32493;&#34892;&#31526; (<a href="http://www.python.org/doc/current/ref/implicit-joining.html">http://www.python.org/doc/current/ref/implicit-joining.html</a>)&#21644;&#20160;&#20040;&#26102;&#20505;&#24744;&#38656;&#35201;&#20351;&#29992;&#32493;&#34892;&#31526; (<a href="http://www.python.org/doc/current/ref/explicit-joining.html">http://www.python.org/doc/current/ref/explicit-joining.html</a>)&#30340;&#20363;&#23376;&#12290;</li><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#28436;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#22810;&#21464;&#37327;&#36171;&#20540;&#26469;&#20132;&#25442;&#20004;&#20010;&#21464;&#37327;&#30340;&#20540; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap09.htm">http://www.ibiblio.org/obp/thinkCSpy/chap09.htm</a>)&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.stringformatting"></a>3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#25903;&#25345;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;&#30340;&#36755;&#20986; &#12290;&#23613;&#31649;&#36825;&#26679;&#21487;&#33021;&#20250;&#29992;&#21040;&#38750;&#24120;&#22797;&#26434;&#30340;&#34920;&#36798;&#24335;&#65292;&#20294;&#26368;&#22522;&#26412;&#30340;&#29992;&#27861;&#26159;&#23558;&#19968;&#20010;&#20540;&#25554;&#20837;&#21040;&#19968;&#20010;&#26377;&#23383;&#31526;&#20018;&#26684;&#24335;&#31526; <code class="literal">%s</code> &#30340;&#23383;&#31526;&#20018;&#20013;&#12290;</p></div><div class="note"><blockquote><b class="title"><a name="compare.stringformatting.c">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application"><acronym class="acronym">C</acronym></span>: &#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#20351;&#29992;&#19982; <span class="application"><acronym class="acronym">C</acronym></span> &#20013; <code class="function">sprintf</code> &#20989;&#25968;&#19968;&#26679;&#30340;&#35821;&#27861;&#12290;</blockquote></div><div class="example"><a name="d0e7308"></a><p class="title"><b>&#20363;&nbsp;3.21.&nbsp;&#23383;&#31526;&#20018;&#30340;&#26684;&#24335;&#21270;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">k = "uid"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">v = "sa"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">"%s=%s" % (k, v)</span> <a name="odbchelper.stringformatting.1.1"></a>circled_1_delcric
<font color="teal">'uid=sa'</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.stringformatting.1.1">circled_1_delcric</a> </dt><dd>&#25972;&#20010;&#34920;&#36798;&#24335;&#30340;&#20540;&#20026;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;&#31532;&#19968;&#20010; <code class="literal">%s</code> &#34987;&#21464;&#37327; <code class="varname">k</code> &#30340;&#20540;&#26367;&#25442;&#65307;&#31532;&#20108;&#20010; <code class="literal">%s</code> &#34987; <code class="varname">v</code> &#30340;&#20540;&#26367;&#25442;&#12290;&#23383;&#31526;&#20018;&#20013;&#30340;&#25152;&#26377;&#20854;&#23427;&#23383;&#31526; (&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#26159;&#31561;&#21495;) &#25353;&#21407;&#26679;&#25171;&#21360;&#36755;&#20986;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#27880;&#24847; <code class="literal">(k, v)</code> &#26159;&#19968;&#20010; tuple&#12290;&#25105;&#35828;&#36807;&#23427;&#20204;&#23545;&#26576;&#20123;&#19996;&#35199;&#26377;&#29992;&#12290;</p><p>&#24744;&#21487;&#33021;&#19968;&#30452;&#22312;&#24819;&#65292;&#20570;&#20102;&#36825;&#20040;&#22810;&#24037;&#20316;&#21482;&#19981;&#36807;&#26159;&#20026;&#20102;&#20570;&#31616;&#21333;&#30340;&#23383;&#31526;&#20018;&#36830;&#25509;&#12290;&#24744;&#24819;&#30340;&#19981;&#38169;&#65292;&#21482;&#19981;&#36807;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#19981;&#21482;&#26159;&#36830;&#25509;&#12290;&#23427;&#29978;&#33267;&#19981;&#20165;&#20165;&#26159;&#26684;&#24335;&#21270;&#12290;&#23427;&#20063;&#26159;&#24378;&#21046;&#31867;&#22411;&#36716;&#25442;&#12290;</p><div class="example"><a name="odbchelper.stringformatting.coerce"></a><p class="title"><b>&#20363;&nbsp;3.22.&nbsp;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#19982;&#23383;&#31526;&#20018;&#36830;&#25509;&#30340;&#27604;&#36739;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">uid = "sa"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pwd = "secret"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print pwd + " is not a good password for " + uid</span>      <a name="odbchelper.stringformatting.2.1"></a>circled_1_delcric
<font color="teal">secret is not a good password for sa</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "%s is not a good password for %s" % (pwd, uid)</span> <a name="odbchelper.stringformatting.2.2"></a>circled_2_delcric
<font color="teal">secret is not a good password for sa</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">userCount = 6</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "Users connected: %d" % (userCount, )</span>           <a name="odbchelper.stringformatting.2.3"></a>circled_3_delcric <a name="odbchelper.stringformatting.2.4"></a>circled_4_delcric
<font color="teal">Users connected: 6</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "Users connected: " + userCount</span>                 <a name="odbchelper.stringformatting.2.5"></a>circled_5_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.stringformatting.2.1">circled_1_delcric</a> </dt><dd><code class="literal">+</code> &#26159;&#23383;&#31526;&#20018;&#36830;&#25509;&#25805;&#20316;&#31526;&#12290;</dd><dt><a href="#odbchelper.stringformatting.2.2">circled_2_delcric</a> </dt><dd>&#22312;&#36825;&#20010;&#31616;&#21333;&#20363;&#23376;&#20013;&#65292;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#23454;&#29616;&#19982;&#36830;&#25509;&#19968;&#26679;&#30340;&#32467;&#26524;&#12290;</dd><dt><a href="#odbchelper.stringformatting.2.3">circled_3_delcric</a> </dt><dd><code class="literal">(userCount, )</code> &#26159;&#19968;&#20010;&#21482;&#21253;&#21547;&#19968;&#20010;&#20803;&#32032;&#30340; tuple&#12290;&#26159;&#30340;&#65292;&#35821;&#27861;&#26377;&#19968;&#28857;&#22855;&#24618;&#65292;&#20294;&#26159;&#20351;&#29992;&#23427;&#30340;&#29702;&#30001;&#23601;&#26159;&#65306;&#26174;&#31034;&#22320;&#25351;&#20986;&#23427;&#26159;&#19968;&#20010; tuple&#65292;&#32780;&#19981;&#26159;&#20854;&#20182;&#12290;&#23454;&#38469;&#19978;&#65292;&#24403;&#23450;&#20041;&#19968;&#20010; list&#12289;tuple &#25110; dictionary &#26102;&#65292;&#24744;&#21487;&#20197;&#24635;&#26159;&#22312;&#26368;&#21518;&#19968;&#20010;&#20803;&#32032;&#21518;&#38754;&#36319;&#19978;&#19968;&#20010;&#36887;&#21495;&#65292;&#20294;&#26159;&#24403;&#23450;&#20041;&#19968;&#20010;&#21482;&#21253;&#21547;&#19968;&#20010;&#20803;&#32032;&#30340; tuple &#26102;&#36887;&#21495;&#26159;&#24517;&#39035;&#30340;&#12290;&#22914;&#26524;&#30465;&#30053;&#36887;&#21495;&#65292;<span class="application">Python</span> &#19981;&#20250;&#30693;&#36947; <code class="literal">(userCount)</code> &#31350;&#31455;&#26159;&#19968;&#20010;&#21482;&#21253;&#21547;&#19968;&#20010;&#20803;&#32032;&#30340; tuple &#36824;&#26159;&#21464;&#37327; <code class="varname">userCount</code> &#30340;&#20540;&#12290;</dd><dt><a href="#odbchelper.stringformatting.2.4">circled_4_delcric</a> </dt><dd>&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#36890;&#36807;&#23558; <code class="literal">%s</code> &#26367;&#25442;&#25104; <code class="literal">%d</code> &#21363;&#21487;&#22788;&#29702;&#25972;&#25968;&#12290;</dd><dt><a href="#odbchelper.stringformatting.2.5">circled_5_delcric</a> </dt><dd>&#35797;&#22270;&#23558;&#19968;&#20010;&#23383;&#31526;&#20018;&#21516;&#19968;&#20010;&#38750;&#23383;&#31526;&#20018;&#36830;&#25509;&#20250;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#12290;&#19982;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#19981;&#21516;&#65292;&#23383;&#31526;&#20018;&#36830;&#25509;&#21482;&#33021;&#22312;&#34987;&#36830;&#25509;&#30340;&#27599;&#19968;&#20010;&#37117;&#26159;&#23383;&#31526;&#20018;&#26102;&#36215;&#20316;&#29992;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22914;&#21516; <code class="function">printf</code> &#22312; <span class="application"><acronym class="acronym">C</acronym></span> &#20013;&#30340;&#20316;&#29992;&#65292;<span class="application">Python</span> &#20013;&#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#26159;&#19968;&#25226;&#29790;&#22763;&#20891;&#20992;&#12290;&#23427;&#26377;&#20016;&#23500;&#30340;&#36873;&#39033;&#65292;&#19981;&#21516;&#30340;&#26684;&#24335;&#21270;&#26684;&#24335;&#31526;&#21644;&#21487;&#36873;&#30340;&#20462;&#27491;&#31526;&#21487;&#29992;&#20110;&#19981;&#21516;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;</p><div class="example"><a name="odbchelper.stringformatting.numbers"></a><p class="title"><b>&#20363;&nbsp;3.23.&nbsp;&#25968;&#20540;&#30340;&#26684;&#24335;&#21270;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "Today's stock price: %f" % 50.4625</span>   <a name="odbchelper.stringformatting.3.1"></a>circled_1_delcric
<font color="teal">50.462500</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "Today's stock price: %.2f" % 50.4625</span> <a name="odbchelper.stringformatting.3.2"></a>circled_2_delcric
<font color="teal">50.46</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "Change since yesterday: %+.2f" % 1.5</span> <a name="odbchelper.stringformatting.3.3"></a>circled_3_delcric
<font color="teal">+1.50</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.stringformatting.3.1">circled_1_delcric</a> </dt><dd><code class="literal">%f</code> &#26684;&#24335;&#31526;&#36873;&#39033;&#23545;&#24212;&#19968;&#20010;&#21313;&#36827;&#21046;&#28014;&#28857;&#25968;&#65292;&#19981;&#25351;&#23450;&#31934;&#24230;&#26102;&#25171;&#21360; 6 &#20301;&#23567;&#25968;&#12290;</dd><dt><a href="#odbchelper.stringformatting.3.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992;&#21253;&#21547;&#8220;.2&#8221;&#31934;&#24230;&#20462;&#27491;&#31526;&#30340; <code class="literal">%f</code> &#26684;&#24335;&#31526;&#36873;&#39033;&#23558;&#21482;&#25171;&#21360; 2 &#20301;&#23567;&#25968;&#12290;</dd><dt><a href="#odbchelper.stringformatting.3.3">circled_3_delcric</a> </dt><dd>&#24744;&#29978;&#33267;&#21487;&#20197;&#28151;&#21512;&#20351;&#29992;&#21508;&#31181;&#20462;&#27491;&#31526;&#12290;&#28155;&#21152; <code class="literal">+</code> &#20462;&#27491;&#31526;&#29992;&#20110;&#22312;&#25968;&#20540;&#20043;&#21069;&#26174;&#31034;&#19968;&#20010;&#27491;&#21495;&#25110;&#36127;&#21495;&#12290;&#27880;&#24847;&#8220;.2&#8221;&#31934;&#24230;&#20462;&#27491;&#31526;&#20173;&#26087;&#22312;&#23427;&#21407;&#26469;&#30340;&#20301;&#32622;&#65292;&#29992;&#20110;&#21482;&#25171;&#21360; 2 &#20301;&#23567;&#25968;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#25152;&#20351;&#29992;&#30340;&#26684;&#24335;&#31526; (<a href="http://www.python.org/doc/current/lib/typesseq-strings.html">http://www.python.org/doc/current/lib/typesseq-strings.html</a>)&#12290;</li><li><em class="citetitle">Effective <acronym class="acronym">AWK</acronym> Programming</em> (<a href="http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Top">http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Top</a>) &#35752;&#35770;&#20102;&#25152;&#26377;&#30340;&#26684;&#24335;&#31526; (<a href="http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Control+Letters">http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Control+Letters</a>)&#21644;&#39640;&#32423;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#25216;&#26415;&#65292;&#22914;&#25351;&#23450;&#23485;&#24230;&#65292;&#31934;&#24230;&#21644;0&#22635;&#20805; (<a href="http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Format+Modifiers">http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Format+Modifiers</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.map"></a>3.6.&nbsp;&#26144;&#23556; list</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#30340;&#24378;&#22823;&#29305;&#24615;&#20043;&#19968;&#26159;&#20854;&#23545; list &#30340;&#35299;&#26512;&#65292;&#23427;&#25552;&#20379;&#19968;&#31181;&#32039;&#20945;&#30340;&#26041;&#27861;&#65292;&#21487;&#20197;&#36890;&#36807;&#23545; list &#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#24212;&#29992;&#19968;&#20010;&#20989;&#25968;&#65292;&#20174;&#32780;&#23558;&#19968;&#20010; list &#26144;&#23556;&#20026;&#21478;&#19968;&#20010; list&#12290;</p></div><div class="example"><a name="d0e7553"></a><p class="title"><b>&#20363;&nbsp;3.24.&nbsp;List &#35299;&#26512;&#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = [1, 9, 8, 4]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[elem*2 for elem in li]</span>      <a name="odbchelper.map.1.1"></a>circled_1_delcric
<font color="teal">[2, 18, 16, 8]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>                           <a name="odbchelper.map.1.2"></a>circled_2_delcric
<font color="teal">[1, 9, 8, 4]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = [elem*2 for elem in li]</span> <a name="odbchelper.map.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">[2, 18, 16, 8]</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.map.1.1">circled_1_delcric</a> </dt><dd>&#20026;&#20102;&#20415;&#20110;&#29702;&#35299;&#23427;&#65292;&#35753;&#25105;&#20204;&#20174;&#21491;&#21521;&#24038;&#30475;&#12290;<code class="varname">li</code> &#26159;&#19968;&#20010;&#23558;&#35201;&#26144;&#23556;&#30340; list&#12290;<span class="application">Python</span> &#24490;&#29615;&#36941;&#21382; <code class="varname">li</code> &#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#12290;&#23545;&#27599;&#20010;&#20803;&#32032;&#22343;&#25191;&#34892;&#22914;&#19979;&#25805;&#20316;&#65306;&#39318;&#20808;&#20020;&#26102;&#23558;&#20854;&#20540;&#36171;&#32473;&#21464;&#37327; <code class="varname">elem</code>&#65292;&#28982;&#21518; <span class="application">Python</span> &#24212;&#29992;&#20989;&#25968; <code class="literal"><code class="varname">elem</code>*2</code> &#36827;&#34892;&#35745;&#31639;&#65292;&#26368;&#21518;&#23558;&#35745;&#31639;&#32467;&#26524;&#36861;&#21152;&#21040;&#35201;&#36820;&#22238;&#30340; list &#20013;&#12290;</dd><dt><a href="#odbchelper.map.1.2">circled_2_delcric</a> </dt><dd>&#38656;&#35201;&#27880;&#24847;&#26159;&#65292;&#23545; list &#30340;&#35299;&#26512;&#24182;&#19981;&#25913;&#21464;&#21407;&#22987;&#30340; list&#12290;</dd><dt><a href="#odbchelper.map.1.3">circled_3_delcric</a> </dt><dd>&#23558;&#19968;&#20010; list &#30340;&#35299;&#26512;&#32467;&#26524;&#36171;&#20540;&#32473;&#23545;&#20854;&#26144;&#23556;&#30340;&#21464;&#37327;&#26159;&#23433;&#20840;&#30340;&#12290;&#19981;&#29992;&#25285;&#24515;&#23384;&#22312;&#31454;&#20105;&#24773;&#20917;&#25110;&#20219;&#20309;&#21476;&#24618;&#20107;&#24773;&#30340;&#21457;&#29983;&#12290;<span class="application">Python</span> &#20250;&#22312;&#20869;&#23384;&#20013;&#21019;&#24314;&#26032;&#30340; list&#65292;&#24403;&#23545; list &#30340;&#35299;&#26512;&#23436;&#25104;&#26102;&#65292;<span class="application">Python</span> &#23558;&#32467;&#26524;&#36171;&#32473;&#21464;&#37327;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="informalexample"><p>&#35753;&#25105;&#20204;&#22238;&#36807;&#22836;&#26469;&#30475;&#30475;&#20301;&#20110; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532; 2 &#31456;</a> &#30340;&#20989;&#25968; <code class="function">buildConnectionString</code> &#23545; list &#30340;&#35299;&#26512;&#65306;</p><pre class="programlisting">
["%s=%s" % (k, v) for k, v in params.items()]</pre></div><p>&#39318;&#20808;&#65292;&#27880;&#24847;&#21040;&#20320;&#35843;&#29992;&#20102;dictionary <code class="varname">params</code> &#30340; <code class="function">items</code>  &#20989;&#25968;&#12290;&#36825;&#20010;&#20989;&#25968;&#36820;&#22238;&#19968;&#20010; dictionary &#20013;&#25152;&#26377;&#25968;&#25454;&#30340; tuple &#30340; list&#12290;</p><div class="example"><a name="odbchelper.items"></a><p class="title"><b>&#20363;&nbsp;3.25.&nbsp;<code class="function">keys</code>, <code class="function">values</code> &#21644; <code class="function">items</code> &#20989;&#25968;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params.keys()</span>   <a name="odbchelper.map.2.1"></a>circled_1_delcric
<font color="teal">['server', 'uid', 'database', 'pwd']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params.values()</span> <a name="odbchelper.map.2.2"></a>circled_2_delcric
<font color="teal">['mpilgrim', 'sa', 'master', 'secret']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params.items()</span>  <a name="odbchelper.map.2.3"></a>circled_3_delcric
<font color="teal">[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.map.2.1">circled_1_delcric</a> </dt><dd>Dictionary &#30340; <code class="function">keys</code> &#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#25152;&#26377;&#38190;&#30340; list&#12290;&#36825;&#20010; list &#27809;&#25353; dictionary &#23450;&#20041;&#30340;&#39034;&#24207;&#36755;&#20986; (&#35760;&#20303;&#65292;&#20803;&#32032;&#22312; dictionary &#20013;&#26159;&#26080;&#24207;&#30340;)&#65292;&#20294;&#23427;&#26159;&#19968;&#20010; list&#12290;</dd><dt><a href="#odbchelper.map.2.2">circled_2_delcric</a> </dt><dd><code class="function">values</code> &#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#25152;&#26377;&#20540;&#30340; list&#12290;&#23427;&#21516; <code class="function">keys</code> &#26041;&#27861;&#36820;&#22238;&#30340; list &#36755;&#20986;&#39034;&#24207;&#30456;&#21516;&#65292;&#25152;&#20197;&#23545;&#20110;&#25152;&#26377;&#30340; <code class="varname">n</code>&#65292;<code class="literal">params.values()[n] == params[params.keys()[n]]</code> &#12290;</dd><dt><a href="#odbchelper.map.2.3">circled_3_delcric</a> </dt><dd><code class="function">items</code> &#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#30001;&#24418;&#22914; <code class="literal">(<em class="replaceable">key</em>&#65292;<em class="replaceable">value</em>)</code> &#32452;&#25104;&#30340; tuple &#30340; list&#12290;&#36825;&#20010; list &#21253;&#25324; dictionary &#20013;&#25152;&#26377;&#30340;&#25968;&#25454;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#35753;&#25105;&#20204;&#30475;&#19968;&#30475; <code class="function">buildConnectionString</code> &#20570;&#20102;&#20123;&#20160;&#20040;&#12290;&#23427;&#25509;&#25910;&#19968;&#20010; list&#65292;<code class="literal"><code class="varname">params</code>.<code class="function">items</code>()</code>&#65292;&#36890;&#36807;&#23545;&#27599;&#20010;&#20803;&#32032;&#24212;&#29992;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#23558;&#20854;&#26144;&#23556;&#20026;&#19968;&#20010;&#26032; list&#12290;&#36825;&#20010;&#26032; list &#23558;&#19982; <code class="literal"><code class="varname">params</code>.<code class="function">items</code>()</code> &#19968;&#19968;&#23545;&#24212;&#65306;&#26032; list &#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#37117;&#26159; dictionary <code class="varname">params</code> &#20013;&#30340;&#19968;&#20010;&#38190;-&#20540;&#23545;&#26500;&#25104;&#30340;&#30340;&#23383;&#31526;&#20018;&#12290;</p><div class="example"><a name="d0e7756"></a><p class="title"><b>&#20363;&nbsp;3.26.&nbsp;<code class="function">buildConnectionString</code> &#20013;&#30340; list &#35299;&#26512;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params.items()</span>
<font color="teal">[('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[k for k, v in params.items()]</span>                <a name="odbchelper.map.3.1"></a>circled_1_delcric
<font color="teal">['server', 'uid', 'database', 'pwd']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[v for k, v in params.items()]</span>                <a name="odbchelper.map.3.2"></a>circled_2_delcric
<font color="teal">['mpilgrim', 'sa', 'master', 'secret']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">["%s=%s" % (k, v) for k, v in params.items()]</span> <a name="odbchelper.map.3.3"></a>circled_3_delcric
<font color="teal">['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.map.3.1">circled_1_delcric</a> </dt><dd>&#35831;&#27880;&#24847;&#25105;&#20204;&#27491;&#22312;&#20351;&#29992;&#20004;&#20010;&#21464;&#37327;&#23545; list <code class="literal">params.items()</code> &#36827;&#34892;&#36941;&#21382;&#12290;&#36825;&#26159;<a class="link" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#22810;&#21464;&#37327;&#36171;&#20540;</a>&#30340;&#21478;&#19968;&#31181;&#29992;&#27861;&#12290;<code class="literal">params.items()</code> &#30340;&#31532;&#19968;&#20010;&#20803;&#32032;&#26159; <code class="literal">('server', 'mpilgrim')</code>&#65292;&#25152;&#20197;&#22312; list &#35299;&#26512;&#30340;&#31532;&#19968;&#27425;&#36941;&#21382;&#20013;&#65292;<code class="varname">k</code> &#23558;&#20026; <code class="literal">'server'</code>&#65292;<code class="varname">v</code> &#23558;&#20026; <code class="literal">'mpilgrim'</code>&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#25105;&#20204;&#24573;&#30053;&#20102;&#36820;&#22238; list &#20013; <code class="varname">v</code> &#30340;&#20540;&#65292;&#32780;&#21482;&#21253;&#21547;&#20102; <code class="varname">k</code> &#30340;&#20540;&#65292;&#25152;&#20197;&#36825;&#20010; list &#35299;&#26512;&#26368;&#21518;&#31561;&#20110; <code class="literal"><code class="varname">params</code>.<code class="function">keys</code>()</code>&#12290;</dd><dt><a href="#odbchelper.map.3.2">circled_2_delcric</a> </dt><dd>&#36825;&#37324;&#25105;&#20204;&#20570;&#30528;&#30456;&#21516;&#30340;&#20107;&#24773;&#65292;&#20294;&#26159;&#24573;&#30053;&#20102; <code class="varname">k</code> &#30340;&#20540;&#65292;&#25152;&#20197;&#36825;&#20010; list &#35299;&#26512;&#26368;&#21518;&#31561;&#20110; <code class="literal"><code class="varname">params</code>.<code class="function">values</code>()</code>&#12290;</dd><dt><a href="#odbchelper.map.3.3">circled_3_delcric</a> </dt><dd>&#29992;&#19968;&#20123;&#31616;&#21333;&#30340; <a class="link" href="#odbchelper.stringformatting" title="3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;">&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a>&#23558;&#21069;&#38754;&#20004;&#20010;&#20363;&#23376;&#21512;&#24182;&#36215;&#26469; &#65292;&#25105;&#20204;&#23601;&#24471;&#21040;&#19968;&#20010;&#21253;&#25324;&#20102; dictionary &#20013;&#27599;&#20010;&#20803;&#32032;&#30340; key-value &#23545;&#30340; list&#12290;&#36825;&#20010;&#30475;&#19978;&#21435;&#26377;&#28857;&#20687;&#31243;&#24207;&#30340;<a class="link" href="#odbchelper.output">&#36755;&#20986;&#32467;&#26524;</a>&#65292;&#21097;&#19979;&#30340;&#23601;&#21482;&#26159;&#23558;&#36825;&#20010; list &#20013;&#30340;&#20803;&#32032;&#25509;&#36215;&#26469;&#24418;&#25104;&#19968;&#20010;&#23383;&#31526;&#20018;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#21478;&#19968;&#31181;&#26041;&#27861;&#26469;&#26144;&#23556; list&#65306;&#20351;&#29992;&#20869;&#32622;&#30340; <code class="function">map</code> &#20989;&#25968; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#23545;&#23884;&#22871; list &#30340; list &#36827;&#34892;&#35299;&#26512; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007140000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007140000000000000000</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.join"></a>3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;</h2></div></div></div><div class="abstract"><p>&#24744;&#26377;&#20102;&#19968;&#20010;&#24418;&#22914; <code class="literal"><em class="replaceable">key</em>=<em class="replaceable">value</em></code> &#30340; key-value &#23545; list&#65292;&#24182;&#19988;&#24819;&#23558;&#23427;&#20204;&#21512;&#25104;&#20026;&#21333;&#20010;&#23383;&#31526;&#20018;&#12290;&#20026;&#20102;&#23558;&#20219;&#24847;&#21253;&#21547;&#23383;&#31526;&#20018;&#30340; list &#36830;&#25509;&#25104;&#21333;&#20010;&#23383;&#31526;&#20018;&#65292;&#21487;&#20197;&#20351;&#29992;&#23383;&#31526;&#20018;&#23545;&#35937;&#30340; <code class="function">join</code> &#26041;&#27861;&#12290;</p></div><div class="informalexample"><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#22312; <code class="function">buildConnectionString</code> &#20989;&#25968;&#20013;&#36830;&#25509; list &#30340;&#20363;&#23376;&#65306;</p><pre class="programlisting">
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])</pre></div><p>&#22312;&#25105;&#20204;&#32487;&#32493;&#20043;&#21069;&#26377;&#19968;&#20010;&#26377;&#36259;&#30340;&#22320;&#26041;&#12290;&#25105;&#19968;&#30452;&#22312;&#37325;&#22797;&#20989;&#25968;&#26159;&#23545;&#35937;&#65292;&#23383;&#31526;&#20018;&#26159;&#23545;&#35937;&#65292;&#27599;&#20010;&#19996;&#35199;&#37117;&#26159;&#23545;&#35937;&#30340;&#27010;&#24565;&#12290;&#24744;&#20063;&#35768;&#35748;&#20026;&#25105;&#30340;&#24847;&#24605;&#26159;&#35828;&#23383;&#31526;&#20018;<span class="emphasis"><em>&#20540;</em></span> &#26159;&#23545;&#35937;&#12290;&#20294;&#26159;&#19981;&#23545;&#65292;&#20180;&#32454;&#22320;&#30475;&#19968;&#19979;&#36825;&#20010;&#20363;&#23376;&#65292;&#24744;&#23558;&#20250;&#30475;&#21040;&#23383;&#31526;&#20018; <code class="literal">";"</code> &#26412;&#36523;&#23601;&#26159;&#19968;&#20010;&#23545;&#35937;&#65292;&#24744;&#22312;&#35843;&#29992;&#23427;&#30340; <code class="function">join</code> &#26041;&#27861;&#12290;</p><p>&#24635;&#20043;&#65292;&#36825;&#37324;&#30340; <code class="function">join</code> &#26041;&#27861;&#23558; list &#20013;&#30340;&#20803;&#32032;&#36830;&#25509;&#25104;&#21333;&#20010;&#23383;&#31526;&#20018;&#65292;&#27599;&#20010;&#20803;&#32032;&#29992;&#19968;&#20010;&#20998;&#21495;&#38548;&#24320;&#12290;&#20998;&#38548;&#31526;&#19981;&#24517;&#26159;&#19968;&#20010;&#20998;&#21495;&#65307;&#23427;&#29978;&#33267;&#19981;&#24517;&#26159;&#21333;&#20010;&#23383;&#31526;&#12290;&#23427;&#21487;&#20197;&#26159;&#20219;&#20309;&#23383;&#31526;&#20018;&#12290;</p><div class="caution"><blockquote><b class="title"><a name="tip.join">&#23567;&#24515;: &#19981;&#33021; <code class="function">join</code> &#38750;&#23383;&#31526;&#20018;</a></b><br><code class="function">join</code> &#21482;&#33021;&#29992;&#20110;&#20803;&#32032;&#26159;&#23383;&#31526;&#20018;&#30340; list&#65307;&#23427;&#19981;&#36827;&#34892;&#20219;&#20309;&#30340;&#24378;&#21046;&#31867;&#22411;&#36716;&#25442;&#12290;&#36830;&#25509;&#19968;&#20010;&#23384;&#22312;&#19968;&#20010;&#25110;&#22810;&#20010;&#38750;&#23383;&#31526;&#20018;&#20803;&#32032;&#30340; list
 &#23558;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#12290;</blockquote></div><div class="example"><a name="odbchelper.join.example"></a><p class="title"><b>&#20363;&nbsp;3.27.&nbsp;<code class="filename">odbchelper.py</code> &#30340;&#36755;&#20986;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">["%s=%s" % (k, v) for k, v in params.items()]</span>
<font color="teal">['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">";".join(["%s=%s" % (k, v) for k, v in params.items()])</span>
<font color="teal">'server=mpilgrim;uid=sa;database=master;pwd=secret'</font></pre></div></div><br class="example-break"><p>&#19978;&#38754;&#30340;&#23383;&#31526;&#20018;&#26159;&#20174; <code class="function">odbchelper</code> &#20989;&#25968;&#36820;&#22238;&#30340;&#65292;&#34987;&#35843;&#29992;&#22359;&#25171;&#21360;&#20986;&#26469;&#65292;&#36825;&#26679;&#23601;&#32473;&#20986;&#20102;&#24744;&#24320;&#22987;&#38405;&#35835;&#26412;&#31456;&#26102;&#20196;&#20154;&#24863;&#21040;&#21507;&#24778;&#30340;&#36755;&#20986;&#32467;&#26524;&#12290;</p><p>&#24744;&#21487;&#33021;&#22312;&#24819;&#26159;&#21542;&#23384;&#22312;&#19968;&#20010;&#36866;&#24403;&#30340;&#26041;&#27861;&#26469;&#23558;&#23383;&#31526;&#20018;&#20998;&#21106;&#25104;&#19968;&#20010; list&#12290;&#24403;&#28982;&#26377;&#65292;&#23427;&#21483;&#20570; <code class="function">split</code>&#12290;</p><div class="example"><a name="odbchelper.split.example"></a><p class="title"><b>&#20363;&nbsp;3.28.&nbsp;&#20998;&#21106;&#23383;&#31526;&#20018;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = ";".join(li)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s</span>
<font color="teal">'server=mpilgrim;uid=sa;database=master;pwd=secret'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s.split(";")</span>    <a name="odbchelper.join.1.1"></a>circled_1_delcric
<font color="teal">['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s.split(";", 1)</span> <a name="odbchelper.join.1.2"></a>circled_2_delcric
<font color="teal">['server=mpilgrim', 'uid=sa;database=master;pwd=secret']</font></pre><div class="calloutlist"><dl compact><dt><a href="#odbchelper.join.1.1">circled_1_delcric</a> </dt><dd><code class="function">split</code> &#19982; <code class="function">join</code> &#27491;&#22909;&#30456;&#21453;&#65292;&#23427;&#23558;&#19968;&#20010;&#23383;&#31526;&#20018;&#20998;&#21106;&#25104;&#22810;&#20803;&#32032; list&#12290;&#27880;&#24847;&#65292;&#20998;&#38548;&#31526; ("<span class="quote"><code class="literal">;</code></span>") &#34987;&#23436;&#20840;&#21435;&#25481;&#20102;&#65292;&#23427;&#27809;&#26377;&#22312;&#36820;&#22238;&#30340; list &#20013;&#30340;&#20219;&#24847;&#20803;&#32032;&#20013;&#20986;&#29616;&#12290;</dd><dt><a href="#odbchelper.join.1.2">circled_2_delcric</a> </dt><dd><code class="function">split</code> &#25509;&#21463;&#19968;&#20010;&#21487;&#36873;&#30340;&#31532;&#20108;&#20010;&#21442;&#25968;&#65292;&#23427;&#26159;&#35201;&#20998;&#21106;&#30340;&#27425;&#25968;&#12290;("<span class="quote">&#21734;&#65292;&#21487;&#36873;&#21442;&#25968;&#8230;&#8230;</span>"&#65292;&#24744;&#23558;&#20250;&#22312;&#19979;&#19968;&#31456;&#20013;&#23398;&#20250;&#22914;&#20309;&#22312;&#24744;&#33258;&#24049;&#30340;&#20989;&#25968;&#20013;&#20351;&#29992;&#23427;&#12290;)</dd></dl></div></div></div><br class="example-break"><div class="tip"><blockquote><b class="title"><a name="tip.split">&#25552;&#31034;: &#29992; <code class="function">split</code> &#25628;&#32034;</a></b><br><code class="literal"><em class="replaceable">anystring</em>.<code class="function">split</code>(<em class="replaceable">delimiter</em>, 1)</code> &#26159;&#19968;&#20010;&#26377;&#29992;&#30340;&#25216;&#26415;&#65292;&#22312;&#24744;&#24819;&#35201;&#25628;&#32034;&#19968;&#20010;&#23376;&#20018;&#65292;&#28982;&#21518;&#20998;&#21035;&#22788;&#29702;&#23383;&#31526;&#21069;&#21322;&#37096;&#20998; (&#21363; list &#20013;&#31532;&#19968;&#20010;&#20803;&#32032;) &#21644;&#21518;&#21322;&#37096;&#20998; (&#21363; list &#20013;&#31532;&#20108;&#20010;&#20803;&#32032;) &#26102;&#65292;&#20351;&#29992;&#36825;&#20010;&#25216;&#26415;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110;&#23383;&#31526;&#20018;&#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/480">http://www.faqts.com/knowledge-base/index.phtml/fid/480</a>)&#65292;&#24182;&#19988;&#26377;&#35768;&#22810;&#20351;&#29992;&#23383;&#31526;&#20018;&#30340;&#20363;&#23376;&#20195;&#30721; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/539">http://www.faqts.com/knowledge-base/index.phtml/fid/539</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#23383;&#31526;&#20018;&#26041;&#27861; (<a href="http://www.python.org/doc/current/lib/string-methods.html">http://www.python.org/doc/current/lib/string-methods.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">string</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-string.html">http://www.python.org/doc/current/lib/module-string.html</a>)&#30340;&#25991;&#26723;&#12290;</li><li><em class="citetitle">The Whole <span class="application">Python</span> <acronym class="acronym">FAQ</acronym></em> (<a href="http://www.python.org/doc/FAQ.html">http://www.python.org/doc/FAQ.html</a>) &#35299;&#37322;&#20102;&#20026;&#20160;&#20040; <code class="function">join</code> &#26159;&#23383;&#31526;&#20018;&#26041;&#27861; (<a href="http://www.python.org/cgi-bin/faqw.py?query=4.96&amp;querytype=simple&amp;casefold=yes&amp;req=search">http://www.python.org/cgi-bin/faqw.py?query=4.96&amp;querytype=simple&amp;casefold=yes&amp;req=search</a>)&#32780;&#19981;&#26159; list &#26041;&#27861;&#12290;</li></ul></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e8123"></a>3.7.1.&nbsp;&#23383;&#31526;&#20018;&#26041;&#27861;&#30340;&#21382;&#21490;&#27880;&#35299;</h3></div></div></div><p>
&#24403;&#25105;&#24320;&#22987;&#23398; <span class="application">Python</span> &#26102;&#65292;&#25105;&#20197;&#20026; <code class="function">join</code> &#26159; list &#30340;&#26041;&#27861;&#65292;&#23427;&#20250;&#20351;&#29992;&#20998;&#38548;&#31526;&#20316;&#20026;&#19968;&#20010;&#21442;&#25968;&#12290;&#24456;&#22810;&#20154;&#37117;&#26377;&#21516;&#26679;&#30340;&#24863;&#35273;&#65306;&#22312; <code class="function">join</code> &#26041;&#27861;&#30340;&#32972;&#21518;&#26377;&#19968;&#27573;&#25925;&#20107;&#12290;&#22312; <span class="application">Python</span> 1.6 &#20043;&#21069;&#65292;&#23383;&#31526;&#20018;&#23436;&#20840;&#27809;&#26377;&#36825;&#20123;&#26377;&#29992;&#30340;&#26041;&#27861;&#12290;&#26377;&#19968;&#20010;&#29420;&#31435;&#30340; <code class="filename">string</code> &#27169;&#22359;&#21253;&#21547;&#25152;&#26377;&#30340;&#23383;&#31526;&#20018;&#20989;&#25968;&#65292;&#27599;&#20010;&#20989;&#25968;&#20351;&#29992;&#19968;&#20010;&#23383;&#31526;&#20018;&#20316;&#20026;&#23427;&#30340;&#31532;&#19968;&#20010;&#21442;&#25968;&#12290;&#36825;&#20123;&#20989;&#25968;&#34987;&#35748;&#20026;&#36275;&#22815;&#37325;&#35201;&#65292;&#25152;&#20197;&#23427;&#20204;&#31227;&#21040;&#23383;&#31526;&#20018;&#20013;&#21435;&#20102;&#65292;&#36825;&#23601;&#20351;&#24471;&#35832;&#22914; <code class="function">lower</code>&#12289;<code class="function">upper</code> &#21644; <code class="function">split</code> &#20043;&#31867;&#30340;&#20989;&#25968;&#26159;&#26377;&#24847;&#20041;&#30340;&#12290;&#20294;&#35768;&#22810;&#26680;&#24515;&#30340; <span class="application">Python</span> &#31243;&#24207;&#21592;&#21453;&#23545;&#26032;&#30340; <code class="function">join</code> &#26041;&#27861;&#65292;&#20105;&#35770;&#35828;&#24212;&#35813;&#25442;&#25104;&#26159; list &#30340;&#19968;&#20010;&#26041;&#27861;&#65292;&#25110;&#19981;&#24212;&#35813;&#31227;&#21160;&#32780;&#20165;&#20165;&#20445;&#30041;&#20026;&#26087;&#30340; <code class="filename">string</code> &#27169;&#22359; (&#29616;&#20173;&#28982;&#36824;&#26377;&#35768;&#22810;&#26377;&#29992;&#30340;&#19996;&#35199;&#22312;&#37324;&#38754;) &#30340;&#19968;&#37096;&#20998;&#12290;&#25105;&#21482;&#20351;&#29992;&#26032;&#30340; <code class="function">join</code> &#26041;&#27861;&#65292;&#20294;&#26159;&#24744;&#36824;&#26159;&#20250;&#30475;&#21040;&#20854;&#23427;&#20889;&#27861;&#12290;&#22914;&#26524;&#23427;&#30495;&#30340;&#20351;&#24744;&#24863;&#21040;&#40635;&#28902;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#26087;&#30340; <code class="function">string.join</code> &#20989;&#25968;&#26469;&#26367;&#20195;&#12290;</p></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="odbchelper.summary"></a>3.8.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312; <code class="filename">odbchelper.py</code> &#31243;&#24207;&#21644;&#23427;&#30340;&#36755;&#20986;&#32467;&#26524;&#37117;&#24212;&#35813;&#38750;&#24120;&#28165;&#26970;&#20102;&#12290;</p></div><div class="informalexample"><pre class="programlisting">
def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)</pre></div><div class="informalexample"><p>&#19979;&#38754;&#26159; <code class="filename">odbchelper.py</code> &#30340;&#36755;&#20986;&#32467;&#26524;&#65306;</p><pre class="screen"><font color="teal">server=mpilgrim;uid=sa;database=master;pwd=secret</font></pre></div><div class="highlights"><p>&#22312;&#28145;&#20837;&#19979;&#19968;&#31456;&#23398;&#20064;&#20043;&#21069;&#65292;&#30830;&#20445;&#24744;&#21487;&#20197;&#26080;&#38459;&#30861;&#22320;&#23436;&#25104;&#19979;&#38754;&#30340;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#20351;&#29992; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#26469;&#20132;&#20114;&#24335;&#22320;&#27979;&#35797;&#34920;&#36798;&#24335;</li><li>&#32534;&#20889; <span class="application">Python</span> &#31243;&#24207;&#24182;&#19988;<a class="link" href="#odbchelper.testing" title="2.6.&nbsp;&#27979;&#35797;&#27169;&#22359;">&#20174; <acronym class="acronym">IDE</acronym> &#36816;&#34892;</a>&#65292;&#25110;&#32773;&#20174;&#21629;&#20196;&#34892;&#36816;&#34892;</li><li><a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string">&#23548;&#20837;&#27169;&#22359;</a>&#21450;&#35843;&#29992;&#23427;&#20204;&#30340;&#20989;&#25968;</li><li><a class="link" href="#odbchelper.funcdef" title="2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;">&#22768;&#26126;&#20989;&#25968;</a>&#20197;&#21450; <a class="link" href="#odbchelper.docstring" title="2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;"><code class="literal">doc string</code></a>&#12289;<a class="link" href="#odbchelper.vardef" title="3.4.&nbsp;&#21464;&#37327;&#22768;&#26126;">&#23616;&#37096;&#21464;&#37327;</a>&#21644;<a class="link" href="#odbchelper.indenting" title="2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;">&#36866;&#24403;&#30340;&#32553;&#36827;</a>&#30340;&#20351;&#29992;</li><li>&#23450;&#20041; <a class="link" href="#odbchelper.dict" title="3.1.&nbsp;Dictionary &#20171;&#32461;">dictionary</a>&#12289;<a class="link" href="#odbchelper.tuple" title="3.3.&nbsp;Tuple &#20171;&#32461;">tuple</a> &#21644; <a class="link" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">list</a></li><li><a class="link" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#20219;&#24847;&#19968;&#20010;&#23545;&#35937;</a>&#30340;&#35775;&#38382;&#26041;&#27861;&#65292;&#21253;&#25324;&#65306;&#23383;&#31526;&#20018;&#12289;list&#12289;dictionary&#12289;&#20989;&#25968;&#21644;&#27169;&#22359;</li><li>&#36890;&#36807;<a class="link" href="#odbchelper.stringformatting" title="3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;">&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a>&#36830;&#25509;&#20540;</li><li>&#20351;&#29992; list &#35299;&#26512;<a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#26144;&#23556; list</a> &#20026;&#20854;&#20182;&#30340; list</li><li><a class="link" href="#odbchelper.join" title="3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;">&#25226;&#23383;&#31526;&#20018;&#20998;&#21106;&#20026; list</a> &#21644;&#25226; list &#36830;&#25509;&#20026;&#23383;&#31526;&#20018;</li></ul></div></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="apihelper"></a>&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;</h1></div></div></div><div class="abstract"><p>&#26412;&#31456;&#35770;&#36848;&#20102; <span class="application">Python</span> &#20247;&#22810;&#24378;&#22823;&#21151;&#33021;&#20043;&#19968;&#65306;&#33258;&#30465;&#12290;&#27491;&#22914;&#20320;&#25152;&#30693;&#36947;&#30340;&#65292;<a class="link" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;"><span class="application">Python</span> &#20013;&#19975;&#29289;&#30342;&#23545;&#35937;</a>&#65292;&#33258;&#30465;&#26159;&#25351;&#20195;&#30721;&#21487;&#20197;&#26597;&#30475;&#20869;&#23384;&#20013;&#20197;&#23545;&#35937;&#24418;&#24335;&#23384;&#22312;&#30340;&#20854;&#23427;&#27169;&#22359;&#21644;&#20989;&#25968;&#65292;&#33719;&#21462;&#23427;&#20204;&#30340;&#20449;&#24687;&#65292;&#24182;&#23545;&#23427;&#20204;&#36827;&#34892;&#25805;&#20316;&#12290;&#29992;&#36825;&#31181;&#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#23450;&#20041;&#27809;&#26377;&#21517;&#31216;&#30340;&#20989;&#25968;&#65292;&#19981;&#25353;&#20989;&#25968;&#22768;&#26126;&#30340;&#21442;&#25968;&#39034;&#24207;&#35843;&#29992;&#20989;&#25968;&#65292;&#29978;&#33267;&#24341;&#29992;&#20107;&#20808;&#24182;&#19981;&#30693;&#36947;&#21517;&#31216;&#30340;&#20989;&#25968;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.divein"></a>4.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#23436;&#25972;&#21487;&#36816;&#34892;&#30340; <span class="application">Python</span> &#31243;&#24207;&#12290;&#22823;&#27010;&#30475;&#19968;&#19979;&#36825;&#27573;&#31243;&#24207;&#65292;&#20320;&#24212;&#35813;&#21487;&#20197;&#29702;&#35299;&#19981;&#23569;&#20102;&#12290;&#29992;&#25968;&#23383;&#26631;&#20986;&#30340;&#34892;&#38416;&#36848;&#20102; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#20013;&#28041;&#21450;&#30340;&#19968;&#20123;&#27010;&#24565;&#12290;&#22914;&#26524;&#21097;&#19979;&#26469;&#30340;&#20195;&#30721;&#30475;&#36215;&#26469;&#26377;&#28857;&#22855;&#24618;&#65292;&#19981;&#29992;&#25285;&#24515;&#65292;&#36890;&#36807;&#38405;&#35835;&#26412;&#31456;&#20320;&#23558;&#20250;&#29702;&#35299;&#25152;&#26377;&#36825;&#20123;&#12290;</p></div><div class="example"><a name="d0e8300"></a><p class="title"><b>&#20363;&nbsp;4.1.&nbsp;<code class="filename">apihelper.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
def info(object, spacing=10, collapse=1): <a name="apihelper.intro.1.1"></a>circled_1_delcric <a name="apihelper.intro.1.2"></a>circled_2_delcric <a name="apihelper.intro.1.3"></a>circled_3_delcric
    """Print methods and doc strings.
    
    Takes module, class, list, dictionary, or string."""
    methodList = [method for method in dir(object) if callable(getattr(object, method))]
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
    print "\n".join(["%s %s" %
                      (method.ljust(spacing),
                       processFunc(str(getattr(object, method).__doc__)))
                     for method in methodList])

if __name__ == "__main__":                <a name="apihelper.intro.1.4"></a>circled_4_delcric <a name="apihelper.intro.1.5"></a>circled_5_delcric
    print info.__doc__</pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.intro.1.1">circled_1_delcric</a> </dt><dd>&#35813;&#27169;&#22359;&#26377;&#19968;&#20010;&#22768;&#26126;&#20026; <code class="function">info</code> &#30340;&#20989;&#25968;&#12290;&#26681;&#25454;&#23427;&#30340;<a class="link" href="#odbchelper.funcdef" title="2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;">&#20989;&#25968;&#22768;&#26126;</a>&#21487;&#30693;&#65292;&#23427;&#26377;&#19977;&#20010;&#21442;&#25968;&#65306; <code class="varname">object</code>&#12289;<code class="varname">spacing</code> &#21644; <code class="varname">collapse</code>&#12290;&#23454;&#38469;&#19978;&#21518;&#38754;&#20004;&#20010;&#21442;&#25968;&#37117;&#26159;&#21487;&#36873;&#21442;&#25968;&#65292;&#20851;&#20110;&#36825;&#28857;&#20320;&#24456;&#24555;&#23601;&#20250;&#30475;&#21040;&#12290;</dd><dt><a href="#apihelper.intro.1.2">circled_2_delcric</a> </dt><dd><code class="function">info</code> &#20989;&#25968;&#26377;&#19968;&#20010;&#22810;&#34892;&#30340; <a class="link" href="#odbchelper.docstring" title="2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;"><code class="literal">doc string</code></a>&#65292;&#31616;&#35201;&#22320;&#25551;&#36848;&#20102;&#20989;&#25968;&#30340;&#21151;&#33021;&#12290;&#27880;&#24847;&#36825;&#37324;&#24182;&#27809;&#26377;&#25552;&#21040;&#36820;&#22238;&#20540;&#65307;&#21333;&#29420;&#20351;&#29992;&#36825;&#20010;&#20989;&#25968;&#21482;&#26159;&#20026;&#20102;&#36825;&#20010;&#20989;&#25968;&#20135;&#29983;&#30340;&#25928;&#26524;&#65292;&#24182;&#19981;&#26159;&#20026;&#20102;&#23427;&#30340;&#36820;&#22238;&#20540;&#12290;</dd><dt><a href="#apihelper.intro.1.3">circled_3_delcric</a> </dt><dd>&#20989;&#25968;&#20869;&#30340;&#20195;&#30721;&#26159;<a class="link" href="#odbchelper.indenting" title="2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;">&#32553;&#36827;</a>&#24418;&#24335;&#30340;&#12290;</dd><dt><a href="#apihelper.intro.1.4">circled_4_delcric</a> </dt><dd><code class="literal"><span class="literal">if</span> <span class="literal">__name__</span></code> <a class="link" href="#odbchelper.ifnametrick">&#25216;&#24039;</a>&#20801;&#35768;&#36825;&#20010;&#31243;&#24207;&#22312;&#33258;&#24049;&#29420;&#31435;&#36816;&#34892;&#26102;&#20570;&#20123;&#26377;&#29992;&#30340;&#20107;&#24773;&#65292;&#21516;&#26102;&#21448;&#19981;&#22952;&#30861;&#20316;&#20026;&#20854;&#23427;&#31243;&#24207;&#30340;&#27169;&#22359;&#20351;&#29992;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#31243;&#24207;&#21482;&#26159;&#31616;&#21333;&#22320;&#25171;&#21360;&#20986; <code class="function">info</code> &#20989;&#25968;&#30340; <code class="literal">doc string</code>&#12290;</dd><dt><a href="#apihelper.intro.1.5">circled_5_delcric</a> </dt><dd><a class="link" href="#odbchelper.ifnametrick"><code class="literal">if</code> &#35821;&#21477;</a>&#20351;&#29992; <code class="literal">==</code> &#36827;&#34892;&#27604;&#36739;&#65292;&#32780;&#19988;&#19981;&#38656;&#35201;&#25324;&#21495;&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="function">info</code> &#20989;&#25968;&#30340;&#35774;&#35745;&#24847;&#22270;&#26159;&#25552;&#20379;&#32473;&#24037;&#20316;&#22312; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20013;&#30340;&#24320;&#21457;&#20154;&#21592;&#20351;&#29992;&#65292;&#23427;&#21487;&#20197;&#25509;&#21463;&#20219;&#20309;&#21547;&#26377;&#20989;&#25968;&#25110;&#32773;&#26041;&#27861;&#30340;&#23545;&#35937; (&#27604;&#22914;&#27169;&#22359;&#65292;&#21547;&#26377;&#20989;&#25968;&#65292;&#21448;&#27604;&#22914;list&#65292;&#21547;&#26377;&#26041;&#27861;) &#20316;&#20026;&#21442;&#25968;&#65292;&#24182;&#25171;&#21360;&#20986;&#23545;&#35937;&#30340;&#25152;&#26377;&#20989;&#25968;&#21644;&#23427;&#20204;&#30340; <code class="literal">doc string</code>&#12290;</p><div class="example"><a name="d0e8396"></a><p class="title"><b>&#20363;&nbsp;4.2.&nbsp;<code class="filename">apihelper.py</code> &#30340;&#29992;&#27861;&#31034;&#20363;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from apihelper import info</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = []</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">info(li)</span>
<font color="teal">append     L.append(object) -- append object to end
count      L.count(value) -&gt; integer -- return number of occurrences of value
extend     L.extend(list) -- extend list by appending list elements
index      L.index(value) -&gt; integer -- return index of first occurrence of value
insert     L.insert(index, object) -- insert object before index
pop        L.pop([index]) -&gt; item -- remove and return item at index (default last)
remove     L.remove(value) -- remove first occurrence of value
reverse    L.reverse() -- reverse *IN PLACE*
sort       L.sort([cmpfunc]) -- sort *IN PLACE*; if given, cmpfunc(x, y) -&gt; -1, 0, 1</font></pre></div></div><br class="example-break"><p>&#32570;&#30465;&#22320;&#65292;&#31243;&#24207;&#36755;&#20986;&#36827;&#34892;&#20102;&#26684;&#24335;&#21270;&#22788;&#29702;&#65292;&#20197;&#20351;&#20854;&#26131;&#20110;&#38405;&#35835;&#12290;&#22810;&#34892; <code class="literal">doc string</code> &#34987;&#21512;&#24182;&#21040;&#21333;&#34892;&#20013;&#65292;&#35201;&#25913;&#21464;&#36825;&#20010;&#36873;&#39033;&#38656;&#35201;&#25351;&#23450; <em class="parameter"><code>collapse</code></em> &#21442;&#25968;&#30340;&#20540;&#20026; <code class="constant">0</code>&#12290;&#22914;&#26524;&#20989;&#25968;&#21517;&#31216;&#38271;&#20110;10&#20010;&#23383;&#31526;&#65292;&#20320;&#21487;&#20197;&#23558; <em class="parameter"><code>spacing</code></em> &#21442;&#25968;&#30340;&#20540;&#25351;&#23450;&#20026;&#26356;&#22823;&#30340;&#20540;&#20197;&#20351;&#36755;&#20986;&#26356;&#23481;&#26131;&#38405;&#35835;&#12290;</p><div class="example"><a name="d0e8433"></a><p class="title"><b>&#20363;&nbsp;4.3.&nbsp;<code class="filename">apihelper.py</code> &#30340;&#39640;&#32423;&#29992;&#27861;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import odbchelper</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">info(odbchelper)</span>
<font color="teal">buildConnectionString Build a connection string from a dictionary Returns string.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">info(odbchelper, 30)</span>
<font color="teal">buildConnectionString          Build a connection string from a dictionary Returns string.</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">info(odbchelper, 30, 0)</span>
<font color="teal">buildConnectionString          Build a connection string from a dictionary
    
    Returns string.
</font></pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.optional"></a>4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#20801;&#35768;&#20989;&#25968;&#21442;&#25968;&#26377;&#32570;&#30465;&#20540;&#65307;&#22914;&#26524;&#35843;&#29992;&#20989;&#25968;&#26102;&#19981;&#20351;&#29992;&#21442;&#25968;&#65292;&#21442;&#25968;&#23558;&#33719;&#24471;&#23427;&#30340;&#32570;&#30465;&#20540;&#12290;&#27492;&#22806;&#65292;&#36890;&#36807;&#20351;&#29992;&#21629;&#21517;&#21442;&#25968;&#36824;&#21487;&#20197;&#20197;&#20219;&#24847;&#39034;&#24207;&#25351;&#23450;&#21442;&#25968;&#12290;<span class="application">SQL Server</span> Transact/<acronym class="acronym">SQL</acronym> &#20013;&#30340;&#23384;&#20648;&#36807;&#31243;&#20063;&#21487;&#20197;&#20570;&#21040;&#36825;&#20123;&#65307;&#22914;&#26524;&#20320;&#26159;&#33050;&#26412;&#39640;&#25163;&#65292;&#20320;&#21487;&#20197;&#30053;&#36807;&#36825;&#37096;&#20998;&#12290;</p></div><div class="informalexample"><p><code class="function">info</code> &#20989;&#25968;&#23601;&#26159;&#36825;&#26679;&#19968;&#20010;&#20363;&#23376;&#65292;&#23427;&#26377;&#20004;&#20010;&#21487;&#36873;&#21442;&#25968;&#12290;</p><pre class="programlisting">
def info(object, spacing=10, collapse=1):</pre></div><p><code class="varname">spacing</code> &#21644; <code class="varname">collapse</code> &#26159;&#21487;&#36873;&#21442;&#25968;&#65292;&#22240;&#20026;&#23427;&#20204;&#24050;&#32463;&#23450;&#20041;&#20102;&#32570;&#30465;&#20540;&#12290;<code class="varname">object</code> &#26159;&#24517;&#22791;&#21442;&#25968;&#65292;&#22240;&#20026;&#23427;&#27809;&#26377;&#25351;&#23450;&#32570;&#30465;&#20540;&#12290;&#22914;&#26524;&#35843;&#29992; <code class="function">info</code> &#26102;&#21482;&#25351;&#23450;&#19968;&#20010;&#21442;&#25968;&#65292;&#37027;&#20040; <code class="varname">spacing</code> &#32570;&#30465;&#20026; <code class="constant">10</code> &#65292;<code class="varname">collapse</code> &#32570;&#30465;&#20026; <code class="constant">1</code>&#12290;&#22914;&#26524;&#35843;&#29992; <code class="function">info</code> &#26102;&#25351;&#23450;&#20004;&#20010;&#21442;&#25968;&#65292;<code class="varname">collapse</code> &#20381;&#28982;&#40664;&#35748;&#20026; <code class="constant">1</code>&#12290;</p><p>&#20551;&#22914;&#20320;&#35201;&#25351;&#23450; <code class="varname">collapse</code> &#30340;&#20540;&#65292;&#20294;&#26159;&#21448;&#24819;&#35201;&#25509;&#21463; <code class="varname">spacing</code> &#30340;&#32570;&#30465;&#20540;&#12290;&#22312;&#32477;&#22823;&#37096;&#20998;&#35821;&#35328;&#20013;&#65292;&#20320;&#21487;&#33021;&#36816;&#27668;&#23601;&#19981;&#22826;&#22909;&#20102;&#65292;&#22240;&#20026;&#20320;&#38656;&#35201;&#20351;&#29992;&#19977;&#20010;&#21442;&#25968;&#26469;&#35843;&#29992;&#20989;&#25968;&#65292;&#36825;&#21183;&#24517;&#35201;&#37325;&#26032;&#25351;&#23450; <code class="varname">spacing</code> &#30340;&#20540;&#12290;&#20294;&#26159;&#22312; <span class="application">Python</span> &#20013;&#65292;&#21442;&#25968;&#21487;&#20197;&#36890;&#36807;&#21517;&#31216;&#20197;&#20219;&#24847;&#39034;&#24207;&#25351;&#23450;&#12290;</p><div class="example"><a name="d0e8539"></a><p class="title"><b>&#20363;&nbsp;4.4.&nbsp;<code class="function">info</code> &#30340;&#26377;&#25928;&#35843;&#29992;</b></p><div class="example-contents"><pre class="programlisting">
info(odbchelper)                    <a name="apihelper_args.1.1"></a>circled_1_delcric
info(odbchelper, 12)                <a name="apihelper_args.1.2"></a>circled_2_delcric
info(odbchelper, collapse=0)        <a name="apihelper_args.1.3"></a>circled_3_delcric
info(spacing=15, object=odbchelper) <a name="apihelper_args.1.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#apihelper_args.1.1">circled_1_delcric</a> </dt><dd>&#21482;&#20351;&#29992;&#19968;&#20010;&#21442;&#25968;&#65292;<code class="varname">spacing</code> &#20351;&#29992;&#32570;&#30465;&#20540; <code class="literal">10</code> &#65292;<code class="varname">collapse</code> &#20351;&#29992;&#32570;&#30465;&#20540; <code class="constant">1</code>&#12290;</dd><dt><a href="#apihelper_args.1.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992;&#20004;&#20010;&#21442;&#25968;&#65292;<code class="varname">collapse</code> &#20351;&#29992;&#32570;&#30465;&#20540; <code class="constant">1</code>&#12290;</dd><dt><a href="#apihelper_args.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#26174;&#24335;&#21629;&#21517;&#20102; <code class="varname">collapse</code> &#24182;&#25351;&#23450;&#20102;&#23427;&#30340;&#20540;&#12290;<code class="varname">spacing</code> &#23558;&#20381;&#28982;&#20351;&#29992;&#23427;&#30340;&#32570;&#30465;&#20540; <code class="literal">10</code>&#12290;</dd><dt><a href="#apihelper_args.1.4">circled_4_delcric</a> </dt><dd>&#29978;&#33267;&#24517;&#22791;&#21442;&#25968; (&#20363;&#22914; <code class="varname">object</code>&#65292;&#27809;&#26377;&#25351;&#23450;&#32570;&#30465;&#20540;) &#20063;&#21487;&#20197;&#37319;&#29992;&#21629;&#21517;&#21442;&#25968;&#30340;&#26041;&#24335;&#65292;&#32780;&#19988;&#21629;&#21517;&#21442;&#25968;&#21487;&#20197;&#20197;&#20219;&#24847;&#39034;&#24207;&#20986;&#29616;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#20123;&#30475;&#19978;&#21435;&#38750;&#24120;&#32047;&#65292;&#38500;&#38750;&#20320;&#24847;&#35782;&#21040;&#21442;&#25968;&#19981;&#36807;&#26159;&#19968;&#20010;&#23383;&#20856;&#12290;"<span class="quote">&#36890;&#24120;</span>" &#19981;&#20351;&#29992;&#21442;&#25968;&#21517;&#31216;&#30340;&#20989;&#25968;&#35843;&#29992;&#21482;&#26159;&#19968;&#20010;&#31616;&#20889;&#30340;&#24418;&#24335;&#65292;<span class="application">Python</span> &#25353;&#29031;&#20989;&#25968;&#22768;&#26126;&#20013;&#23450;&#20041;&#30340;&#30340;&#21442;&#25968;&#39034;&#24207;&#23558;&#21442;&#25968;&#20540;&#21644;&#21442;&#25968;&#21517;&#31216;&#21305;&#37197;&#36215;&#26469;&#12290;&#22823;&#37096;&#20998;&#26102;&#38388;&#65292;&#20320;&#20250;&#20351;&#29992;"<span class="quote">&#36890;&#24120;</span>"&#26041;&#24335;&#35843;&#29992;&#20989;&#25968;&#65292;&#20294;&#26159;&#22914;&#26524;&#20320;&#38656;&#35201;&#65292;&#24635;&#26159;&#21487;&#20197;&#25552;&#20379;&#38468;&#21152;&#30340;&#28789;&#27963;&#24615;&#12290;</p><div class="note"><blockquote><b class="title"><a name="tip.arguments">&#27880;&#24847;: &#28789;&#27963;&#30340;&#20989;&#25968;&#35843;&#29992;</a></b><br>&#35843;&#29992;&#20989;&#25968;&#26102;&#21807;&#19968;&#24517;&#39035;&#20570;&#30340;&#20107;&#24773;&#23601;&#26159;&#20026;&#27599;&#19968;&#20010;&#24517;&#22791;&#21442;&#25968;&#25351;&#23450;&#20540; (&#20197;&#26576;&#31181;&#26041;&#24335;)&#65307;&#20197;&#20309;&#31181;&#20855;&#20307;&#30340;&#26041;&#24335;&#21644;&#39034;&#24207;&#37117;&#21462;&#20915;&#20110;&#20320;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#30830;&#20999;&#22320;&#35752;&#35770;&#20102;&#20309;&#26102;&#12289;&#22914;&#20309;&#36827;&#34892;&#32570;&#30465;&#21442;&#25968;&#36171;&#20540; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000</a>)&#65292;&#36825;&#37117;&#21644;&#32570;&#30465;&#20540;&#26159;&#19968;&#20010; list &#36824;&#26159;&#19968;&#20010;&#20855;&#26377;&#21103;&#20316;&#29992;&#30340;&#34920;&#36798;&#24335;&#26377;&#20851;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.builtin"></a>4.3.&nbsp;&#20351;&#29992; <code class="function">type</code>&#12289;<code class="function">str</code>&#12289;<code class="function">dir</code> &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#26377;&#23567;&#37096;&#20998;&#30456;&#24403;&#26377;&#29992;&#30340;&#20869;&#32622;&#20989;&#25968;&#12290;&#38500;&#36825;&#20123;&#20989;&#25968;&#20043;&#22806;&#65292;&#20854;&#23427;&#25152;&#26377;&#30340;&#20989;&#25968;&#37117;&#34987;&#20998;&#21040;&#20102;&#21508;&#20010;&#27169;&#22359;&#20013;&#12290;&#20854;&#23454;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#26126;&#26234;&#30340;&#35774;&#35745;&#31574;&#30053;&#65292;&#36991;&#20813;&#20102;&#26680;&#24515;&#35821;&#35328;&#21464;&#24471;&#20687;&#20854;&#23427;&#33050;&#26412;&#35821;&#35328;&#19968;&#26679;&#33219;&#32959; (&#21683; &#21683;&#65292;<span class="application">Visual Basic</span>)&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e8648"></a>4.3.1.&nbsp;<code class="function">type</code> &#20989;&#25968;</h3></div></div></div><p><code class="function">type</code> &#20989;&#25968;&#36820;&#22238;&#20219;&#24847;&#23545;&#35937;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#22312; <code class="filename">types</code> &#27169;&#22359;&#20013;&#21015;&#20986;&#20102;&#21487;&#33021;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#36825;&#23545;&#20110;&#22788;&#29702;&#22810;&#31181;&#25968;&#25454;&#31867;&#22411;&#30340;&#24110;&#21161;&#32773;&#20989;&#25968; <sup>[<a name="d0e8660" href="#ftn.d0e8660" class="footnote">1</a>]</sup> &#38750;&#24120;&#26377;&#29992;&#12290;</p><div class="example"><a name="apihelper.type.intro"></a><p class="title"><b>&#20363;&nbsp;4.5.&nbsp;<code class="function">type</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">typecircled_1_delcric</span>           <a name="apihelper.builtin.1.1"></a>circled_1_delcric
<font color="teal">&lt;type 'int'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = []</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">type(li)</span>          <a name="apihelper.builtin.1.2"></a>circled_2_delcric
<font color="teal">&lt;type 'list'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import odbchelper</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">type(odbchelper)</span>  <a name="apihelper.builtin.1.3"></a>circled_3_delcric
<font color="teal">&lt;type 'module'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import types</span>      <a name="apihelper.builtin.1.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">type(odbchelper) == types.ModuleType</span>
<font color="teal">True</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.builtin.1.1">circled_1_delcric</a> </dt><dd><code class="function">type</code> &#21487;&#20197;&#25509;&#25910;&#20219;&#20309;&#19996;&#35199;&#20316;&#20026;&#21442;&#25968;&#8213;&#8213;&#25105;&#30340;&#24847;&#24605;&#26159;&#20219;&#20309;&#19996;&#35199;&#8213;&#8213;&#24182;&#36820;&#22238;&#23427;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#25972;&#22411;&#12289;&#23383;&#31526;&#20018;&#12289;&#21015;&#34920;&#12289;&#23383;&#20856;&#12289;&#20803;&#32452;&#12289;&#20989;&#25968;&#12289;&#31867;&#12289;&#27169;&#22359;&#65292;&#29978;&#33267;&#31867;&#22411;&#23545;&#35937;&#37117;&#21487;&#20197;&#20316;&#20026;&#21442;&#25968;&#34987; <code class="function">type</code> &#20989;&#25968;&#25509;&#21463;&#12290;</dd><dt><a href="#apihelper.builtin.1.2">circled_2_delcric</a> </dt><dd><code class="function">type</code> &#21487;&#20197;&#25509;&#25910;&#21464;&#37327;&#20316;&#20026;&#21442;&#25968;&#65292;&#24182;&#36820;&#22238;&#23427;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;</dd><dt><a href="#apihelper.builtin.1.3">circled_3_delcric</a> </dt><dd><code class="function">type</code> &#36824;&#21487;&#20197;&#20316;&#29992;&#20110;&#27169;&#22359;&#12290;</dd><dt><a href="#apihelper.builtin.1.4">circled_4_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#20351;&#29992; <code class="filename">types</code> &#27169;&#22359;&#20013;&#30340;&#24120;&#37327;&#26469;&#36827;&#34892;&#23545;&#35937;&#31867;&#22411;&#30340;&#27604;&#36739;&#12290;&#36825;&#23601;&#26159; <code class="function">info</code> &#20989;&#25968;&#25152;&#20570;&#30340;&#65292;&#24456;&#24555;&#20320;&#23601;&#20250;&#30475;&#21040;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e8758"></a>4.3.2.&nbsp;<code class="function">str</code> &#20989;&#25968;</h3></div></div></div><p><code class="function">str</code> &#23558;&#25968;&#25454;&#24378;&#21046;&#36716;&#25442;&#20026;&#23383;&#31526;&#20018;&#12290;&#27599;&#31181;&#25968;&#25454;&#31867;&#22411;&#37117;&#21487;&#20197;&#24378;&#21046;&#36716;&#25442;&#20026;&#23383;&#31526;&#20018;&#12290;</p><div class="example"><a name="apihelper.str.intro"></a><p class="title"><b>&#20363;&nbsp;4.6.&nbsp;<code class="function">str</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">strcircled_1_delcric</span>          <a name="apihelper.builtin.2.1"></a>circled_1_delcric
<font color="teal">'1'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">horsemen = ['war', 'pestilence', 'famine']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">horsemen</span>
<font color="teal">['war', 'pestilence', 'famine']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">horsemen.append('<span class="application">Powerbuilder</span>')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">str(horsemen)</span>   <a name="apihelper.builtin.2.2"></a>circled_2_delcric
<font color="teal">"['war', 'pestilence', 'famine', '<span class="application">Powerbuilder</span>']"</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">str(odbchelper)</span> <a name="apihelper.builtin.2.3"></a>circled_3_delcric
<font color="teal">"&lt;module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'&gt;"</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">str(None)</span>       <a name="apihelper.builtin.2.4"></a>circled_4_delcric
<font color="teal">'None'</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.builtin.2.1">circled_1_delcric</a> </dt><dd>&#23545;&#20110;&#31616;&#21333;&#30340;&#25968;&#25454;&#31867;&#22411;&#27604;&#22914;&#25972;&#22411;&#65292;&#20320;&#21487;&#20197;&#39044;&#26009;&#21040; <code class="function">str</code> &#30340;&#27491;&#24120;&#24037;&#20316;&#65292;&#22240;&#20026;&#20960;&#20046;&#27599;&#31181;&#35821;&#35328;&#37117;&#26377;&#19968;&#20010;&#23558;&#25972;&#22411;&#36716;&#21270;&#20026;&#23383;&#31526;&#20018;&#30340;&#20989;&#25968;&#12290;</dd><dt><a href="#apihelper.builtin.2.2">circled_2_delcric</a> </dt><dd>&#28982;&#32780; <code class="function">str</code> &#21487;&#20197;&#20316;&#29992;&#20110;&#20219;&#20309;&#25968;&#25454;&#31867;&#22411;&#30340;&#20219;&#20309;&#23545;&#35937;&#12290;&#36825;&#37324;&#23427;&#20316;&#29992;&#20110;&#19968;&#20010;&#38646;&#30862;&#26500;&#24314;&#30340;&#21015;&#34920;&#12290;</dd><dt><a href="#apihelper.builtin.2.3">circled_3_delcric</a> </dt><dd><code class="function">str</code> &#36824;&#20801;&#35768;&#20316;&#29992;&#20110;&#27169;&#22359;&#12290;&#27880;&#24847;&#27169;&#22359;&#30340;&#23383;&#31526;&#20018;&#24418;&#24335;&#34920;&#31034;&#21253;&#21547;&#20102;&#27169;&#22359;&#22312;&#30913;&#30424;&#19978;&#30340;&#36335;&#24452;&#21517;&#65292;&#25152;&#20197;&#20320;&#30340;&#26174;&#31034;&#32467;&#26524;&#23558;&#20250;&#26377;&#25152;&#19981;&#21516;&#12290;</dd><dt><a href="#apihelper.builtin.2.4">circled_4_delcric</a> </dt><dd><code class="function">str</code> &#30340;&#19968;&#20010;&#32454;&#23567;&#20294;&#37325;&#35201;&#30340;&#34892;&#20026;&#26159;&#23427;&#21487;&#20197;&#20316;&#29992;&#20110; <code class="literal">None</code>&#65292;<code class="literal">None</code> &#26159; <span class="application">Python</span> &#30340; null &#20540;&#12290;&#36825;&#20010;&#35843;&#29992;&#36820;&#22238;&#23383;&#31526;&#20018; <code class="literal">'None'</code>&#12290;&#20320;&#23558;&#20250;&#20351;&#29992;&#36825;&#19968;&#28857;&#26469;&#25913;&#36827;&#20320;&#30340; <code class="function">info</code> &#20989;&#25968;&#65292;&#36825;&#19968;&#28857;&#20320;&#24456;&#24555;&#23601;&#20250;&#30475;&#21040;&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="function">info</code> &#20989;&#25968;&#30340;&#26680;&#24515;&#26159;&#24378;&#22823;&#30340; <code class="function">dir</code> &#20989;&#25968;&#12290;<code class="function">dir</code> &#20989;&#25968;&#36820;&#22238;&#20219;&#24847;&#23545;&#35937;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#21015;&#34920;&#65292;&#21253;&#25324;&#27169;&#22359;&#23545;&#35937;&#12289;&#20989;&#25968;&#23545;&#35937;&#12289;&#23383;&#31526;&#20018;&#23545;&#35937;&#12289;&#21015;&#34920;&#23545;&#35937;&#12289;&#23383;&#20856;&#23545;&#35937; &#8230;&#8230; &#30456;&#24403;&#22810;&#30340;&#19996;&#35199;&#12290;</p><div class="example"><a name="apihelper.dir.intro"></a><p class="title"><b>&#20363;&nbsp;4.7.&nbsp;<code class="function">dir</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = []</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">dir(li)</span>           <a name="apihelper.builtin.3.1"></a>circled_1_delcric
<font color="teal">['append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d = {}</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">dir(d)</span>            <a name="apihelper.builtin.3.2"></a>circled_2_delcric
<font color="teal">['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import odbchelper</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">dir(odbchelper)</span>   <a name="apihelper.builtin.3.3"></a>circled_3_delcric
<font color="teal">['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.builtin.3.1">circled_1_delcric</a> </dt><dd><code class="varname">li</code> &#26159;&#19968;&#20010;&#21015;&#34920;&#65292;&#25152;&#20197; <code class="literal"><code class="function">dir</code>(<code class="varname">li</code>)</code> &#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#25152;&#26377;&#21015;&#34920;&#26041;&#27861;&#30340;&#21015;&#34920;&#12290;&#27880;&#24847;&#36820;&#22238;&#30340;&#21015;&#34920;&#21482;&#21253;&#21547;&#20102;&#23383;&#31526;&#20018;&#24418;&#24335;&#30340;&#26041;&#27861;&#21517;&#31216;&#65292;&#32780;&#19981;&#26159;&#26041;&#27861;&#23545;&#35937;&#26412;&#36523;&#12290;</dd><dt><a href="#apihelper.builtin.3.2">circled_2_delcric</a> </dt><dd><code class="varname">d</code> &#26159;&#19968;&#20010;&#23383;&#20856;&#65292;&#25152;&#20197; <code class="literal"><code class="function">dir</code>(<code class="varname">d</code>)</code> &#36820;&#22238;&#23383;&#20856;&#26041;&#27861;&#30340;&#21517;&#31216;&#21015;&#34920;&#12290;&#20854;&#20013;&#33267;&#23569;&#26377;&#19968;&#20010;&#26041;&#27861;&#65292;<a class="link" href="#odbchelper.items" title="&#20363;&nbsp;3.25.&nbsp;keys, values &#21644; items &#20989;&#25968;"><code class="function">keys</code></a>&#65292;&#30475;&#36215;&#26469;&#36824;&#26159;&#25402;&#29087;&#24713;&#30340;&#12290;</dd><dt><a href="#apihelper.builtin.3.3">circled_3_delcric</a> </dt><dd>&#36825;&#37324;&#23601;&#26159;&#30495;&#27491;&#21464;&#24471;&#26377;&#36259;&#30340;&#22320;&#26041;&#12290;<code class="filename">odbchelper</code> &#26159;&#19968;&#20010;&#27169;&#22359;&#65292;&#25152;&#20197; <code class="literal"><code class="function">dir</code>(<code class="filename">odbchelper</code>)</code> &#36820;&#22238;&#27169;&#22359;&#20013;&#23450;&#20041;&#30340;&#25152;&#26377;&#37096;&#20214;&#30340;&#21015;&#34920;&#65292;&#21253;&#25324;&#20869;&#32622;&#30340;&#23646;&#24615;&#65292;&#20363;&#22914; <a class="link" href="#odbchelper.ifnametrick"><code class="literal">__name__</code></a>&#12289;<a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string"><code class="literal">__doc__</code></a>&#65292;&#20197;&#21450;&#20854;&#23427;&#20320;&#25152;&#23450;&#20041;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code class="filename">odbchelper</code> &#21482;&#26377;&#19968;&#20010;&#29992;&#25143;&#23450;&#20041;&#30340;&#26041;&#27861;&#65292;&#23601;&#26159;&#22312;<a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532; 2 &#31456;</a>&#20013;&#35770;&#36848;&#30340; <code class="function">buildConnectionString</code> &#20989;&#25968;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#26368;&#21518;&#26159; <code class="function">callable</code> &#20989;&#25968;&#65292;&#23427;&#25509;&#25910;&#20219;&#20309;&#23545;&#35937;&#20316;&#20026;&#21442;&#25968;&#65292;&#22914;&#26524;&#21442;&#25968;&#23545;&#35937;&#26159;&#21487;&#35843;&#29992;&#30340;&#65292;&#36820;&#22238; <code class="constant">True</code>&#65307;&#21542;&#21017;&#36820;&#22238; <code class="constant">False</code>&#12290;&#21487;&#35843;&#29992;&#23545;&#35937;&#21253;&#25324;&#20989;&#25968;&#12289;&#31867;&#26041;&#27861;&#65292;&#29978;&#33267;&#31867;&#33258;&#36523; (&#19979;&#19968;&#31456;&#23558;&#26356;&#22810;&#30340;&#20851;&#27880;&#31867;)&#12290;</p><div class="example"><a name="apihelper.builtin.callable"></a><p class="title"><b>&#20363;&nbsp;4.8.&nbsp;<code class="function">callable</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import string</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">string.punctuation</span>           <a name="apihelper.builtin.4.1"></a>circled_1_delcric
<font color="teal">'!"#$%&amp;\'()*+,-./:;&lt;=&gt;?@[\\]^_`{|}~'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">string.join</span>                  <a name="apihelper.builtin.4.2"></a>circled_2_delcric
<font color="teal">&lt;function join at 00C55A7C&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callable(string.punctuation)</span> <a name="apihelper.builtin.4.3"></a>circled_3_delcric
<font color="teal">False</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callable(string.join)</span>        <a name="apihelper.builtin.4.4"></a>circled_4_delcric
<font color="teal">True</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print string.join.__doc__</span>    <a name="apihelper.builtin.4.5"></a>circled_5_delcric
<font color="teal">join(list [,sep]) -&gt; string

    Return a string composed of the words in list, with
    intervening occurrences of sep.  The default separator is a
    single space.

    (joinfields and join are synonymous)</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.builtin.4.1">circled_1_delcric</a> </dt><dd><code class="filename">string</code> &#27169;&#22359;&#20013;&#30340;&#20989;&#25968;&#29616;&#22312;&#24050;&#32463;&#19981;&#36190;&#25104;&#20351;&#29992;&#20102; (&#23613;&#31649;&#24456;&#22810;&#20154;&#29616;&#22312;&#20173;&#28982;&#36824;&#22312;&#20351;&#29992; <code class="function">join</code> &#20989;&#25968;)&#65292;&#20294;&#26159;&#22312;&#36825;&#20010;&#27169;&#22359;&#20013;&#21253;&#21547;&#20102;&#35768;&#22810;&#26377;&#29992;&#30340;&#21464;&#37327;&#65292;&#20363;&#22914; <code class="varname">string.punctuation</code>&#65292;&#36825;&#20010;&#23383;&#31526;&#20018;&#21253;&#21547;&#20102;&#25152;&#26377;&#26631;&#20934;&#30340;&#26631;&#28857;&#31526;&#21495;&#23383;&#31526;&#12290;</dd><dt><a href="#apihelper.builtin.4.2">circled_2_delcric</a> </dt><dd><a class="link" href="#odbchelper.join" title="3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;"><code class="function">string.join</code></a> &#26159;&#19968;&#20010;&#29992;&#20110;&#36830;&#25509;&#23383;&#31526;&#20018;&#21015;&#34920;&#30340;&#20989;&#25968;&#12290;</dd><dt><a href="#apihelper.builtin.4.3">circled_3_delcric</a> </dt><dd><code class="varname">string.punctuation</code> &#26159;&#19981;&#21487;&#35843;&#29992;&#30340;&#23545;&#35937;&#65307;&#23427;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;(&#23383;&#31526;&#20018;&#30830;&#26377;&#21487;&#35843;&#29992;&#30340;&#26041;&#27861;&#65292;&#20294;&#26159;&#23383;&#31526;&#20018;&#26412;&#36523;&#19981;&#26159;&#21487;&#35843;&#29992;&#30340;&#12290;)</dd><dt><a href="#apihelper.builtin.4.4">circled_4_delcric</a> </dt><dd><code class="function">string.join</code> &#26159;&#21487;&#35843;&#29992;&#30340;&#65307;&#36825;&#20010;&#20989;&#25968;&#21487;&#20197;&#25509;&#21463;&#20004;&#20010;&#21442;&#25968;&#12290;</dd><dt><a href="#apihelper.builtin.4.5">circled_5_delcric</a> </dt><dd>&#20219;&#20309;&#21487;&#35843;&#29992;&#30340;&#23545;&#35937;&#37117;&#26377; <code class="literal">doc string</code>&#12290;&#36890;&#36807;&#23558; <code class="function">callable</code> &#20989;&#25968;&#20316;&#29992;&#20110;&#19968;&#20010;&#23545;&#35937;&#30340;&#27599;&#20010;&#23646;&#24615;&#65292;&#21487;&#20197;&#30830;&#23450;&#21738;&#20123;&#23646;&#24615; (&#26041;&#27861;&#12289;&#20989;&#25968;&#12289;&#31867;) &#26159;&#20320;&#35201;&#20851;&#27880;&#30340;&#65292;&#21738;&#20123;&#23646;&#24615; (&#24120;&#37327;&#31561;&#31561;) &#26159;&#20320;&#21487;&#20197;&#24573;&#30053;&#12289;&#20043;&#21069;&#19981;&#38656;&#35201;&#30693;&#36947;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e9105"></a>4.3.3.&nbsp;&#20869;&#32622;&#20989;&#25968;</h3></div></div></div><p><code class="function">type</code>&#12289;<code class="function">str</code>&#12289;<code class="function">dir</code> &#21644;&#20854;&#23427;&#30340; <span class="application">Python</span> &#20869;&#32622;&#20989;&#25968;&#37117;&#24402;&#32452;&#21040;&#20102; <code class="filename">__builtin__</code> (&#21069;&#21518;&#20998;&#21035;&#26159;&#21452;&#19979;&#21010;&#32447;) &#36825;&#20010;&#29305;&#27530;&#30340;&#27169;&#22359;&#20013;&#12290;&#22914;&#26524;&#26377;&#24110;&#21161;&#30340;&#35805;&#65292;&#20320;&#21487;&#20197;&#35748;&#20026; <span class="application">Python</span> &#22312;&#21551;&#21160;&#26102;&#33258;&#21160;&#25191;&#34892;&#20102; <code class="literal">from __builtin__ import *</code>&#65292;&#27492;&#35821;&#21477;&#23558;&#25152;&#26377;&#30340; "<span class="quote">&#20869;&#32622;</span>"  &#20989;&#25968;&#23548;&#20837;&#35813;&#21629;&#21517;&#31354;&#38388;&#65292;&#25152;&#20197;&#22312;&#36825;&#20010;&#21629;&#21517;&#31354;&#38388;&#20013;&#21487;&#20197;&#30452;&#25509;&#20351;&#29992;&#36825;&#20123;&#20869;&#32622;&#20989;&#25968;&#12290;</p><p>&#20687;&#36825;&#26679;&#32771;&#34385;&#30340;&#22909;&#22788;&#26159;&#65292;&#20320;&#26159;&#21487;&#20197;&#33719;&#21462; <code class="filename">__builtin__</code> &#27169;&#22359;&#20449;&#24687;&#30340;&#65292;&#24182;&#20197;&#32452;&#30340;&#24418;&#24335;&#35775;&#38382;&#25152;&#26377;&#30340;&#20869;&#32622;&#20989;&#25968;&#21644;&#23646;&#24615;&#12290;&#29468;&#21040;&#20160;&#20040;&#20102;&#21527;&#65292;&#29616;&#22312;&#25105;&#20204;&#30340; <span class="application">Python</span> &#26377;&#19968;&#20010;&#31216;&#20026; <code class="function">info</code> &#30340;&#20989;&#25968;&#12290;&#33258;&#24049;&#23581;&#35797;&#19968;&#19979;&#65292;&#30053;&#30475;&#19968;&#19979;&#32467;&#26524;&#21015;&#34920;&#12290;&#21518;&#38754;&#25105;&#20204;&#23558;&#28145;&#20837;&#21040;&#19968;&#20123;&#26356;&#37325;&#35201;&#30340;&#20989;&#25968;&#12290;(&#19968;&#20123;&#20869;&#32622;&#30340;&#38169;&#35823;&#31867;&#65292;&#27604;&#22914; <a class="link" href="#odbchelper.tuplemethods" title="&#20363;&nbsp;3.16.&nbsp;Tuple &#27809;&#26377;&#26041;&#27861;"><code class="errorcode">AttributeError</code></a>&#65292;&#24212;&#35813;&#30475;&#19978;&#21435;&#24050;&#32463;&#24456;&#29087;&#24713;&#20102;&#12290;)</p><div class="example"><a name="apihelper.builtin.list"></a><p class="title"><b>&#20363;&nbsp;4.9.&nbsp;&#20869;&#32622;&#23646;&#24615;&#21644;&#20869;&#32622;&#20989;&#25968;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from apihelper import info</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import __builtin__</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">info(__builtin__, 20)</span>
<font color="teal">ArithmeticError      Base class for arithmetic errors.
AssertionError       Assertion failed.
AttributeError       Attribute not found.
EOFError             Read beyond end of file.
EnvironmentError     Base class for I/O related errors.
Exception            Common base class for all exceptions.
FloatingPointError   Floating point operation failed.
IOError              I/O operation failed.

[...snip...]</font></pre></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="tip.manuals">&#27880;&#24847;: <span class="application">Python</span> &#26159;&#33258;&#25991;&#26723;&#21270;&#30340;</a></b><br><span class="application">Python</span> &#25552;&#20379;&#20102;&#24456;&#22810;&#20986;&#33394;&#30340;&#21442;&#32771;&#25163;&#20876;&#65292;&#20320;&#24212;&#35813;&#22909;&#22909;&#22320;&#31934;&#35835;&#19968;&#19979;&#25152;&#26377; <span class="application">Python</span> &#25552;&#20379;&#30340;&#24517;&#22791;&#27169;&#22359;&#12290;&#23545;&#20110;&#20854;&#23427;&#22823;&#37096;&#20998;&#35821;&#35328;&#65292;&#20320;&#20250;&#21457;&#29616;&#33258;&#24049;&#35201;&#24120;&#24120;&#22238;&#22836;&#21442;&#32771;&#25163;&#20876;&#25110;&#32773; man &#39029;&#26469;&#25552;&#37266;&#33258;&#24049;&#22914;&#20309;&#20351;&#29992;&#36825;&#20123;&#27169;&#22359;&#65292;&#20294;&#26159; <span class="application">Python</span> &#19981;&#21516;&#20110;&#27492;&#65292;&#23427;&#24456;&#22823;&#31243;&#24230;&#19978;&#26159;&#33258;&#25991;&#26723;&#21270;&#30340;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#23545;&#25152;&#26377;&#30340;&#20869;&#32622;&#20989;&#25968; (<a href="http://www.python.org/doc/current/lib/built-in-funcs.html">http://www.python.org/doc/current/lib/built-in-funcs.html</a>)&#21644;&#25152;&#26377;&#30340;&#20869;&#32622;&#24322;&#24120; (<a href="http://www.python.org/doc/current/lib/module-exceptions.html">http://www.python.org/doc/current/lib/module-exceptions.html</a>)&#37117;&#36827;&#34892;&#20102;&#25991;&#26723;&#21270;&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.getattr"></a>4.4.&nbsp;&#36890;&#36807; <code class="function">getattr</code> &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;</h2></div></div></div><div class="abstract"><p>&#20320;&#24050;&#32463;&#30693;&#36947; <a class="link" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;"><span class="application">Python</span> &#20989;&#25968;&#26159;&#23545;&#35937;</a>&#12290;&#20320;&#19981;&#30693;&#36947;&#30340;&#26159;&#65292;&#20351;&#29992; <code class="function">getattr</code> &#20989;&#25968;&#65292;&#21487;&#20197;&#24471;&#21040;&#19968;&#20010;&#30452;&#21040;&#36816;&#34892;&#26102;&#25165;&#30693;&#36947;&#21517;&#31216;&#30340;&#20989;&#25968;&#30340;&#24341;&#29992;&#12290;</p></div><div class="example"><a name="apihelper.getattr.intro"></a><p class="title"><b>&#20363;&nbsp;4.10.&nbsp;<code class="function">getattr</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ["Larry", "Curly"]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li.pop</span>                       <a name="apihelper.getattr.1.1"></a>circled_1_delcric
<font color="teal">&lt;built-in method pop of list object at 010DF884&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">getattr(li, "pop")</span>           <a name="apihelper.getattr.1.2"></a>circled_2_delcric
<font color="teal">&lt;built-in method pop of list object at 010DF884&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">getattr(li, "append")("Moe")</span> <a name="apihelper.getattr.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li</span>
<font color="teal">["Larry", "Curly", "Moe"]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">getattr({}, "clear")</span>         <a name="apihelper.getattr.1.4"></a>circled_4_delcric
<font color="teal">&lt;built-in method clear of dictionary object at 00F113D4&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">getattr((), "pop")</span>           <a name="apihelper.getattr.1.5"></a>circled_5_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
AttributeError: 'tuple' object has no attribute 'pop'</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.getattr.1.1">circled_1_delcric</a> </dt><dd>&#35813;&#35821;&#21477;&#33719;&#21462;&#21015;&#34920;&#30340; <code class="function">pop</code> &#26041;&#27861;&#30340;&#24341;&#29992;&#12290;&#27880;&#24847;&#35813;&#35821;&#21477;&#24182;&#19981;&#26159;&#35843;&#29992; <code class="function">pop</code> &#26041;&#27861;&#65307;&#35843;&#29992; <code class="function">pop</code> &#26041;&#27861;&#30340;&#24212;&#35813;&#26159; <code class="literal">li.pop()</code>&#12290;&#36825;&#37324;&#25351;&#30340;&#26159;&#26041;&#27861;&#23545;&#35937;&#26412;&#36523;&#12290;</dd><dt><a href="#apihelper.getattr.1.2">circled_2_delcric</a> </dt><dd>&#35813;&#35821;&#21477;&#20063;&#26159;&#36820;&#22238; <code class="function">pop</code> &#26041;&#27861;&#30340;&#24341;&#29992;&#65292;&#20294;&#26159;&#27492;&#26102;&#65292;&#26041;&#27861;&#21517;&#31216;&#26159;&#20316;&#20026;&#19968;&#20010;&#23383;&#31526;&#20018;&#21442;&#25968;&#20256;&#36882;&#32473; <code class="function">getattr</code> &#20989;&#25968;&#30340;&#12290;<code class="function">getattr</code> &#26159;&#19968;&#20010;&#26377;&#29992;&#21040;&#20196;&#20154;&#26080;&#27861;&#33268;&#20449;&#30340;&#20869;&#32622;&#20989;&#25968;&#65292;&#21487;&#20197;&#36820;&#22238;&#20219;&#20309;&#23545;&#35937;&#30340;&#20219;&#20309;&#23646;&#24615;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#23545;&#35937;&#26159;&#19968;&#20010; list&#65292;&#23646;&#24615;&#26159; <code class="function">pop</code> &#26041;&#27861;&#12290;</dd><dt><a href="#apihelper.getattr.1.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#19981;&#30830;&#20449;&#23427;&#26159;&#22810;&#20040;&#30340;&#26377;&#29992;&#65292;&#35797;&#35797;&#36825;&#20010;&#65306;<code class="function">getattr</code> &#30340;&#36820;&#22238;&#20540;<span class="emphasis"><em>&#26159;</em></span> &#26041;&#27861;&#65292;&#28982;&#21518;&#20320;&#23601;&#21487;&#20197;&#35843;&#29992;&#23427;&#65292;&#23601;&#20687;&#30452;&#25509;&#20351;&#29992; <code class="literal">li.append("Moe")</code> &#19968;&#26679;&#12290;&#20294;&#26159;&#23454;&#38469;&#19978;&#20320;&#27809;&#26377;&#30452;&#25509;&#35843;&#29992;&#20989;&#25968;&#65307;&#21482;&#26159;&#20197;&#23383;&#31526;&#20018;&#24418;&#24335;&#25351;&#23450;&#20102;&#20989;&#25968;&#21517;&#31216;&#12290;</dd><dt><a href="#apihelper.getattr.1.4">circled_4_delcric</a> </dt><dd><code class="function">getattr</code> &#20063;&#21487;&#20197;&#20316;&#29992;&#20110;&#23383;&#20856;&#12290;</dd><dt><a href="#apihelper.getattr.1.5">circled_5_delcric</a> </dt><dd>&#29702;&#35770;&#19978;&#65292;<code class="function">getattr</code> &#21487;&#20197;&#20316;&#29992;&#20110;&#20803;&#32452;&#65292;&#20294;&#26159;&#30001;&#20110;<a class="link" href="#odbchelper.tuplemethods" title="&#20363;&nbsp;3.16.&nbsp;Tuple &#27809;&#26377;&#26041;&#27861;">&#20803;&#32452;&#27809;&#26377;&#26041;&#27861;</a>&#65292;&#25152;&#20197;&#19981;&#31649;&#20320;&#25351;&#23450;&#20160;&#20040;&#23646;&#24615;&#21517;&#31216; <code class="function">getattr</code> &#37117;&#20250;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e9345"></a>4.4.1.&nbsp;&#29992;&#20110;&#27169;&#22359;&#30340; <code class="function">getattr</code></h3></div></div></div><p><code class="function">getattr</code> &#19981;&#20165;&#20165;&#36866;&#29992;&#20110;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;&#65292;&#20063;&#21487;&#20316;&#29992;&#20110;&#27169;&#22359;&#12290;</p><div class="example"><a name="apihelper.getattr.example"></a><p class="title"><b>&#20363;&nbsp;4.11.&nbsp;<code class="filename">apihelper.py</code> &#20013;&#30340; <code class="function">getattr</code> &#20989;&#25968;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import odbchelper</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">odbchelper.buildConnectionString</span>             <a name="apihelper.getattr.2.1"></a>circled_1_delcric
<font color="teal">&lt;function buildConnectionString at 00D18DD4&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">getattr(odbchelper, "buildConnectionString")</span> <a name="apihelper.getattr.2.2"></a>circled_2_delcric
<font color="teal">&lt;function buildConnectionString at 00D18DD4&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">object = odbchelper</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">method = "buildConnectionString"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">getattr(object, method)</span>                      <a name="apihelper.getattr.2.3"></a>circled_3_delcric
<font color="teal">&lt;function buildConnectionString at 00D18DD4&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">type(getattr(object, method))</span>                <a name="apihelper.getattr.2.4"></a>circled_4_delcric
<font color="teal">&lt;type 'function'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import types</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">type(getattr(object, method)) == types.FunctionType</span>
<font color="teal">True</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callable(getattr(object, method))</span>            <a name="apihelper.getattr.2.5"></a>circled_5_delcric
<font color="teal">True</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.getattr.2.1">circled_1_delcric</a> </dt><dd>&#35813;&#35821;&#21477;&#36820;&#22238; <code class="filename">odbchelper</code> &#27169;&#22359;&#20013; <code class="function">buildConnectionString</code> &#20989;&#25968;&#30340;&#24341;&#29992;&#65292;<a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#20320;&#24050;&#32463;&#30740;&#20064;&#36807;&#36825;&#20010;&#26041;&#27861;&#20102;&#12290;(&#20320;&#30475;&#21040;&#30340;&#36825;&#20010;&#21313;&#20845;&#36827;&#21046;&#22320;&#22336;&#26159;&#25105;&#26426;&#22120;&#19978;&#30340;&#65307;&#20320;&#30340;&#36755;&#20986;&#32467;&#26524;&#20250;&#26377;&#25152;&#19981;&#21516;&#12290;)</dd><dt><a href="#apihelper.getattr.2.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992; <code class="function">getattr</code>&#65292;&#20320;&#33021;&#22815;&#33719;&#24471;&#21516;&#19968;&#20989;&#25968;&#30340;&#21516;&#19968;&#24341;&#29992;&#12290;&#36890;&#24120;&#65292;<code class="literal"><code class="function">getattr</code>(<em class="replaceable">object</em>, "<em class="replaceable">attribute</em>")</code> &#31561;&#20215;&#20110; <code class="literal"><em class="replaceable">object</em>.<em class="replaceable">attribute</em></code>&#12290;&#22914;&#26524; <em class="replaceable"><code>object</code></em> &#26159;&#19968;&#20010;&#27169;&#22359;&#30340;&#35805;&#65292;&#37027;&#20040; <em class="replaceable"><code>attribute</code></em> &#21487;&#33021;&#26159;&#23450;&#20041;&#22312;&#27169;&#22359;&#20013;&#30340;&#20219;&#20309;&#19996;&#35199;&#65306;&#20989;&#25968;&#12289;&#31867;&#25110;&#32773;&#20840;&#23616;&#21464;&#37327;&#12290;</dd><dt><a href="#apihelper.getattr.2.3">circled_3_delcric</a> </dt><dd>&#25509;&#19979;&#26469;&#30340;&#26159;&#20320;&#30495;&#27491;&#29992;&#22312; <code class="function">info</code> &#20989;&#25968;&#20013;&#30340;&#19996;&#35199;&#12290;<code class="varname">object</code> &#20316;&#20026;&#19968;&#20010;&#21442;&#25968;&#20256;&#36882;&#32473;&#20989;&#25968;&#65307; <code class="varname">method</code> &#26159;&#26041;&#27861;&#25110;&#32773;&#20989;&#25968;&#30340;&#21517;&#31216;&#23383;&#31526;&#20018;&#12290;</dd><dt><a href="#apihelper.getattr.2.4">circled_4_delcric</a> </dt><dd>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code class="varname">method</code> &#26159;&#20989;&#25968;&#30340;&#21517;&#31216;&#65292;&#36890;&#36807;&#33719;&#21462; <a class="link" href="#apihelper.type.intro" title="&#20363;&nbsp;4.5.&nbsp;type &#20171;&#32461;"><code class="function">type</code></a> &#21487;&#20197;&#36827;&#34892;&#39564;&#35777;&#12290;</dd><dt><a href="#apihelper.getattr.2.5">circled_5_delcric</a> </dt><dd>&#30001;&#20110; <code class="varname">method</code> &#26159;&#19968;&#20010;&#20989;&#25968;&#65292;&#25152;&#20197;&#23427;&#26159;<a class="link" href="#apihelper.builtin.callable" title="&#20363;&nbsp;4.8.&nbsp;callable &#20171;&#32461;">&#21487;&#35843;&#29992;&#30340;</a>&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e9513"></a>4.4.2.&nbsp;<code class="function">getattr</code> &#20316;&#20026;&#19968;&#20010;&#20998;&#21457;&#32773;</h3></div></div></div><p><code class="function">getattr</code> &#24120;&#35265;&#30340;&#20351;&#29992;&#27169;&#24335;&#26159;&#20316;&#20026;&#19968;&#20010;&#20998;&#21457;&#32773;&#12290;&#20030;&#20010;&#20363;&#23376;&#65292;&#22914;&#26524;&#20320;&#26377;&#19968;&#20010;&#31243;&#24207;&#21487;&#20197;&#20197;&#19981;&#21516;&#30340;&#26684;&#24335;&#36755;&#20986;&#25968;&#25454;&#65292;&#20320;&#21487;&#20197;&#20026;&#27599;&#31181;&#36755;&#20986;&#26684;&#24335;&#23450;&#20041;&#21508;&#33258;&#30340;&#26684;&#24335;&#36755;&#20986;&#20989;&#25968;&#65292;&#28982;&#21518;&#20351;&#29992;&#21807;&#19968;&#30340;&#20998;&#21457;&#20989;&#25968;&#35843;&#29992;&#25152;&#38656;&#30340;&#26684;&#24335;&#36755;&#20986;&#20989;&#25968;&#12290;</p><p>&#20363;&#22914;&#65292;&#35753;&#25105;&#20204;&#20551;&#35774;&#26377;&#19968;&#20010;&#20197; <acronym class="acronym">HTML</acronym>&#12289;<acronym class="acronym">XML</acronym> &#21644;&#26222;&#36890;&#25991;&#26412;&#26684;&#24335;&#25171;&#21360;&#31449;&#28857;&#32479;&#35745;&#30340;&#31243;&#24207;&#12290;&#36755;&#20986;&#26684;&#24335;&#22312;&#21629;&#20196;&#34892;&#20013;&#25351;&#23450;&#65292;&#25110;&#32773;&#20445;&#23384;&#22312;&#37197;&#32622;&#25991;&#20214;&#20013;&#12290;<code class="filename">statsout</code> &#27169;&#22359;&#23450;&#20041;&#20102;&#19977;&#20010;&#20989;&#25968;&#65306;<code class="function">output_html</code>&#12289;<code class="function">output_xml</code> &#21644; <code class="function">output_text</code>&#12290;&#28982;&#21518;&#20027;&#31243;&#24207;&#23450;&#20041;&#20102;&#21807;&#19968;&#30340;&#36755;&#20986;&#20989;&#25968;&#65292;&#22914;&#19979;&#65306;</p><div class="example"><a name="apihelper.getattr.dispatch"></a><p class="title"><b>&#20363;&nbsp;4.12.&nbsp;&#20351;&#29992;<code class="function">getattr</code> &#21019;&#24314;&#20998;&#21457;&#32773;</b></p><div class="example-contents"><pre class="programlisting">
import statsout

def output(data, format="text"):                              <a name="apihelper.getattr.3.1"></a>circled_1_delcric
    output_function = getattr(statsout, "output_%s" % format) <a name="apihelper.getattr.3.2"></a>circled_2_delcric
    return output_function(data)                              <a name="apihelper.getattr.3.3"></a>circled_3_delcric
</pre></div></div><br class="example-break"><div class="calloutlist"><dl compact><dt><a href="#apihelper.getattr.3.1">circled_1_delcric</a> </dt><dd><code class="function">output</code> &#20989;&#25968;&#25509;&#25910;&#19968;&#20010;&#24517;&#22791;&#21442;&#25968; <code class="varname">data</code>&#65292;&#21644;&#19968;&#20010;&#21487;&#36873;&#21442;&#25968; <code class="varname">format</code>&#12290;&#22914;&#26524;&#27809;&#26377;&#25351;&#23450; <code class="varname">format</code> &#21442;&#25968;&#65292;&#20854;&#32570;&#30465;&#20540;&#26159; <code class="literal">text</code> &#24182;&#23436;&#25104;&#26222;&#36890;&#25991;&#26412;&#36755;&#20986;&#20989;&#25968;&#30340;&#35843;&#29992;&#12290;</dd><dt><a href="#apihelper.getattr.3.2">circled_2_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#36830;&#25509; <code class="varname">format</code> &#21442;&#25968;&#20540;&#21644; "output_" &#26469;&#21019;&#24314;&#19968;&#20010;&#20989;&#25968;&#21517;&#31216;&#20316;&#20026;&#21442;&#25968;&#20540;&#65292;&#28982;&#21518;&#20174; <code class="filename">statsout</code> &#27169;&#22359;&#20013;&#21462;&#24471;&#35813;&#20989;&#25968;&#12290;&#36825;&#31181;&#26041;&#24335;&#20801;&#35768;&#20170;&#21518;&#24456;&#23481;&#26131;&#22320;&#25193;&#23637;&#31243;&#24207;&#20197;&#25903;&#25345;&#20854;&#23427;&#30340;&#36755;&#20986;&#26684;&#24335;&#65292;&#32780;&#19988;&#26080;&#38656;&#20462;&#25913;&#20998;&#21457;&#20989;&#25968;&#12290;&#25152;&#35201;&#20570;&#30340;&#20165;&#20165;&#26159;&#21521; <code class="filename">statsout</code> &#20013;&#28155;&#21152;&#19968;&#20010;&#20989;&#25968;&#65292;&#27604;&#22914; <code class="function">output_pdf</code>&#65292;&#20043;&#21518;&#21482;&#35201;&#23558; &#8220;pdf&#8221; &#20316;&#20026; <code class="varname">format</code> &#30340;&#21442;&#25968;&#20540;&#20256;&#36882;&#32473; <code class="function">output</code> &#20989;&#25968;&#21363;&#21487;&#12290;</dd><dt><a href="#apihelper.getattr.3.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#20320;&#21487;&#20197;&#31616;&#21333;&#22320;&#35843;&#29992;&#36755;&#20986;&#20989;&#25968;&#65292;&#23601;&#20687;&#35843;&#29992;&#20854;&#23427;&#20989;&#25968;&#19968;&#26679;&#12290;<code class="varname">output_function</code> &#21464;&#37327;&#26159;&#25351;&#21521; <code class="filename">statsout</code> &#27169;&#22359;&#20013;&#30456;&#24212;&#20989;&#25968;&#30340;&#24341;&#29992;&#12290;</dd></dl></div><p>&#20320;&#26159;&#21542;&#21457;&#29616;&#21069;&#38754;&#31034;&#20363;&#30340;&#19968;&#20010; Bug&#65311;&#21363;&#23383;&#31526;&#20018;&#21644;&#20989;&#25968;&#20043;&#38388;&#30340;&#26494;&#32806;&#21512;&#65292;&#32780;&#19988;&#27809;&#26377;&#38169;&#35823;&#26816;&#26597;&#12290;&#22914;&#26524;&#29992;&#25143;&#20256;&#20837;&#19968;&#20010;&#26684;&#24335;&#21442;&#25968;&#65292;&#20294;&#26159;&#22312; <code class="filename">statsout</code> &#20013;&#27809;&#26377;&#23450;&#20041;&#30456;&#24212;&#30340;&#26684;&#24335;&#36755;&#20986;&#20989;&#25968;&#65292;&#20250;&#21457;&#29983;&#20160;&#20040;&#21602;&#65311;&#36824;&#22909;&#65292;<code class="function">getattr</code> &#20250;&#36820;&#22238; <code class="literal">None</code>&#65292;&#23427;&#20250;&#21462;&#20195;&#19968;&#20010;&#26377;&#25928;&#20989;&#25968;&#24182;&#34987;&#36171;&#20540;&#32473; <code class="varname">output_function</code>&#65292;&#28982;&#21518;&#19979;&#19968;&#34892;&#35843;&#29992;&#20989;&#25968;&#30340;&#35821;&#21477;&#23558;&#20250;&#22833;&#36133;&#24182;&#25243;&#20986;&#19968;&#20010;&#24322;&#24120;&#12290;&#36825;&#31181;&#26041;&#24335;&#19981;&#22909;&#12290;</p><p>&#20540;&#24471;&#24198;&#24184;&#30340;&#26159;&#65292;<code class="function">getattr</code> &#33021;&#22815;&#20351;&#29992;&#21487;&#36873;&#30340;&#31532;&#19977;&#20010;&#21442;&#25968;&#65292;&#19968;&#20010;&#32570;&#30465;&#36820;&#22238;&#20540;&#12290;</p><div class="example"><a name="apihelper.getattr.default"></a><p class="title"><b>&#20363;&nbsp;4.13.&nbsp;<code class="function">getattr</code> &#32570;&#30465;&#20540;</b></p><div class="example-contents"><pre class="programlisting">
import statsout

def output(data, format="text"):
    output_function = getattr(statsout, "output_%s" % format, statsout.output_text)
    return output_function(data) <a name="apihelper.getattr.4.1"></a>circled_1_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.getattr.4.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#20989;&#25968;&#35843;&#29992;&#19968;&#23450;&#21487;&#20197;&#24037;&#20316;&#65292;&#22240;&#20026;&#20320;&#22312;&#35843;&#29992; <code class="function">getattr</code> &#26102;&#28155;&#21152;&#20102;&#31532;&#19977;&#20010;&#21442;&#25968;&#12290;&#31532;&#19977;&#20010;&#21442;&#25968;&#26159;&#19968;&#20010;&#32570;&#30465;&#36820;&#22238;&#20540;&#65292;&#22914;&#26524;&#31532;&#20108;&#20010;&#21442;&#25968;&#25351;&#23450;&#30340;&#23646;&#24615;&#25110;&#32773;&#26041;&#27861;&#27809;&#33021;&#25214;&#21040;&#65292;&#21017;&#23558;&#36820;&#22238;&#36825;&#20010;&#32570;&#30465;&#36820;&#22238;&#20540;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#27491;&#22914;&#20320;&#25152;&#30475;&#21040;&#65292;<code class="function">getattr</code> &#26159;&#30456;&#24403;&#24378;&#22823;&#30340;&#12290;&#23427;&#26159;&#33258;&#30465;&#30340;&#26680;&#24515;&#65292;&#22312;&#21518;&#38754;&#30340;&#31456;&#33410;&#20013;&#20320;&#23558;&#30475;&#21040;&#23427;&#26356;&#24378;&#22823;&#30340;&#31034;&#20363;&#12290;</p></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.filter"></a>4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;</h2></div></div></div><div class="abstract"><p>&#22914;&#20320;&#25152;&#30693;&#65292;<span class="application">Python</span> &#20855;&#26377;&#36890;&#36807;&#21015;&#34920;&#35299;&#26512; (<a class="xref" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#31532;&nbsp;3.6&nbsp;&#33410; &#8220;&#26144;&#23556; list&#8221;</a>) &#23558;&#21015;&#34920;&#26144;&#23556;&#21040;&#20854;&#23427;&#21015;&#34920;&#30340;&#24378;&#22823;&#33021;&#21147;&#12290;&#36825;&#31181;&#33021;&#21147;&#21516;&#36807;&#28388;&#26426;&#21046;&#32467;&#21512;&#20351;&#29992;&#65292;&#20351;&#21015;&#34920;&#20013;&#30340;&#26377;&#20123;&#20803;&#32032;&#34987;&#26144;&#23556;&#30340;&#21516;&#26102;&#36339;&#36807;&#21478;&#22806;&#19968;&#20123;&#20803;&#32032;&#12290;</p></div><div class="informalexample"><p>&#36807;&#28388;&#21015;&#34920;&#35821;&#27861;&#65306;</p><pre class="programlisting">
[<em class="replaceable"><code>mapping-expression</code></em> for <em class="replaceable"><code>element</code></em> in <em class="replaceable"><code>source-list</code></em> if <em class="replaceable"><code>filter-expression</code></em>]</pre></div><p>&#36825;&#26159;&#20320;&#25152;&#30693;&#25152;&#29233;&#30340;<a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#21015;&#34920;&#35299;&#26512;</a>&#30340;&#25193;&#23637;&#12290;&#21069;&#19977;&#37096;&#20998;&#37117;&#26159;&#30456;&#21516;&#30340;&#65307;&#26368;&#21518;&#19968;&#37096;&#20998;&#65292;&#20197; <code class="literal">if</code> &#24320;&#22836;&#30340;&#26159;&#36807;&#28388;&#22120;&#34920;&#36798;&#24335;&#12290;&#36807;&#28388;&#22120;&#34920;&#36798;&#24335;&#21487;&#20197;&#26159;&#36820;&#22238;&#20540;&#20026;&#30495;&#25110;&#32773;&#20551;&#30340;&#20219;&#20309;&#34920;&#36798;&#24335; (&#22312; <span class="application">Python</span> &#20013;&#26159;<a class="link" href="#tip.boolean" title="&#27880;&#24847;: &#20309;&#35859; Python &#20013;&#30340; True &#65311;">&#20960;&#20046;&#20219;&#20309;&#19996;&#35199;</a>)&#12290;&#20219;&#20309;&#32463;&#36807;&#28388;&#22120;&#34920;&#36798;&#24335;&#28436;&#31639;&#20540;&#20026;&#30495;&#30340;&#20803;&#32032;&#37117;&#21487;&#20197;&#21253;&#21547;&#22312;&#26144;&#23556;&#20013;&#12290;&#20854;&#23427;&#30340;&#20803;&#32032;&#37117;&#23558;&#24573;&#30053;&#65292;&#23427;&#20204;&#19981;&#20250;&#36827;&#20837;&#26144;&#23556;&#34920;&#36798;&#24335;&#65292;&#26356;&#19981;&#20250;&#21253;&#21547;&#22312;&#36755;&#20986;&#21015;&#34920;&#20013;&#12290;</p><div class="example"><a name="d0e9689"></a><p class="title"><b>&#20363;&nbsp;4.14.&nbsp;&#21015;&#34920;&#36807;&#28388;&#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[elem for elem in li if len(elem) &gt; 1]</span>       <a name="apihelper.filter.1.1"></a>circled_1_delcric
<font color="teal">['mpilgrim', 'foo']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[elem for elem in li if elem != "b"]</span>         <a name="apihelper.filter.1.2"></a>circled_2_delcric
<font color="teal">['a', 'mpilgrim', 'foo', 'c', 'd', 'd']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[elem for elem in li if li.count(elem) == 1]</span> <a name="apihelper.filter.1.3"></a>circled_3_delcric
<font color="teal">['a', 'mpilgrim', 'foo', 'c']</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.filter.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#37324;&#30340;&#26144;&#23556;&#34920;&#36798;&#24335;&#24456;&#31616;&#21333; (&#21482;&#26159;&#36820;&#22238;&#27599;&#20010;&#20803;&#32032;&#30340;&#20540;)&#65292;&#25152;&#20197;&#35831;&#25226;&#27880;&#24847;&#21147;&#38598;&#20013;&#21040;&#36807;&#28388;&#22120;&#34920;&#36798;&#24335;&#19978;&#12290;&#30001;&#20110; <span class="application">Python</span> &#20250;&#36941;&#21382;&#25972;&#20010;&#21015;&#34920;&#65292;&#23427;&#23558;&#23545;&#27599;&#20010;&#20803;&#32032;&#25191;&#34892;&#36807;&#28388;&#22120;&#34920;&#36798;&#24335;&#12290;&#22914;&#26524;&#36807;&#28388;&#22120;&#34920;&#36798;&#24335;&#28436;&#31639;&#20540;&#20026;&#30495;&#65292;&#35813;&#20803;&#32032;&#23601;&#20250;&#34987;&#26144;&#23556;&#65292;&#21516;&#26102;&#26144;&#23556;&#34920;&#36798;&#24335;&#30340;&#32467;&#26524;&#23558;&#21253;&#21547;&#22312;&#36820;&#22238;&#30340;&#21015;&#34920;&#20013;&#12290;&#36825;&#37324;&#65292;&#20320;&#36807;&#28388;&#25481;&#20102;&#25152;&#26377;&#21333;&#23383;&#31526;&#30340;&#23383;&#31526;&#20018;&#65292;&#30041;&#19979;&#20102;&#19968;&#20010;&#30001;&#38271;&#23383;&#31526;&#20018;&#26500;&#25104;&#30340;&#21015;&#34920;&#12290;</dd><dt><a href="#apihelper.filter.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#36807;&#28388;&#25481;&#20102;&#19968;&#20010;&#29305;&#23450;&#20540; <code class="literal">b</code>&#12290;&#27880;&#24847;&#36825;&#20010;&#36807;&#28388;&#22120;&#20250;&#36807;&#28388;&#25481;&#25152;&#26377;&#30340; <code class="literal">b</code>&#65292;&#22240;&#20026;&#27599;&#27425;&#21462;&#20986; <code class="literal">b</code>&#65292;&#36807;&#28388;&#34920;&#36798;&#24335;&#37117;&#23558;&#20026;&#20551;&#12290;</dd><dt><a href="#apihelper.filter.1.3">circled_3_delcric</a> </dt><dd><code class="function">count</code> &#26159;&#19968;&#20010;&#21015;&#34920;&#26041;&#27861;&#65292;&#36820;&#22238;&#26576;&#20010;&#20540;&#22312;&#21015;&#34920;&#20013;&#20986;&#29616;&#30340;&#27425;&#25968;&#12290;&#20320;&#21487;&#20197;&#35748;&#20026;&#36825;&#20010;&#36807;&#28388;&#22120;&#23558;&#20174;&#21015;&#34920;&#20013;&#21076;&#38500;&#37325;&#22797;&#20803;&#32032;&#65292;&#36820;&#22238;&#19968;&#20010;&#21482;&#21253;&#21547;&#20102;&#22312;&#21407;&#22987;&#21015;&#34920;&#20013;&#26377;&#30528;&#21807;&#19968;&#20540;&#25335;&#36125;&#30340;&#21015;&#34920;&#12290;&#20294;&#24182;&#38750;&#22914;&#27492;&#65292;&#22240;&#20026;&#22312;&#21407;&#22987;&#21015;&#34920;&#20013;&#20986;&#29616;&#20004;&#27425;&#30340;&#20540; (&#22312;&#26412;&#20363;&#20013;&#65292;<code class="literal">b</code> &#21644; <code class="literal">d</code>) &#34987;&#23436;&#20840;&#21076;&#38500;&#20102;&#12290;&#20174;&#19968;&#20010;&#21015;&#34920;&#20013;&#25490;&#38500;&#37325;&#22797;&#20540;&#26377;&#22810;&#31181;&#26041;&#27861;&#65292;&#20294;&#36807;&#28388;&#24182;&#19981;&#26159;&#20854;&#20013;&#30340;&#19968;&#31181;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="informalexample"><a name="apihelper.filter.care"></a><p>&#22238;&#21040; <code class="filename">apihelper.py</code> &#20013;&#30340;&#36825;&#19968;&#34892;&#65306;</p><pre class="programlisting">
    methodList = [method for method in dir(object) if callable(getattr(object, method))]</pre></div><p>&#36825;&#34892;&#30475;&#19978;&#21435;&#25402;&#22797;&#26434;&#8213;&#8213;&#30830;&#23454;&#20063;&#24456;&#22797;&#26434;&#8213;&#8213;&#20294;&#26159;&#22522;&#26412;&#32467;&#26500;&#37117;&#36824;&#26159;&#19968;&#26679;&#30340;&#12290;&#25972;&#20010;&#36807;&#28388;&#34920;&#36798;&#24335;&#36820;&#22238;&#19968;&#20010;&#21015;&#34920;&#65292;&#24182;&#36171;&#20540;&#32473; <code class="varname">methodList</code> &#21464;&#37327;&#12290;&#34920;&#36798;&#24335;&#30340;&#21069;&#21322;&#37096;&#20998;&#26159;&#21015;&#34920;&#26144;&#23556;&#37096;&#20998;&#12290;&#26144;&#23556;&#34920;&#36798;&#24335;&#26159;&#19968;&#20010;&#21644;&#36941;&#21382;&#20803;&#32032;&#30456;&#21516;&#30340;&#34920;&#36798;&#24335;&#65292;&#22240;&#27492;&#23427;&#36820;&#22238;&#27599;&#20010;&#20803;&#32032;&#30340;&#20540;&#12290;<code class="literal"><code class="function">dir</code>(<code class="varname">object</code>)</code> &#36820;&#22238; <code class="varname">object</code> &#23545;&#35937;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#21015;&#34920;&#8213;&#8213;&#20320;&#27491;&#22312;&#26144;&#23556;&#30340;&#21015;&#34920;&#12290;&#25152;&#20197;&#21807;&#19968;&#26032;&#20986;&#29616;&#30340;&#37096;&#20998;&#23601;&#26159;&#22312; <code class="literal">if</code> &#21518;&#38754;&#30340;&#36807;&#28388;&#34920;&#36798;&#24335;&#12290;</p><p>&#36807;&#28388;&#34920;&#36798;&#24335;&#30475;&#19978;&#21435;&#24456;&#24656;&#24598;&#65292;&#20854;&#23454;&#19981;&#26159;&#12290;&#20320;&#24050;&#32463;&#30693;&#36947;&#20102; <a class="link" href="#apihelper.builtin.callable" title="&#20363;&nbsp;4.8.&nbsp;callable &#20171;&#32461;"><code class="function">callable</code></a>&#12289;<a class="link" href="#apihelper.getattr.intro" title="&#20363;&nbsp;4.10.&nbsp;getattr &#20171;&#32461;"><code class="function">getattr</code></a> &#21644; <a class="link" href="#odbchelper.tuplemethods" title="&#20363;&nbsp;3.16.&nbsp;Tuple &#27809;&#26377;&#26041;&#27861;"><code class="literal">in</code></a>&#12290;&#27491;&#22914;&#20320;&#22312;<a class="link" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;">&#21069;&#38754;&#30340;&#37096;&#20998;</a>&#20013;&#30475;&#21040;&#30340;&#65292;&#22914;&#26524; <code class="varname">object</code> &#26159;&#19968;&#20010;&#27169;&#22359;&#65292;&#24182;&#19988; <code class="varname">method</code> &#26159;&#19978;&#36848;&#27169;&#22359;&#20013;&#26576;&#20010;&#20989;&#25968;&#30340;&#21517;&#31216;&#65292;&#37027;&#20040;&#34920;&#36798;&#24335; <code class="literal">getattr(object, method)</code> &#23558;&#36820;&#22238;&#19968;&#20010;&#20989;&#25968;&#23545;&#35937;&#12290;</p><p>&#25152;&#20197;&#36825;&#20010;&#34920;&#36798;&#24335;&#25509;&#25910;&#19968;&#20010;&#21517;&#20026; <code class="varname">object</code> &#30340;&#23545;&#35937;&#65292;&#28982;&#21518;&#24471;&#21040;&#23427;&#30340;&#23646;&#24615;&#12289;&#26041;&#27861;&#12289;&#20989;&#25968;&#21644;&#20854;&#20182;&#25104;&#21592;&#30340;&#21517;&#31216;&#21015;&#34920;&#65292;&#25509;&#30528;&#36807;&#28388;&#25481;&#25105;&#20204;&#19981;&#20851;&#24515;&#30340;&#25104;&#21592;&#12290;&#25191;&#34892;&#36807;&#28388;&#34892;&#20026;&#26159;&#36890;&#36807;&#23545;&#27599;&#20010;&#23646;&#24615;/&#26041;&#27861;/&#20989;&#25968;&#30340;&#21517;&#31216;&#35843;&#29992; <code class="function">getattr</code> &#20989;&#25968;&#21462;&#24471;&#23454;&#38469;&#25104;&#21592;&#30340;&#24341;&#29992;&#65292;&#28982;&#21518;&#26816;&#26597;&#36825;&#20123;&#25104;&#21592;&#23545;&#35937;&#26159;&#21542;&#26159;&#21487;&#35843;&#29992;&#30340;&#65292;&#24403;&#28982;&#36825;&#20123;&#21487;&#35843;&#29992;&#30340;&#25104;&#21592;&#23545;&#35937;&#21487;&#33021;&#26159;&#26041;&#27861;&#25110;&#32773;&#20989;&#25968;&#65292;&#21516;&#26102;&#20063;&#21487;&#33021;&#26159;&#20869;&#32622;&#30340; (&#27604;&#22914;&#21015;&#34920;&#30340; <code class="function">pop</code> &#26041;&#27861;) &#25110;&#32773;&#29992;&#25143;&#33258;&#23450;&#20041;&#30340; (&#27604;&#22914; <code class="filename">odbchelper</code> &#27169;&#22359;&#30340; <code class="function">buildConnectionString</code> &#20989;&#25968;)&#12290;&#36825;&#37324;&#20320;&#19981;&#29992;&#20851;&#24515;&#20854;&#23427;&#30340;&#23646;&#24615;&#65292;&#22914;&#20869;&#32622;&#22312;&#27599;&#19968;&#20010;&#27169;&#22359;&#20013;&#30340; <code class="literal">__name__</code> &#23646;&#24615;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#20351;&#29992;&#20869;&#32622; <code class="function">filter</code> &#20989;&#25968; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000</a>)&#36807;&#28388;&#21015;&#34920;&#30340;&#21478;&#19968;&#31181;&#26041;&#24335;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.andor"></a>4.6.&nbsp;<code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#29305;&#27530;&#24615;&#36136;</h2></div></div></div><div class="abstract"><p>&#22312;<span class="application">Python</span> &#20013;&#65292;<code class="literal">and</code> &#21644; <code class="literal">or</code> &#25191;&#34892;&#24067;&#23572;&#36923;&#36753;&#28436;&#31639;&#65292;&#22914;&#20320;&#25152;&#26399;&#24453;&#30340;&#19968;&#26679;&#12290;&#20294;&#26159;&#23427;&#20204;&#24182;&#19981;&#36820;&#22238;&#24067;&#23572;&#20540;&#65292;&#32780;&#26159;&#36820;&#22238;&#23427;&#20204;&#23454;&#38469;&#36827;&#34892;&#27604;&#36739;&#30340;&#20540;&#20043;&#19968;&#12290;</p></div><div class="example"><a name="apihelper.andor.intro.example"></a><p class="title"><b>&#20363;&nbsp;4.15.&nbsp;<code class="literal">and</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">'a' and 'b'</span>         <a name="apihelper.andor.1.1"></a>circled_1_delcric
<font color="teal">'b'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">'' and 'b'</span>          <a name="apihelper.andor.1.2"></a>circled_2_delcric
<font color="teal">''</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">'a' and 'b' and 'c'</span> <a name="apihelper.andor.1.3"></a>circled_3_delcric
<font color="teal">'c'</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.andor.1.1">circled_1_delcric</a> </dt><dd>&#20351;&#29992; <code class="literal">and</code> &#26102;&#65292;&#22312;&#24067;&#23572;&#29615;&#22659;&#20013;&#20174;&#24038;&#21040;&#21491;&#28436;&#31639;&#34920;&#36798;&#24335;&#30340;&#20540;&#12290;<code class="constant">0</code>&#12289;<code class="literal">''</code>&#12289;<code class="literal">[]</code>&#12289;<code class="literal">()</code>&#12289;<code class="literal">{}</code>&#12289;<code class="literal">None</code> &#22312;&#24067;&#23572;&#29615;&#22659;&#20013;&#20026;&#20551;&#65307;&#20854;&#23427;&#20219;&#20309;&#19996;&#35199;&#37117;&#20026;&#30495;&#12290;&#36824;&#22909;&#65292;&#20960;&#20046;&#26159;&#25152;&#26377;&#19996;&#35199;&#12290;&#40664;&#35748;&#24773;&#20917;&#19979;&#65292;&#24067;&#23572;&#29615;&#22659;&#20013;&#30340;&#31867;&#23454;&#20363;&#20026;&#30495;&#65292;&#20294;&#26159;&#20320;&#21487;&#20197;&#22312;&#31867;&#20013;&#23450;&#20041;&#29305;&#23450;&#30340;&#26041;&#27861;&#20351;&#24471;&#31867;&#23454;&#20363;&#30340;&#28436;&#31639;&#20540;&#20026;&#20551;&#12290;&#20320;&#23558;&#20250;&#22312;<a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532; 5 &#31456;</a>&#20013;&#20102;&#35299;&#21040;&#31867;&#21644;&#36825;&#20123;&#29305;&#27530;&#26041;&#27861;&#12290;&#22914;&#26524;&#24067;&#23572;&#29615;&#22659;&#20013;&#30340;&#25152;&#26377;&#20540;&#37117;&#20026;&#30495;&#65292;&#37027;&#20040; <code class="literal">and</code> &#36820;&#22238;&#26368;&#21518;&#19968;&#20010;&#20540;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code class="literal">and</code> &#28436;&#31639; <code class="literal">'a'</code> &#30340;&#20540;&#20026;&#30495;&#65292;&#28982;&#21518;&#26159; <code class="literal">'b'</code> &#30340;&#28436;&#31639;&#20540;&#20026;&#30495;&#65292;&#26368;&#32456;&#36820;&#22238; <code class="literal">'b'</code>&#12290;</dd><dt><a href="#apihelper.andor.1.2">circled_2_delcric</a> </dt><dd>&#22914;&#26524;&#24067;&#23572;&#29615;&#22659;&#20013;&#30340;&#26576;&#20010;&#20540;&#20026;&#20551;&#65292;&#21017; <code class="literal">and</code> &#36820;&#22238;&#31532;&#19968;&#20010;&#20551;&#20540;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;<code class="literal">''</code> &#26159;&#31532;&#19968;&#20010;&#20551;&#20540;&#12290;</dd><dt><a href="#apihelper.andor.1.3">circled_3_delcric</a> </dt><dd>&#25152;&#26377;&#20540;&#37117;&#20026;&#30495;&#65292;&#25152;&#20197; <code class="literal">and</code> &#36820;&#22238;&#26368;&#21518;&#19968;&#20010;&#30495;&#20540;&#65292;<code class="literal">'c'</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e9965"></a><p class="title"><b>&#20363;&nbsp;4.16.&nbsp;<code class="literal">or</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">'a' or 'b'</span>          <a name="apihelper.andor.2.1"></a>circled_1_delcric
<font color="teal">'a'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">'' or 'b'</span>           <a name="apihelper.andor.2.2"></a>circled_2_delcric
<font color="teal">'b'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">'' or [] or {}</span>      <a name="apihelper.andor.2.3"></a>circled_3_delcric
<font color="teal">{}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def sidefx():</span>
<code class="prompt">...     </code><span class="userinput">print "in sidefx()"</span>
<code class="prompt">...     </code><span class="userinput">return 1</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">'a' or sidefx()</span>     <a name="apihelper.andor.2.4"></a>circled_4_delcric
<font color="teal">'a'</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.andor.2.1">circled_1_delcric</a> </dt><dd>&#20351;&#29992; <code class="literal">or</code> &#26102;&#65292;&#22312;&#24067;&#23572;&#29615;&#22659;&#20013;&#20174;&#24038;&#21040;&#21491;&#28436;&#31639;&#20540;&#65292;&#23601;&#20687; <code class="literal">and</code> &#19968;&#26679;&#12290;&#22914;&#26524;&#26377;&#19968;&#20010;&#20540;&#20026;&#30495;&#65292;<code class="literal">or</code> &#31435;&#21051;&#36820;&#22238;&#35813;&#20540;&#12290;&#26412;&#20363;&#20013;&#65292;<code class="literal">'a'</code> &#26159;&#31532;&#19968;&#20010;&#30495;&#20540;&#12290;</dd><dt><a href="#apihelper.andor.2.2">circled_2_delcric</a> </dt><dd><code class="literal">or</code> &#28436;&#31639; <code class="literal">''</code> &#30340;&#20540;&#20026;&#20551;&#65292;&#28982;&#21518;&#28436;&#31639; <code class="literal">'b'</code> &#30340;&#20540;&#20026;&#30495;&#65292;&#20110;&#26159;&#36820;&#22238; <code class="literal">'b'</code> &#12290;</dd><dt><a href="#apihelper.andor.2.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#25152;&#26377;&#30340;&#20540;&#37117;&#20026;&#20551;&#65292;<code class="literal">or</code> &#36820;&#22238;&#26368;&#21518;&#19968;&#20010;&#20551;&#20540;&#12290;<code class="literal">or</code> &#28436;&#31639; <code class="literal">''</code> &#30340;&#20540;&#20026;&#20551;&#65292;&#28982;&#21518;&#28436;&#31639; <code class="literal">[]</code> &#30340;&#20540;&#20026;&#20551;&#65292;&#20381;&#27425;&#28436;&#31639; <code class="literal">{}</code> &#30340;&#20540;&#20026;&#20551;&#65292;&#26368;&#32456;&#36820;&#22238; <code class="literal">{}</code> &#12290;</dd><dt><a href="#apihelper.andor.2.4">circled_4_delcric</a> </dt><dd>&#27880;&#24847; <code class="literal">or</code> &#22312;&#24067;&#23572;&#29615;&#22659;&#20013;&#20250;&#19968;&#30452;&#36827;&#34892;&#34920;&#36798;&#24335;&#28436;&#31639;&#30452;&#21040;&#25214;&#21040;&#31532;&#19968;&#20010;&#30495;&#20540;&#65292;&#28982;&#21518;&#23601;&#20250;&#24573;&#30053;&#21097;&#20313;&#30340;&#27604;&#36739;&#20540;&#12290;&#22914;&#26524;&#26576;&#20123;&#20540;&#20855;&#26377;&#21103;&#20316;&#29992;&#65292;&#36825;&#31181;&#29305;&#24615;&#23601;&#38750;&#24120;&#37325;&#35201;&#20102;&#12290;&#22312;&#36825;&#37324;&#65292;&#20989;&#25968; <code class="function">sidefx</code> &#27704;&#36828;&#37117;&#19981;&#20250;&#34987;&#35843;&#29992;&#65292;&#22240;&#20026; <code class="literal">or</code> &#28436;&#31639; <code class="literal">'a'</code> &#30340;&#20540;&#20026;&#30495;&#65292;&#25152;&#20197;&#32039;&#25509;&#30528;&#23601;&#31435;&#21051;&#36820;&#22238; <code class="literal">'a'</code> &#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22914;&#26524;&#20320;&#26159;&#19968;&#21517; <span class="application"><acronym class="acronym">C</acronym></span> &#35821;&#35328;&#40657;&#23458;&#65292;&#32943;&#23450;&#24456;&#29087;&#24713; <code class="literal"><em class="replaceable">bool</em> ? <code class="varname">a</code> : <code class="varname">b</code></code> &#34920;&#36798;&#24335;&#65292;&#22914;&#26524; <em class="replaceable"><code>bool</code></em> &#20026;&#30495;&#65292;&#34920;&#36798;&#24335;&#28436;&#31639;&#20540;&#20026; <code class="varname">a</code>&#65292;&#21542;&#21017;&#20026; <code class="varname">b</code>&#12290;&#22522;&#20110; <span class="application">Python</span> &#20013; <code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#24037;&#20316;&#26041;&#24335;&#65292;&#20320;&#21487;&#20197;&#23436;&#25104;&#30456;&#21516;&#30340;&#20107;&#24773;&#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e10128"></a>4.6.1.&nbsp;&#20351;&#29992; <code class="literal">and-or</code> &#25216;&#24039;</h3></div></div></div><div class="example"><a name="apihelper.andortrick.intro"></a><p class="title"><b>&#20363;&nbsp;4.17.&nbsp;<code class="literal">and-or</code> &#25216;&#24039;&#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">a = "first"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">b = "second"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">1 and a or b</span> <a name="apihelper.andor.3.1"></a>circled_1_delcric
<font color="teal">'first'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">0 and a or b</span> <a name="apihelper.andor.3.2"></a>circled_2_delcric
<font color="teal">'second'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.andor.3.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#35821;&#27861;&#30475;&#36215;&#26469;&#31867;&#20284;&#20110; <span class="application"><acronym class="acronym">C</acronym></span> &#35821;&#35328;&#20013;&#30340; <code class="literal"><em class="replaceable">bool</em> ? <code class="varname">a</code> : <code class="varname">b</code></code> &#34920;&#36798;&#24335;&#12290;&#25972;&#20010;&#34920;&#36798;&#24335;&#20174;&#24038;&#21040;&#21491;&#36827;&#34892;&#28436;&#31639;&#65292;&#25152;&#20197;&#20808;&#36827;&#34892; <code class="literal">and</code> &#34920;&#36798;&#24335;&#30340;&#28436;&#31639;&#12290;<code class="literal">1 and 'first'</code> &#28436;&#31639;&#20540;&#20026; <code class="literal">'first'</code>&#65292;&#28982;&#21518; <code class="literal">'first' or 'second'</code> &#30340;&#28436;&#31639;&#20540;&#20026; <code class="literal">'first'</code>&#12290;</dd><dt><a href="#apihelper.andor.3.2">circled_2_delcric</a> </dt><dd><code class="literal">0 and 'first'</code> &#28436;&#31639;&#20540;&#20026; <code class="constant">False</code>&#65292;&#28982;&#21518; <code class="literal">0 or 'second'</code> &#28436;&#31639;&#20540;&#20026; <code class="literal">'second'</code>&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#28982;&#32780;&#65292;&#30001;&#20110;&#36825;&#31181; <span class="application">Python</span> &#34920;&#36798;&#24335;&#21333;&#21333;&#21482;&#26159;&#36827;&#34892;&#24067;&#23572;&#36923;&#36753;&#36816;&#31639;&#65292;&#24182;&#19981;&#26159;&#35821;&#35328;&#30340;&#29305;&#23450;&#26500;&#25104;&#65292;&#36825;&#26159; <code class="literal">and-or</code> &#25216;&#24039;&#21644; <span class="application"><acronym class="acronym">C</acronym></span> &#35821;&#35328;&#20013;&#30340; <code class="literal"><em class="replaceable">bool</em> ? <code class="varname">a</code> : <code class="varname">b</code></code> &#35821;&#27861;&#38750;&#24120;&#37325;&#35201;&#30340;&#19981;&#21516;&#12290;&#22914;&#26524; <code class="varname">a</code> &#20026;&#20551;&#65292;&#34920;&#36798;&#24335;&#23601;&#19981;&#20250;&#25353;&#20320;&#26399;&#26395;&#30340;&#37027;&#26679;&#24037;&#20316;&#20102;&#12290;(&#20320;&#33021;&#30693;&#36947;&#25105;&#34987;&#36825;&#20010;&#38382;&#39064;&#25240;&#33150;&#36807;&#21527;&#65311;&#19981;&#27490;&#19968;&#27425;&#65311;)</p><div class="example"><a name="d0e10242"></a><p class="title"><b>&#20363;&nbsp;4.18.&nbsp;<code class="literal">and-or</code> &#25216;&#24039;&#26080;&#25928;&#30340;&#22330;&#21512;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">a = ""</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">b = "second"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">1 and a or b</span>         <a name="apihelper.andor.4.1"></a>circled_1_delcric
<font color="teal">'second'</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.andor.4.1">circled_1_delcric</a> </dt><dd>&#30001;&#20110; <code class="varname">a</code> &#26159;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#65292;&#22312; <span class="application">Python</span> &#30340;&#24067;&#23572;&#29615;&#22659;&#20013;&#31354;&#23383;&#31526;&#20018;&#34987;&#35748;&#20026;&#26159;&#20551;&#30340;&#65292;<code class="literal">1 and ''</code> &#30340;&#28436;&#31639;&#20540;&#20026; <code class="literal">''</code>&#65292;&#26368;&#21518; <code class="literal">'' or 'second'</code> &#30340;&#28436;&#31639;&#20540;&#20026; <code class="literal">'second'</code>&#12290;&#22114;&#65281;&#36825;&#20010;&#20540;&#24182;&#19981;&#26159;&#20320;&#24819;&#35201;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="literal">and-or</code> &#25216;&#24039;&#65292;&#20063;&#23601;&#26159; <code class="literal"><em class="replaceable">bool</em> and <code class="varname">a</code> or <code class="varname">b</code></code> &#34920;&#36798;&#24335;&#65292;&#24403; <code class="varname">a</code> &#22312;&#24067;&#23572;&#29615;&#22659;&#20013;&#30340;&#20540;&#20026;&#20551;&#26102;&#65292;&#19981;&#20250;&#20687; <span class="application"><acronym class="acronym">C</acronym></span> &#35821;&#35328;&#34920;&#36798;&#24335; <code class="literal"><em class="replaceable">bool</em> ? <code class="varname">a</code> : <code class="varname">b</code></code> &#37027;&#26679;&#24037;&#20316;&#12290;</p><p>&#22312; <code class="literal">and-or</code> &#25216;&#24039;&#21518;&#38754;&#30495;&#27491;&#30340;&#25216;&#24039;&#26159;&#65292;&#30830;&#20445; <code class="varname">a</code> &#30340;&#20540;&#20915;&#19981;&#20250;&#20026;&#20551;&#12290;&#26368;&#24120;&#29992;&#30340;&#26041;&#24335;&#26159;&#20351; <code class="varname">a</code> &#25104;&#20026; <code class="literal">[<code class="varname">a</code>]</code> &#12289; <code class="varname">b</code> &#25104;&#20026; <code class="literal">[<code class="varname">b</code>]</code>&#65292;&#28982;&#21518;&#20351;&#29992;&#36820;&#22238;&#20540;&#21015;&#34920;&#30340;&#31532;&#19968;&#20010;&#20803;&#32032;&#65292;&#24212;&#35813;&#26159; <code class="varname">a</code> &#25110; <code class="varname">b</code>&#20013;&#30340;&#26576;&#19968;&#20010;&#12290;</p><div class="example"><a name="d0e10352"></a><p class="title"><b>&#20363;&nbsp;4.19.&nbsp;&#23433;&#20840;&#20351;&#29992; <code class="literal">and-or</code> &#25216;&#24039;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">a = ""</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">b = "second"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">(1 and [a] or [b])[0]</span> <a name="apihelper.andor.5.1"></a>circled_1_delcric
<font color="teal">''</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.andor.5.1">circled_1_delcric</a> </dt><dd>&#30001;&#20110; <code class="literal">[<code class="varname">a</code>]</code> &#26159;&#19968;&#20010;&#38750;&#31354;&#21015;&#34920;&#65292;&#25152;&#20197;&#23427;&#20915;&#19981;&#20250;&#20026;&#20551;&#12290;&#21363;&#20351; <code class="varname">a</code> &#26159; <code class="constant">0</code> &#25110;&#32773; <code class="literal">''</code> &#25110;&#32773;&#20854;&#23427;&#20551;&#20540;&#65292;&#21015;&#34920; <code class="literal">[<code class="varname">a</code>]</code> &#20063;&#20026;&#30495;&#65292;&#22240;&#20026;&#23427;&#26377;&#19968;&#20010;&#20803;&#32032;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21040;&#29616;&#22312;&#20026;&#27490;&#65292;&#36825;&#20010;&#25216;&#24039;&#21487;&#33021;&#30475;&#19978;&#21435;&#38382;&#39064;&#36229;&#36807;&#20102;&#23427;&#30340;&#20215;&#20540;&#12290;&#27605;&#31455;&#65292;&#20351;&#29992; <code class="literal">if</code>  &#35821;&#21477;&#21487;&#20197;&#23436;&#25104;&#30456;&#21516;&#30340;&#20107;&#24773;&#65292;&#37027;&#20026;&#20160;&#20040;&#35201;&#32463;&#21382;&#36825;&#20123;&#40635;&#28902;&#20107;&#21602;&#65311;&#21734;&#65292;&#22312;&#24456;&#22810;&#24773;&#20917;&#19979;&#65292;&#20320;&#35201;&#22312;&#20004;&#20010;&#24120;&#37327;&#20540;&#20013;&#36827;&#34892;&#36873;&#25321;&#65292;&#30001;&#20110;&#20320;&#30693;&#36947; <code class="varname">a</code> &#30340;&#20540;&#24635;&#26159;&#20026;&#30495;&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#20351;&#29992;&#36825;&#31181;&#36739;&#20026;&#31616;&#21333;&#30340;&#35821;&#27861;&#32780;&#19988;&#19981;&#29992;&#25285;&#24515;&#12290;&#23545;&#20110;&#20351;&#29992;&#26356;&#20026;&#22797;&#26434;&#30340;&#23433;&#20840;&#24418;&#24335;&#65292;&#20381;&#28982;&#26377;&#24456;&#22909;&#30340;&#29702;&#30001;&#35201;&#27714;&#36825;&#26679;&#20570;&#12290;&#20363;&#22914;&#65292;&#22312; <span class="application">Python</span> &#35821;&#35328;&#30340;&#26576;&#20123;&#24773;&#20917;&#19979; <code class="literal">if</code> &#35821;&#21477;&#26159;&#19981;&#20801;&#35768;&#20351;&#29992;&#30340;&#65292;&#27604;&#22914;&#22312; <code class="literal">lambda</code> &#20989;&#25968;&#20013;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><span class="application">Python</span> Cookbook (<a href="http://www.activestate.com/ASPN/Python/Cookbook/">http://www.activestate.com/ASPN/Python/Cookbook/</a>) &#35752;&#35770;&#20102;&#20854;&#23427;&#30340; <code class="literal">and-or</code> &#25216;&#24039; (<a href="http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52310">http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52310</a>)&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.lambda"></a>4.7.&nbsp;&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#25903;&#25345;&#19968;&#31181;&#26377;&#36259;&#30340;&#35821;&#27861;&#65292;&#23427;&#20801;&#35768;&#20320;&#24555;&#36895;&#23450;&#20041;&#21333;&#34892;&#30340;&#26368;&#23567;&#20989;&#25968;&#12290;&#36825;&#20123;&#21483;&#20570; <code class="literal">lambda</code> &#30340;&#20989;&#25968;&#65292;&#26159;&#20174; <span class="application">Lisp</span> &#20511;&#29992;&#26469;&#30340;&#65292;&#21487;&#20197;&#29992;&#22312;&#20219;&#20309;&#38656;&#35201;&#20989;&#25968;&#30340;&#22320;&#26041;&#12290;</p></div><div class="example"><a name="d0e10455"></a><p class="title"><b>&#20363;&nbsp;4.20.&nbsp;<code class="literal">lambda</code> &#20989;&#25968;&#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def f(x):</span>
<code class="prompt">...     </code><span class="userinput">return x*2</span>
<code class="prompt">...     </code><span class="userinput"></span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fcircled_3_delcric</span>
<font color="teal">6</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">g = lambda x: x*2</span>  <a name="apihelper.lambda.1.2"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">gcircled_3_delcric</span>
<font color="teal">6</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">(lambda x: x*2)circled_3_delcric</span> <a name="apihelper.lambda.1.3"></a>circled_2_delcric
<font color="teal">6</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.lambda.1.2">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010; <code class="literal">lambda</code> &#20989;&#25968;&#65292;&#23436;&#25104;&#21516;&#19978;&#38754;&#26222;&#36890;&#20989;&#25968;&#30456;&#21516;&#30340;&#20107;&#24773;&#12290;&#27880;&#24847;&#36825;&#37324;&#30340;&#31616;&#30701;&#30340;&#35821;&#27861;&#65306;&#22312;&#21442;&#25968;&#21015;&#34920;&#21608;&#22260;&#27809;&#26377;&#25324;&#21495;&#65292;&#32780;&#19988;&#24573;&#30053;&#20102; <code class="literal">return</code> &#20851;&#38190;&#23383; (&#38544;&#21547;&#23384;&#22312;&#65292;&#22240;&#20026;&#25972;&#20010;&#20989;&#25968;&#21482;&#26377;&#19968;&#34892;)&#12290;&#32780;&#19988;&#65292;&#35813;&#20989;&#25968;&#27809;&#26377;&#20989;&#25968;&#21517;&#31216;&#65292;&#20294;&#26159;&#21487;&#20197;&#23558;&#23427;&#36171;&#20540;&#32473;&#19968;&#20010;&#21464;&#37327;&#36827;&#34892;&#35843;&#29992;&#12290;</dd><dt><a href="#apihelper.lambda.1.3">circled_2_delcric</a> </dt><dd>&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;&#26102;&#29978;&#33267;&#19981;&#38656;&#35201;&#23558;&#23427;&#36171;&#20540;&#32473;&#19968;&#20010;&#21464;&#37327;&#12290;&#36825;&#21487;&#33021;&#19981;&#26159;&#19990;&#19978;&#26368;&#26377;&#29992;&#30340;&#19996;&#35199;&#65292;&#23427;&#21482;&#26159;&#23637;&#31034;&#20102; <code class="literal">lambda</code> &#20989;&#25968;&#21482;&#26159;&#19968;&#20010;&#20869;&#32852;&#20989;&#25968;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#24635;&#30340;&#26469;&#35828;&#65292;<code class="literal">lambda</code> &#20989;&#25968;&#21487;&#20197;&#25509;&#25910;&#20219;&#24847;&#22810;&#20010;&#21442;&#25968; (&#21253;&#25324;<a class="link" href="#apihelper.optional" title="4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;">&#21487;&#36873;&#21442;&#25968;</a>) &#24182;&#19988;&#36820;&#22238;&#21333;&#20010;&#34920;&#36798;&#24335;&#30340;&#20540;&#12290;<code class="literal">lambda</code> &#20989;&#25968;&#19981;&#33021;&#21253;&#21547;&#21629;&#20196;&#65292;&#21253;&#21547;&#30340;&#34920;&#36798;&#24335;&#19981;&#33021;&#36229;&#36807;&#19968;&#20010;&#12290;&#19981;&#35201;&#35797;&#22270;&#21521; <code class="literal">lambda</code> &#20989;&#25968;&#20013;&#22622;&#20837;&#22826;&#22810;&#30340;&#19996;&#35199;&#65307;&#22914;&#26524;&#20320;&#38656;&#35201;&#26356;&#22797;&#26434;&#30340;&#19996;&#35199;&#65292;&#24212;&#35813;&#23450;&#20041;&#19968;&#20010;&#26222;&#36890;&#20989;&#25968;&#65292;&#28982;&#21518;&#24819;&#35753;&#23427;&#22810;&#38271;&#23601;&#22810;&#38271;&#12290;</p><div class="note"><blockquote><b class="title"><a name="tip.lambda">&#27880;&#24847;: <code class="literal">lambda</code> &#26159;&#21487;&#36873;&#30340;</a></b><br><code class="literal">lambda</code> &#20989;&#25968;&#26159;&#19968;&#31181;&#39118;&#26684;&#38382;&#39064;&#12290;&#19981;&#19968;&#23450;&#38750;&#35201;&#20351;&#29992;&#23427;&#20204;&#65307;&#20219;&#20309;&#33021;&#22815;&#20351;&#29992;&#23427;&#20204;&#30340;&#22320;&#26041;&#65292;&#37117;&#21487;&#20197;&#23450;&#20041;&#19968;&#20010;&#21333;&#29420;&#30340;&#26222;&#36890;&#20989;&#25968;&#26469;&#36827;&#34892;&#26367;&#25442;&#12290;&#25105;&#23558;&#23427;&#20204;&#29992;&#22312;&#38656;&#35201;&#23553;&#35013;&#29305;&#27530;&#30340;&#12289;&#38750;&#37325;&#29992;&#20195;&#30721;&#19978;&#65292;&#36991;&#20813;&#20196;&#25105;&#30340;&#20195;&#30721;&#20805;&#26021;&#30528;&#22823;&#37327;&#21333;&#34892;&#20989;&#25968;&#12290;</blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e10549"></a>4.7.1.&nbsp;&#30495;&#23454;&#19990;&#30028;&#20013;&#30340; <code class="literal">lambda</code> &#20989;&#25968;</h3></div></div></div><div class="informalexample"><p><code class="filename">apihelper.py</code> &#20013;&#30340; <code class="literal">lambda</code> &#20989;&#25968;&#65306;</p><pre class="programlisting">
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)</pre></div><p>&#27880;&#24847;&#36825;&#37324;&#20351;&#29992;&#20102; <a class="link" href="#apihelper.andor" title="4.6.&nbsp;and &#21644; or &#30340;&#29305;&#27530;&#24615;&#36136;"><code class="literal">and-or</code></a> &#25216;&#24039;&#30340;&#31616;&#21333;&#24418;&#24335;&#65292;&#23427;&#26159;&#27809;&#38382;&#39064;&#30340;&#65292;&#22240;&#20026; <code class="literal">lambda</code> &#20989;&#25968;<a class="link" href="#tip.boolean" title="&#27880;&#24847;: &#20309;&#35859; Python &#20013;&#30340; True &#65311;">&#22312;&#24067;&#23572;&#29615;&#22659;&#20013;</a>&#24635;&#26159;&#20026;&#30495;&#12290;(&#36825;&#24182;&#19981;&#24847;&#21619;&#36825; <code class="literal">lambda</code> &#20989;&#25968;&#19981;&#33021;&#36820;&#22238;&#20551;&#20540;&#12290;&#36825;&#20010;&#20989;&#25968;&#23545;&#35937;&#30340;&#24067;&#23572;&#20540;&#20026;&#30495;&#65307;&#23427;&#30340;&#36820;&#22238;&#20540;&#21487;&#20197;&#26159;&#20219;&#20309;&#19996;&#35199;&#12290;)</p><p>&#36824;&#35201;&#27880;&#24847;&#30340;&#26159;&#20351;&#29992;&#20102;&#27809;&#26377;&#21442;&#25968;&#30340; <code class="function">split</code> &#20989;&#25968;&#12290;&#20320;&#24050;&#32463;&#30475;&#21040;&#36807;&#23427;&#24102;<a class="link" href="#odbchelper.split.example" title="&#20363;&nbsp;3.28.&nbsp;&#20998;&#21106;&#23383;&#31526;&#20018;">&#19968;&#20010;&#25110;&#32773;&#20004;&#20010;&#21442;&#25968;</a>&#30340;&#20351;&#29992;&#65292;&#20294;&#26159;&#19981;&#24102;&#21442;&#25968;&#23427;&#25353;&#31354;&#30333;&#36827;&#34892;&#20998;&#21106;&#12290;</p><div class="example"><a name="d0e10589"></a><p class="title"><b>&#20363;&nbsp;4.21.&nbsp;<code class="function">split</code> &#19981;&#24102;&#21442;&#25968;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = "this   is\na\ttest"</span>  <a name="apihelper.split.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print s</span>
<font color="teal">this   is
a	test</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print s.split()</span>           <a name="apihelper.split.1.2"></a>circled_2_delcric
<font color="teal">['this', 'is', 'a', 'test']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print " ".join(s.split())</span> <a name="apihelper.split.1.3"></a>circled_3_delcric
<font color="teal">'this is a test'</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.split.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010;&#22810;&#34892;&#23383;&#31526;&#20018;&#65292;&#36890;&#36807;&#20351;&#29992;&#36716;&#20041;&#23383;&#31526;&#30340;&#23450;&#20041;&#20195;&#26367;&#20102;<a class="link" href="#odbchelper.triplequotes" title="&#20363;&nbsp;2.2.&nbsp;&#23450;&#20041; buildConnectionString &#20989;&#25968;&#30340; doc string">&#19977;&#37325;&#24341;&#21495;</a>&#12290;<code class="literal">\n</code> &#26159;&#19968;&#20010;&#22238;&#36710;&#65292;<code class="literal">\t</code> &#26159;&#19968;&#20010;&#21046;&#34920;&#31526;&#12290;</dd><dt><a href="#apihelper.split.1.2">circled_2_delcric</a> </dt><dd>&#19981;&#24102;&#21442;&#25968;&#30340; <code class="function">split</code> &#25353;&#29031;&#31354;&#30333;&#36827;&#34892;&#20998;&#21106;&#12290;&#25152;&#20197;&#19977;&#20010;&#31354;&#26684;&#12289;&#19968;&#20010;&#22238;&#36710;&#21644;&#19968;&#20010;&#21046;&#34920;&#31526;&#37117;&#26159;&#19968;&#26679;&#30340;&#12290;</dd><dt><a href="#apihelper.split.1.3">circled_3_delcric</a> </dt><dd>&#36890;&#36807; <code class="function">split</code> &#20998;&#21106;&#23383;&#31526;&#20018;&#20320;&#21487;&#20197;&#23558;&#31354;&#26684;&#32479;&#19968;&#21270;&#65307;&#28982;&#21518;&#20877;&#20197;&#21333;&#20010;&#31354;&#26684;&#20316;&#20026;&#20998;&#38548;&#31526;&#29992; <code class="function">join</code> &#23558;&#20854;&#37325;&#26032;&#36830;&#25509;&#36215;&#26469;&#12290;&#36825;&#20063;&#23601;&#26159; <code class="function">info</code> &#20989;&#25968;&#23558;&#22810;&#34892; <code class="literal">doc string</code> &#21512;&#24182;&#25104;&#21333;&#34892;&#25152;&#20570;&#30340;&#20107;&#24773;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040; <code class="function">info</code> &#20989;&#25968;&#21040;&#24213;&#29992;&#36825;&#20123; <code class="literal">lambda</code> &#20989;&#25968;&#12289;<code class="function">split</code> &#20989;&#25968;&#21644; <code class="literal">and-or</code> &#25216;&#24039;&#20570;&#20102;&#20123;&#20160;&#20040;&#21602;&#65311;</p><div class="informalexample"><a name="apihelper.funcassign"></a><pre class="programlisting">
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)</pre></div><p><code class="varname">processFunc</code> &#29616;&#22312;&#26159;&#19968;&#20010;&#20989;&#25968;&#65292;&#20294;&#26159;&#23427;&#21040;&#24213;&#26159;&#21738;&#19968;&#20010;&#20989;&#25968;&#36824;&#35201;&#21462;&#20915;&#20110; <code class="varname">collapse</code> &#21464;&#37327;&#12290;&#22914;&#26524; <code class="varname">collapse</code> &#20026;&#30495;&#65292;<code class="literal"><code class="varname">processFunc</code>(<em class="replaceable">string</em>)</code> &#23558;&#21387;&#32553;&#31354;&#30333;&#65307;&#21542;&#21017; <code class="literal"><code class="varname">processFunc</code>(<em class="replaceable">string</em>)</code> &#23558;&#36820;&#22238;&#26410;&#25913;&#21464;&#30340;&#21442;&#25968;&#12290;</p><p>&#22312;&#19968;&#20010;&#19981;&#24456;&#20581;&#22766;&#30340;&#35821;&#35328;&#20013;&#23454;&#29616;&#23427;&#65292;&#20687; <span class="application">Visual Basic</span>&#65292;&#20320;&#24456;&#26377;&#21487;&#33021;&#35201;&#21019;&#24314;&#19968;&#20010;&#20989;&#25968;&#65292;&#25509;&#21463;&#19968;&#20010;&#23383;&#31526;&#20018;&#21442;&#25968;&#21644;&#19968;&#20010; <em class="parameter"><code>collapse</code></em> &#21442;&#25968;&#65292;&#24182;&#20351;&#29992; <code class="literal">if</code> &#35821;&#21477;&#30830;&#23450;&#26159;&#21542;&#21387;&#32553;&#31354;&#30333;&#65292;&#28982;&#21518;&#20877;&#36820;&#22238;&#30456;&#24212;&#30340;&#20540;&#12290;&#36825;&#31181;&#26041;&#24335;&#26159;&#20302;&#25928;&#30340;&#65292;&#22240;&#20026;&#20989;&#25968;&#21487;&#33021;&#38656;&#35201;&#22788;&#29702;&#27599;&#19968;&#31181;&#21487;&#33021;&#30340;&#24773;&#20917;&#12290;&#27599;&#27425;&#20320;&#35843;&#29992;&#23427;&#65292;&#23427;&#23558;&#19981;&#24471;&#19981;&#22312;&#32473;&#20986;&#20320;&#25152;&#24819;&#35201;&#30340;&#19996;&#35199;&#20043;&#21069;&#65292;&#21028;&#26029;&#26159;&#21542;&#35201;&#21387;&#32553;&#31354;&#30333;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#20320;&#21487;&#20197;&#23558;&#20915;&#31574;&#36923;&#36753;&#25343;&#21040;&#20989;&#25968;&#22806;&#38754;&#65292;&#32780;&#23450;&#20041;&#19968;&#20010;&#35009;&#20943;&#36807;&#30340; <code class="literal">lambda</code> &#20989;&#25968;&#25552;&#20379;&#30830;&#20999;&#30340; (&#21807;&#19968;&#30340;) &#20320;&#24819;&#35201;&#30340;&#12290;&#36825;&#31181;&#26041;&#24335;&#26356;&#20026;&#39640;&#25928;&#12289;&#26356;&#20026;&#20248;&#38597;&#65292;&#32780;&#19988;&#24456;&#23569;&#24341;&#36215;&#37027;&#20123;&#20196;&#20154;&#35752;&#21388; (&#21734;&#65292;&#24819;&#21040;&#37027;&#20123;&#21442;&#25968;&#23601;&#22836;&#26127;) &#30340;&#38169;&#35823;&#12290;</p><div class="itemizedlist"><p class="title"><b><code class="literal">lambda</code> &#20989;&#25968;&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#35752;&#35770;&#20102;&#20351;&#29992; <code class="literal">lambda</code> &#26469;&#38388;&#25509;&#35843;&#29992;&#20989;&#25968; (<a href="http://www.faqts.com/knowledge-base/view.phtml/aid/6081/fid/241">http://www.faqts.com/knowledge-base/view.phtml/aid/6081/fid/241</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#28436;&#31034;&#20102;&#22914;&#20309;&#20174;&#19968;&#20010; <code class="literal">lambda</code> &#20989;&#25968;&#20869;&#37096;&#35775;&#38382;&#22806;&#37096;&#21464;&#37327; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006740000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006740000000000000000</a>)&#12290;(<acronym class="acronym">PEP</acronym> 227 (<a href="http://python.sourceforge.net/peps/pep-0227.html">http://python.sourceforge.net/peps/pep-0227.html</a>) &#35299;&#37322;&#20102;&#22312; <span class="application">Python</span> &#30340;&#26410;&#26469;&#29256;&#26412;&#20013;&#23558;&#22914;&#20309;&#21464;&#21270;&#12290;)</li><li><em class="citetitle">The Whole <span class="application">Python</span> <acronym class="acronym">FAQ</acronym></em> (<a href="http://www.python.org/doc/FAQ.html">http://www.python.org/doc/FAQ.html</a>) &#26377;&#20851;&#20110;&#20196;&#20154;&#27169;&#31946;&#30340;&#20351;&#29992; <code class="literal">lambda</code> &#21333;&#34892;&#35821;&#21477; (<a href="http://www.python.org/cgi-bin/faqw.py?query=4.15&amp;querytype=simple&amp;casefold=yes&amp;req=search">http://www.python.org/cgi-bin/faqw.py?query=4.15&amp;querytype=simple&amp;casefold=yes&amp;req=search</a>)&#30340;&#20363;&#23376;&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.alltogether"></a>4.8.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</h2></div></div></div><div class="abstract"><p>&#26368;&#21518;&#19968;&#34892;&#20195;&#30721;&#26159;&#21807;&#19968;&#36824;&#27809;&#26377;&#35299;&#37322;&#36807;&#30340;&#65292;&#23427;&#23436;&#25104;&#20840;&#37096;&#30340;&#24037;&#20316;&#12290;&#20294;&#26159;&#29616;&#22312;&#24037;&#20316;&#24050;&#32463;&#31616;&#21333;&#20102;&#65292;&#22240;&#20026;&#25152;&#38656;&#35201;&#30340;&#27599;&#20214;&#20107;&#37117;&#24050;&#32463;&#25353;&#29031;&#38656;&#27714;&#24314;&#31435;&#22909;&#20102;&#12290;&#25152;&#26377;&#30340;&#22810;&#31859;&#35834;&#39592;&#29260;&#24050;&#32463;&#23601;&#20301;&#65292;&#21040;&#20102;&#23558;&#23427;&#20204;&#25512;&#20498;&#30340;&#26102;&#20505;&#20102;&#12290;</p></div><div class="informalexample"><p>&#19979;&#38754;&#26159; <code class="filename">apihelper.py</code> &#30340;&#20851;&#38190;</p><pre class="programlisting">
    print "\n".join(["%s %s" %
                      (method.ljust(spacing),
                       processFunc(str(getattr(object, method).__doc__)))
                     for method in methodList])</pre></div><p>&#27880;&#24847;&#36825;&#26159;&#19968;&#26465;&#21629;&#20196;&#65292;&#34987;&#20998;&#38548;&#25104;&#20102;&#22810;&#34892;&#65292;&#20294;&#26159;&#24182;&#27809;&#26377;&#20351;&#29992;&#32493;&#34892;&#31526; (<code class="literal">\</code>)&#12290;&#36824;&#35760;&#24471;&#25105;&#35828;&#36807;<a class="link" href="#tip.implicitmultiline">&#19968;&#20123;&#34920;&#36798;&#24335;&#21487;&#20197;&#20998;&#21106;&#25104;&#22810;&#34892;</a>&#32780;&#19981;&#38656;&#35201;&#20351;&#29992;&#21453;&#26012;&#32447;&#21527;&#65311;&#21015;&#34920;&#35299;&#26512;&#23601;&#26159;&#36825;&#20123;&#34920;&#36798;&#24335;&#20043;&#19968;&#65292;&#22240;&#20026;&#25972;&#20010;&#34920;&#36798;&#24335;&#21253;&#25324;&#22312;&#26041;&#25324;&#21495;&#37324;&#12290;</p><p>&#29616;&#22312;&#65292;&#35753;&#25105;&#20204;&#20174;&#21518;&#21521;&#21069;&#20998;&#26512;&#12290;</p><pre class="programlisting">
for method in methodList</pre><p>&#21578;&#35785;&#25105;&#20204;&#36825;&#26159;&#19968;&#20010;<a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#21015;&#34920;&#35299;&#26512;</a>&#12290;&#22914;&#20320;&#25152;&#30693; <code class="varname">methodList</code> &#26159; <code class="varname">object</code> &#20013;<a class="link" href="#apihelper.filter.care">&#25152;&#26377;&#20320;&#20851;&#24515;&#30340;&#26041;&#27861;</a>&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;&#25152;&#20197;&#20320;&#27491;&#22312;&#20351;&#29992; <code class="varname">method</code> &#36941;&#21382;&#21015;&#34920;&#12290;</p><div class="example"><a name="d0e10827"></a><p class="title"><b>&#20363;&nbsp;4.22.&nbsp;&#21160;&#24577;&#24471;&#21040; <code class="literal">doc string</code> </b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import odbchelper</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">object = odbchelper</span>                   <a name="apihelper.alltogether.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">method = 'buildConnectionString'</span>      <a name="apihelper.alltogether.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">getattr(object, method)</span>               <a name="apihelper.alltogether.1.3"></a>circled_3_delcric
<font color="teal">&lt;function buildConnectionString at 010D6D74&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print getattr(object, method).__doc__</span> <a name="apihelper.alltogether.1.4"></a>circled_4_delcric
<font color="teal">Build a connection string from a dictionary of parameters.

    Returns string.</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.alltogether.1.1">circled_1_delcric</a> </dt><dd>&#22312; <code class="function">info</code> &#20989;&#25968;&#20013;&#65292;<code class="varname">object</code> &#26159;&#35201;&#24471;&#21040;&#24110;&#21161;&#30340;&#23545;&#35937;&#65292;&#20316;&#20026;&#19968;&#20010;&#21442;&#25968;&#20256;&#20837;&#12290;</dd><dt><a href="#apihelper.alltogether.1.2">circled_2_delcric</a> </dt><dd>&#22312;&#20320;&#36941;&#21382; <code class="varname">methodList</code> &#26102;&#65292;<code class="varname">method</code> &#26159;&#24403;&#21069;&#26041;&#27861;&#30340;&#21517;&#31216;&#12290;</dd><dt><a href="#apihelper.alltogether.1.3">circled_3_delcric</a> </dt><dd>&#36890;&#36807; <a class="link" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;"><code class="function">getattr</code></a> &#20989;&#25968;&#65292;&#20320;&#21487;&#20197;&#24471;&#21040; <em class="replaceable"><code>object</code></em> &#27169;&#22359;&#20013; <em class="replaceable"><code>method</code></em> &#20989;&#25968;&#30340;&#24341;&#29992;&#12290;</dd><dt><a href="#apihelper.alltogether.1.4">circled_4_delcric</a> </dt><dd>&#29616;&#22312;&#65292;&#24456;&#23481;&#26131;&#23601;&#21487;&#20197;&#25171;&#21360;&#20986;&#26041;&#27861;&#30340; <code class="literal">doc string</code> &#12290;</dd></dl></div></div></div><br class="example-break"><p>&#25509;&#19979;&#26469;&#20196;&#20154;&#22256;&#24785;&#30340;&#26159; <code class="literal">doc string</code> &#21608;&#22260; <code class="function">str</code> &#30340;&#20351;&#29992;&#12290;&#20320;&#21487;&#33021;&#35760;&#24471;&#65292;<code class="function">str</code> &#26159;&#19968;&#20010;&#20869;&#32622;&#20989;&#25968;&#65292;&#23427;&#21487;&#20197;<a class="link" href="#apihelper.builtin" title="4.3.&nbsp;&#20351;&#29992; type&#12289;str&#12289;dir &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;">&#24378;&#21046;&#23558;&#25968;&#25454;&#36716;&#21270;&#20026;&#23383;&#31526;&#20018;</a>&#12290;&#20294;&#26159;&#19968;&#20010; <code class="literal">doc string</code> &#24212;&#35813;&#24635;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#20026;&#20160;&#20040;&#36824;&#35201;&#36153;&#20107;&#22320;&#20351;&#29992; <code class="function">str</code> &#20989;&#25968;&#21602;&#65311;&#31572;&#26696;&#23601;&#26159;&#65306;&#19981;&#26159;&#27599;&#20010;&#20989;&#25968;&#37117;&#26377; <code class="literal">doc string</code> &#65292;&#22914;&#26524;&#27809;&#26377;&#65292;&#36825;&#20010; <code class="literal">__doc__</code> &#23646;&#24615;&#20026; <code class="literal">None</code>&#12290;</p><div class="example"><a name="d0e10939"></a><p class="title"><b>&#20363;&nbsp;4.23.&nbsp;&#20026;&#20160;&#20040;&#23545;&#19968;&#20010; <code class="literal">doc string</code> &#20351;&#29992; <code class="function">str</code> &#65311;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">&gt;&gt;&gt; def foo(): print 2</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">&gt;&gt;&gt; foo()</span>
<font color="teal">2</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">&gt;&gt;&gt; foo.__doc__</span>     <a name="apihelper.alltogether.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">foo.__doc__ == None</span> <a name="apihelper.alltogether.2.2"></a>circled_2_delcric
<font color="teal">True</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">str(foo.__doc__)</span>    <a name="apihelper.alltogether.2.3"></a>circled_3_delcric
<font color="teal">'None'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.alltogether.2.1">circled_1_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#24456;&#23481;&#26131;&#30340;&#23450;&#20041;&#19968;&#20010;&#27809;&#26377; <code class="literal">doc string</code> &#30340;&#20989;&#25968;&#65292;&#36825;&#31181;&#24773;&#20917;&#19979;&#23427;&#30340; <code class="literal">__doc__</code> &#23646;&#24615;&#20026; <code class="literal">None</code>&#12290;&#20196;&#20154;&#36855;&#24785;&#30340;&#26159;&#65292;&#22914;&#26524;&#20320;&#30452;&#25509;&#28436;&#31639; <code class="literal">__doc__</code> &#23646;&#24615;&#30340;&#20540;&#65292;<span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20160;&#20040;&#37117;&#19981;&#20250;&#25171;&#21360;&#12290;&#36825;&#26159;&#26377;&#24847;&#20041;&#30340; (&#21069;&#25552;&#26159;&#20320;&#32771;&#34385;&#20102;&#36825;&#20010;&#32467;&#26524;&#30340;&#26469;&#30001;)&#65292;&#20294;&#26159;&#21364;&#27809;&#26377;&#20160;&#20040;&#29992;&#12290;</dd><dt><a href="#apihelper.alltogether.2.2">circled_2_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#30452;&#25509;&#36890;&#36807; <code class="literal">__doc__</code> &#23646;&#24615;&#21644; <code class="literal">None</code> &#30340;&#27604;&#36739;&#39564;&#35777; <code class="literal">__doc__</code> &#23646;&#24615;&#30340;&#20540;&#12290;</dd><dt><a href="#apihelper.alltogether.2.3">circled_3_delcric</a> </dt><dd><code class="function">str</code> &#20989;&#25968;&#21487;&#20197;&#25509;&#25910;&#20540;&#20026; null  &#30340;&#21442;&#25968;&#65292;&#28982;&#21518;&#36820;&#22238;&#23427;&#30340;&#23383;&#31526;&#20018;&#34920;&#31034;&#65292;<code class="literal">'None'</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.isnull.sql">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <acronym class="acronym">SQL</acronym>&#65306;&#30340; null &#20540;&#27604;&#36739;</a></b><br>&#22312; <acronym class="acronym">SQL</acronym> &#20013;&#65292;&#20320;&#24517;&#39035;&#20351;&#29992; <code class="literal">IS NULL</code> &#20195;&#26367; <code class="literal">= NULL</code> &#36827;&#34892; null &#20540;&#27604;&#36739;&#12290;&#22312; <span class="application">Python</span>&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; <code class="literal">== None</code> &#25110;&#32773; <code class="literal">is None</code> &#36827;&#34892;&#27604;&#36739;&#65292;&#20294;&#26159; <code class="literal">is None</code> &#26356;&#24555;&#12290;</blockquote></div><p>&#29616;&#22312;&#20320;&#30830;&#20445;&#26377;&#20102;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#21487;&#20197;&#25226;&#36825;&#20010;&#23383;&#31526;&#20018;&#20256;&#32473; <code class="varname">processFunc</code>&#65292;&#36825;&#20010;&#20989;&#25968;<a class="link" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;">&#24050;&#32463;&#23450;&#20041;</a>&#26159;&#19968;&#20010;&#26082;&#21487;&#20197;&#21387;&#32553;&#31354;&#30333;&#20063;&#21487;&#20197;&#19981;&#21387;&#32553;&#31354;&#30333;&#30340;&#20989;&#25968;&#12290;&#29616;&#22312;&#20320;&#30475;&#20986;&#26469;&#20026;&#20160;&#20040;&#20351;&#29992; <code class="function">str</code> &#23558; <code class="literal">None</code> &#36716;&#21270;&#20026;&#19968;&#20010;&#23383;&#31526;&#20018;&#24456;&#37325;&#35201;&#20102;&#12290;<code class="varname">processFunc</code> &#20551;&#35774;&#25509;&#25910;&#21040;&#19968;&#20010;&#23383;&#31526;&#20018;&#21442;&#25968;&#28982;&#21518;&#35843;&#29992; <code class="function">split</code> &#26041;&#27861;&#65292;&#22914;&#26524;&#20320;&#20256;&#20837; <code class="literal">None</code> &#65292;&#23558;&#23548;&#33268;&#31243;&#24207;&#23849;&#28291;&#65292;&#22240;&#20026; <code class="literal">None</code> &#27809;&#26377; <code class="function">split</code> &#26041;&#27861;&#12290;</p><p>&#20877;&#24448;&#22238;&#36208;&#19968;&#27493;&#65292;&#20320;&#20877;&#19968;&#27425;&#20351;&#29992;&#20102;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#26469;&#36830;&#25509; <code class="varname">processFunc</code> &#30340;&#36820;&#22238;&#20540; &#21644; <code class="varname">method</code> &#30340; <code class="function">ljust</code> &#26041;&#27861;&#30340;&#36820;&#22238;&#20540;&#12290;<code class="function">ljust</code> &#26159;&#19968;&#20010;&#20320;&#20043;&#21069;&#27809;&#26377;&#35265;&#36807;&#30340;&#26032;&#23383;&#31526;&#20018;&#26041;&#27861;&#12290;</p><div class="example"><a name="d0e11109"></a><p class="title"><b>&#20363;&nbsp;4.24.&nbsp;<code class="function">ljust</code> &#26041;&#27861;&#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = 'buildConnectionString'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s.ljust(30)</span> <a name="apihelper.alltogether.3.1"></a>circled_1_delcric
<font color="teal">'buildConnectionString         '</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s.ljust(20)</span> <a name="apihelper.alltogether.3.2"></a>circled_2_delcric
<font color="teal">'buildConnectionString'</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.alltogether.3.1">circled_1_delcric</a> </dt><dd><code class="function">ljust</code> &#29992;&#31354;&#26684;&#22635;&#20805;&#23383;&#31526;&#20018;&#20197;&#31526;&#21512;&#25351;&#23450;&#30340;&#38271;&#24230;&#12290;<code class="function">info</code> &#20989;&#25968;&#20351;&#29992;&#23427;&#29983;&#25104;&#20102;&#20004;&#21015;&#36755;&#20986;&#24182;&#23558;&#25152;&#26377;&#22312;&#31532;&#20108;&#21015;&#30340; <code class="literal">doc string</code> &#32437;&#21521;&#23545;&#40784;&#12290;</dd><dt><a href="#apihelper.alltogether.3.2">circled_2_delcric</a> </dt><dd>&#22914;&#26524;&#25351;&#23450;&#30340;&#38271;&#24230;&#23567;&#20110;&#23383;&#31526;&#20018;&#30340;&#38271;&#24230;&#65292;<code class="function">ljust</code> &#23558;&#31616;&#21333;&#22320;&#36820;&#22238;&#26410;&#21464;&#21270;&#30340;&#23383;&#31526;&#20018;&#12290;&#23427;&#20915;&#19981;&#20250;&#25130;&#26029;&#23383;&#31526;&#20018;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#20960;&#20046;&#24050;&#32463;&#23436;&#25104;&#20102;&#12290;&#26377;&#20102; <code class="function">ljust</code> &#26041;&#27861;&#22635;&#20805;&#36807;&#30340;&#26041;&#27861;&#21517;&#31216;&#21644;&#26469;&#33258;&#35843;&#29992; <code class="varname">processFunc</code> &#26041;&#27861;&#24471;&#21040;&#30340; <code class="literal">doc string</code> (&#21487;&#33021;&#21387;&#32553;&#36807;)&#65292;&#20320;&#23601;&#21487;&#20197;&#23558;&#20004;&#32773;&#36830;&#25509;&#36215;&#26469;&#24182;&#24471;&#21040;&#21333;&#20010;&#23383;&#31526;&#20018;&#12290;&#22240;&#20026;&#23545; <code class="varname">methodList</code> &#36827;&#34892;&#20102;&#26144;&#23556;&#65292;&#26368;&#32456;&#20320;&#23558;&#33719;&#24471;&#19968;&#20010;&#23383;&#31526;&#20018;&#21015;&#34920;&#12290;&#21033;&#29992; <code class="literal">"\n"</code> &#30340; <code class="function">join</code> &#20989;&#25968;&#65292;&#23558;&#36825;&#20010;&#21015;&#34920;&#36830;&#25509;&#20026;&#21333;&#20010;&#23383;&#31526;&#20018;&#65292;&#21015;&#34920;&#20013;&#27599;&#20010;&#20803;&#32032;&#29420;&#21344;&#19968;&#34892;&#65292;&#25509;&#30528;&#25171;&#21360;&#20986;&#32467;&#26524;&#12290;</p><div class="example"><a name="d0e11177"></a><p class="title"><b>&#20363;&nbsp;4.25.&nbsp;&#25171;&#21360;&#21015;&#34920;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ['a', 'b', 'c']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "\n".join(li)</span> <a name="apihelper.alltogether.4.1"></a>circled_1_delcric
<font color="teal">a
b
c</font></pre><div class="calloutlist"><dl compact><dt><a href="#apihelper.alltogether.4.1">circled_1_delcric</a> </dt><dd>&#22312;&#20320;&#22788;&#29702;&#21015;&#34920;&#26102;&#65292;&#36825;&#30830;&#23454;&#26159;&#19968;&#20010;&#26377;&#29992;&#30340;&#35843;&#35797;&#25216;&#24039;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#20320;&#20250;&#21313;&#20998;&#39057;&#32321;&#22320;&#25805;&#20316;&#21015;&#34920;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#19978;&#36848;&#23601;&#26159;&#26368;&#21518;&#19968;&#20010;&#20196;&#20154;&#22256;&#24785;&#30340;&#22320;&#26041;&#20102;&#12290;&#20294;&#26159;&#29616;&#22312;&#20320;&#24212;&#35813;&#24050;&#32463;&#29702;&#35299;&#36825;&#27573;&#20195;&#30721;&#20102;&#12290;</p><div class="informalexample"><pre class="programlisting">
    print "\n".join(["%s %s" %
                      (method.ljust(spacing),
                       processFunc(str(getattr(object, method).__doc__)))
                     for method in methodList])</pre></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="apihelper.summary"></a>4.9.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p><code class="filename">apihelper.py</code> &#31243;&#24207;&#21644;&#23427;&#30340;&#36755;&#20986;&#29616;&#22312;&#24212;&#35813;&#38750;&#24120;&#28165;&#26224;&#20102;&#12290;</p></div><div class="informalexample"><pre class="programlisting">
def info(object, spacing=10, collapse=1):
    """Print methods and doc strings.
    
    Takes module, class, list, dictionary, or string."""
    methodList = [method for method in dir(object) if callable(getattr(object, method))]
    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
    print "\n".join(["%s %s" %
                      (method.ljust(spacing),
                       processFunc(str(getattr(object, method).__doc__)))
                     for method in methodList])

if __name__ == "__main__":
    print info.__doc__</pre></div><div class="informalexample"><p><code class="filename">apihelper.py</code> &#30340;&#36755;&#20986;&#65306;</p><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from apihelper import info</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = []</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">info(li)</span>
<font color="teal">append     L.append(object) -- append object to end
count      L.count(value) -&gt; integer -- return number of occurrences of value
extend     L.extend(list) -- extend list by appending list elements
index      L.index(value) -&gt; integer -- return index of first occurrence of value
insert     L.insert(index, object) -- insert object before index
pop        L.pop([index]) -&gt; item -- remove and return item at index (default last)
remove     L.remove(value) -- remove first occurrence of value
reverse    L.reverse() -- reverse *IN PLACE*
sort       L.sort([cmpfunc]) -- sort *IN PLACE*; if given, cmpfunc(x, y) -&gt; -1, 0, 1</font></pre></div><div class="highlights"><p>&#22312;&#30740;&#31350;&#19979;&#19968;&#31456;&#21069;&#65292;&#30830;&#20445;&#20320;&#21487;&#20197;&#26080;&#22256;&#38590;&#30340;&#23436;&#25104;&#19979;&#38754;&#36825;&#20123;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#29992;<a class="link" href="#apihelper.optional" title="4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;">&#21487;&#36873;&#21644;&#21629;&#21517;&#21442;&#25968;</a>&#23450;&#20041;&#21644;&#35843;&#29992;&#20989;&#25968;</li><li>&#29992; <a class="link" href="#apihelper.str.intro" title="&#20363;&nbsp;4.6.&nbsp;str &#20171;&#32461;"><code class="function">str</code></a> &#24378;&#21046;&#36716;&#25442;&#20219;&#24847;&#20540;&#20026;&#23383;&#31526;&#20018;&#24418;&#24335;</li><li>&#29992; <a class="link" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;"><code class="function">getattr</code></a> &#21160;&#24577;&#24471;&#21040;&#20989;&#25968;&#21644;&#20854;&#23427;&#23646;&#24615;&#30340;&#24341;&#29992;</li><li>&#25193;&#23637;&#21015;&#34920;&#35299;&#26512;&#35821;&#27861;&#23454;&#29616;<a class="link" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#21015;&#34920;&#36807;&#28388;</a></li><li>&#35782;&#21035; <a class="link" href="#apihelper.andor" title="4.6.&nbsp;and &#21644; or &#30340;&#29305;&#27530;&#24615;&#36136;"><code class="literal">and-or</code> &#25216;&#24039;</a>&#24182;&#23433;&#20840;&#22320;&#20351;&#29992;&#23427;</li><li>&#23450;&#20041; <a class="link" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;"><code class="literal">lambda</code> &#20989;&#25968;</a></li><li><a class="link" href="#apihelper.funcassign">&#23558;&#20989;&#25968;&#36171;&#20540;&#32473;&#21464;&#37327;</a>&#28982;&#21518;&#36890;&#36807;&#24341;&#29992;&#21464;&#37327;&#35843;&#29992;&#20989;&#25968;&#12290;&#25105;&#24378;&#35843;&#30340;&#24050;&#32463;&#22815;&#22810;&#20102;&#65306;&#36825;&#31181;&#24605;&#32771;&#26041;&#24335;&#23545;&#20110;&#25552;&#39640;&#23545; <span class="application">Python</span> &#30340;&#29702;&#35299;&#21147;&#33267;&#20851;&#37325;&#35201;&#12290;&#22312;&#26412;&#20070;&#20013;&#20320;&#20250;&#38543;&#22788;&#21487;&#35265;&#36825;&#31181;&#25216;&#26415;&#30340;&#26356;&#22797;&#26434;&#30340;&#24212;&#29992;&#12290;</li></ul></div></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e8660" href="#d0e8660" class="para">1</a>] </sup>&#24110;&#21161;&#32773;&#20989;&#25968;&#65292;&#21407;&#25991;&#26159; helper function&#65292;&#20063;&#23601;&#26159;&#25105;&#20204;&#22312;&#21069;&#25991;&#25152;&#30475;&#21040;&#30340;&#35832;&#22914; <code class="literal">odbchelper</code>&#12289;<code class="literal">apihelper</code> &#36825;&#26679;&#30340;&#20989;&#25968;&#12290;&#8213;&#8213;&#35793;&#27880;</p></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="fileinfo"></a>&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</h1></div></div></div><div class="abstract"><p>&#36825;&#19968;&#31456;&#65292;&#21644;&#27492;&#21518;&#30340;&#35768;&#22810;&#31456;&#65292;&#22343;&#35752;&#35770;&#20102;&#38754;&#21521;&#23545;&#35937;&#30340; <span class="application">Python</span> &#31243;&#24207;&#35774;&#35745;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.divein"></a>5.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#65292;&#21487;&#36816;&#34892;&#30340; <span class="application">Python</span> &#31243;&#24207;&#12290;&#35831;&#38405;&#35835;&#27169;&#22359;&#12289;&#31867;&#21644;&#20989;&#25968;&#30340; <a class="link" href="#odbchelper.docstring" title="2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;"><code class="literal">doc string</code>s</a>&#65292;&#21487;&#20197;&#22823;&#27010;&#20102;&#35299;&#36825;&#20010;&#31243;&#24207;&#25152;&#20570;&#30340;&#20107;&#24773;&#21644;&#24037;&#20316;&#24773;&#20917;&#12290;&#20687;&#24179;&#26102;&#19968;&#26679;&#65292;&#19981;&#29992;&#25285;&#24515;&#20320;&#19981;&#29702;&#35299;&#30340;&#19996;&#35199;&#65292;&#36825;&#23601;&#26159;&#26412;&#31456;&#20854;&#23427;&#37096;&#20998;&#23558;&#21578;&#35785;&#20320;&#30340;&#20869;&#23481;&#12290;</p></div><div class="example"><a name="d0e11326"></a><p class="title"><b>&#20363;&nbsp;5.1.&nbsp;<code class="filename">fileinfo.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Framework for getting filetype-specific metadata.

Instantiate appropriate class with filename.  Returned object acts like a
dictionary, with key-value pairs for each piece of metadata.
    import fileinfo
    info = fileinfo.MP3FileInfo("/music/ap/mahadeva.mp3")
    print "\\n".join(["%s=%s" % (k, v) for k, v in info.items()])

Or use listDirectory function to get info on all files in a directory.
    for info in fileinfo.listDirectory("/music/ap/", [".mp3"]):
        ...

Framework can be extended by adding classes for particular file types, e.g.
HTMLFileInfo, MPGFileInfo, DOCFileInfo.  Each class is completely responsible for
parsing its files appropriately; see MP3FileInfo for example.
"""
import os
import sys
from UserDict import UserDict

def stripnulls(data):
    "strip whitespace and nulls"
    return data.replace("\00", "").strip()

class FileInfo(UserDict):
    "store file metadata"
    def __init__(self, filename=None):
        UserDict.__init__(self)
        self["name"] = filename

class MP3FileInfo(FileInfo):
    "store ID3v1.0 MP3 tags"
    tagDataMap = {"title"   : (  3,  33, stripnulls),
                  "artist"  : ( 33,  63, stripnulls),
                  "album"   : ( 63,  93, stripnulls),
                  "year"    : ( 93,  97, stripnulls),
                  "comment" : ( 97, 126, stripnulls),
                  "genre"   : (127, 128, ord)}

    def __parse(self, filename):
        "parse ID3v1.0 tags from MP3 file"
        self.clear()
        try:                               
            fsock = open(filename, "rb", 0)
            try:                           
                fsock.seek(-128, 2)        
                tagdata = fsock.read(128)  
            finally:                       
                fsock.close()              
            if tagdata[:3] == "TAG":
                for tag, (start, end, parseFunc) in self.tagDataMap.items():
                    self[tag] = parseFunc(tagdata[start:end])               
        except IOError:                    
            pass                           

    def __setitem__(self, key, item):
        if key == "name" and item:
            self.__parse(item)
        FileInfo.__setitem__(self, key, item)

def listDirectory(directory, fileExtList):                                        
    "get list of file info objects for files of particular extensions"
    fileList = [os.path.normcase(f)
                for f in os.listdir(directory)]           
    fileList = [os.path.join(directory, f) 
               for f in fileList
                if os.path.splitext(f)[1] in fileExtList] 
    def getFileInfoClass(filename, module=sys.modules[FileInfo.__module__]):      
        "get file info class from filename extension"                             
        subclass = "%sFileInfo" % os.path.splitext(filename)[1].upper()[1:]       
        return hasattr(module, subclass) and getattr(module, subclass) or FileInfo
    return [getFileInfoClass(f)(f) for f in fileList]                             

if __name__ == "__main__":
    for info in listDirectory("/music/_singles/", [".mp3"]): <a name="fileinfo_divein.1.1"></a>circled_1_delcric
        print "\n".join(["%s=%s" % (k, v) for k, v in info.items()])
        print</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo_divein.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#31243;&#24207;&#30340;&#36755;&#20837;&#35201;&#21462;&#20915;&#20110;&#20320;&#30828;&#30424;&#19978;&#30340;&#25991;&#20214;&#12290;&#20026;&#20102;&#24471;&#21040;&#26377;&#24847;&#20041;&#30340;&#36755;&#20986;&#65292;&#20320;&#24212;&#35813;&#20462;&#25913;&#30446;&#24405;&#36335;&#24452;&#25351;&#21521;&#20320;&#33258;&#24050;&#26426;&#22120;&#19978;&#30340;&#19968;&#20010; MP3 &#25991;&#20214;&#30446;&#24405;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="informalexample"><p>&#19979;&#38754;&#23601;&#26159;&#20174;&#25105;&#30340;&#26426;&#22120;&#19978;&#24471;&#21040;&#30340;&#36755;&#20986;&#12290;&#20320;&#30340;&#36755;&#20986;&#23558;&#19981;&#19968;&#26679;&#65292;&#38500;&#38750;&#65292;&#30001;&#20110;&#26576;&#20123;&#20196;&#20154;&#21507;&#24778;&#30340;&#24039;&#21512;&#65292;&#20320;&#19982;&#25105;&#26377;&#30528;&#20849;&#21516;&#30340;&#38899;&#20048;&#21697;&#21619;&#12290;</p><pre class="screen"><font color="teal">album=
artist=Ghost in the Machine
title=A Time Long Forgotten (Concept
genre=31
name=/music/_singles/a_time_long_forgotten_con.mp3
year=1999
comment=http://mp3.com/ghostmachine

album=Rave Mix
artist=***DJ MARY-JANE***
title=HELLRAISER****Trance from Hell
genre=31
name=/music/_singles/hellraiser.mp3
year=2000
comment=http://mp3.com/DJMARYJANE

album=Rave Mix
artist=***DJ MARY-JANE***
title=KAIRO****THE BEST GOA
genre=31
name=/music/_singles/kairo.mp3
year=2000
comment=http://mp3.com/DJMARYJANE

album=Journeys
artist=Masters of Balance
title=Long Way Home
genre=31
name=/music/_singles/long_way_home1.mp3
year=2000
comment=http://mp3.com/MastersofBalan

album=
artist=The Cynic Project
title=Sidewinder
genre=18
name=/music/_singles/sidewinder.mp3
year=2000
comment=http://mp3.com/cynicproject

album=Digitosis@128k
artist=VXpanded
title=Spinning
genre=255
name=/music/_singles/spinning.mp3
year=2000
comment=http://mp3.com/artists/95/vxp</font></pre></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.fromimport"></a>5.2.&nbsp;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#26377;&#20004;&#31181;&#23548;&#20837;&#27169;&#22359;&#30340;&#26041;&#27861;&#12290;&#20004;&#31181;&#37117;&#26377;&#29992;&#65292;&#20320;&#24212;&#35813;&#30693;&#36947;&#20160;&#20040;&#26102;&#20505;&#20351;&#29992;&#21738;&#19968;&#31181;&#26041;&#27861;&#12290;&#19968;&#31181;&#26041;&#27861;&#65292;<code class="literal">import <em class="replaceable">module</em></code>&#65292;&#20320;&#24050;&#32463;&#22312;<a class="xref" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#31532;&nbsp;2.4&nbsp;&#33410; &#8220;&#19975;&#29289;&#30342;&#23545;&#35937;&#8221;</a>&#30475;&#36807;&#20102;&#12290;&#21478;&#19968;&#31181;&#26041;&#27861;&#23436;&#25104;&#21516;&#26679;&#30340;&#20107;&#24773;&#65292;&#20294;&#26159;&#23427;&#19982;&#31532;&#19968;&#31181;&#26377;&#30528;&#32454;&#24494;&#20294;&#37325;&#35201;&#30340;&#21306;&#21035;&#12290;</p></div><div class="informalexample"><p>&#19979;&#38754;&#26159; <code class="literal">from <em class="replaceable">module</em> import</code> &#30340;&#22522;&#26412;&#35821;&#27861;&#65306;</p><pre class="programlisting">
from UserDict import UserDict
</pre></div><p>&#23427;&#19982;&#20320;&#25152;&#29087;&#30693;&#30340; <a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string"><code class="literal">import <em class="replaceable">module</em></code></a> &#35821;&#27861;&#24456;&#30456;&#20284;&#65292;&#20294;&#26159;&#26377;&#19968;&#20010;&#37325;&#35201;&#30340;&#21306;&#21035;&#65306;<code class="filename">UserDict</code> &#34987;&#30452;&#25509;&#23548;&#20837;&#21040;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#21435;&#20102;&#65292;&#25152;&#20197;&#23427;&#21487;&#20197;&#30452;&#25509;&#20351;&#29992;&#65292;&#32780;&#19981;&#38656;&#35201;&#21152;&#19978;&#27169;&#22359;&#21517;&#30340;&#38480;&#23450;&#12290;&#20320;&#21487;&#20197;&#23548;&#20837;&#29420;&#31435;&#30340;&#39033;&#25110;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import *</code> &#26469;&#23548;&#20837;&#25152;&#26377;&#19996;&#35199;&#12290;</p><div class="note"><blockquote><b class="title"><a name="compare.fromimport.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: <code class="literal">from <em class="replaceable">module</em> import</code></a></b><br><span class="application">Python</span> &#20013;&#30340; <code class="literal">from <em class="replaceable">module</em> import *</code> &#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">use <em class="replaceable">module</em></code> &#65307;<span class="application">Python</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em></code> &#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">require <em class="replaceable">module</em></code> &#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.fromimport.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: <code class="literal">from <em class="replaceable">module</em> import</code></a></b><br><span class="application">Python</span> &#20013;&#30340; <code class="literal">from <em class="replaceable">module</em> import *</code> &#20687; <span class="application">Java</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em>.*</code> &#65307;<span class="application">Python</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em></code> &#20687; <span class="application">Java</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em></code> &#12290;</blockquote></div><div class="example"><a name="d0e11505"></a><p class="title"><b>&#20363;&nbsp;5.2.&nbsp;<code class="literal">import <em class="replaceable">module</em></code> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <code class="literal">from <em class="replaceable">module</em> import</code></b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import types</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">types.FunctionType</span>             <a name="fileinfo.import.1.1"></a>circled_1_delcric
<font color="teal">&lt;type 'function'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">FunctionType</span>                   <a name="fileinfo.import.1.2"></a>circled_2_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
NameError: There is no variable named 'FunctionType'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from types import FunctionType</span> <a name="fileinfo.import.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">FunctionType</span>                   <a name="fileinfo.import.1.4"></a>circled_4_delcric
<font color="teal">&lt;type 'function'&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.import.1.1">circled_1_delcric</a> </dt><dd><code class="filename">types</code> &#27169;&#22359;&#19981;&#21253;&#21547;&#26041;&#27861;&#65292;&#21482;&#26159;&#34920;&#31034;&#27599;&#31181; <span class="application">Python</span> &#23545;&#35937;&#31867;&#22411;&#30340;&#23646;&#24615;&#12290;&#27880;&#24847;&#36825;&#20010;&#23646;&#24615;&#24517;&#38656;&#29992;&#27169;&#22359;&#21517; <code class="filename">types</code> &#36827;&#34892;&#38480;&#23450;&#12290;</dd><dt><a href="#fileinfo.import.1.2">circled_2_delcric</a> </dt><dd><code class="constant">FunctionType</code> &#26412;&#36523;&#27809;&#26377;&#34987;&#23450;&#20041;&#22312;&#24403;&#21069;&#21517;&#23383;&#31354;&#38388;&#20013;&#65307;&#23427;&#21482;&#23384;&#22312;&#20110; <code class="filename">types</code> &#30340;&#19978;&#19979;&#25991;&#29615;&#22659;&#20013;&#12290;</dd><dt><a href="#fileinfo.import.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#35821;&#27861;&#20174; <code class="filename">types</code> &#27169;&#22359;&#20013;&#30452;&#25509;&#23558; <code class="constant">FunctionType</code> &#23646;&#24615;&#23548;&#20837;&#21040;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#20013;&#12290;</dd><dt><a href="#fileinfo.import.1.4">circled_4_delcric</a> </dt><dd>&#29616;&#22312; <code class="constant">FunctionType</code> &#21487;&#20197;&#30452;&#25509;&#20351;&#29992;&#65292;&#19982; <code class="filename">types</code> &#26080;&#20851;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#20160;&#20040;&#26102;&#20505;&#20320;&#24212;&#35813;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code>&#65311;</p><div class="itemizedlist"><ul><li>&#22914;&#26524;&#20320;&#35201;&#32463;&#24120;&#35775;&#38382;&#27169;&#22359;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#65292;&#19988;&#19981;&#24819;&#19968;&#36941;&#21448;&#19968;&#36941;&#22320;&#25970;&#20837;&#27169;&#22359;&#21517;&#65292;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code>&#12290;</li><li>&#22914;&#26524;&#20320;&#24819;&#35201;&#26377;&#36873;&#25321;&#22320;&#23548;&#20837;&#26576;&#20123;&#23646;&#24615;&#21644;&#26041;&#27861;&#65292;&#32780;&#19981;&#24819;&#35201;&#20854;&#23427;&#30340;&#65292;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code>&#12290;</li><li>&#22914;&#26524;&#27169;&#22359;&#21253;&#21547;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#19982;&#20320;&#30340;&#26576;&#20010;&#27169;&#22359;&#21516;&#21517;&#65292;&#20320;&#24517;&#39035;&#20351;&#29992; <code class="literal">import <em class="replaceable">module</em></code> &#26469;&#36991;&#20813;&#21517;&#23383;&#20914;&#31361;&#12290;</li></ul></div><p>&#38500;&#20102;&#36825;&#20123;&#24773;&#20917;&#65292;&#21097;&#19979;&#30340;&#21482;&#26159;&#39118;&#26684;&#38382;&#39064;&#20102;&#65292;&#20320;&#20250;&#30475;&#21040;&#29992;&#20004;&#31181;&#26041;&#24335;&#32534;&#20889;&#30340; <span class="application">Python</span> &#20195;&#30721;&#12290;</p><div class="caution"><blockquote><b class="title"><a name="d0e11641">&#23567;&#24515;: </a></b><br>&#23613;&#37327;&#23569;&#29992; <code class="literal">from module import *</code> &#65292;&#22240;&#20026;&#21028;&#23450;&#19968;&#20010;&#29305;&#27530;&#30340;&#20989;&#25968;&#25110;&#23646;&#24615;&#26159;&#20174;&#21738;&#26469;&#30340;&#26377;&#20123;&#22256;&#38590;&#65292;&#24182;&#19988;&#20250;&#36896;&#25104;&#35843;&#35797;&#21644;&#37325;&#26500;&#37117;&#26356;&#22256;&#38590;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;&#20851;&#20110;&#27169;&#22359;&#23548;&#20837;&#25216;&#26415;</b></p><ul><li>eff-bot (<a href="http://www.effbot.org/guides/">http://www.effbot.org/guides/</a>) &#26377;&#26356;&#22810;&#20851;&#20110; <code class="literal">import <em class="replaceable">module</em></code> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <code class="literal">from <em class="replaceable">module</em> import</code> (<a href="http://www.effbot.org/guides/import-confusion.htm">http://www.effbot.org/guides/import-confusion.htm</a>) &#30340;&#35770;&#36848;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#39640;&#32423;&#30340;&#23548;&#20837;&#25216;&#26415;&#65292;&#21253;&#25324; <code class="literal">from <em class="replaceable">module</em> import *</code> (<a href="http://www.python.org/doc/current/tut/node8.html#SECTION008410000000000000000">http://www.python.org/doc/current/tut/node8.html#SECTION008410000000000000000</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.class"></a>5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#26159;&#23436;&#20840;&#38754;&#21521;&#23545;&#35937;&#30340;&#65306;&#20320;&#21487;&#20197;&#23450;&#20041;&#33258;&#24050;&#30340;&#31867;&#65292;&#20174;&#33258;&#24050;&#30340;&#25110;&#20869;&#32622;&#30340;&#31867;&#32487;&#25215;&#65292;&#28982;&#21518;&#20174;&#20320;&#23450;&#20041;&#30340;&#31867;&#21019;&#24314;&#23454;&#20363;&#12290;</p></div><p>&#22312; <span class="application">Python</span> &#20013;&#23450;&#20041;&#31867;&#24456;&#31616;&#21333;&#12290;&#23601;&#20687;&#23450;&#20041;&#20989;&#25968;&#65292;&#27809;&#26377;&#21333;&#29420;&#30340;&#25509;&#21475;&#23450;&#20041;&#12290;&#21482;&#35201;&#23450;&#20041;&#31867;&#65292;&#28982;&#21518;&#23601;&#21487;&#20197;&#24320;&#22987;&#32534;&#30721;&#12290;<span class="application">Python</span> &#31867;&#20197;&#20445;&#30041;&#23383; <code class="literal">class</code> &#24320;&#22987;&#65292;&#21518;&#38754;&#36319;&#30528;&#31867;&#21517;&#12290;&#20174;&#25216;&#26415;&#19978;&#35762;&#65292;&#26377;&#36825;&#20123;&#23601;&#22815;&#20102;&#65292;&#22240;&#20026;&#19968;&#20010;&#31867;&#24182;&#38750;&#24517;&#39035;&#20174;&#20854;&#23427;&#31867;&#32487;&#25215;&#12290;</p><div class="example"><a name="fileinfo.class.simplest"></a><p class="title"><b>&#20363;&nbsp;5.3.&nbsp;&#26368;&#31616;&#21333;&#30340; <span class="application">Python</span> &#31867;</b></p><div class="example-contents"><pre class="programlisting">
class Loaf: <a name="fileinfo.class.1.1"></a>circled_1_delcric
    pass    <a name="fileinfo.class.1.2"></a>circled_2_delcric <a name="fileinfo.class.1.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.class.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#31867;&#30340;&#21517;&#23383;&#26159; <code class="classname">Loaf</code>&#65292;&#23427;&#27809;&#26377;&#20174;&#20854;&#23427;&#31867;&#32487;&#25215;&#12290;&#31867;&#21517;&#36890;&#24120;&#26159;&#31532;&#19968;&#20010;&#23383;&#27597;&#22823;&#20889;&#65292;&#22914;&#65306;<code class="classname">EachWordLikeThis</code>&#65292;&#20294;&#36825;&#21482;&#26159;&#19968;&#20010;&#20064;&#24815;&#65292;&#19981;&#26159;&#19968;&#20010;&#24517;&#35201;&#26465;&#20214;&#12290;</dd><dt><a href="#fileinfo.class.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#31867;&#27809;&#26377;&#23450;&#20041;&#20219;&#20309;&#26041;&#27861;&#25110;&#23646;&#24615;&#65292;&#20294;&#26159;&#20174;&#35821;&#27861;&#19978;&#65292;&#38656;&#35201;&#22312;&#23450;&#20041;&#20013;&#26377;&#20123;&#19996;&#35199;&#65292;&#25152;&#20197;&#20320;&#20351;&#29992; <code class="literal">pass</code>&#12290;&#36825;&#26159;&#19968;&#20010; <span class="application">Python</span> &#20445;&#30041;&#23383;&#65292;&#20165;&#20165;&#34920;&#31034; "<span class="quote">&#21521;&#21069;&#36208;&#65292;&#19981;&#35201;&#24448;&#36825;&#30475;</span>"&#12290;&#23427;&#26159;&#19968;&#26465;&#20160;&#20040;&#37117;&#19981;&#20570;&#30340;&#35821;&#21477;&#65292;&#24403;&#20320;&#21024;&#31354;&#20989;&#25968;&#25110;&#31867;&#26102;&#65292;&#23427;&#26159;&#19968;&#20010;&#24456;&#22909;&#30340;&#21344;&#20301;&#31526;&#12290;</dd><dt><a href="#fileinfo.class.1.3">circled_3_delcric</a> </dt><dd>&#20320;&#21487;&#33021;&#29468;&#21040;&#20102;&#65292;&#22312;&#31867;&#20013;&#30340;&#25152;&#26377;&#19996;&#35199;&#37117;&#35201;&#32553;&#36817;&#65292;&#23601;&#20687;&#20301;&#20110;&#20989;&#25968;&#12289;<code class="literal">if</code> &#35821;&#21477;&#65292;<code class="literal">for</code> &#24490;&#29615;&#65292;&#35832;&#22914;&#27492;&#31867;&#30340;&#20195;&#30721;&#12290;&#31532;&#19968;&#26465;&#19981;&#32553;&#36817;&#30340;&#19996;&#35199;&#19981;&#23646;&#20110;&#36825;&#20010;&#31867;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.pass.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: <code class="literal">pass</code></a></b><br>&#22312; <span class="application">Python</span> &#20013;&#30340; <code class="literal">pass</code> &#35821;&#21477;&#23601;&#20687; <span class="application">Java</span> &#25110; <span class="application"><acronym class="acronym">C</acronym></span> &#20013;&#30340;&#22823;&#25324;&#21495;&#31354;&#38598; (<code class="literal">{}</code>)&#12290;</blockquote></div><p>&#24403;&#28982;&#65292;&#23454;&#38469;&#19978;&#22823;&#22810;&#25968;&#30340;&#31867;&#37117;&#26159;&#20174;&#20854;&#23427;&#30340;&#31867;&#32487;&#25215;&#26469;&#30340;&#65292;&#24182;&#19988;&#23427;&#20204;&#20250;&#23450;&#20041;&#33258;&#24050;&#30340;&#31867;&#26041;&#27861;&#21644;&#23646;&#24615;&#12290;&#20294;&#26159;&#23601;&#20687;&#20320;&#21018;&#25165;&#30475;&#21040;&#30340;&#65292;&#38500;&#20102;&#21517;&#23383;&#20197;&#22806;&#65292;&#31867;&#27809;&#26377;&#20160;&#20040;&#24517;&#39035;&#35201;&#20855;&#26377;&#30340;&#12290;&#29305;&#21035;&#26159;&#65292;<span class="application"><acronym class="acronym">C++</acronym></span> &#31243;&#24207;&#21592;&#21487;&#33021;&#20250;&#24863;&#21040;&#22855;&#24618;&#65292;<span class="application">Python</span> &#30340;&#31867;&#27809;&#26377;&#26174;&#31034;&#30340;&#26500;&#36896;&#20989;&#25968;&#21644;&#26512;&#26500;&#20989;&#25968;&#12290;<span class="application">Python</span> &#31867;&#30340;&#30830;&#23384;&#22312;&#19982;&#26500;&#36896;&#20989;&#25968;&#30456;&#20284;&#30340;&#19996;&#35199;&#65306;<code class="function">__init__</code> &#26041;&#27861;&#12290;</p><div class="example"><a name="fileinfo.class.example"></a><p class="title"><b>&#20363;&nbsp;5.4.&nbsp;&#23450;&#20041; <code class="classname">FileInfo</code> &#31867;</b></p><div class="example-contents"><pre class="programlisting">
from UserDict import UserDict

class FileInfo(UserDict): <a name="fileinfo.class.2.1"></a>circled_1_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.class.2.1">circled_1_delcric</a> </dt><dd>&#22312; <span class="application">Python</span> &#20013;&#65292;&#31867;&#30340;&#22522;&#31867;&#21482;&#26159;&#31616;&#21333;&#22320;&#21015;&#22312;&#31867;&#21517;&#21518;&#38754;&#30340;&#23567;&#25324;&#21495;&#37324;&#12290;&#25152;&#20197; <code class="classname">FileInfo</code> &#31867;&#26159;&#20174; <code class="classname">UserDict</code> &#31867; (&#23427;&#26159;&#20174; <a class="link" href="#fileinfo.fromimport" title="5.2.&nbsp;&#20351;&#29992; from module import &#23548;&#20837;&#27169;&#22359;"><code class="filename">UserDict</code> &#27169;&#22359;&#23548;&#36827;&#26469;&#30340;</a>) &#32487;&#25215;&#26469;&#30340;&#12290;<code class="classname">UserDict</code> &#26159;&#19968;&#20010;&#20687;&#23383;&#20856;&#19968;&#26679;&#24037;&#20316;&#30340;&#31867;&#65292;&#23427;&#20801;&#35768;&#20320;&#23436;&#20840;&#23376;&#31867;&#21270;&#23383;&#20856;&#25968;&#25454;&#31867;&#22411;&#65292;&#21516;&#26102;&#22686;&#21152;&#20320;&#33258;&#24050;&#30340;&#34892;&#20026;&#12290;{&#20063;&#23384;&#22312;&#30456;&#20284;&#30340;&#31867; <code class="classname">UserList</code> &#21644; <code class="classname">UserString</code> &#65292;&#23427;&#20204;&#20801;&#35768;&#20320;&#23376;&#31867;&#21270;&#21015;&#34920;&#21644;&#23383;&#31526;&#20018;&#12290;)<sup>[<a name="d0e11835" href="#ftn.d0e11835" class="footnote">2</a>]</sup> &#22312;&#36825;&#20010;&#31867;&#30340;&#32972;&#21518;&#26377;&#19968;&#20123;&#8220;&#24043;&#26415;&#8221;&#65292;&#25105;&#20204;&#23558;&#22312;&#26412;&#31456;&#30340;&#21518;&#38754;&#65292;&#38543;&#30528;&#26356;&#36827;&#19968;&#27493;&#22320;&#30740;&#31350; <code class="classname">UserDict</code> &#31867;&#65292;&#25581;&#24320;&#36825;&#20123;&#31192;&#23494;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.extends.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: Ancestors</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#31867;&#30340;&#22522;&#31867;&#21482;&#26159;&#31616;&#21333;&#22320;&#21015;&#22312;&#31867;&#21517;&#21518;&#38754;&#30340;&#23567;&#25324;&#21495;&#37324;&#12290;&#19981;&#20687;&#22312; <span class="application">Java</span> &#20013;&#26377;&#19968;&#20010;&#29305;&#27530;&#30340; <code class="literal">extends</code> &#20851;&#38190;&#23383;&#12290;</blockquote></div><p><span class="application">Python</span> &#25903;&#25345;&#22810;&#37325;&#32487;&#25215;&#12290;&#22312;&#31867;&#21517;&#21518;&#38754;&#30340;&#23567;&#25324;&#21495;&#20013;&#65292;&#20320;&#21487;&#20197;&#21015;&#20986;&#35768;&#22810;&#20320;&#24819;&#35201;&#30340;&#31867;&#21517;&#65292;&#20197;&#36887;&#21495;&#20998;&#38548;&#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e11869"></a>5.3.1.&nbsp;&#21021;&#22987;&#21270;&#24182;&#24320;&#22987;&#31867;&#32534;&#30721;</h3></div></div></div><p>&#26412;&#20363;&#28436;&#31034;&#20102;&#20351;&#29992; <code class="function">__init__</code> &#26041;&#27861;&#26469;&#36827;&#34892; <code class="classname">FileInfo</code> &#31867;&#30340;&#21021;&#22987;&#21270;&#12290;</p><div class="example"><a name="fileinfo.init.example"></a><p class="title"><b>&#20363;&nbsp;5.5.&nbsp;&#21021;&#22987;&#21270; <code class="classname">FileInfo</code> &#31867;</b></p><div class="example-contents"><pre class="programlisting">
class FileInfo(UserDict):
    "store file metadata"              <a name="fileinfo.class.2.2"></a>circled_1_delcric
    def __init__(self, filename=None): <a name="fileinfo.class.2.3"></a>circled_2_delcric <a name="fileinfo.class.2.4"></a>circled_3_delcric <a name="fileinfo.class.2.5"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.class.2.2">circled_1_delcric</a> </dt><dd>&#31867;&#20063;&#21487;&#20197; (&#24182;&#19988;<a class="link" href="#tip.docstring" title="&#27880;&#24847;: &#20026;&#20160;&#20040;&#20351;&#29992; doc string &#26159;&#31181;&#22909;&#36873;&#25321;">&#24212;&#35813;</a>) &#26377; <code class="literal">doc string</code>s &#65292;&#23601;&#20687;&#26041;&#27861;&#21644;&#20989;&#25968;&#19968;&#26679;&#12290;</dd><dt><a href="#fileinfo.class.2.3">circled_2_delcric</a> </dt><dd><code class="function">__init__</code> &#22312;&#31867;&#30340;&#23454;&#20363;&#21019;&#24314;&#21518;&#34987;&#31435;&#21363;&#35843;&#29992;&#12290;&#23427;&#21487;&#33021;&#20250;&#24341;&#35825;&#20320;&#31216;&#20043;&#20026;&#31867;&#30340;&#26500;&#36896;&#20989;&#25968;&#65292;&#20294;&#36825;&#31181;&#35828;&#27861;&#24182;&#19981;&#27491;&#30830;&#12290;&#35828;&#23427;&#24341;&#35825;&#65292;&#26159;&#22240;&#20026;&#23427;&#30475;&#19978;&#21435;&#20687; (&#25353;&#29031;&#20064;&#24815;&#65292;<code class="function">__init__</code> &#26159;&#31867;&#20013;&#31532;&#19968;&#20010;&#23450;&#20041;&#30340;&#26041;&#27861;)&#65292;&#34892;&#20026;&#20063;&#20687; (&#22312;&#19968;&#20010;&#26032;&#21019;&#24314;&#30340;&#31867;&#23454;&#20363;&#20013;&#65292;&#23427;&#26159;&#39318;&#20808;&#34987;&#25191;&#34892;&#30340;&#20195;&#30721;)&#65292;&#24182;&#19988;&#21483;&#36215;&#26469;&#20063;&#20687; ("<span class="quote">init</span>"&#24403;&#28982;&#24847;&#21619;&#30528;&#26500;&#36896;&#30340;&#26412;&#24615;)&#12290;&#35828;&#23427;&#19981;&#27491;&#30830;&#65292;&#26159;&#22240;&#20026;&#23545;&#35937;&#22312;&#35843;&#29992; <code class="function">__init__</code> &#26102;&#24050;&#32463;&#34987;&#26500;&#36896;&#20986;&#26469;&#20102;&#65292;&#20320;&#24050;&#32463;&#26377;&#20102;&#19968;&#20010;&#23545;&#31867;&#30340;&#26032;&#23454;&#20363;&#30340;&#26377;&#25928;&#24341;&#29992;&#12290;&#20294; <code class="function">__init__</code> &#26159;&#22312; <span class="application">Python</span> &#20013;&#20320;&#21487;&#20197;&#24471;&#21040;&#30340;&#26368;&#25509;&#36817;&#26500;&#36896;&#20989;&#25968;&#30340;&#19996;&#35199;&#65292;&#24182;&#19988;&#23427;&#20063;&#25198;&#28436;&#30528;&#38750;&#24120;&#30456;&#20284;&#30340;&#35282;&#33394;&#12290;</dd><dt><a href="#fileinfo.class.2.4">circled_3_delcric</a> </dt><dd>&#27599;&#20010;&#31867;&#26041;&#27861;&#30340;&#31532;&#19968;&#20010;&#21442;&#25968;&#65292;&#21253;&#25324; <code class="function">__init__</code>&#65292;&#37117;&#26159;&#25351;&#21521;&#31867;&#30340;&#24403;&#21069;&#23454;&#20363;&#30340;&#24341;&#29992;&#12290;&#25353;&#29031;&#20064;&#24815;&#36825;&#20010;&#21442;&#25968;&#24635;&#26159;&#34987;&#31216;&#20026; <code class="literal">self</code>&#12290;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#65292;<code class="literal">self</code> &#25351;&#21521;&#26032;&#21019;&#24314;&#30340;&#23545;&#35937;&#65307;&#22312;&#20854;&#23427;&#30340;&#31867;&#26041;&#27861;&#20013;&#65292;&#23427;&#25351;&#21521;&#26041;&#27861;&#34987;&#35843;&#29992;&#30340;&#31867;&#23454;&#20363;&#12290;&#23613;&#31649;&#24403;&#23450;&#20041;&#26041;&#27861;&#26102;&#20320;&#38656;&#35201;&#26126;&#30830;&#25351;&#23450; <code class="literal">self</code>&#65292;&#20294;&#22312;&#35843;&#29992;&#26041;&#27861;&#26102;&#65292;&#20320;<span class="emphasis"><em>&#19981;</em></span> &#29992;&#25351;&#23450;&#23427;&#65292;<span class="application">Python</span> &#20250;&#26367;&#20320;&#33258;&#21160;&#21152;&#19978;&#30340;&#12290;</dd><dt><a href="#fileinfo.class.2.5">circled_4_delcric</a> </dt><dd><code class="function">__init__</code> &#26041;&#27861;&#21487;&#20197;&#25509;&#21463;&#20219;&#24847;&#25968;&#30446;&#30340;&#21442;&#25968;&#65292;&#23601;&#20687;&#20989;&#25968;&#19968;&#26679;&#65292;&#21442;&#25968;&#21487;&#20197;&#29992;&#32570;&#30465;&#20540;&#23450;&#20041;&#65292;&#21363;&#21487;&#20197;&#35774;&#32622;&#25104;&#23545;&#20110;&#35843;&#29992;&#32773;&#21487;&#36873;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;<code class="varname">filename</code> &#26377;&#19968;&#20010;&#32570;&#30465;&#20540; <code class="literal">None</code>&#65292;&#21363; <span class="application">Python</span> &#30340;&#31354;&#20540;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.self.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: <code class="literal">self</code></a></b><br>&#20064;&#24815;&#19978;&#65292;&#20219;&#20309; <span class="application">Python</span> &#31867;&#26041;&#27861;&#30340;&#31532;&#19968;&#20010;&#21442;&#25968; (&#23545;&#24403;&#21069;&#23454;&#20363;&#30340;&#24341;&#29992;) &#37117;&#21483;&#20570; <code class="literal">self</code>&#12290;&#36825;&#20010;&#21442;&#25968;&#25198;&#28436;&#30528; <span class="application"><acronym class="acronym">C++</acronym></span> &#25110; <span class="application">Java</span> &#20013;&#30340;&#20445;&#30041;&#23383; <code class="literal">this</code> &#30340;&#35282;&#33394;&#65292;&#20294; <code class="literal">self</code> &#22312; <span class="application">Python</span> &#20013;&#24182;&#19981;&#26159;&#19968;&#20010;&#20445;&#30041;&#23383;&#65292;&#23427;&#21482;&#26159;&#19968;&#20010;&#21629;&#21517;&#20064;&#24815;&#12290;&#34429;&#28982;&#22914;&#27492;&#65292;&#20063;&#35831;&#38500;&#20102; <code class="literal">self</code> &#20043;&#22806;&#19981;&#35201;&#20351;&#29992;&#20854;&#23427;&#30340;&#21517;&#23383;&#65292;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#22362;&#22266;&#30340;&#20064;&#24815;&#12290;</blockquote></div><div class="example"><a name="fileinfo.init.code.example"></a><p class="title"><b>&#20363;&nbsp;5.6.&nbsp;&#32534;&#20889; <code class="classname">FileInfo</code> &#31867;</b></p><div class="example-contents"><pre class="programlisting">
class FileInfo(UserDict):
    "store file metadata"
    def __init__(self, filename=None):
        UserDict.__init__(self)        <a name="fileinfo.class.2.6"></a>circled_1_delcric
        self["name"] = filename        <a name="fileinfo.class.2.7"></a>circled_2_delcric
                                       <a name="fileinfo.class.2.8"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.class.2.6">circled_1_delcric</a> </dt><dd>&#19968;&#20123;&#20266;&#38754;&#21521;&#23545;&#35937;&#35821;&#35328;&#65292;&#20687; <span class="application">Powerbuilder</span> &#26377;&#19968;&#31181;"<span class="quote">&#25193;&#23637;</span>"&#26500;&#36896;&#20989;&#25968;&#21644;&#20854;&#23427;&#20107;&#20214;&#30340;&#27010;&#24565;&#65292;&#21363;&#29238;&#31867;&#30340;&#26041;&#27861;&#22312;&#23376;&#31867;&#30340;&#26041;&#27861;&#25191;&#34892;&#21069;&#34987;&#33258;&#21160;&#35843;&#29992;&#12290;<span class="application">Python</span> &#19981;&#26159;&#36825;&#26679;&#65292;&#20320;&#24517;&#39035;&#26174;&#31034;&#22320;&#35843;&#29992;&#22312;&#29238;&#31867;&#20013;&#30340;&#21512;&#36866;&#26041;&#27861;&#12290;</dd><dt><a href="#fileinfo.class.2.7">circled_2_delcric</a> </dt><dd>&#25105;&#21578;&#35785;&#36807;&#20320;&#65292;&#36825;&#20010;&#31867;&#20687;&#23383;&#20856;&#19968;&#26679;&#24037;&#20316;&#65292;&#37027;&#20040;&#36825;&#37324;&#23601;&#26159;&#31532;&#19968;&#20010;&#21360;&#35937;&#12290;&#25105;&#20204;&#23558;&#21442;&#25968; <code class="varname">filename</code> &#36171;&#20540;&#32473;&#23545;&#35937; <code class="literal">name</code> &#20851;&#38190;&#23383;&#65292;&#20316;&#20026;&#23427;&#30340;&#20540;&#12290;</dd><dt><a href="#fileinfo.class.2.8">circled_3_delcric</a> </dt><dd>&#27880;&#24847; <code class="function">__init__</code> &#26041;&#27861;&#20174;&#19981;&#36820;&#22238;&#19968;&#20010;&#20540;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e12045"></a>5.3.2.&nbsp;&#20102;&#35299;&#20309;&#26102;&#21435;&#20351;&#29992; <code class="literal">self</code> &#21644; <code class="function">__init__</code></h3></div></div></div><p>&#24403;&#23450;&#20041;&#20320;&#33258;&#24050;&#30340;&#31867;&#26041;&#27861;&#26102;&#65292;&#20320;<span class="emphasis"><em>&#24517;&#39035;</em></span> &#26126;&#30830;&#23558; <code class="literal">self</code> &#20316;&#20026;&#27599;&#20010;&#26041;&#27861;&#30340;&#31532;&#19968;&#20010;&#21442;&#25968;&#21015;&#20986;&#65292;&#21253;&#25324; <code class="function">__init__</code>&#12290;&#24403;&#20174;&#20320;&#30340;&#31867;&#20013;&#35843;&#29992;&#19968;&#20010;&#29238;&#31867;&#30340;&#19968;&#20010;&#26041;&#27861;&#26102;&#65292;&#20320;&#24517;&#39035;&#21253;&#25324; <code class="literal">self</code> &#21442;&#25968;&#12290;&#20294;&#24403;&#20320;&#20174;&#31867;&#30340;&#22806;&#37096;&#35843;&#29992;&#20320;&#30340;&#31867;&#26041;&#27861;&#26102;&#65292;&#20320;&#19981;&#24517;&#23545; <code class="literal">self</code> &#21442;&#25968;&#25351;&#23450;&#20219;&#20309;&#20540;&#65307;&#20320;&#23436;&#20840;&#23558;&#20854;&#24573;&#30053;&#65292;&#32780; <span class="application">Python</span> &#20250;&#33258;&#21160;&#22320;&#26367;&#20320;&#22686;&#21152;&#23454;&#20363;&#30340;&#24341;&#29992;&#12290;&#25105;&#30693;&#36947;&#21018;&#24320;&#22987;&#36825;&#26377;&#20123;&#28151;&#20081;&#65292;&#23427;&#24182;&#19981;&#26159;&#33258;&#30456;&#30683;&#30462;&#30340;&#65292;&#22240;&#20026;&#23427;&#20381;&#38752;&#20110;&#19968;&#20010;&#20320;&#36824;&#19981;&#20102;&#35299;&#30340;&#21306;&#21035; (&#22312;&#32465;&#23450;&#19982;&#38750;&#32465;&#23450;&#26041;&#27861;&#20043;&#38388;)&#65292;&#25925;&#30475;&#19978;&#21435;&#26159;&#30683;&#30462;&#30340;&#12290;</p><p>&#22114;&#12290;&#25105;&#30693;&#36947;&#26377;&#24456;&#22810;&#30693;&#35782;&#38656;&#35201;&#21560;&#25910;&#65292;&#20294;&#26159;&#20320;&#35201;&#25484;&#25569;&#23427;&#12290;&#25152;&#26377;&#30340; <span class="application">Python</span> &#31867;&#20197;&#30456;&#21516;&#30340;&#26041;&#24335;&#24037;&#20316;&#65292;&#25152;&#20197;&#19968;&#26086;&#20320;&#23398;&#20250;&#20102;&#19968;&#20010;&#65292;&#23601;&#26159;&#23398;&#20250;&#20102;&#20840;&#37096;&#12290;&#22914;&#26524;&#20320;&#24536;&#20102;&#21035;&#30340;&#20219;&#20309;&#20107;&#65292;&#20063;&#35201;&#35760;&#20303;&#36825;&#20214;&#20107;&#65292;&#22240;&#20026;&#25105;&#35748;&#23450;&#23427;&#20250;&#35753;&#20320;&#20986;&#38169;&#65306;</p><div class="note"><blockquote><b class="title"><a name="tip.initoptional">&#27880;&#24847;: <code class="function">__init__</code> &#26041;&#27861;</a></b><br><code class="function">__init__</code> &#26041;&#27861;&#26159;&#21487;&#36873;&#30340;&#65292;&#20294;&#26159;&#19968;&#26086;&#20320;&#23450;&#20041;&#20102;&#65292;&#23601;&#24517;&#39035;&#35760;&#24471;&#26174;&#31034;&#35843;&#29992;&#29238;&#31867;&#30340; <code class="function">__init__</code> &#26041;&#27861; (&#22914;&#26524;&#23427;&#23450;&#20041;&#20102;&#30340;&#35805;)&#12290;&#36825;&#26679;&#26356;&#26159;&#27491;&#30830;&#30340;&#65306;&#26080;&#35770;&#20309;&#26102;&#23376;&#31867;&#24819;&#25193;&#23637;&#29238;&#31867;&#30340;&#34892;&#20026;&#65292;&#21518;&#20195;&#26041;&#27861;&#24517;&#39035;&#22312;&#36866;&#24403;&#30340;&#26102;&#26426;&#65292;&#20351;&#29992;&#36866;&#24403;&#30340;&#21442;&#25968;&#65292;&#26174;&#24335;&#35843;&#29992;&#29238;&#31867;&#26041;&#27861;&#12290;</blockquote></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;&#20851;&#20110; <span class="application">Python</span> &#31867;</b></p><ul><li><em class="citetitle">Learning to Program</em> (<a href="http://www.freenetpages.co.uk/hp/alan.gauld/">http://www.freenetpages.co.uk/hp/alan.gauld/</a>) &#26377;&#20248;&#38597;&#30340;&#31867;&#30340;&#20171;&#32461; (<a href="http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm">http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm</a>)&#12290;</li><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#31867;&#26469;&#23454;&#29616;&#22797;&#21512;&#25968;&#25454;&#31867;&#22411;&#27169;&#22411; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap12.htm">http://www.ibiblio.org/obp/thinkCSpy/chap12.htm</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#28145;&#20837;&#32771;&#34385;&#20102;&#31867;&#12289;&#21517;&#23383;&#31354;&#38388;&#21644;&#32487;&#25215; (<a href="http://www.python.org/doc/current/tut/node11.html">http://www.python.org/doc/current/tut/node11.html</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110;&#31867;&#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/242">http://www.faqts.com/knowledge-base/index.phtml/fid/242</a>)&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.create"></a>5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;</h2></div></div></div><div class="abstract"><p>&#22312; <span class="application">Python</span> &#20013;&#23545;&#31867;&#36827;&#34892;&#23454;&#20363;&#21270;&#24456;&#30452;&#25509;&#12290;&#35201;&#23545;&#31867;&#36827;&#34892;&#23454;&#20363;&#21270;&#65292;&#21482;&#35201;&#35843;&#29992;&#31867; (&#23601;&#22909;&#20687;&#23427;&#26159;&#19968;&#20010;&#20989;&#25968;)&#65292;&#20256;&#20837;&#23450;&#20041;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#30340;&#21442;&#25968;&#12290;&#36820;&#22238;&#20540;&#23558;&#26159;&#26032;&#21019;&#24314;&#30340;&#23545;&#35937;&#12290;</p></div><div class="example"><a name="d0e12149"></a><p class="title"><b>&#20363;&nbsp;5.7.&nbsp;&#21019;&#24314; <code class="classname">FileInfo</code> &#23454;&#20363;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import fileinfo</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = fileinfo.FileInfo("/music/_singles/kairo.mp3")</span> <a name="fileinfo.create.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.__class__</span>                                        <a name="fileinfo.create.1.2"></a>circled_2_delcric
<font color="teal">&lt;class fileinfo.FileInfo at 010EC204&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.__doc__</span>                                          <a name="fileinfo.create.1.3"></a>circled_3_delcric
<font color="teal">'store file metadata'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>                                                  <a name="fileinfo.create.1.4"></a>circled_4_delcric
<font color="teal">{'name': '/music/_singles/kairo.mp3'}</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.create.1.1">circled_1_delcric</a> </dt><dd>&#20320;&#27491;&#22312;&#21019;&#24314; <code class="classname">FileInfo</code> &#31867; (&#23450;&#20041;&#22312; <code class="filename">fileinfo</code> &#27169;&#22359;&#20013;) &#30340;&#23454;&#20363;&#65292;&#24182;&#19988;&#23558;&#26032;&#21019;&#24314;&#30340;&#23454;&#20363;&#36171;&#20540;&#32473;&#21464;&#37327; <code class="varname">f</code>&#12290;&#20320;&#20256;&#20837;&#20102;&#19968;&#20010;&#21442;&#25968;&#65292;<code class="literal">/music/_singles/kairo.mp3</code>&#65292;&#23427;&#23558;&#26368;&#21518;&#20316;&#20026;&#22312; <code class="classname">FileInfo</code> &#20013; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#30340; <code class="varname">filename</code> &#21442;&#25968;&#12290;</dd><dt><a href="#fileinfo.create.1.2">circled_2_delcric</a> </dt><dd>&#27599;&#19968;&#20010;&#31867;&#30340;&#23454;&#20363;&#26377;&#19968;&#20010;&#20869;&#32622;&#23646;&#24615;&#65292;<code class="literal">__class__</code>&#65292;&#23427;&#26159;&#23545;&#35937;&#30340;&#31867;&#12290;(&#27880;&#24847;&#36825;&#20010;&#34920;&#31034;&#21253;&#25324;&#20102;&#22312;&#25105;&#26426;&#22120;&#19978;&#30340;&#23454;&#20363;&#30340;&#29289;&#29702;&#22320;&#22336;&#65292;&#20320;&#30340;&#34920;&#31034;&#19981;&#20250;&#19968;&#26679;&#12290;)<span class="application">Java</span> &#31243;&#24207;&#21592;&#21487;&#33021;&#23545; <code class="classname">Class</code> &#31867;&#29087;&#24713;&#65292;&#36825;&#20010;&#31867;&#21253;&#21547;&#20102;&#20687; <code class="function">getName</code> &#21644; <code class="function">getSuperclass</code> &#20043;&#31867;&#29992;&#26469;&#24471;&#21040;&#19968;&#20010;&#23545;&#35937;&#20803;&#25968;&#25454;&#20449;&#24687;&#30340;&#26041;&#27861;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#36825;&#31867;&#20803;&#25968;&#25454;&#21487;&#20197;&#30452;&#25509;&#36890;&#36807;&#23545;&#35937;&#26412;&#36523;&#30340;&#23646;&#24615;&#65292;&#20687; <code class="literal">__class__</code>&#12289;<code class="literal">__name__</code> &#21644; <code class="literal">__bases__</code> &#26469;&#24471;&#21040;&#12290;</dd><dt><a href="#fileinfo.create.1.3">circled_3_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#20687;&#23545;&#20989;&#25968;&#25110;&#27169;&#22359;&#19968;&#26679;&#26469;&#35775;&#38382;&#23454;&#20363;&#30340; <code class="literal">doc string</code>&#12290;&#19968;&#20010;&#31867;&#30340;&#25152;&#26377;&#23454;&#20363;&#20849;&#20139;&#30456;&#21516;&#30340; <code class="literal">doc string</code>&#12290;</dd><dt><a href="#fileinfo.create.1.4">circled_4_delcric</a> </dt><dd>&#36824;&#35760;&#24471;&#20160;&#20040;&#26102;&#20505; <code class="function">__init__</code> &#26041;&#27861;<a class="link" href="#fileinfo.class.example" title="&#20363;&nbsp;5.4.&nbsp;&#23450;&#20041; FileInfo &#31867;">&#23558;&#23427;&#30340; <code class="varname">filename</code> &#21442;&#25968;&#36171;&#32473; <code class="literal">self["name"]</code></a> &#21527;&#65311;&#21734;&#65292;&#31572;&#26696;&#22312;&#36825;&#12290;&#22312;&#21019;&#24314;&#31867;&#23454;&#20363;&#26102;&#20320;&#20256;&#20837;&#30340;&#21442;&#25968;&#34987;&#27491;&#30830;&#21457;&#36865;&#21040; <code class="function">__init__</code> &#26041;&#27861;&#20013; (&#24403;&#25105;&#20204;&#21019;&#24314;&#31867;&#23454;&#20363;&#26102;&#65292;&#25105;&#20204;&#25152;&#20256;&#36882;&#30340;&#21442;&#25968;&#34987;&#27491;&#30830;&#22320;&#21457;&#36865;&#32473; <code class="function">__init__</code> &#26041;&#27861; (&#38543;&#21516;&#19968;&#36215;&#20256;&#36882;&#30340;&#36824;&#26377;&#23545;&#35937;&#30340;&#24341;&#29992;&#65292;<code class="literal">self</code>&#65292;&#23427;&#26159;&#30001; <span class="application">Python</span> &#33258;&#21160;&#28155;&#21152;&#30340;)&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.new.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: &#31867;&#30340;&#23454;&#20363;&#21270;</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#21019;&#24314;&#31867;&#30340;&#23454;&#20363;&#21482;&#35201;&#35843;&#29992;&#19968;&#20010;&#31867;&#65292;&#20223;&#20315;&#23427;&#26159;&#19968;&#20010;&#20989;&#25968;&#23601;&#34892;&#20102;&#12290;&#19981;&#20687; <span class="application"><acronym class="acronym">C++</acronym></span> &#25110; <span class="application">Java</span> &#26377;&#19968;&#20010;&#26126;&#30830;&#30340; <code class="literal">new</code> &#25805;&#20316;&#31526;&#12290;</blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e12314"></a>5.4.1.&nbsp;&#22403;&#22334;&#22238;&#25910;</h3></div></div></div><p>&#22914;&#26524;&#35828;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#23454;&#20363;&#26159;&#23481;&#26131;&#30340;&#65292;&#37027;&#20040;&#38144;&#27585;&#23427;&#20204;&#29978;&#33267;&#26356;&#23481;&#26131;&#12290;&#36890;&#24120;&#65292;&#19981;&#38656;&#35201;&#26126;&#30830;&#22320;&#37322;&#25918;&#23454;&#20363;&#65292;&#22240;&#20026;&#24403;&#25351;&#27966;&#32473;&#23427;&#20204;&#30340;&#21464;&#37327;&#36229;&#20986;&#20316;&#29992;&#22495;&#26102;&#65292;&#23427;&#20204;&#20250;&#34987;&#33258;&#21160;&#22320;&#37322;&#25918;&#12290;&#20869;&#23384;&#27844;&#28431;&#22312; <span class="application">Python</span> &#20013;&#24456;&#23569;&#35265;&#12290;</p><div class="example"><a name="fileinfo.scope"></a><p class="title"><b>&#20363;&nbsp;5.8.&nbsp;&#23581;&#35797;&#23454;&#29616;&#20869;&#23384;&#27844;&#28431;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def leakmem():</span>
<code class="prompt">...     </code><span class="userinput">f = fileinfo.FileInfo('/music/_singles/kairo.mp3')</span> <a name="fileinfo.create.2.1"></a>circled_1_delcric
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for i in range(100):</span>
<code class="prompt">...     </code><span class="userinput">leakmem()</span>                                          <a name="fileinfo.create.2.3"></a>circled_2_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.create.2.1">circled_1_delcric</a> </dt><dd>&#27599;&#27425; <code class="function">leakmem</code> &#20989;&#25968;&#34987;&#35843;&#29992;&#65292;&#20320;&#21019;&#24314;&#20102; <code class="classname">FileInfo</code> &#30340;&#19968;&#20010;&#23454;&#20363;&#65292;&#23558;&#20854;&#36171;&#32473;&#21464;&#37327; <code class="varname">f</code>&#65292;&#36825;&#20010;&#21464;&#37327;&#26159;&#20989;&#25968;&#20869;&#30340;&#19968;&#20010;&#23616;&#37096;&#21464;&#37327;&#12290;&#28982;&#21518;&#20989;&#25968;&#32467;&#26463;&#26102;&#27809;&#26377;&#37322;&#25918; <code class="varname">f</code>&#65292;&#25152;&#20197;&#20320;&#21487;&#33021;&#35748;&#20026;&#26377;&#20869;&#23384;&#27844;&#28431;&#65292;&#20294;&#26159;&#20320;&#38169;&#20102;&#12290;&#24403;&#20989;&#25968;&#32467;&#26463;&#26102;&#65292;&#23616;&#37096;&#21464;&#37327; <code class="varname">f</code> &#36229;&#20986;&#20102;&#20316;&#29992;&#22495;&#12290;&#22312;&#36825;&#20010;&#22320;&#26041;&#65292;&#19981;&#20877;&#26377;&#20219;&#20309;&#23545; <code class="classname">FileInfo</code> &#26032;&#21019;&#24314;&#23454;&#20363;&#30340;&#24341;&#29992; (&#22240;&#20026;&#38500;&#20102; <code class="varname">f</code> &#25105;&#20204;&#20174;&#26410;&#23558;&#20854;&#36171;&#20540;&#32473;&#20854;&#23427;&#21464;&#37327;)&#65292;&#25152;&#20197; <span class="application">Python</span> &#26367;&#25105;&#20204;&#38144;&#27585;&#25481;&#23454;&#20363;&#12290;</dd><dt><a href="#fileinfo.create.2.3">circled_2_delcric</a> </dt><dd>&#19981;&#31649;&#25105;&#20204;&#35843;&#29992; <code class="function">leakmem</code> &#20989;&#25968;&#22810;&#23569;&#27425;&#65292;&#20915;&#19981;&#20250;&#27844;&#28431;&#20869;&#23384;&#65292;&#22240;&#20026;&#27599;&#19968;&#27425;&#65292;<span class="application">Python</span> &#23558;&#22312;&#20174; <code class="function">leakmem</code> &#36820;&#22238;&#21069;&#38144;&#27585;&#25481;&#26032;&#21019;&#24314;&#30340; <code class="classname">FileInfo</code> &#31867;&#23454;&#20363;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#23545;&#20110;&#36825;&#31181;&#22403;&#22334;&#25910;&#38598;&#30340;&#26041;&#24335;&#65292;&#25216;&#26415;&#19978;&#30340;&#26415;&#35821;&#21483;&#20570;"<span class="quote">&#24341;&#29992;&#35745;&#25968;</span>"&#12290;<span class="application">Python</span> &#32500;&#25252;&#30528;&#23545;&#27599;&#20010;&#23454;&#20363;&#30340;&#24341;&#29992;&#21015;&#34920;&#12290;&#22312;&#19978;&#38754;&#30340;&#20363;&#23376;&#20013;&#65292;&#21482;&#26377;&#19968;&#20010; <code class="classname">FileInfo</code> &#30340;&#23454;&#20363;&#24341;&#29992;&#65306;&#23616;&#37096;&#21464;&#37327; <code class="varname">f</code>&#12290;&#24403;&#20989;&#25968;&#32467;&#26463;&#26102;&#65292;&#21464;&#37327; <code class="varname">f</code> &#36229;&#20986;&#20316;&#29992;&#22495;&#65292;&#25152;&#20197;&#24341;&#29992;&#35745;&#25968;&#38477;&#20026; <code class="constant">0</code>&#65292;&#21017; <span class="application">Python</span> &#33258;&#21160;&#38144;&#27585;&#25481;&#23454;&#20363;&#12290;</p><p>&#22312; <span class="application">Python</span> &#30340;&#20197;&#21069;&#29256;&#26412;&#20013;&#65292;&#23384;&#22312;&#24341;&#29992;&#35745;&#25968;&#22833;&#36133;&#30340;&#24773;&#20917;&#65292;&#36825;&#26679; <span class="application">Python</span> &#19981;&#33021;&#22312;&#21518;&#38754;&#36827;&#34892;&#28165;&#38500;&#12290;&#22914;&#26524;&#20320;&#21019;&#24314;&#20004;&#20010;&#23454;&#20363;&#65292;&#23427;&#20204;&#30456;&#20114;&#24341;&#29992; (&#20363;&#22914;&#65292;&#21452;&#37325;&#38142;&#34920;&#65292;&#27599;&#19968;&#20010;&#32467;&#28857;&#26377;&#37117;&#19968;&#20010;&#25351;&#21521;&#21015;&#34920;&#20013;&#21069;&#19968;&#20010;&#21644;&#21518;&#19968;&#20010;&#32467;&#28857;&#30340;&#25351;&#38024;)&#65292;&#20219;&#19968;&#20010;&#23454;&#20363;&#37117;&#19981;&#20250;&#34987;&#33258;&#21160;&#38144;&#27585;&#65292;&#22240;&#20026; <span class="application">Python</span> (&#27491;&#30830;) &#35748;&#20026;&#23545;&#20110;&#27599;&#20010;&#23454;&#20363;&#37117;&#23384;&#22312;&#19968;&#20010;&#24341;&#29992;&#12290;<span class="application">Python</span> 2.0 &#26377;&#19968;&#31181;&#39069;&#22806;&#30340;&#22403;&#22334;&#22238;&#25910;&#26041;&#24335;&#65292;&#21483;&#20570;"<span class="quote">&#26631;&#35760;&#21518;&#28165;&#38500;</span>"&#65292;&#23427;&#36275;&#22815;&#32874;&#26126;&#65292;&#21487;&#20197;&#27491;&#30830;&#22320;&#28165;&#38500;&#24490;&#29615;&#24341;&#29992;&#12290;</p><p>&#20316;&#20026;&#26366;&#32463;&#35835;&#36807;&#21746;&#23398;&#19987;&#19994;&#30340;&#19968;&#21592;&#65292;&#35753;&#25105;&#24863;&#21040;&#22256;&#24785;&#30340;&#26159;&#65292;&#24403;&#27809;&#26377;&#20154;&#23545;&#20107;&#29289;&#36827;&#34892;&#35266;&#23519;&#26102;&#65292;&#23427;&#20204;&#23601;&#28040;&#22833;&#20102;&#65292;&#20294;&#26159;&#36825;&#30830;&#23454;&#26159;&#22312; <span class="application">Python</span> &#20013;&#25152;&#21457;&#29983;&#30340;&#12290;&#36890;&#24120;&#65292;&#20320;&#21487;&#20197;&#23436;&#20840;&#24536;&#35760;&#20869;&#23384;&#31649;&#29702;&#65292;&#35753; <span class="application">Python</span> &#22312;&#21518;&#38754;&#36827;&#34892;&#28165;&#29702;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#20687; <code class="literal">__class__</code> &#20043;&#31867;&#30340;&#20869;&#32622;&#23646;&#24615; (<a href="http://www.python.org/doc/current/lib/specialattrs.html">http://www.python.org/doc/current/lib/specialattrs.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">gc</code> &#27169;&#22359;&#30340;&#25991;&#26723; (<a href="http://www.python.org/doc/current/lib/module-gc.html">http://www.python.org/doc/current/lib/module-gc.html</a>)&#65292;&#27492;&#27169;&#22359;&#32473;&#20104;&#20320;&#23545; <span class="application">Python</span> &#30340;&#22403;&#22334;&#22238;&#25910;&#30340;&#24213;&#23618;&#25511;&#21046;&#26435;&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.userdict"></a>5.5.&nbsp;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;</h2></div></div></div><div class="abstract"><p>&#22914;&#20320;&#25152;&#35265;&#65292;<code class="classname">FileInfo</code> &#26159;&#19968;&#20010;&#26377;&#30528;&#20687;&#23383;&#20856;&#19968;&#26679;&#30340;&#34892;&#20026;&#26041;&#24335;&#30340;&#31867;&#12290;&#20026;&#20102;&#36827;&#19968;&#27493;&#25581;&#31034;&#36825;&#19968;&#28857;&#65292;&#35753;&#25105;&#20204;&#30475;&#19968;&#30475;&#22312; <code class="filename">UserDict</code> &#27169;&#22359;&#20013;&#30340; <code class="classname">UserDict</code> &#31867;&#65292;&#23427;&#26159;&#25105;&#20204;&#30340; <code class="classname">FileInfo</code> &#31867;&#30340;&#29238;&#31867;&#12290;&#23427;&#27809;&#26377;&#20160;&#20040;&#29305;&#21035;&#30340;&#65292;&#20063;&#26159;&#29992; <span class="application">Python</span> &#20889;&#30340;&#65292;&#24182;&#19988;&#20445;&#23384;&#22312;&#19968;&#20010; <code class="literal">.py</code> &#25991;&#20214;&#37324;&#65292;&#23601;&#20687;&#25105;&#20204;&#20854;&#20182;&#30340;&#20195;&#30721;&#12290;&#29305;&#21035;&#20043;&#22788;&#22312;&#20110;&#65292;&#23427;&#20445;&#23384;&#22312;&#20320;&#30340; <span class="application">Python</span> &#23433;&#35013;&#30446;&#24405;&#30340; <code class="filename">lib</code> &#30446;&#24405;&#19979;&#12290;</p></div><div class="tip"><blockquote><b class="title"><a name="tip.locate">&#25552;&#31034;: </a></b><br>&#22312; Windows &#19979;&#30340; <span class="application">ActivePython</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#20320;&#21487;&#20197;&#24555;&#36895;&#25171;&#24320;&#22312;&#20320;&#30340;&#24211;&#36335;&#24452;&#20013;&#30340;&#20219;&#20309;&#27169;&#22359;&#65292;&#20351;&#29992;
<span class="guimenu">File</span> &#8594; <span class="guimenuitem"><span class="accel">L</span>ocate...</span> (<span class="shortcut"><strong><span class="keycap"><strong>Ctrl</strong></span>+<span class="keysym">L</span></strong></span>)&#12290;</blockquote></div><div class="example"><a name="fileinfo.userdict.init.example"></a><p class="title"><b>&#20363;&nbsp;5.9.&nbsp;&#23450;&#20041; <code class="classname">UserDict</code> &#31867;</b></p><div class="example-contents"><pre class="programlisting">
class UserDict:                                <a name="fileinfo.userdict.1.1"></a>circled_1_delcric
    def __init__(self, dict=None):             <a name="fileinfo.userdict.1.2"></a>circled_2_delcric
        self.data = {}                         <a name="fileinfo.userdict.1.3"></a>circled_3_delcric
        if dict is not None: self.update(dict) <a name="fileinfo.userdict.1.4"></a>circled_4_delcric <a name="fileinfo.userdict.1.5"></a>circled_5_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.userdict.1.1">circled_1_delcric</a> </dt><dd>&#27880;&#24847; <code class="classname">UserDict</code> &#26159;&#19968;&#20010;&#22522;&#31867;&#65292;&#19981;&#26159;&#20174;&#20219;&#20309;&#20854;&#20182;&#31867;&#32487;&#25215;&#32780;&#26469;&#12290;</dd><dt><a href="#fileinfo.userdict.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#23601;&#26159;&#25105;&#20204;<a class="link" href="#fileinfo.class.example" title="&#20363;&nbsp;5.4.&nbsp;&#23450;&#20041; FileInfo &#31867;">&#22312; <code class="classname">FileInfo</code> &#31867;&#20013;&#36827;&#34892;&#20102;&#35206;&#30422;</a>&#30340; <code class="function">__init__</code> &#26041;&#27861;&#12290;&#27880;&#24847;&#36825;&#20010;&#29238;&#31867;&#30340;&#21442;&#25968;&#21015;&#34920;&#19982;&#23376;&#31867;&#19981;&#21516;&#12290;&#24456;&#22909;&#65292;&#27599;&#20010;&#23376;&#31867;&#21487;&#20197;&#25317;&#26377;&#33258;&#24050;&#30340;&#21442;&#25968;&#38598;&#65292;&#21482;&#35201;&#20351;&#29992;&#27491;&#30830;&#30340;&#21442;&#25968;&#35843;&#29992;&#29238;&#31867;&#23601;&#21487;&#20197;&#20102;&#12290;&#36825;&#37324;&#29238;&#31867;&#26377;&#19968;&#20010;&#23450;&#20041;&#21021;&#22987;&#20540;&#30340;&#26041;&#27861; (&#36890;&#36807;&#22312; <code class="varname">dict</code> &#21442;&#25968;&#20013;&#20256;&#20837;&#19968;&#20010;&#23383;&#20856;)&#65292;&#36825;&#19968;&#26041;&#27861;&#25105;&#20204;&#30340; <code class="classname">FileInfo</code> &#27809;&#26377;&#29992;&#19978;&#12290;</dd><dt><a href="#fileinfo.userdict.1.3">circled_3_delcric</a> </dt><dd><span class="application">Python</span> &#25903;&#25345;&#25968;&#25454;&#23646;&#24615; (&#22312; <span class="application">Java</span> &#21644; <span class="application">Powerbuilder</span> &#20013;&#21483;&#20570; "<span class="quote">&#23454;&#20363;&#21464;&#37327;</span>"&#65292;&#22312; <span class="application"><acronym class="acronym">C++</acronym></span> &#20013;&#21483; "<span class="quote">&#25968;&#25454;&#25104;&#21592;</span>")&#65292;&#23427;&#26159;&#30001;&#26576;&#20010;&#29305;&#23450;&#30340;&#31867;&#23454;&#20363;&#25152;&#25317;&#26377;&#30340;&#25968;&#25454;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#27599;&#20010; <code class="classname">UserDict</code> &#23454;&#20363;&#23558;&#25317;&#26377;&#19968;&#20010; <code class="varname">data</code> &#25968;&#25454;&#23646;&#24615;&#12290;&#35201;&#20174;&#31867;&#22806;&#30340;&#20195;&#30721;&#24341;&#29992;&#36825;&#20010;&#23646;&#24615;&#65292;&#38656;&#35201;&#29992;&#23454;&#20363;&#30340;&#21517;&#23383;&#38480;&#23450;&#23427;&#65292;<code class="literal"><em class="replaceable">instance</em>.data</code>&#65292;&#38480;&#23450;&#30340;&#26041;&#27861;&#19982;&#20320;&#29992;&#27169;&#22359;&#30340;&#21517;&#23383;&#26469;&#38480;&#23450;&#20989;&#25968;&#19968;&#26679;&#12290;&#35201;&#22312;&#31867;&#30340;&#20869;&#37096;&#24341;&#29992;&#19968;&#20010;&#25968;&#25454;&#23646;&#24615;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="literal">self</code> &#20316;&#20026;&#38480;&#23450;&#31526;&#12290;&#20064;&#24815;&#19978;&#65292;&#25152;&#26377;&#30340;&#25968;&#25454;&#23646;&#24615;&#37117;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#21021;&#22987;&#21270;&#20026;&#26377;&#24847;&#20041;&#30340;&#20540;&#12290;&#28982;&#32780;&#65292;&#36825;&#24182;&#19981;&#26159;&#24517;&#39035;&#30340;&#65292;&#22240;&#20026;&#25968;&#25454;&#23646;&#24615;&#65292;&#20687;&#23616;&#37096;&#21464;&#37327;&#19968;&#26679;&#65292;&#24403;&#20320;&#39318;&#27425;&#36171;&#32473;&#23427;&#20540;&#30340;&#26102;&#20505;<a class="link" href="#odbchelper.vardef" title="3.4.&nbsp;&#21464;&#37327;&#22768;&#26126;">&#31361;&#28982;&#20135;&#29983;</a>&#12290;</dd><dt><a href="#fileinfo.userdict.1.4">circled_4_delcric</a> </dt><dd><code class="function">update</code> &#26041;&#27861;&#26159;&#19968;&#20010;&#23383;&#20856;&#22797;&#21046;&#22120;&#65306;&#23427;&#25226;&#19968;&#20010;&#23383;&#20856;&#20013;&#30340;&#38190;&#21644;&#20540;&#20840;&#37096;&#25335;&#36125;&#21040;&#21478;&#19968;&#20010;&#23383;&#20856;&#12290;&#36825;&#20010;&#25805;&#20316;<span class="emphasis"><em>&#24182;&#19981;</em></span> &#20107;&#20808;&#28165;&#31354;&#30446;&#26631;&#23383;&#20856;&#65292;&#22914;&#26524;&#19968;&#20123;&#38190;&#22312;&#30446;&#26631;&#23383;&#20856;&#20013;&#24050;&#32463;&#23384;&#22312;&#65292;&#21017;&#23427;&#20204;&#23558;&#34987;&#35206;&#30422;&#65292;&#37027;&#20123;&#38190;&#21517;&#22312;&#30446;&#26631;&#23383;&#20856;&#20013;&#19981;&#23384;&#22312;&#30340;&#21017;&#19981;&#25913;&#21464;&#12290;&#24212;&#35813;&#25226; <code class="function">update</code> &#30475;&#20316;&#26159;&#21512;&#24182;&#20989;&#25968;&#65292;&#32780;&#19981;&#26159;&#22797;&#21046;&#20989;&#25968;&#12290;</dd><dt><a href="#fileinfo.userdict.1.5">circled_5_delcric</a> </dt><dd>&#36825;&#20010;&#35821;&#27861;&#20320;&#21487;&#33021;&#20197;&#21069;&#27809;&#30475;&#36807; (&#25105;&#36824;&#27809;&#26377;&#22312;&#36825;&#26412;&#20070;&#20013;&#30340;&#20363;&#23376;&#20013;&#29992;&#36807;&#23427;)&#12290;&#36825;&#26159;&#19968;&#26465; <code class="literal">if</code> &#35821;&#21477;&#65292;&#20294;&#26159;&#27809;&#26377;&#22312;&#19979;&#19968;&#34892;&#26377;&#19968;&#20010;&#32553;&#36817;&#22359;&#65292;&#32780;&#21482;&#26159;&#22312;&#20882;&#21495;&#21518;&#38754;&#65292;&#22312;&#21516;&#19968;&#34892;&#19978;&#26377;&#21333;&#26465;&#35821;&#21477;&#12290;&#36825;&#23436;&#20840;&#26159;&#21512;&#27861;&#30340;&#65292;&#23427;&#21482;&#26159;&#24403;&#20320;&#22312;&#19968;&#20010;&#22359;&#20013;&#20165;&#26377;&#19968;&#26465;&#35821;&#21477;&#26102;&#30340;&#19968;&#20010;&#31616;&#20889;&#12290;(&#23427;&#23601;&#20687;&#22312; <span class="application"><acronym class="acronym">C++</acronym></span> &#20013;&#27809;&#26377;&#29992;&#22823;&#25324;&#21495;&#21253;&#25324;&#30340;&#21333;&#34892;&#35821;&#21477;&#12290;) &#20320;&#21487;&#20197;&#29992;&#36825;&#31181;&#35821;&#27861;&#65292;&#25110;&#32773;&#21487;&#20197;&#22312;&#21518;&#38754;&#30340;&#34892;&#20889;&#19979;&#32553;&#36817;&#20195;&#30721;&#65292;&#20294;&#26159;&#19981;&#33021;&#23545;&#21516;&#19968;&#20010;&#22359;&#21516;&#26102;&#29992;&#20004;&#31181;&#26041;&#24335;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.overloading">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: Function Overloading</a></b><br><span class="application">Java</span> &#21644; <span class="application">Powerbuilder</span> &#25903;&#25345;&#36890;&#36807;&#21442;&#25968;&#21015;&#34920;&#30340;&#37325;&#36733;&#65292;<span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">&#20063;&#23601;&#26159;</acronym></em></span> &#19968;&#20010;&#31867;&#21487;&#20197;&#26377;&#21516;&#21517;&#30340;&#22810;&#20010;&#26041;&#27861;&#65292;&#20294;&#36825;&#20123;&#26041;&#27861;&#25110;&#32773;&#26159;&#21442;&#25968;&#20010;&#25968;&#19981;&#21516;&#65292;&#25110;&#32773;&#26159;&#21442;&#25968;&#30340;&#31867;&#22411;&#19981;&#21516;&#12290;&#20854;&#23427;&#35821;&#35328; (&#26368;&#26126;&#26174;&#22914; <acronym class="acronym">PL/SQL</acronym>) &#29978;&#33267;&#25903;&#25345;&#36890;&#36807;&#21442;&#25968;&#21517;&#30340;&#37325;&#36733;&#65292;<span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">&#20063;&#23601;&#26159;</acronym></em></span> &#19968;&#20010;&#31867;&#21487;&#20197;&#26377;&#21516;&#21517;&#30340;&#22810;&#20010;&#26041;&#27861;&#65292;&#36825;&#20123;&#26041;&#27861;&#26377;&#30456;&#21516;&#31867;&#22411;&#65292;&#30456;&#21516;&#20010;&#25968;&#30340;&#21442;&#25968;&#65292;&#20294;&#21442;&#25968;&#21517;&#19981;&#21516;&#12290;<span class="application">Python</span> &#20004;&#31181;&#37117;&#19981;&#25903;&#25345;&#65292;&#24635;&#20043;&#26159;&#27809;&#26377;&#20219;&#20309;&#24418;&#24335;&#30340;&#20989;&#25968;&#37325;&#36733;&#12290;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#23601;&#26159;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#19981;&#31649;&#23427;&#26377;&#20160;&#20040;&#26679;&#30340;&#21442;&#25968;&#12290;&#27599;&#20010;&#31867;&#21482;&#33021;&#26377;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#24182;&#19988;&#22914;&#26524;&#19968;&#20010;&#23376;&#31867;&#25317;&#26377;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#23427;<span class="emphasis"><em>&#24635;&#26159;</em></span> &#35206;&#30422;&#29238;&#31867;&#30340; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#29978;&#33267;&#23376;&#31867;&#21487;&#20197;&#29992;&#19981;&#21516;&#30340;&#21442;&#25968;&#21015;&#34920;&#26469;&#23450;&#20041;&#23427;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="fileinfo.derivedclasses">&#27880;&#24847;: </a></b><br><span class="application">Python</span> &#30340;&#21407;&#20316;&#32773; Guido &#26159;&#36825;&#26679;&#35299;&#37322;&#26041;&#27861;&#35206;&#30422;&#30340;&#65306;&#8220;&#23376;&#31867;&#21487;&#20197;&#35206;&#30422;&#29238;&#31867;&#20013;&#30340;&#26041;&#27861;&#12290;&#22240;&#20026;&#26041;&#27861;&#27809;&#26377;&#29305;&#27530;&#30340;&#20248;&#20808;&#32423;&#35774;&#32622;&#65292;&#29238;&#31867;&#20013;&#30340;&#19968;&#20010;&#26041;&#27861;&#22312;&#35843;&#29992;&#21516;&#31867;&#20013;&#30340;&#21478;&#19968;&#26041;&#27861;&#26102;&#65292;&#21487;&#33021;&#20854;&#23454;&#35843;&#29992;&#21040;&#30340;&#21364;&#26159;&#19968;&#20010;&#23376;&#31867;&#20013;&#35206;&#30422;&#29238;&#31867;&#21516;&#21517;&#26041;&#27861;&#30340;&#26041;&#27861;&#12290; (<span class="application"><acronym class="acronym">C++</acronym></span> &#31243;&#24207;&#21592;&#21487;&#33021;&#20250;&#36825;&#26679;&#24819;&#65306;&#25152;&#26377;&#30340; <span class="application">Python</span> &#26041;&#27861;&#37117;&#26159;&#34394;&#20989;&#25968;&#12290;)&#8221;&#22914;&#26524;&#20320;&#19981;&#26126;&#30333; (&#23427;&#20196;&#25105;&#39047;&#24863;&#22256;&#24785;)&#65292;&#19981;&#24517;&#22312;&#24847;&#12290;&#25105;&#24819;&#25105;&#35201;&#36339;&#36807;&#23427;&#12290;<sup>[<a name="d0e12706" href="#ftn.d0e12706" class="footnote">3</a>]</sup></blockquote></div><div class="caution"><blockquote><b class="title"><a name="note.dataattributes">&#23567;&#24515;: </a></b><br>&#24212;&#35813;&#24635;&#26159;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#32473;&#19968;&#20010;&#23454;&#20363;&#30340;&#25152;&#26377;&#25968;&#25454;&#23646;&#24615;&#36171;&#20104;&#19968;&#20010;&#21021;&#22987;&#20540;&#12290;&#36825;&#26679;&#20570;&#23558;&#20250;&#33410;&#30465;&#20320;&#22312;&#21518;&#38754;&#35843;&#35797;&#30340;&#26102;&#38388;&#65292;&#19981;&#24517;&#20026;&#25429;&#25417;&#22240;&#20351;&#29992;&#26410;&#21021;&#22987;&#21270; (&#20063;&#23601;&#26159;&#19981;&#23384;&#22312;) &#30340;&#23646;&#24615;&#32780;&#23548;&#33268;&#30340; <code class="classname">AttributeError</code> &#24322;&#24120;&#36153;&#26102;&#36153;&#21147;&#12290;</blockquote></div><div class="example"><a name="fileinfo.userdict.normalmethods"></a><p class="title"><b>&#20363;&nbsp;5.10.&nbsp;<code class="classname">UserDict</code> &#24120;&#35268;&#26041;&#27861;</b></p><div class="example-contents"><pre class="programlisting">
    def clear(self): self.data.clear()          <a name="fileinfo.userdict.2.1"></a>circled_1_delcric
    def copy(self):                             <a name="fileinfo.userdict.2.2"></a>circled_2_delcric
        if self.__class__ is UserDict:          <a name="fileinfo.userdict.2.3"></a>circled_3_delcric
            return UserDict(self.data)         
        import copy                             <a name="fileinfo.userdict.2.4"></a>circled_4_delcric
        return copy.copy(self)                 
    def keys(self): return self.data.keys()     <a name="fileinfo.userdict.2.5"></a>circled_5_delcric
    def items(self): return self.data.items()  
    def values(self): return self.data.values()
</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.userdict.2.1">circled_1_delcric</a> </dt><dd><code class="function">clear</code> &#26159;&#19968;&#20010;&#26222;&#36890;&#30340;&#31867;&#26041;&#27861;&#65292;&#21487;&#20197;&#22312;&#20219;&#20309;&#26102;&#20505;&#34987;&#20219;&#20309;&#20154;&#20844;&#24320;&#35843;&#29992;&#12290;&#27880;&#24847;&#65292;<code class="function">clear</code> &#20687;&#25152;&#26377;&#30340;&#31867;&#26041;&#27861;&#19968;&#26679; (&#24120;&#35268;&#30340;&#25110;&#19987;&#29992;&#30340;)&#65292;&#20351;&#29992; <code class="literal">self</code> &#20316;&#20026;&#23427;&#30340;&#31532;&#19968;&#20010;&#21442;&#25968;&#12290;(&#35760;&#20303;&#65292;&#24403;&#20320;&#35843;&#29992;&#26041;&#27861;&#26102;&#65292;&#19981;&#29992;&#21253;&#25324; <code class="literal">self</code>&#65307;&#36825;&#20214;&#20107;&#26159; <span class="application">Python</span> &#26367;&#20320;&#20570;&#30340;&#12290;) &#36824;&#24212;&#27880;&#24847;&#36825;&#20010;&#23553;&#35013;&#31867;&#30340;&#22522;&#26412;&#25216;&#26415;&#65306;&#23558;&#19968;&#20010;&#30495;&#27491;&#30340;&#23383;&#20856; (<code class="varname">data</code>) &#20316;&#20026;&#25968;&#25454;&#23646;&#24615;&#20445;&#23384;&#36215;&#26469;&#65292;&#23450;&#20041;&#25152;&#26377;&#30495;&#27491;&#23383;&#20856;&#25152;&#25317;&#26377;&#30340;&#26041;&#27861;&#65292;&#24182;&#19988;&#23558;&#27599;&#20010;&#31867;&#26041;&#27861;&#37325;&#23450;&#21521;&#21040;&#30495;&#27491;&#23383;&#20856;&#19978;&#30340;&#30456;&#24212;&#26041;&#27861;&#12290;(&#20320;&#21487;&#33021;&#24050;&#32463;&#24536;&#20102;&#65292;&#23383;&#20856;&#30340; <code class="function">clear</code> &#26041;&#27861;<a class="link" href="#odbchelper.dict.del" title="&#20363;&nbsp;3.5.&nbsp;&#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;">&#21024;&#38500;&#23427;&#30340;&#25152;&#26377;&#20851;&#38190;&#23383;</a>&#21644;&#20851;&#38190;&#23383;&#30456;&#24212;&#30340;&#20540;&#12290;)</dd><dt><a href="#fileinfo.userdict.2.2">circled_2_delcric</a> </dt><dd>&#30495;&#27491;&#23383;&#20856;&#30340; <code class="filename">copy</code> &#26041;&#27861;&#20250;&#36820;&#22238;&#19968;&#20010;&#26032;&#30340;&#23383;&#20856;&#65292;&#23427;&#26159;&#21407;&#22987;&#23383;&#20856;&#30340;&#21407;&#26679;&#30340;&#22797;&#21046; (&#25152;&#26377;&#30340;&#38190;-&#20540;&#23545;&#37117;&#30456;&#21516;)&#12290;&#20294;&#26159; <code class="classname">UserDict</code> &#19981;&#33021;&#31616;&#21333;&#22320;&#37325;&#23450;&#21521;&#21040; <code class="function">self.data.copy</code>&#65292;&#22240;&#20026;&#37027;&#20010;&#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#30495;&#27491;&#30340;&#23383;&#20856;&#65292;&#32780;&#25105;&#20204;&#24819;&#35201;&#30340;&#26159;&#36820;&#22238;&#21516;&#19968;&#20010;&#31867;&#30340;&#19968;&#20010;&#26032;&#30340;&#23454;&#20363;&#65292;&#23601;&#20687;&#26159; <code class="literal">self</code>&#12290;</dd><dt><a href="#fileinfo.userdict.2.3">circled_3_delcric</a> </dt><dd>&#25105;&#20204;&#20351;&#29992; <code class="literal">__class__</code> &#23646;&#24615;&#26469;&#26597;&#30475; <code class="literal">self</code> &#26159;&#21542;&#26159;&#19968;&#20010; <code class="classname">UserDict</code>&#65292;&#22914;&#26524;&#26159;&#65292;&#22826;&#22909;&#20102;&#65292;&#22240;&#20026;&#25105;&#20204;&#30693;&#36947;&#22914;&#20309;&#25335;&#36125;&#19968;&#20010; <code class="classname">UserDict</code>&#65306;&#21482;&#35201;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340; <code class="classname">UserDict</code> &#65292;&#24182;&#20256;&#32473;&#23427;&#30495;&#27491;&#30340;&#23383;&#20856;&#65292;&#36825;&#20010;&#23383;&#20856;&#24050;&#32463;&#23384;&#25918;&#22312; <code class="varname">self.data</code> &#20013;&#20102;&#12290;&#28982;&#21518;&#20320;&#31435;&#21363;&#36820;&#22238;&#36825;&#20010;&#26032;&#30340; <code class="classname">UserDict</code>&#65292;&#20320;&#29978;&#33267;&#20110;&#19981;&#38656;&#35201;&#22312;&#19979;&#38754;&#19968;&#34892;&#20013;&#20351;&#29992; <code class="literal">import copy</code>&#12290;</dd><dt><a href="#fileinfo.userdict.2.4">circled_4_delcric</a> </dt><dd>&#22914;&#26524; <code class="literal"><span class="literal">self</span>.<span class="literal">__class__</span></code> &#19981;&#26159; <code class="classname">UserDict</code>&#65292;&#37027;&#20040; <code class="literal">self</code> &#19968;&#23450;&#26159; <code class="classname">UserDict</code> &#30340;&#26576;&#20010;&#23376;&#31867; (&#22914;&#21487;&#33021;&#20026; <code class="classname">FileInfo</code>)&#65292;&#29983;&#27963;&#24635;&#26159;&#23384;&#22312;&#24847;&#22806;&#12290;<code class="classname">UserDict</code> &#19981;&#30693;&#36947;&#22914;&#20309;&#29983;&#25104;&#23427;&#30340;&#23376;&#31867;&#30340;&#19968;&#20010;&#21407;&#26679;&#30340;&#25335;&#36125;&#65292;&#20363;&#22914;&#65292;&#26377;&#21487;&#33021;&#22312;&#23376;&#31867;&#20013;&#23450;&#20041;&#20102;&#20854;&#23427;&#30340;&#25968;&#25454;&#23646;&#24615;&#65292;&#25152;&#20197;&#25105;&#20204;&#21482;&#33021;&#23436;&#20840;&#22797;&#21046;&#23427;&#20204;&#65292;&#30830;&#23450;&#25335;&#36125;&#20102;&#23427;&#20204;&#30340;&#20840;&#37096;&#20869;&#23481;&#12290;&#24184;&#36816;&#30340;&#26159;&#65292;<span class="application">Python</span> &#24102;&#20102;&#19968;&#20010;&#27169;&#22359;&#21487;&#20197;&#27491;&#30830;&#22320;&#23436;&#25104;&#36825;&#20214;&#20107;&#65292;&#23427;&#21483;&#20570; <code class="filename">copy</code>&#12290;&#22312;&#36825;&#37324;&#25105;&#19981;&#24819;&#28145;&#20837;&#32454;&#33410; (&#28982;&#32780;&#23427;&#26159;&#19968;&#20010;&#32477;&#23545;&#37239;&#30340;&#27169;&#22359;&#65292;&#20320;&#26159;&#21542;&#24050;&#32463;&#24819;&#21040;&#35201;&#33258;&#24050;&#30740;&#31350;&#23427;&#20102;&#21602;&#65311;)&#12290;&#35828; <code class="filename">copy</code> &#33021;&#22815;&#25335;&#36125;&#20219;&#20309; <span class="application">Python</span> &#23545;&#35937;&#23601;&#22815;&#20102;&#65292;&#36825;&#23601;&#26159;&#25105;&#20204;&#22312;&#36825;&#37324;&#29992;&#23427;&#30340;&#21407;&#22240;&#12290;</dd><dt><a href="#fileinfo.userdict.2.5">circled_5_delcric</a> </dt><dd>&#20854;&#20313;&#30340;&#26041;&#27861;&#26159;&#30452;&#25130;&#20102;&#24403;&#30340;&#37325;&#23450;&#21521;&#21040; <code class="varname">self.data</code> &#30340;&#20869;&#32622;&#20989;&#25968;&#19978;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="d0e12891">&#27880;&#24847;: &#21490;&#26009;&#35760;&#36733;</a></b><br>&#22312; <span class="application">Python</span> 2.2 &#20043;&#21069;&#30340;&#29256;&#26412;&#20013;&#65292;&#20320;&#19981;&#21487;&#20197;&#30452;&#25509;&#23376;&#31867;&#21270;&#23383;&#31526;&#20018;&#12289;&#21015;&#34920;&#20197;&#21450;&#23383;&#20856;&#20043;&#31867;&#30340;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411;&#12290;&#20316;&#20026;&#34917;&#20607;&#65292;<span class="application">Python</span> &#25552;&#20379;&#23553;&#35013;&#31867;&#26469;&#27169;&#25311;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411;&#30340;&#34892;&#20026;&#65292;&#27604;&#22914;&#65306;<code class="classname">UserString</code>&#12289;<code class="classname">UserList</code> &#21644; <code class="classname">UserDict</code>&#12290;&#36890;&#36807;&#28151;&#21512;&#20351;&#29992;&#26222;&#36890;&#21644;&#29305;&#27530;&#26041;&#27861;&#65292;<code class="classname">UserDict</code> &#31867;&#33021;&#21313;&#20998;&#20986;&#33394;&#22320;&#27169;&#20223;&#23383;&#20856;&#12290;&#22312; <span class="application">Python</span> 2.2 &#21644;&#20854;&#21518;&#30340;&#29256;&#26412;&#20013;&#65292;&#20320;&#21487;&#20197;&#30452;&#25509;&#20174; <code class="classname">dict</code> &#20869;&#24314;&#25968;&#25454;&#31867;&#22411;&#32487;&#25215;&#12290;&#26412;&#20070; <code class="filename">fileinfo_fromdict.py</code> &#20013;&#26377;&#36825;&#26041;&#38754;&#30340;&#19968;&#20010;&#20363;&#23376;&#12290;</blockquote></div><p>&#22914;&#20363;&#23376;&#20013;&#25152;&#31034;&#65292;&#22312; <span class="application">Python</span> &#20013;&#65292;&#20320;&#21487;&#20197;&#30452;&#25509;&#32487;&#25215;&#33258;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411; <code class="classname">dict</code>&#65292;&#36825;&#26679;&#20570;&#26377;&#19977;&#28857;&#19982; <code class="filename">UserDict</code> &#19981;&#21516;&#12290;</p><div class="example"><a name="fileinfo.userdict.fromdict"></a><p class="title"><b>&#20363;&nbsp;5.11.&nbsp;&#30452;&#25509;&#32487;&#25215;&#33258;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411; <code class="classname">dict</code></b></p><div class="example-contents"><pre class="programlisting">
class FileInfo(dict):                  <a name="fileinfo.userdict.3.1"></a>circled_1_delcric
    "store file metadata"
    def __init__(self, filename=None): <a name="fileinfo.userdict.3.2"></a>circled_2_delcric
        self["name"] = filename
</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.userdict.3.1">circled_1_delcric</a> </dt><dd>&#31532;&#19968;&#20010;&#21306;&#21035;&#26159;&#20320;&#19981;&#38656;&#35201;&#23548;&#20837; <code class="filename">UserDict</code> &#27169;&#22359;&#65292;&#22240;&#20026; <code class="classname">dict</code> &#26159;&#24050;&#32463;&#21487;&#20197;&#20351;&#29992;&#30340;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411;&#12290;&#31532;&#20108;&#20010;&#21306;&#21035;&#26159;&#20320;&#19981;&#26159;&#32487;&#25215;&#33258; <code class="function">UserDict.UserDict</code> &#65292;&#32780;&#26159;&#30452;&#25509;&#32487;&#25215;&#33258; <code class="classname">dict</code>&#12290;</dd><dt><a href="#fileinfo.userdict.3.2">circled_2_delcric</a> </dt><dd>&#31532;&#19977;&#20010;&#21306;&#21035;&#26377;&#20123;&#26214;&#28073;&#65292;&#20294;&#21364;&#24456;&#37325;&#35201;&#12290;<code class="filename">UserDict</code> &#20869;&#37096;&#30340;&#24037;&#20316;&#26041;&#24335;&#35201;&#27714;&#20320;&#25163;&#24037;&#22320;&#35843;&#29992;&#23427;&#30340; <code class="function">__init__</code> &#26041;&#27861;&#21435;&#27491;&#30830;&#21021;&#22987;&#21270;&#23427;&#30340;&#20869;&#37096;&#25968;&#25454;&#32467;&#26500;&#12290;<code class="classname">dict</code> &#24182;&#19981;&#36825;&#26679;&#24037;&#20316;&#65292;&#23427;&#19981;&#26159;&#19968;&#20010;&#23553;&#35013;&#25152;&#20197;&#19981;&#38656;&#35201;&#26126;&#30830;&#30340;&#21021;&#22987;&#21270;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">UserDict</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-UserDict.html">http://www.python.org/doc/current/lib/module-UserDict.html</a>) &#21644; <code class="filename">copy</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-copy.html">http://www.python.org/doc/current/lib/module-copy.html</a>) &#30340;&#25991;&#26723;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.specialmethods"></a>5.6.&nbsp;&#19987;&#29992;&#31867;&#26041;&#27861;</h2></div></div></div><div class="abstract"><p>&#38500;&#20102;&#26222;&#36890;&#30340;&#31867;&#26041;&#27861;&#65292;<span class="application">Python</span> &#31867;&#36824;&#21487;&#20197;&#23450;&#20041;&#19987;&#29992;&#26041;&#27861;&#12290;&#19987;&#29992;&#26041;&#27861;&#26159;&#22312;&#29305;&#27530;&#24773;&#20917;&#19979;&#25110;&#24403;&#20351;&#29992;&#29305;&#21035;&#35821;&#27861;&#26102;&#30001; <span class="application">Python</span> &#26367;&#20320;&#35843;&#29992;&#30340;&#65292;&#32780;&#19981;&#26159;&#22312;&#20195;&#30721;&#20013;&#30452;&#25509;&#35843;&#29992; (&#20687;&#26222;&#36890;&#30340;&#26041;&#27861;&#37027;&#26679;)&#12290;</p></div><p>&#23601;&#20687;&#20320;&#22312;<a class="link" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#19978;&#19968;&#33410;</a>&#25152;&#30475;&#21040;&#30340;&#65292;&#26222;&#36890;&#30340;&#26041;&#27861;&#23545;&#22312;&#31867;&#20013;&#23553;&#35013;&#23383;&#20856;&#24456;&#26377;&#24110;&#21161;&#12290;&#20294;&#26159;&#21482;&#26377;&#26222;&#36890;&#26041;&#27861;&#26159;&#19981;&#22815;&#30340;&#65292;&#22240;&#20026;&#38500;&#20102;&#23545;&#23383;&#20856;&#35843;&#29992;&#26041;&#27861;&#20043;&#22806;&#65292;&#36824;&#26377;&#24456;&#22810;&#20107;&#24773;&#21487;&#20197;&#20570;&#30340;&#12290;&#20363;&#22914;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#19968;&#31181;&#27809;&#26377;&#21253;&#25324;&#26126;&#30830;&#26041;&#27861;&#35843;&#29992;&#30340;&#35821;&#27861;&#26469;<a class="link" href="#odbchelper.dict.define" title="&#20363;&nbsp;3.1.&nbsp;&#23450;&#20041; Dictionary">&#33719;&#24471;</a>&#21644;<a class="link" href="#odbchelper.dict.modify" title="&#20363;&nbsp;3.2.&nbsp;&#20462;&#25913; Dictionary">&#35774;&#32622;</a>&#25968;&#25454;&#39033;&#12290;&#36825;&#23601;&#26159;&#19987;&#29992;&#26041;&#27861;&#20135;&#29983;&#30340;&#21407;&#22240;&#65306;&#23427;&#20204;&#25552;&#20379;&#20102;&#19968;&#31181;&#26041;&#27861;&#65292;&#21487;&#20197;&#23558;&#38750;&#26041;&#27861;&#35843;&#29992;&#35821;&#27861;&#26144;&#23556;&#21040;&#26041;&#27861;&#35843;&#29992;&#19978;&#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e13019"></a>5.6.1.&nbsp;&#33719;&#24471;&#21644;&#35774;&#32622;&#25968;&#25454;&#39033;</h3></div></div></div><div class="example"><a name="d0e13022"></a><p class="title"><b>&#20363;&nbsp;5.12.&nbsp;<code class="function">__getitem__</code> &#19987;&#29992;&#26041;&#27861;</b></p><div class="example-contents"><pre class="programlisting">
    def __getitem__(self, key): return self.data[key]</pre><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = fileinfo.FileInfo("/music/_singles/kairo.mp3")</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>
<font color="teal">{'name':'/music/_singles/kairo.mp3'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.__getitem__("name")</span> <a name="fileinfo.specialmethods.1.1"></a>circled_1_delcric
<font color="teal">'/music/_singles/kairo.mp3'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f["name"]</span>             <a name="fileinfo.specialmethods.1.2"></a>circled_2_delcric
<font color="teal">'/music/_singles/kairo.mp3'</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.specialmethods.1.1">circled_1_delcric</a> </dt><dd><code class="function">__getitem__</code> &#19987;&#29992;&#26041;&#27861;&#24456;&#31616;&#21333;&#12290;&#20687;&#26222;&#36890;&#30340;&#26041;&#27861; <code class="function">clear</code>&#65292;<code class="function">keys</code> &#21644; <code class="function">values</code> &#19968;&#26679;&#65292;&#23427;&#21482;&#26159;&#37325;&#23450;&#21521;&#21040;&#23383;&#20856;&#65292;&#36820;&#22238;&#23383;&#20856;&#30340;&#20540;&#12290;&#20294;&#26159;&#24590;&#20040;&#35843;&#29992;&#23427;&#21602;&#65311;&#21734;&#65292;&#20320;&#21487;&#20197;&#30452;&#25509;&#35843;&#29992; <code class="function">__getitem__</code>&#65292;&#20294;&#26159;&#22312;&#23454;&#38469;&#20013;&#20320;&#20854;&#23454;&#19981;&#20250;&#37027;&#26679;&#20570;&#65306;&#25105;&#22312;&#36825;&#37324;&#25191;&#34892;&#23427;&#21482;&#26159;&#35201;&#21578;&#35785;&#20320;&#23427;&#26159;&#22914;&#20309;&#24037;&#20316;&#30340;&#12290;&#27491;&#30830;&#22320;&#20351;&#29992; <code class="function">__getitem__</code> &#30340;&#26041;&#27861;&#26159;&#35753; <span class="application">Python</span> &#26469;&#26367;&#20320;&#35843;&#29992;&#12290;</dd><dt><a href="#fileinfo.specialmethods.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#30475;&#19978;&#21435;&#23601;&#20687;&#20320;&#29992;&#26469;<a class="link" href="#odbchelper.dict.define" title="&#20363;&nbsp;3.1.&nbsp;&#23450;&#20041; Dictionary">&#24471;&#21040;&#19968;&#20010;&#23383;&#20856;&#20540;</a>&#30340;&#35821;&#27861;&#65292;&#20107;&#23454;&#19978;&#23427;&#36820;&#22238;&#20320;&#26399;&#26395;&#30340;&#20540;&#12290;&#19979;&#38754;&#26159;&#38544;&#34255;&#36215;&#26469;&#30340;&#19968;&#20010;&#29615;&#33410;&#65306;&#26263;&#22320;&#37324;&#65292;<span class="application">Python</span> &#24050;&#32463;&#23558;&#36825;&#20010;&#35821;&#27861;&#36716;&#21270;&#20026; <code class="literal">f.__getitem__("name")</code> &#30340;&#26041;&#27861;&#35843;&#29992;&#12290;&#36825;&#23601;&#26159;&#20026;&#20160;&#20040; <code class="function">__getitem__</code> &#26159;&#19968;&#20010;&#19987;&#29992;&#31867;&#26041;&#27861;&#30340;&#21407;&#22240;&#65292;&#19981;&#20165;&#20165;&#26159;&#20320;&#21487;&#20197;&#33258;&#24050;&#35843;&#29992;&#23427;&#65292;&#36824;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992;&#27491;&#30830;&#30340;&#35821;&#27861;&#35753; <span class="application">Python</span> &#26469;&#26367;&#20320;&#35843;&#29992;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#24403;&#28982;&#65292;<span class="application">Python</span> &#26377;&#19968;&#20010;&#19982; <code class="function">__getitem__</code> &#31867;&#20284;&#30340; <code class="function">__setitem__</code> &#19987;&#29992;&#26041;&#27861;&#65292;&#21442;&#35265;&#19979;&#38754;&#30340;&#20363;&#23376;&#12290;</p><div class="example"><a name="fileinfo.specialmethods.setitem.example"></a><p class="title"><b>&#20363;&nbsp;5.13.&nbsp;<code class="function">__setitem__</code> &#19987;&#29992;&#26041;&#27861;</b></p><div class="example-contents"><pre class="programlisting">
    def __setitem__(self, key, item): self.data[key] = item</pre><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>
<font color="teal">{'name':'/music/_singles/kairo.mp3'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.__setitem__("genre", 31)</span> <a name="fileinfo.specialmethods.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>
<font color="teal">{'name':'/music/_singles/kairo.mp3', 'genre':31}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f["genre"] = 32</span>            <a name="fileinfo.specialmethods.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>
<font color="teal">{'name':'/music/_singles/kairo.mp3', 'genre':32}</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.specialmethods.2.1">circled_1_delcric</a> </dt><dd>&#19982; <code class="function">__getitem__</code> &#26041;&#27861;&#19968;&#26679;&#65292;<code class="function">__setitem__</code> &#31616;&#21333;&#22320;&#37325;&#23450;&#21521;&#21040;&#30495;&#27491;&#30340;&#23383;&#20856; <code class="varname">self.data</code> &#65292;&#35753;&#23427;&#26469;&#36827;&#34892;&#24037;&#20316;&#12290;&#24182;&#19988;&#20687; <code class="function">__getitem__</code> &#19968;&#26679;&#65292;&#36890;&#24120;&#20320;&#19981;&#20250;&#30452;&#25509;&#35843;&#29992;&#23427;&#65292;&#24403;&#20320;&#20351;&#29992;&#20102;&#27491;&#30830;&#30340;&#35821;&#27861;&#65292;<span class="application">Python</span> &#20250;&#26367;&#20320;&#35843;&#29992; <code class="function">__setitem__</code> &#12290;</dd><dt><a href="#fileinfo.specialmethods.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#30475;&#19978;&#21435;&#20687;&#27491;&#24120;&#30340;&#23383;&#20856;&#35821;&#27861;&#65292;&#24403;&#28982;&#38500;&#20102; <code class="varname">f</code> &#23454;&#38469;&#19978;&#26159;&#19968;&#20010;&#31867;&#65292;&#23427;&#23613;&#21487;&#33021;&#22320;&#25171;&#25198;&#25104;&#19968;&#20010;&#23383;&#20856;&#65292;&#24182;&#19988; <code class="function">__setitem__</code> &#26159;&#25171;&#25198;&#30340;&#19968;&#20010;&#37325;&#28857;&#12290;&#36825;&#34892;&#20195;&#30721;&#23454;&#38469;&#19978;&#26263;&#22320;&#37324;&#35843;&#29992;&#20102; <code class="literal">f.__setitem__("genre", 32)</code>&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="function">__setitem__</code> &#26159;&#19968;&#20010;&#19987;&#29992;&#31867;&#26041;&#27861;&#65292;&#22240;&#20026;&#23427;&#21487;&#20197;&#35753; <span class="application">Python</span> &#26469;&#26367;&#20320;&#35843;&#29992;&#65292;&#20294;&#26159;&#23427;&#20173;&#28982;&#26159;&#19968;&#20010;&#31867;&#26041;&#27861;&#12290;&#23601;&#20687;&#22312; <code class="classname">UserDict</code> &#20013;&#23450;&#20041; <code class="function">__setitem__</code> &#26041;&#27861;&#19968;&#26679;&#23481;&#26131;&#65292;&#25105;&#20204;&#21487;&#20197;&#22312;&#23376;&#31867;&#20013;&#37325;&#26032;&#23450;&#20041;&#23427;&#65292;&#23545;&#29238;&#31867;&#30340;&#26041;&#27861;&#36827;&#34892;&#35206;&#30422;&#12290;&#36825;&#23601;&#20801;&#35768;&#25105;&#20204;&#23450;&#20041;&#20986;&#22312;&#26576;&#20123;&#26041;&#38754;&#20687;&#23383;&#20856;&#19968;&#26679;&#21160;&#20316;&#30340;&#31867;&#65292;&#20294;&#26159;&#21487;&#20197;&#23450;&#20041;&#23427;&#33258;&#24050;&#30340;&#34892;&#20026;&#65292;&#36229;&#36807;&#21644;&#36229;&#20986;&#20869;&#32622;&#30340;&#23383;&#20856;&#12290;</p><p>&#36825;&#20010;&#27010;&#24565;&#26159;&#26412;&#31456;&#20013;&#25105;&#20204;&#27491;&#22312;&#23398;&#20064;&#30340;&#25972;&#20010;&#26694;&#26550;&#30340;&#22522;&#30784;&#12290;&#27599;&#20010;&#25991;&#20214;&#31867;&#22411;&#21487;&#20197;&#25317;&#26377;&#19968;&#20010;&#22788;&#29702;&#22120;&#31867;&#65292;&#36825;&#20123;&#31867;&#30693;&#36947;&#22914;&#20309;&#20174;&#19968;&#20010;&#29305;&#27530;&#30340;&#25991;&#31867;&#22411;&#24471;&#21040;&#20803;&#25968;&#25454;&#12290;&#21482;&#35201;&#30693;&#36947;&#20102;&#26576;&#20123;&#23646;&#24615; (&#20687;&#25991;&#20214;&#21517;&#21644;&#20301;&#32622;)&#65292;&#22788;&#29702;&#22120;&#31867;&#23601;&#30693;&#36947;&#22914;&#20309;&#33258;&#21160;&#22320;&#24471;&#21040;&#20854;&#23427;&#30340;&#23646;&#24615;&#12290;&#23427;&#30340;&#23454;&#29616;&#26159;&#36890;&#36807;&#35206;&#30422; <code class="function">__setitem__</code> &#26041;&#27861;&#65292;&#26816;&#26597;&#29305;&#21035;&#30340;&#20851;&#38190;&#23383;&#65292;&#28982;&#21518;&#24403;&#25214;&#21040;&#21518;&#21152;&#20837;&#39069;&#22806;&#30340;&#22788;&#29702;&#12290;</p><p>&#20363;&#22914;&#65292;<code class="classname">MP3FileInfo</code> &#26159; <code class="classname">FileInfo</code> &#30340;&#23376;&#31867;&#12290;&#22312;&#35774;&#32622;&#20102;&#19968;&#20010; <code class="classname">MP3FileInfo</code> &#31867;&#30340; <code class="literal">name</code> &#26102;&#65292;&#24182;&#19981;&#21482;&#26159;&#35774;&#32622; <code class="literal">name</code> &#20851;&#38190;&#23383; (&#20687;&#29238;&#31867; <code class="classname">FileInfo</code> &#25152;&#20570;&#30340;)&#65292;&#23427;&#36824;&#35201;&#22312;&#25991;&#20214;&#33258;&#36523;&#20869;&#36827;&#34892;&#25628;&#32034; <abbr class="abbrev">MP3</abbr> &#30340;&#26631;&#35760;&#28982;&#21518;&#22635;&#20805;&#19968;&#25972;&#22871;&#20851;&#38190;&#23383;&#12290;&#19979;&#38754;&#30340;&#20363;&#23376;&#23558;&#23637;&#31034;&#20854;&#24037;&#20316;&#26041;&#24335;&#12290;</p><div class="example"><a name="d0e13235"></a><p class="title"><b>&#20363;&nbsp;5.14.&nbsp;&#22312; <code class="classname">MP3FileInfo</code> &#20013;&#35206;&#30422; <code class="function">__setitem__</code></b></p><div class="example-contents"><pre class="programlisting">
    def __setitem__(self, key, item):         <a name="fileinfo.specialmethods.3.1"></a>circled_1_delcric
        if key == "name" and item:            <a name="fileinfo.specialmethods.3.2"></a>circled_2_delcric
            self.__parse(item)                <a name="fileinfo.specialmethods.3.3"></a>circled_3_delcric
        FileInfo.__setitem__(self, key, item) <a name="fileinfo.specialmethods.3.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.specialmethods.3.1">circled_1_delcric</a> </dt><dd>&#27880;&#24847;&#25105;&#20204;&#30340; <code class="function">__setitem__</code> &#26041;&#27861;&#20005;&#26684;&#25353;&#29031;&#19982;&#29238;&#31867;&#26041;&#27861;&#30456;&#21516;&#30340;&#24418;&#24335;&#36827;&#34892;&#23450;&#20041;&#12290;&#36825;&#19968;&#28857;&#24456;&#37325;&#35201;&#65292;&#22240;&#20026; <span class="application">Python</span> &#23558;&#26367;&#20320;&#25191;&#34892;&#26041;&#27861;&#65292;&#32780;&#23427;&#24076;&#26395;&#36825;&#20010;&#20989;&#25968;&#29992;&#30830;&#23450;&#20010;&#25968;&#30340;&#21442;&#25968;&#36827;&#34892;&#23450;&#20041;&#12290;(&#20174;&#25216;&#26415;&#19978;&#35828;&#65292;&#21442;&#25968;&#30340;&#21517;&#23383;&#27809;&#26377;&#20851;&#31995;&#65292;&#21482;&#26159;&#20010;&#25968;&#12290;)</dd><dt><a href="#fileinfo.specialmethods.3.2">circled_2_delcric</a> </dt><dd>&#36825;&#37324;&#23601;&#26159;&#25972;&#20010; <code class="classname">MP3FileInfo</code> &#31867;&#30340;&#38590;&#28857;&#65306;&#22914;&#26524;&#32473; <code class="literal">name</code> &#20851;&#38190;&#23383;&#36171;&#19968;&#20010;&#20540;&#65292;&#25105;&#20204;&#36824;&#24819;&#20570;&#20123;&#39069;&#22806;&#30340;&#20107;&#24773;&#12290;</dd><dt><a href="#fileinfo.specialmethods.3.3">circled_3_delcric</a> </dt><dd>&#25105;&#20204;&#23545; <code class="literal">name</code> &#25152;&#20570;&#30340;&#39069;&#22806;&#22788;&#29702;&#23553;&#35013;&#22312;&#20102; <code class="function">__parse</code> &#26041;&#27861;&#20013;&#12290;&#36825;&#26159;&#23450;&#20041;&#22312; <code class="classname">MP3FileInfo</code> &#20013;&#30340;&#21478;&#19968;&#20010;&#31867;&#26041;&#27861;&#65292;&#21017;&#24403;&#25105;&#20204;&#35843;&#29992;&#23427;&#26102;&#65292;&#25105;&#20204;&#29992; <code class="varname">self</code> &#23545;&#20854;&#38480;&#23450;&#12290;&#20165;&#26159;&#35843;&#29992; <code class="function">__parse</code> &#23558;&#21482;&#20250;&#30475;&#25104;&#23450;&#20041;&#22312;&#31867;&#22806;&#30340;&#26222;&#36890;&#26041;&#27861;&#65292;&#35843;&#29992; <code class="function">self.__parse</code> &#23558;&#20250;&#30475;&#25104;&#23450;&#20041;&#22312;&#31867;&#20013;&#30340;&#19968;&#20010;&#31867;&#26041;&#27861;&#12290;&#36825;&#19981;&#26159;&#20160;&#20040;&#26032;&#19996;&#35199;&#65292;&#20320;&#29992;&#21516;&#26679;&#30340;&#26041;&#27861;&#26469;&#24341;&#29992;<a class="link" href="#fileinfo.userdict.normalmethods" title="&#20363;&nbsp;5.10.&nbsp;UserDict &#24120;&#35268;&#26041;&#27861;">&#25968;&#25454;&#23646;&#24615;</a>&#12290;</dd><dt><a href="#fileinfo.specialmethods.3.4">circled_4_delcric</a> </dt><dd>&#22312;&#20570;&#23436;&#25105;&#20204;&#39069;&#22806;&#30340;&#22788;&#29702;&#20043;&#21518;&#65292;&#25105;&#20204;&#38656;&#35201;&#35843;&#29992;&#29238;&#31867;&#30340;&#26041;&#27861;&#12290;&#35760;&#20303;&#65292;&#22312; <span class="application">Python</span> &#20013;&#19981;&#20250;&#33258;&#21160;&#20026;&#20320;&#23436;&#25104;&#65292;&#38656;&#25163;&#24037;&#25191;&#34892;&#12290;&#27880;&#24847;&#65292;&#25105;&#20204;&#22312;&#35843;&#29992;&#30452;&#25509;&#29238;&#31867;&#65292;<code class="classname">FileInfo</code>&#65292;&#23613;&#31649;&#23427;&#27809;&#26377; <code class="function">__setitem__</code> &#26041;&#27861;&#12290;&#27809;&#38382;&#39064;&#65292;&#22240;&#20026; <span class="application">Python</span> &#23558;&#20250;&#27839;&#30528;&#29238;&#31867;&#26641;&#36208;&#65292;&#30452;&#21040;&#23427;&#25214;&#21040;&#19968;&#20010;&#25317;&#26377;&#25105;&#20204;&#27491;&#22312;&#35843;&#29992;&#26041;&#27861;&#30340;&#31867;&#65292;&#25152;&#20197;&#36825;&#34892;&#20195;&#30721;&#26368;&#32456;&#20250;&#25214;&#21040;&#24182;&#19988;&#35843;&#29992;&#23450;&#20041;&#22312; <code class="classname">UserDict</code> &#20013;&#30340; <code class="function">__setitem__</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="tip.self.call">&#27880;&#24847;: </a></b><br>&#24403;&#22312;&#19968;&#20010;&#31867;&#20013;&#23384;&#21462;&#25968;&#25454;&#23646;&#24615;&#26102;&#65292;&#20320;&#38656;&#35201;&#38480;&#23450;&#23646;&#24615;&#21517;&#65306;<code class="literal">self.<em class="replaceable">attribute</em></code>&#12290;&#24403;&#35843;&#29992;&#31867;&#20013;&#30340;&#20854;&#23427;&#26041;&#27861;&#26102;&#65292;&#20320;&#23646;&#35201;&#38480;&#23450;&#26041;&#27861;&#21517;&#65306;<code class="literal">self.<em class="replaceable">method</em></code>&#12290;</blockquote></div><div class="example"><a name="fileinfo.specialmethods.setname"></a><p class="title"><b>&#20363;&nbsp;5.15.&nbsp;&#35774;&#32622; <code class="classname">MP3FileInfo</code> &#30340; <code class="literal">name</code></b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import fileinfo</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">mp3file = fileinfo.MP3FileInfo()</span>                   <a name="fileinfo.specialmethods.4.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">mp3file</span>
<font color="teal">{'name':None}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">mp3file["name"] = "/music/_singles/kairo.mp3"</span>      <a name="fileinfo.specialmethods.4.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">mp3file</span>
<font color="teal">{'album': 'Rave Mix', 'artist': '***DJ MARY-JANE***', 'genre': 31,
'title': 'KAIRO****THE BEST GOA', 'name': '/music/_singles/kairo.mp3',
'year': '2000', 'comment': 'http://mp3.com/DJMARYJANE'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">mp3file["name"] = "/music/_singles/sidewinder.mp3"</span> <a name="fileinfo.specialmethods.4.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">mp3file</span>
<font color="teal">{'album': '', 'artist': 'The Cynic Project', 'genre': 18, 'title': 'Sidewinder', 
'name': '/music/_singles/sidewinder.mp3', 'year': '2000', 
'comment': 'http://mp3.com/cynicproject'}</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.specialmethods.4.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#25105;&#20204;&#21019;&#24314;&#20102;&#19968;&#20010; <code class="classname">MP3FileInfo</code> &#30340;&#23454;&#20363;&#65292;&#27809;&#26377;&#20256;&#36882;&#32473;&#23427;&#25991;&#20214;&#21517;&#12290;(&#25105;&#20204;&#21487;&#20197;&#19981;&#29992;&#23427;&#65292;&#22240;&#20026; <code class="function">__init__</code> &#26041;&#27861;&#30340; <code class="varname">filename</code> &#21442;&#25968;&#26159;<a class="link" href="#apihelper.optional" title="4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;">&#21487;&#36873;&#30340;</a>&#12290;) &#22240;&#20026; <code class="classname">MP3FileInfo</code> &#27809;&#26377;&#23427;&#33258;&#24050;&#30340; <code class="function">__init__</code> &#26041;&#27861;&#65292;<span class="application">Python</span> &#27839;&#30528;&#29238;&#31867;&#26641;&#36208;&#65292;&#21457;&#29616;&#20102; <code class="classname">FileInfo</code> &#30340; <code class="function">__init__</code> &#26041;&#27861;&#12290;&#36825;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#25163;&#24037;&#35843;&#29992;&#20102; <code class="classname">UserDict</code> &#30340; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#28982;&#21518;&#35774;&#32622; <code class="literal">name</code> &#20851;&#38190;&#23383;&#20026; <code class="varname">filename</code>&#65292;&#23427;&#20026; <code class="literal">None</code>&#65292;&#22240;&#20026;&#25105;&#20204;&#36824;&#27809;&#26377;&#20256;&#20837;&#19968;&#20010;&#25991;&#20214;&#21517;&#12290;&#25152;&#20197;&#65292;<code class="varname">mp3file</code> &#26368;&#21021;&#30475;&#19978;&#21435;&#20687;&#26159;&#26377;&#19968;&#20010;&#20851;&#38190;&#23383;&#30340;&#23383;&#20856;&#65292;<code class="literal">name</code> &#30340;&#20540;&#20026; <code class="literal">None</code>&#12290;</dd><dt><a href="#fileinfo.specialmethods.4.2">circled_2_delcric</a> </dt><dd>&#29616;&#22312;&#30495;&#27491;&#26377;&#36259;&#30340;&#24320;&#22987;&#20102;&#12290;&#35774;&#32622; <code class="varname">mp3file</code> &#30340; <code class="literal">name</code> &#20851;&#38190;&#23383;&#35302;&#21457;&#20102; <code class="classname">MP3FileInfo</code> &#19978;&#30340; <code class="function">__setitem__</code> &#26041;&#27861; (&#32780;&#19981;&#26159; <code class="classname">UserDict</code> &#30340;)&#65292;&#36825;&#20010;&#26041;&#27861;&#27880;&#24847;&#21040;&#25105;&#20204;&#27491;&#22312;&#29992;&#19968;&#20010;&#30495;&#23454;&#30340;&#20540;&#26469;&#35774;&#32622; <code class="literal">name</code> &#20851;&#38190;&#23383;&#65292;&#25509;&#30528;&#35843;&#29992; <code class="function">self.__parse</code>&#12290;&#23613;&#31649;&#25105;&#20204;&#23436;&#20840;&#36824;&#27809;&#26377;&#30740;&#31350;&#36807; <code class="function">__parse</code> &#26041;&#27861;&#65292;&#20174;&#23427;&#30340;&#36755;&#20986;&#20320;&#21487;&#20197;&#30475;&#20986;&#65292;&#23427;&#35774;&#32622;&#20102;&#20854;&#23427;&#20960;&#20010;&#20851;&#38190;&#23383;&#65306;<code class="literal">album</code>&#12289;<code class="literal">artist</code>&#12289;<code class="literal">genre</code>&#12289;<code class="literal">title</code>&#12289;<code class="literal">year</code> &#21644; <code class="literal">comment</code>&#12290;</dd><dt><a href="#fileinfo.specialmethods.4.3">circled_3_delcric</a> </dt><dd>&#20462;&#25913; <code class="literal">name</code> &#20851;&#38190;&#23383;&#23558;&#20877;&#27425;&#32463;&#21463;&#21516;&#26679;&#30340;&#22788;&#29702;&#36807;&#31243;&#65306;<span class="application">Python</span> &#35843;&#29992; <code class="function">__setitem__</code>&#65292;<code class="function">__setitem__</code>&#35843;&#29992; <code class="function">self.__parse</code>&#65292;<code class="function">self.__parse</code> &#35774;&#32622;&#20854;&#23427;&#25152;&#26377;&#30340;&#20851;&#38190;&#23383;&#12290;</dd></dl></div></div></div><br class="example-break"></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.morespecial"></a>5.7.&nbsp;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;</h2></div></div></div><div class="abstract"><p>&#38500;&#20102; <code class="function">__getitem__</code> &#21644; <code class="function">__setitem__</code> &#20043;&#22806; <span class="application">Python</span> &#36824;&#26377;&#26356;&#22810;&#30340;&#19987;&#29992;&#20989;&#25968;&#12290;&#26576;&#20123;&#21487;&#20197;&#35753;&#20320;&#27169;&#25311;&#20986;&#20320;&#29978;&#33267;&#21487;&#33021;&#19981;&#30693;&#36947;&#30340;&#21151;&#33021;&#12290;</p></div><p>&#19979;&#38754;&#30340;&#20363;&#23376;&#23558;&#23637;&#31034; <code class="filename">UserDict</code> &#19968;&#20123;&#20854;&#20182;&#19987;&#29992;&#26041;&#27861;&#12290;</p><div class="example"><a name="fileinfo.morespecial.example"></a><p class="title"><b>&#20363;&nbsp;5.16.&nbsp;<code class="classname">UserDict</code> &#20013;&#26356;&#22810;&#30340;&#19987;&#29992;&#26041;&#27861;</b></p><div class="example-contents"><pre class="programlisting">
    def __repr__(self): return repr(self.data)     <a name="fileinfo.morespecial.1.1"></a>circled_1_delcric
    def __cmp__(self, dict):                       <a name="fileinfo.morespecial.1.2"></a>circled_2_delcric
        if isinstance(dict, UserDict):            
            return cmp(self.data, dict.data)      
        else:                                     
            return cmp(self.data, dict)           
    def __len__(self): return len(self.data)       <a name="fileinfo.morespecial.1.3"></a>circled_3_delcric
    def __delitem__(self, key): del self.data[key] <a name="fileinfo.morespecial.1.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.morespecial.1.1">circled_1_delcric</a> </dt><dd><code class="function">__repr__</code> &#26159;&#19968;&#20010;&#19987;&#29992;&#30340;&#26041;&#27861;&#65292;&#22312;&#24403;&#35843;&#29992; <code class="literal">repr(<em class="replaceable">instance</em>)</code> &#26102;&#34987;&#35843;&#29992;&#12290;<code class="function">repr</code> &#20989;&#25968;&#26159;&#19968;&#20010;&#20869;&#32622;&#20989;&#25968;&#65292;&#23427;&#36820;&#22238;&#19968;&#20010;&#23545;&#35937;&#30340;&#23383;&#31526;&#20018;&#34920;&#31034;&#12290;&#23427;&#21487;&#20197;&#29992;&#22312;&#20219;&#20309;&#23545;&#35937;&#19978;&#65292;&#19981;&#20165;&#20165;&#26159;&#31867;&#30340;&#23454;&#20363;&#12290;&#20320;&#24050;&#32463;&#23545; <code class="function">repr</code> &#30456;&#24403;&#29087;&#24713;&#20102;&#65292;&#23613;&#31649;&#20320;&#19981;&#30693;&#36947;&#23427;&#12290;&#22312;&#20132;&#20114;&#24335;&#31383;&#21475;&#20013;&#65292;&#24403;&#20320;&#21482;&#25970;&#20837;&#19968;&#20010;&#21464;&#37327;&#21517;&#65292;&#25509;&#30528;&#25353;<span class="keycap"><strong>ENTER</strong></span>&#65292;<span class="application">Python</span> &#20351;&#29992; <code class="function">repr</code> &#26469;&#26174;&#31034;&#21464;&#37327;&#30340;&#20540;&#12290;&#33258;&#24050;&#29992;&#19968;&#20123;&#25968;&#25454;&#26469;&#21019;&#24314;&#19968;&#20010;&#23383;&#20856; <code class="varname">d</code> &#65292;&#28982;&#21518;&#29992; <code class="literal">print repr(d)</code> &#26469;&#30475;&#19968;&#30475;&#21543;&#12290;</dd><dt><a href="#fileinfo.morespecial.1.2">circled_2_delcric</a> </dt><dd><code class="function">__cmp__</code> &#22312;&#27604;&#36739;&#31867;&#23454;&#20363;&#26102;&#34987;&#35843;&#29992;&#12290;&#36890;&#24120;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#20351;&#29992; <code class="literal">==</code> &#27604;&#36739;&#20219;&#24847;&#20004;&#20010; <span class="application">Python</span> &#23545;&#35937;&#65292;&#19981;&#21482;&#26159;&#31867;&#23454;&#20363;&#12290;&#26377;&#19968;&#20123;&#35268;&#21017;&#65292;&#23450;&#20041;&#20102;&#20309;&#26102;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;&#34987;&#35748;&#20026;&#26159;&#30456;&#31561;&#30340;&#65292;&#20363;&#22914;&#65292;&#23383;&#20856;&#22312;&#26377;&#30528;&#20840;&#37096;&#30456;&#21516;&#30340;&#20851;&#38190;&#23383;&#21644;&#20540;&#26102;&#26159;&#30456;&#31561;&#30340;&#12290;&#23545;&#20110;&#31867;&#23454;&#20363;&#65292;&#20320;&#21487;&#20197;&#23450;&#20041; <code class="function">__cmp__</code> &#26041;&#27861;&#65292;&#33258;&#24050;&#32534;&#20889;&#27604;&#36739;&#36923;&#36753;&#65292;&#28982;&#21518;&#20320;&#21487;&#20197;&#20351;&#29992; <code class="literal">==</code> &#26469;&#27604;&#36739;&#20320;&#30340;&#31867;&#65292;<span class="application">Python</span> &#23558;&#20250;&#26367;&#20320;&#35843;&#29992;&#20320;&#30340; <code class="function">__cmp__</code> &#19987;&#29992;&#26041;&#27861;&#12290;</dd><dt><a href="#fileinfo.morespecial.1.3">circled_3_delcric</a> </dt><dd><code class="function">__len__</code> &#22312;&#35843;&#29992; <code class="literal">len(<em class="replaceable">instance</em>)</code> &#26102;&#34987;&#35843;&#29992;&#12290;<code class="function">len</code> &#26159;&#19968;&#20010;&#20869;&#32622;&#20989;&#25968;&#65292;&#21487;&#20197;&#36820;&#22238;&#19968;&#20010;&#23545;&#35937;&#30340;&#38271;&#24230;&#12290;&#23427;&#21487;&#20197;&#29992;&#20110;&#20219;&#20309;&#34987;&#35748;&#20026;&#29702;&#24212;&#26377;&#38271;&#24230;&#30340;&#23545;&#35937;&#12290;&#23383;&#31526;&#20018;&#30340; <code class="function">len</code> &#26159;&#23427;&#30340;&#23383;&#31526;&#20010;&#25968;&#65307;&#23383;&#20856;&#30340; <code class="function">len</code> &#26159;&#23427;&#30340;&#20851;&#38190;&#23383;&#30340;&#20010;&#25968;&#65307;&#21015;&#34920;&#25110;&#24207;&#21015;&#30340; <code class="function">len</code> &#26159;&#20803;&#32032;&#30340;&#20010;&#25968;&#12290;&#23545;&#20110;&#31867;&#23454;&#20363;&#65292;&#23450;&#20041; <code class="function">__len__</code> &#26041;&#27861;&#65292;&#25509;&#30528;&#33258;&#24050;&#32534;&#20889;&#38271;&#24230;&#30340;&#35745;&#31639;&#65292;&#28982;&#21518;&#35843;&#29992; <code class="literal">len(<em class="replaceable">instance</em>)</code>&#65292;<span class="application">Python</span> &#23558;&#26367;&#20320;&#35843;&#29992;&#20320;&#30340; <code class="function">__len__</code> &#19987;&#29992;&#26041;&#27861;&#12290;</dd><dt><a href="#fileinfo.morespecial.1.4">circled_4_delcric</a> </dt><dd><code class="function">__delitem__</code> &#22312;&#35843;&#29992; <code class="literal">del <em class="replaceable">instance</em>[<em class="replaceable">key</em>]</code> &#26102;&#35843;&#29992; &#65292;&#20320;&#21487;&#33021;&#35760;&#24471;&#23427;&#20316;&#20026;<a class="link" href="#odbchelper.dict.del" title="&#20363;&nbsp;3.5.&nbsp;&#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;">&#20174;&#23383;&#20856;&#20013;&#21024;&#38500;&#21333;&#20010;&#20803;&#32032;</a>&#30340;&#26041;&#27861;&#12290;&#24403;&#20320;&#22312;&#31867;&#23454;&#20363;&#20013;&#20351;&#29992; <code class="function">del</code> &#26102;&#65292;<span class="application">Python</span> &#26367;&#20320;&#35843;&#29992; <code class="function">__delitem__</code> &#19987;&#29992;&#26041;&#27861;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.strequals.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span> equality and identity</a></b><br>&#22312; <span class="application">Java</span> &#20013;&#65292;&#36890;&#36807;&#20351;&#29992; <code class="literal">str1 == str2</code> &#21487;&#20197;&#30830;&#23450;&#20004;&#20010;&#23383;&#31526;&#20018;&#21464;&#37327;&#26159;&#21542;&#25351;&#21521;&#21516;&#19968;&#22359;&#29289;&#29702;&#20869;&#23384;&#20301;&#32622;&#12290;&#36825;&#21483;&#20570;<span class="emphasis"><em>&#23545;&#35937;&#21516;&#19968;&#24615;</em></span>&#65292;&#22312; <span class="application">Python</span> &#20013;&#20889;&#20026; <code class="literal">str1 is str2</code>&#12290;&#22312; <span class="application">Java</span> &#20013;&#35201;&#27604;&#36739;&#20004;&#20010;&#23383;&#31526;&#20018;&#20540;&#65292;&#20320;&#35201;&#20351;&#29992; <code class="literal">str1.equals(str2)</code>&#65307;&#22312; <span class="application">Python</span> &#20013;&#65292;&#20320;&#35201;&#20351;&#29992; <code class="literal">str1 == str2</code>&#12290;&#26576;&#20123; <span class="application">Java</span> &#31243;&#24207;&#21592;&#65292;&#20182;&#20204;&#24050;&#32463;&#34987;&#25945;&#25480;&#24471;&#35748;&#20026;&#65292;&#27491;&#26159;&#22240;&#20026;&#22312; <span class="application">Java</span> &#20013; <code class="literal">==</code> &#26159;&#36890;&#36807;&#21516;&#19968;&#24615;&#32780;&#19981;&#26159;&#20540;&#36827;&#34892;&#27604;&#36739;&#65292;&#25152;&#20197;&#19990;&#30028;&#25165;&#20250;&#26356;&#32654;&#22909;&#12290;&#36825;&#20123;&#20154;&#35201;&#25509;&#21463; <span class="application">Python</span> &#30340;&#36825;&#20010;&#8220;&#20005;&#37325;&#32570;&#22833;&#8221;&#21487;&#33021;&#35201;&#33457;&#20123;&#26102;&#38388;&#12290;</blockquote></div><p>&#22312;&#36825;&#20010;&#22320;&#26041;&#65292;&#20320;&#21487;&#33021;&#20250;&#24819;&#65292;"<span class="quote">&#25152;&#26377;&#36825;&#20123;&#24037;&#20316;&#21482;&#26159;&#20026;&#20102;&#22312;&#31867;&#20013;&#20570;&#19968;&#20123;&#25105;&#21487;&#20197;&#23545;&#19968;&#20010;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;&#25152;&#20570;&#30340;&#25805;&#20316;</span>"&#12290;&#19981;&#38169;&#65292;&#22914;&#26524;&#20320;&#33021;&#22815;&#20174;&#20687;&#23383;&#20856;&#19968;&#26679;&#30340;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;&#36827;&#34892;&#32487;&#25215;&#30340;&#35805;&#65292;&#20107;&#24773;&#23601;&#23481;&#26131;&#22810;&#20102; (&#37027;&#26679;&#25972;&#20010; <code class="classname">UserDict</code> &#31867;&#23558;&#23436;&#20840;&#19981;&#38656;&#35201;&#20102;)&#12290;&#23613;&#31649;&#20320;&#21487;&#20197;&#36825;&#26679;&#20570;&#65292;&#19987;&#29992;&#26041;&#27861;&#20173;&#28982;&#26159;&#26377;&#29992;&#30340;&#65292;&#22240;&#20026;&#23427;&#20204;&#21487;&#20197;&#29992;&#20110;&#20219;&#20309;&#30340;&#31867;&#65292;&#32780;&#19981;&#21482;&#26159;&#20687; <code class="classname">UserDict</code> &#36825;&#26679;&#30340;&#23553;&#35013;&#31867;&#12290;</p><p>&#19987;&#29992;&#26041;&#27861;&#24847;&#21619;&#30528;<span class="emphasis"><em>&#20219;&#20309;&#31867;</em></span> &#21487;&#20197;&#20687;&#23383;&#20856;&#19968;&#26679;&#20445;&#23384;&#38190;-&#20540;&#23545;&#65292;&#21482;&#35201;&#23450;&#20041; <code class="function">__setitem__</code> &#26041;&#27861;&#12290;&#20219;&#20309;&#31867;&#21487;&#20197;&#34920;&#29616;&#24471;&#20687;&#19968;&#20010;&#24207;&#21015;&#65292;&#21482;&#35201;&#23450;&#20041; <code class="function">__getitem__</code> &#26041;&#27861;&#12290;&#20219;&#20309;&#23450;&#20041;&#20102; <code class="function">__cmp__</code> &#26041;&#27861;&#30340;&#31867;&#21487;&#20197;&#29992; <code class="literal">==</code> &#36827;&#34892;&#27604;&#36739;&#12290;&#24182;&#19988;&#22914;&#26524;&#20320;&#30340;&#31867;&#34920;&#29616;&#20026;&#25317;&#26377;&#31867;&#20284;&#38271;&#24230;&#30340;&#19996;&#35199;&#65292;&#19981;&#35201;&#23450;&#20041; <code class="function">GetLength</code> &#26041;&#27861;&#65292;&#32780;&#23450;&#20041; <code class="function">__len__</code> &#26041;&#27861;&#65292;&#24182;&#20351;&#29992; <code class="literal">len(<em class="replaceable">instance</em>)</code>&#12290;</p><div class="note"><blockquote><b class="title"><a name="note.physical.v.logical">&#27880;&#24847;: </a></b><br>&#20854;&#23427;&#30340;&#38754;&#21521;&#23545;&#35937;&#35821;&#35328;&#20165;&#35753;&#20320;&#23450;&#20041;&#19968;&#20010;&#23545;&#35937;&#30340;&#29289;&#29702;&#27169;&#22411; ("<span class="quote">&#36825;&#20010;&#23545;&#35937;&#26377; <code class="function">GetLength</code> &#26041;&#27861;</span>")&#65292;&#32780; <span class="application">Python</span> &#30340;&#19987;&#29992;&#31867;&#26041;&#27861;&#20687; <code class="function">__len__</code> &#20801;&#35768;&#20320;&#23450;&#20041;&#19968;&#20010;&#23545;&#35937;&#30340;&#36923;&#36753;&#27169;&#22411; ("<span class="quote">&#36825;&#20010;&#23545;&#35937;&#26377;&#19968;&#20010;&#38271;&#24230;</span>")&#12290;
</blockquote></div><p><span class="application">Python</span> &#23384;&#22312;&#35768;&#22810;&#20854;&#23427;&#30340;&#19987;&#29992;&#26041;&#27861;&#12290;&#26377;&#19968;&#25972;&#22871;&#30340;&#19987;&#29992;&#26041;&#27861;&#65292;&#21487;&#20197;&#35753;&#31867;&#34920;&#29616;&#24471;&#35937;&#25968;&#20540;&#19968;&#26679;&#65292;&#20801;&#35768;&#20320;&#22312;&#31867;&#23454;&#20363;&#19978;&#36827;&#34892;&#21152;&#12289;&#20943;&#65292;&#20197;&#21450;&#25191;&#34892;&#20854;&#23427;&#31639;&#25968;&#25805;&#20316;&#12290;(&#20851;&#20110;&#36825;&#19968;&#28857;&#20856;&#22411;&#30340;&#20363;&#23376;&#23601;&#26159;&#34920;&#31034;&#22797;&#25968;&#30340;&#31867;&#65292;&#25968;&#20540;&#24102;&#26377;&#23454;&#25968;&#21644;&#34394;&#25968;&#37096;&#20998;&#12290;) <code class="function">__call__</code> &#26041;&#27861;&#35753;&#19968;&#20010;&#31867;&#34920;&#29616;&#24471;&#20687;&#19968;&#20010;&#20989;&#25968;&#65292;&#20801;&#35768;&#20320;&#30452;&#25509;&#35843;&#29992;&#19968;&#20010;&#31867;&#23454;&#20363;&#12290;&#24182;&#19988;&#23384;&#22312;&#20854;&#23427;&#30340;&#19987;&#29992;&#20989;&#25968;&#65292;&#20801;&#35768;&#31867;&#25317;&#26377;&#21482;&#35835;&#25110;&#21482;&#20889;&#25968;&#25454;&#23646;&#24615;&#65292;&#22312;&#21518;&#38754;&#30340;&#31456;&#33410;&#20013;&#25105;&#20204;&#20250;&#26356;&#22810;&#22320;&#35848;&#21040;&#36825;&#20123;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#25552;&#20379;&#20102;&#25152;&#26377;&#19987;&#29992;&#31867;&#26041;&#27861; (<a href="http://www.python.org/doc/current/ref/specialnames.html">http://www.python.org/doc/current/ref/specialnames.html</a>)&#30340;&#25991;&#26723;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.classattributes"></a>5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;</h2></div></div></div><div class="abstract"><p>&#20320;&#24050;&#32463;&#30693;&#36947;&#20102;<a class="link" href="#fileinfo.userdict.init.example" title="&#20363;&nbsp;5.9.&nbsp;&#23450;&#20041; UserDict &#31867;">&#25968;&#25454;&#23646;&#24615;</a>&#65292;&#23427;&#20204;&#26159;&#34987;&#19968;&#20010;&#29305;&#23450;&#30340;&#31867;&#23454;&#20363;&#25152;&#25317;&#26377;&#30340;&#21464;&#37327;&#12290;<span class="application">Python</span> &#20063;&#25903;&#25345;&#31867;&#23646;&#24615;&#65292;&#23427;&#20204;&#26159;&#30001;&#31867;&#26412;&#36523;&#25152;&#25317;&#26377;&#30340;&#12290;</p></div><div class="example"><a name="fileinfo.classattributes.intro"></a><p class="title"><b>&#20363;&nbsp;5.17.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;</b></p><div class="example-contents"><pre class="programlisting">
class MP3FileInfo(FileInfo):
    "store ID3v1.0 MP3 tags"
    tagDataMap = {"title"   : (  3,  33, stripnulls),
                  "artist"  : ( 33,  63, stripnulls),
                  "album"   : ( 63,  93, stripnulls),
                  "year"    : ( 93,  97, stripnulls),
                  "comment" : ( 97, 126, stripnulls),
                  "genre"   : (127, 128, ord)}</pre><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import fileinfo</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fileinfo.MP3FileInfo</span>            <a name="fileinfo.classattributes.1.1"></a>circled_1_delcric
<font color="teal">&lt;class fileinfo.MP3FileInfo at 01257FDC&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fileinfo.MP3FileInfo.tagDataMap</span> <a name="fileinfo.classattributes.1.2"></a>circled_2_delcric
<font color="teal">{'title': (3, 33, &lt;function stripnulls at 0260C8D4&gt;), 
'genre': (127, 128, &lt;built-in function ord&gt;), 
'artist': (33, 63, &lt;function stripnulls at 0260C8D4&gt;), 
'year': (93, 97, &lt;function stripnulls at 0260C8D4&gt;), 
'comment': (97, 126, &lt;function stripnulls at 0260C8D4&gt;), 
'album': (63, 93, &lt;function stripnulls at 0260C8D4&gt;)}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">m = fileinfo.MP3FileInfo()</span>      <a name="fileinfo.classattributes.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">m.tagDataMap</span>
<font color="teal">{'title': (3, 33, &lt;function stripnulls at 0260C8D4&gt;), 
'genre': (127, 128, &lt;built-in function ord&gt;), 
'artist': (33, 63, &lt;function stripnulls at 0260C8D4&gt;), 
'year': (93, 97, &lt;function stripnulls at 0260C8D4&gt;), 
'comment': (97, 126, &lt;function stripnulls at 0260C8D4&gt;), 
'album': (63, 93, &lt;function stripnulls at 0260C8D4&gt;)}</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.classattributes.1.1">circled_1_delcric</a> </dt><dd><code class="classname">MP3FileInfo</code> &#26159;&#31867;&#26412;&#36523;&#65292;&#19981;&#26159;&#20219;&#20309;&#31867;&#30340;&#29305;&#21035;&#23454;&#20363;&#12290;</dd><dt><a href="#fileinfo.classattributes.1.2">circled_2_delcric</a> </dt><dd><code class="varname">tagDataMap</code> &#26159;&#19968;&#20010;&#31867;&#23646;&#24615;&#65306;&#23383;&#38754;&#30340;&#24847;&#24605;&#65292;&#19968;&#20010;&#31867;&#30340;&#23646;&#24615;&#12290;&#23427;&#22312;&#21019;&#24314;&#20219;&#20309;&#31867;&#23454;&#20363;&#20043;&#21069;&#23601;&#26377;&#25928;&#20102;&#12290;</dd><dt><a href="#fileinfo.classattributes.1.3">circled_3_delcric</a> </dt><dd>&#31867;&#23646;&#24615;&#26082;&#21487;&#20197;&#36890;&#36807;&#30452;&#25509;&#23545;&#31867;&#30340;&#24341;&#29992;&#65292;&#20063;&#21487;&#20197;&#36890;&#36807;&#23545;&#31867;&#30340;&#20219;&#24847;&#23454;&#20363;&#30340;&#24341;&#29992;&#26469;&#20351;&#29992;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="compare.classattr.java">&#27880;&#24847;: <span class="application">Python</span> vs. <span class="application">Java</span> attribute definitions</a></b><br>&#22312; <span class="application">Java</span> &#20013;&#65292;&#38745;&#24577;&#21464;&#37327; (&#22312; <span class="application">Python</span> &#20013;&#21483;&#31867;&#23646;&#24615;) &#21644;&#23454;&#20363;&#21464;&#37327; (&#22312; <span class="application">Python</span> &#20013;&#21483;&#25968;&#25454;&#23646;&#24615;) &#20004;&#32773;&#37117;&#26159;&#32039;&#36319;&#22312;&#31867;&#23450;&#20041;&#20043;&#21518;&#23450;&#20041;&#30340; (&#19968;&#20010;&#26377; <code class="literal">static</code> &#20851;&#38190;&#23383;&#65292;&#19968;&#20010;&#27809;&#26377;)&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#21482;&#26377;&#31867;&#23646;&#24615;&#21487;&#20197;&#23450;&#20041;&#22312;&#36825;&#37324;&#65292;&#25968;&#25454;&#23646;&#24615;&#23450;&#20041;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#12290;</blockquote></div><p>&#31867;&#23646;&#24615;&#21487;&#20197;&#20316;&#20026;&#31867;&#32423;&#21035;&#30340;&#24120;&#37327;&#26469;&#20351;&#29992; (&#36825;&#23601;&#26159;&#20026;&#20160;&#20040;&#25105;&#20204;&#22312; <code class="classname">MP3FileInfo</code> &#20013;&#20351;&#29992;&#23427;&#20204;)&#65292;&#20294;&#26159;&#23427;&#20204;&#19981;&#26159;&#30495;&#27491;&#30340;&#24120;&#37327;&#12290;&#20320;&#20063;&#21487;&#20197;&#20462;&#25913;&#23427;&#20204;&#12290;</p><div class="note"><blockquote><b class="title"><a name="d0e13909">&#27880;&#24847;: </a></b><br>&#22312; <span class="application">Python</span> &#20013;&#27809;&#26377;&#24120;&#37327;&#12290;&#22914;&#26524;&#20320;&#35797;&#22270;&#21162;&#21147;&#30340;&#35805;&#20160;&#20040;&#37117;&#21487;&#20197;&#25913;&#21464;&#12290;&#36825;&#19968;&#28857;&#28385;&#36275; <span class="application">Python</span> &#30340;&#26680;&#24515;&#21407;&#21017;&#20043;&#19968;&#65306;&#22351;&#30340;&#34892;&#20026;&#24212;&#35813;&#34987;&#20811;&#26381;&#32780;&#19981;&#26159;&#34987;&#21462;&#32532;&#12290;&#22914;&#26524;&#20320;&#30495;&#27491;&#24819;&#25913;&#21464; <code class="literal">None</code> &#30340;&#20540;&#65292;&#20063;&#21487;&#20197;&#20570;&#21040;&#65292;&#20294;&#24403;&#26080;&#27861;&#35843;&#35797;&#30340;&#26102;&#20505;&#21035;&#26469;&#25214;&#25105;&#12290;</blockquote></div><div class="example"><a name="fileinfo.classattributes.writeable.example"></a><p class="title"><b>&#20363;&nbsp;5.18.&nbsp;&#20462;&#25913;&#31867;&#23646;&#24615;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">class counter:</span>
<code class="prompt">...     </code><span class="userinput">count = 0</span>                     <a name="fileinfo.classattributes.2.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">def __init__(self):</span>
<code class="prompt">...     </code><span class="userinput">    self.__class__.count += 1</span> <a name="fileinfo.classattributes.2.2"></a>circled_2_delcric
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter</span>
<font color="teal">&lt;class __main__.counter at 010EAECC&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter.count</span>                     <a name="fileinfo.classattributes.2.3"></a>circled_3_delcric
<font color="teal">0</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">c = counter()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">c.count</span>                           <a name="fileinfo.classattributes.2.4"></a>circled_4_delcric
<font color="teal">1</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter.count</span>
<font color="teal">1</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d = counter()</span>                     <a name="fileinfo.classattributes.2.5"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">d.count</span>
<font color="teal">2</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">c.count</span>
<font color="teal">2</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter.count</span>
<font color="teal">2</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.classattributes.2.1">circled_1_delcric</a> </dt><dd><code class="varname">count</code> &#26159; <code class="classname">counter</code> &#31867;&#30340;&#19968;&#20010;&#31867;&#23646;&#24615;&#12290;</dd><dt><a href="#fileinfo.classattributes.2.2">circled_2_delcric</a> </dt><dd><code class="literal">__class__</code> &#26159;&#27599;&#20010;&#31867;&#23454;&#20363;&#30340;&#19968;&#20010;&#20869;&#32622;&#23646;&#24615; (&#20063;&#26159;&#27599;&#20010;&#31867;&#30340;)&#12290;&#23427;&#26159;&#19968;&#20010;&#31867;&#30340;&#24341;&#29992;&#65292;&#32780; <code class="varname">self</code> &#26159;&#19968;&#20010;&#31867; (&#22312;&#26412;&#20363;&#20013;&#65292;&#26159; <code class="classname">counter</code> &#31867;) &#30340;&#23454;&#20363;&#12290;</dd><dt><a href="#fileinfo.classattributes.2.3">circled_3_delcric</a> </dt><dd>&#22240;&#20026; <code class="varname">count</code> &#26159;&#19968;&#20010;&#31867;&#23646;&#24615;&#65292;&#23427;&#21487;&#20197;&#22312;&#25105;&#20204;&#21019;&#24314;&#20219;&#20309;&#31867;&#23454;&#20363;&#20043;&#21069;&#65292;&#36890;&#36807;&#30452;&#25509;&#23545;&#31867;&#24341;&#29992;&#32780;&#24471;&#21040;&#12290;</dd><dt><a href="#fileinfo.classattributes.2.4">circled_4_delcric</a> </dt><dd>&#21019;&#24314;&#19968;&#20010;&#31867;&#23454;&#20363;&#20250;&#35843;&#29992; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#23427;&#20250;&#32473;&#31867;&#23646;&#24615; <code class="varname">count</code> &#21152; <code class="constant">1</code>&#12290;&#36825;&#26679;&#20250;&#24433;&#21709;&#21040;&#31867;&#33258;&#36523;&#65292;&#19981;&#21482;&#26159;&#26032;&#21019;&#24314;&#30340;&#23454;&#20363;&#12290;</dd><dt><a href="#fileinfo.classattributes.2.5">circled_5_delcric</a> </dt><dd>&#21019;&#24314;&#31532;&#20108;&#20010;&#23454;&#20363;&#23558;&#20877;&#27425;&#22686;&#21152;&#31867;&#23646;&#24615; <code class="varname">count</code>&#12290;&#27880;&#24847;&#31867;&#23646;&#24615;&#26159;&#22914;&#20309;&#34987;&#31867;&#21644;&#25152;&#26377;&#31867;&#23454;&#20363;&#25152;&#20849;&#20139;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.private"></a>5.9.&nbsp;&#31169;&#26377;&#20989;&#25968;</h2></div></div></div><p>&#19982;&#22823;&#22810;&#25968;&#35821;&#35328;&#19968;&#26679;&#65292;<span class="application">Python</span> &#20063;&#26377;&#31169;&#26377;&#30340;&#27010;&#24565;&#65306;</p><div class="itemizedlist"><ul><li>&#31169;&#26377;&#20989;&#25968;&#19981;&#21487;&#20197;&#20174;&#23427;&#20204;&#30340;&#27169;&#22359;&#22806;&#38754;&#34987;&#35843;&#29992;</li><li>&#31169;&#26377;&#31867;&#26041;&#27861;&#19981;&#33021;&#22815;&#20174;&#23427;&#20204;&#30340;&#31867;&#22806;&#38754;&#34987;&#35843;&#29992;</li><li>&#31169;&#26377;&#23646;&#24615;&#19981;&#33021;&#22815;&#20174;&#23427;&#20204;&#30340;&#31867;&#22806;&#38754;&#34987;&#35775;&#38382;</li></ul></div><div class="abstract"><p>&#19982;&#22823;&#22810;&#25968;&#30340;&#35821;&#35328;&#19981;&#21516;&#65292;&#19968;&#20010; <span class="application">Python</span> &#20989;&#25968;&#65292;&#26041;&#27861;&#65292;&#25110;&#23646;&#24615;&#26159;&#31169;&#26377;&#36824;&#26159;&#20844;&#26377;&#65292;&#23436;&#20840;&#21462;&#20915;&#20110;&#23427;&#30340;&#21517;&#23383;&#12290;</p></div><p>&#22914;&#26524;&#19968;&#20010; <span class="application">Python</span> &#20989;&#25968;&#65292;&#31867;&#26041;&#27861;&#65292;&#25110;&#23646;&#24615;&#30340;&#21517;&#23383;&#20197;&#20004;&#20010;&#19979;&#21010;&#32447;&#24320;&#22987; (&#20294;&#19981;&#26159;&#32467;&#26463;)&#65292;&#23427;&#26159;&#31169;&#26377;&#30340;&#65307;&#20854;&#23427;&#25152;&#26377;&#30340;&#37117;&#26159;&#20844;&#26377;&#30340;&#12290;
<span class="application">Python</span> &#27809;&#26377;&#31867;&#26041;&#27861;<span class="emphasis"><em>&#20445;&#25252;</em></span> &#30340;&#27010;&#24565; (&#21482;&#33021;&#29992;&#20110;&#23427;&#20204;&#33258;&#24050;&#30340;&#31867;&#21644;&#23376;&#31867;&#20013;)&#12290;&#31867;&#26041;&#27861;&#25110;&#32773;&#26159;&#31169;&#26377; (&#21482;&#33021;&#22312;&#23427;&#20204;&#33258;&#24050;&#30340;&#31867;&#20013;&#20351;&#29992;) &#25110;&#32773;&#26159;&#20844;&#26377; (&#20219;&#20309;&#22320;&#26041;&#37117;&#21487;&#20351;&#29992;)&#12290;</p><p>&#22312; <code class="classname">MP3FileInfo</code> &#20013;&#65292;&#26377;&#20004;&#20010;&#26041;&#27861;&#65306;<code class="function">__parse</code> &#21644; <code class="function">__setitem__</code>&#12290;&#27491;&#22914;&#25105;&#20204;&#24050;&#32463;&#35752;&#35770;&#36807;&#30340;&#65292;<code class="function">__setitem__</code> &#26159;&#19968;&#20010;<a class="link" href="#fileinfo.specialmethods.setitem.example" title="&#20363;&nbsp;5.13.&nbsp;__setitem__ &#19987;&#29992;&#26041;&#27861;">&#19987;&#26377;&#26041;&#27861;</a>&#65307;&#36890;&#24120;&#65292;&#20320;&#19981;&#30452;&#25509;&#35843;&#29992;&#23427;&#65292;&#32780;&#26159;&#36890;&#36807;&#22312;&#19968;&#20010;&#31867;&#19978;&#20351;&#29992;&#23383;&#20856;&#35821;&#27861;&#26469;&#35843;&#29992;&#65292;&#20294;&#23427;&#26159;&#20844;&#26377;&#30340;&#65292;&#24182;&#19988;&#22914;&#26524;&#26377;&#19968;&#20010;&#30495;&#27491;&#22909;&#30340;&#29702;&#30001;&#65292;&#20320;&#21487;&#20197;&#30452;&#25509;&#35843;&#29992;&#23427; (&#29978;&#33267;&#20174; <code class="filename">fileinfo</code> &#27169;&#22359;&#30340;&#22806;&#38754;)&#12290;&#28982;&#32780;&#65292;<code class="function">__parse</code> &#26159;&#31169;&#26377;&#30340;&#65292;&#22240;&#20026;&#22312;&#23427;&#30340;&#21517;&#23383;&#21069;&#38754;&#26377;&#20004;&#20010;&#19979;&#21010;&#32447;&#12290;</p><div class="note"><blockquote><b class="title"><a name="tip.specialmethodnames">&#27880;&#24847;: Method Naming Conventions</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#25152;&#26377;&#30340;&#19987;&#29992;&#26041;&#27861; (&#20687; <a class="link" href="#fileinfo.specialmethods.setitem.example" title="&#20363;&nbsp;5.13.&nbsp;__setitem__ &#19987;&#29992;&#26041;&#27861;"><code class="function">__setitem__</code></a>) &#21644;&#20869;&#32622;&#23646;&#24615; (&#20687; <a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string"><code class="literal">__doc__</code></a>) &#36981;&#23432;&#19968;&#20010;&#26631;&#20934;&#30340;&#21629;&#21517;&#20064;&#24815;&#65306;&#24320;&#22987;&#21644;&#32467;&#26463;&#37117;&#26377;&#20004;&#20010;&#19979;&#21010;&#32447;&#12290;&#19981;&#35201;&#23545;&#20320;&#33258;&#24050;&#30340;&#26041;&#27861;&#21644;&#23646;&#24615;&#29992;&#36825;&#31181;&#26041;&#27861;&#21629;&#21517;&#65307;&#21040;&#26368;&#21518;&#65292;&#23427;&#21482;&#20250;&#25226;&#20320; (&#25110;&#20854;&#23427;&#20154;) &#25630;&#20081;&#12290;</blockquote></div><div class="example"><a name="d0e14144"></a><p class="title"><b>&#20363;&nbsp;5.19.&nbsp;&#23581;&#35797;&#35843;&#29992;&#19968;&#20010;&#31169;&#26377;&#26041;&#27861;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import fileinfo</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">m = fileinfo.MP3FileInfo()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">m.__parse("/music/_singles/kairo.mp3")</span> <a name="fileinfo.private.1.1"></a>circled_1_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
AttributeError: 'MP3FileInfo' instance has no attribute '__parse'</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.private.1.1">circled_1_delcric</a> </dt><dd>&#22914;&#26524;&#20320;&#35797;&#22270;&#35843;&#29992;&#19968;&#20010;&#31169;&#26377;&#26041;&#27861;&#65292;<span class="application">Python</span> &#23558;&#24341;&#21457;&#19968;&#20010;&#26377;&#20123;&#35823;&#23548;&#30340;&#24322;&#24120;&#65292;&#23459;&#31216;&#37027;&#20010;&#26041;&#27861;&#19981;&#23384;&#22312;&#12290;&#24403;&#28982;&#23427;&#30830;&#23454;&#23384;&#22312;&#65292;&#20294;&#26159;&#23427;&#26159;&#31169;&#26377;&#30340;&#65292;&#25152;&#20197;&#22312;&#31867;&#22806;&#26159;&#19981;&#21487;&#20351;&#29992;&#30340;&#12290;&#20005;&#26684;&#22320;&#35828;&#65292;&#31169;&#26377;&#26041;&#27861;&#22312;&#23427;&#20204;&#30340;&#31867;&#22806;&#26159;&#21487;&#20197;&#35775;&#38382;&#30340;&#65292;&#21482;&#26159;&#19981;<span class="emphasis"><em>&#23481;&#26131;</em></span> &#22788;&#29702;&#12290;&#22312; <span class="application">Python</span> &#20013;&#27809;&#26377;&#20160;&#20040;&#26159;&#30495;&#27491;&#31169;&#26377;&#30340;&#65307;&#22312;&#20869;&#37096;&#65292;&#31169;&#26377;&#26041;&#27861;&#21644;&#23646;&#24615;&#30340;&#21517;&#23383;&#34987;&#24573;&#28982;&#25913;&#21464;&#21644;&#24674;&#22797;&#65292;&#20197;&#33268;&#20110;&#20351;&#24471;&#23427;&#20204;&#30475;&#19978;&#21435;&#29992;&#23427;&#20204;&#32473;&#23450;&#30340;&#21517;&#23383;&#26159;&#26080;&#27861;&#20351;&#29992;&#30340;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; <code class="function">_MP3FileInfo__parse</code> &#21517;&#23383;&#26469;&#20351;&#29992; <code class="classname">MP3FileInfo</code> &#31867;&#30340; <code class="function">__parse</code> &#26041;&#27861;&#12290;&#30693;&#36947;&#20102;&#36825;&#20010;&#26041;&#27861;&#24456;&#26377;&#36259;&#65292;&#28982;&#21518;&#35201;&#20445;&#35777;&#20915;&#19981;&#22312;&#30495;&#27491;&#30340;&#20195;&#30721;&#20013;&#20351;&#29992;&#23427;&#12290;&#31169;&#26377;&#26041;&#27861;&#30001;&#20110;&#26576;&#31181;&#21407;&#22240;&#32780;&#31169;&#26377;&#65292;&#20294;&#26159;&#20687;&#20854;&#23427;&#24456;&#22810;&#22312; <span class="application">Python</span> &#20013;&#30340;&#19996;&#35199;&#19968;&#26679;&#65292;&#23427;&#20204;&#30340;&#31169;&#26377;&#21270;&#22522;&#26412;&#19978;&#26159;&#20064;&#24815;&#38382;&#39064;&#65292;&#32780;&#19981;&#26159;&#24378;&#36843;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#31169;&#26377;&#21464;&#37327; (<a href="http://www.python.org/doc/current/tut/node11.html#SECTION0011600000000000000000">http://www.python.org/doc/current/tut/node11.html#SECTION0011600000000000000000</a>)&#30340;&#20869;&#37096;&#24037;&#20316;&#26041;&#24335;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.summary"></a>5.10.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#23454;&#25171;&#23454;&#30340;&#23545;&#35937;&#25226;&#25103;&#21040;&#27492;&#20026;&#27490;&#12290;&#20320;&#23558;&#22312; <a class="xref" href="#soap" title="&#31532;&nbsp;12&nbsp;&#31456;&nbsp;SOAP Web &#26381;&#21153;">&#31532; 12 &#31456;</a> &#20013;&#30475;&#21040;&#19968;&#20010;&#30495;&#23454;&#19990;&#30028;&#24212;&#29992;&#31243;&#24207;&#30340;&#19987;&#26377;&#31867;&#26041;&#27861;&#65292;&#23427;&#20351;&#29992; <code class="function">getattr</code> &#21019;&#24314;&#19968;&#20010;&#21040;&#36828;&#31243; Web &#26381;&#21153;&#30340;&#20195;&#29702;&#12290;</p></div><p>&#19979;&#19968;&#31456;&#23558;&#32487;&#32493;&#20351;&#29992;&#26412;&#31456;&#30340;&#20363;&#31243;&#25506;&#32034;&#20854;&#20182; <span class="application">Python</span> &#30340;&#27010;&#24565;&#65292;&#20363;&#22914;&#65306;&#24322;&#24120;&#12289;&#25991;&#20214;&#23545;&#35937; &#21644; <code class="literal">for</code> &#24490;&#29615;&#12290;</p><p>&#22312;&#30740;&#31350;&#19979;&#19968;&#31456;&#20043;&#21069;&#65292;&#30830;&#20445;&#20320;&#21487;&#20197;&#26080;&#22256;&#38590;&#22320;&#23436;&#25104;&#19979;&#38754;&#30340;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#20351;&#29992; <a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string"><code class="literal">import <em class="replaceable">module</em></code></a> &#25110; <a class="link" href="#fileinfo.fromimport" title="5.2.&nbsp;&#20351;&#29992; from module import &#23548;&#20837;&#27169;&#22359;"><code class="literal">from <em class="replaceable">module</em> import</code></a>&#23548;&#20837;&#27169;&#22359;</li><li><a class="link" href="#fileinfo.class" title="5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;">&#23450;&#20041;</a>&#21644;<a class="link" href="#fileinfo.create" title="5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;">&#23454;&#20363;&#21270;</a>&#31867;</li><li>&#23450;&#20041; <a class="link" href="#fileinfo.class.example" title="&#20363;&nbsp;5.4.&nbsp;&#23450;&#20041; FileInfo &#31867;"><code class="function">__init__</code> &#26041;&#27861;</a>&#21644;&#20854;&#20182;<a class="link" href="#fileinfo.specialmethods" title="5.6.&nbsp;&#19987;&#29992;&#31867;&#26041;&#27861;">&#19987;&#29992;&#31867;&#26041;&#27861;</a>&#65292;&#24182;&#29702;&#35299;&#23427;&#20204;&#20309;&#26102;&#20250;&#35843;&#29992;</li><li>&#23376;&#31867;&#21270; <a class="link" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;"><code class="classname">UserDict</code></a> &#26469;&#23450;&#20041;&#34892;&#20026;&#20687;&#23383;&#20856;&#30340;&#31867;</li><li>&#23450;&#20041;<a class="link" href="#fileinfo.userdict.init.example" title="&#20363;&nbsp;5.9.&nbsp;&#23450;&#20041; UserDict &#31867;">&#25968;&#25454;&#23646;&#24615;</a>&#21644;<a class="link" href="#fileinfo.classattributes" title="5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;">&#31867;&#23646;&#24615;</a>&#65292;&#24182;&#29702;&#35299;&#23427;&#20204;&#20043;&#38388;&#30340;&#19981;&#21516;</li><li>&#23450;&#20041;<a class="link" href="#fileinfo.private" title="5.9.&nbsp;&#31169;&#26377;&#20989;&#25968;">&#31169;&#26377;&#23646;&#24615;&#21644;&#26041;&#27861;</a></li></ul></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e11835" href="#d0e11835" class="para">2</a>] </sup>&#22312; 2.2 &#20043;&#21518;&#24050;&#32463;&#21487;&#20197;&#20174; dict&#12289;list &#26469;&#27966;&#29983;&#23376;&#31867;&#20102;&#65292;&#20851;&#20110;&#36825;&#19968;&#28857;&#20316;&#32773;&#22312;&#21518;&#25991;&#20063;&#20250;&#25552;&#21040;&#12290;&#8213;&#8213;&#35793;&#27880;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e12706" href="#d0e12706" class="para">3</a>] </sup>&#23454;&#38469;&#19978;&#65292;&#36825;&#19968;&#28857;&#24182;&#19981;&#26159;&#37027;&#20040;&#38590;&#20197;&#29702;&#35299;&#12290;&#32771;&#34385;&#20004;&#20010;&#31867;&#65292;<code class="classname">base</code> &#21644; <code class="classname">child</code>&#65292;<code class="classname">base</code> &#20013;&#30340;&#26041;&#27861; <code class="literal">a</code> &#38656;&#35201;&#35843;&#29992; <code class="literal">self.b</code>&#65307;&#32780;&#25105;&#20204;&#21448;&#22312; <code class="classname">child</code> &#20013;&#35206;&#30422;&#20102;&#26041;&#27861; <code class="literal">b</code>&#12290;&#28982;&#21518;&#25105;&#20204;&#21019;&#24314;&#19968;&#20010; <code class="classname">child</code> &#30340;&#23454;&#20363;&#65292;<code class="literal">ch</code>&#12290;&#35843;&#29992; <code class="literal">ch.a</code>&#65292;&#37027;&#20040;&#27492;&#26102;&#30340;&#26041;&#27861; <code class="literal">a</code> &#35843;&#29992;&#30340; <code class="literal">b</code> &#20989;&#25968;&#23558;&#19981;&#26159; <code class="literal">base.b</code>&#65292;&#32780;&#26159; <code class="literal">child.b</code>&#12290;&#8213;&#8213;&#35793;&#27880;</p></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="filehandling"></a>&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;</h1></div></div></div><div class="abstract"><p>&#22312;&#26412;&#31456;&#20013;&#65292;&#23558;&#30740;&#31350;&#24322;&#24120;&#12289;&#25991;&#20214;&#23545;&#35937;&#12289;<code class="literal">for</code> &#24490;&#29615;&#12289;<code class="filename">os</code> &#21644; <code class="filename">sys</code> &#27169;&#22359;&#31561;&#20869;&#23481;&#12290;&#22914;&#26524;&#20320;&#24050;&#32463;&#22312;&#20854;&#23427;&#32534;&#31243;&#35821;&#35328;&#20013;&#20351;&#29992;&#36807;&#24322;&#24120;&#65292;&#20320;&#21487;&#20197;&#31616;&#21333;&#30475;&#30475;&#31532;&#19968;&#37096;&#20998;&#26469;&#20102;&#35299; <span class="application">Python</span> &#30340;&#35821;&#27861;&#12290;&#20294;&#26159;&#26412;&#31456;&#20854;&#23427;&#30340;&#20869;&#23481;&#20173;&#38656;&#20180;&#32454;&#30740;&#35835;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.exception"></a>6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;</h2></div></div></div><div class="abstract"><p>&#19982;&#35768;&#22810;&#38754;&#21521;&#23545;&#35937;&#35821;&#35328;&#19968;&#26679;&#65292;<span class="application">Python</span> &#20855;&#26377;&#24322;&#24120;&#22788;&#29702;&#65292;&#36890;&#36807;&#20351;&#29992; <code class="literal">try...except</code> &#22359;&#26469;&#23454;&#29616;&#12290;</p></div><div class="note"><blockquote><b class="title"><a name="compare.exceptions.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span> &#30340;&#24322;&#24120;&#22788;&#29702;</a></b><br><span class="application">Python</span> &#20351;&#29992; <code class="literal">try...except</code> &#26469;&#22788;&#29702;&#24322;&#24120;&#65292;&#20351;&#29992; <code class="literal">raise</code> &#26469;&#24341;&#21457;&#24322;&#24120;&#12290;<span class="application">Java</span> &#21644; <span class="application"><acronym class="acronym">C++</acronym></span> &#20351;&#29992; <code class="literal">try...catch</code> &#26469;&#22788;&#29702;&#24322;&#24120;&#65292;&#20351;&#29992; <code class="literal">throw</code> &#26469;&#24341;&#21457;&#24322;&#24120;&#12290;</blockquote></div><p>&#24322;&#24120;&#22312; <span class="application">Python</span> &#20013;&#26080;&#22788;&#19981;&#22312;&#65307;&#23454;&#38469;&#19978;&#22312;&#26631;&#20934; <span class="application">Python</span> &#24211;&#20013;&#30340;&#27599;&#20010;&#27169;&#22359;&#37117;&#20351;&#29992;&#20102;&#23427;&#20204;&#65292;&#24182;&#19988; <span class="application">Python</span> &#33258;&#24050;&#20250;&#22312;&#35768;&#22810;&#19981;&#21516;&#30340;&#24773;&#20917;&#19979;&#24341;&#21457;&#23427;&#20204;&#12290;&#22312;&#25972;&#26412;&#20070;&#20013;&#20320;&#24050;&#32463;&#20877;&#19977;&#30475;&#21040;&#23427;&#20204;&#20102;&#12290;</p><div class="itemizedlist"><ul><li><a class="link" href="#odbchelper.dict.define" title="&#20363;&nbsp;3.1.&nbsp;&#23450;&#20041; Dictionary">&#20351;&#29992;&#19981;&#23384;&#22312;&#30340;&#23383;&#20856;&#20851;&#38190;&#23383;</a>&#23558;&#24341;&#21457; <code class="errorcode">KeyError</code> &#24322;&#24120;&#12290;</li><li><a class="link" href="#odbchelper.list.search" title="&#20363;&nbsp;3.12.&nbsp;&#25628;&#32034; list">&#25628;&#32034;&#21015;&#34920;&#20013;&#19981;&#23384;&#22312;&#30340;&#20540;</a>&#23558;&#24341;&#21457; <code class="errorcode">ValueError</code> &#24322;&#24120;&#12290;</li><li><a class="link" href="#odbchelper.tuplemethods" title="&#20363;&nbsp;3.16.&nbsp;Tuple &#27809;&#26377;&#26041;&#27861;">&#35843;&#29992;&#19981;&#23384;&#22312;&#30340;&#26041;&#27861;</a>&#23558;&#24341;&#21457; <code class="errorcode">AttributeError</code> &#24322;&#24120;&#12290;</li><li><a class="link" href="#odbchelper.unboundvariable" title="&#20363;&nbsp;3.18.&nbsp;&#24341;&#29992;&#26410;&#36171;&#20540;&#30340;&#21464;&#37327;">&#24341;&#29992;&#19981;&#23384;&#22312;&#30340;&#21464;&#37327;</a>&#23558;&#24341;&#21457; <code class="errorcode">NameError</code> &#24322;&#24120;&#12290;</li><li><a class="link" href="#odbchelper.stringformatting.coerce" title="&#20363;&nbsp;3.22.&nbsp;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#19982;&#23383;&#31526;&#20018;&#36830;&#25509;&#30340;&#27604;&#36739;">&#26410;&#24378;&#21046;&#36716;&#25442;&#23601;&#28151;&#29992;&#25968;&#25454;&#31867;&#22411;</a>&#23558;&#24341;&#21457; <code class="errorcode">TypeError</code> &#24322;&#24120;&#12290;</li></ul></div><p>&#22312;&#36825;&#20123;&#24773;&#20917;&#19979;&#65292;&#25105;&#20204;&#37117;&#22312;&#31616;&#21333;&#22320;&#20351;&#29992; <span class="application">Python</span> <acronym class="acronym">IDE</acronym>&#65306;&#19968;&#20010;&#38169;&#35823;&#21457;&#29983;&#20102;&#65292;&#24322;&#24120;&#34987;&#25171;&#21360;&#20986;&#26469; (&#21462;&#20915;&#20110;&#20320;&#30340; <acronym class="acronym">IDE</acronym>&#65292;&#21487;&#33021;&#20250;&#26377;&#24847;&#22320;&#20197;&#19968;&#31181;&#21050;&#30524;&#30340;&#32418;&#33394;&#24418;&#24335;&#34920;&#31034;)&#65292;&#36825;&#20415;&#26159;&#12290;&#36825;&#21483;&#20570;<span class="emphasis"><em>&#26410;&#22788;&#29702;</em></span> &#24322;&#24120;&#65307;&#24403;&#24322;&#24120;&#34987;&#24341;&#21457;&#26102;&#65292;&#27809;&#26377;&#20195;&#30721;&#26469;&#26126;&#30830;&#22320;&#20851;&#27880;&#21644;&#22788;&#29702;&#23427;&#65292;&#25152;&#20197;&#24322;&#24120;&#34987;&#20256;&#32473;&#32622;&#22312; <span class="application">Python</span> &#20013;&#30340;&#32570;&#30465;&#30340;&#22788;&#29702;&#65292;&#23427;&#20250;&#36755;&#20986;&#19968;&#20123;&#35843;&#35797;&#20449;&#24687;&#24182;&#19988;&#32456;&#27490;&#36816;&#34892;&#12290;&#22312; <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#36825;&#19981;&#26159;&#20160;&#20040;&#22823;&#20107;&#65292;&#20294;&#26159;&#22914;&#26524;&#21457;&#29983;&#22312;&#20320;&#30495;&#27491;&#30340; <span class="application">Python</span> &#31243;&#24207;&#36816;&#34892;&#30340;&#26102;&#20505;&#65292;&#25972;&#20010;&#31243;&#24207;&#23558;&#20250;&#32456;&#27490;&#12290;</p><p>&#28982;&#32780;&#65292;&#19968;&#20010;&#24322;&#24120;&#19981;&#19968;&#23450;&#20250;&#24341;&#36215;&#31243;&#24207;&#30340;&#23436;&#20840;&#23849;&#28291;&#12290;&#24403;&#24322;&#24120;&#24341;&#21457;&#26102;&#65292;&#21487;&#20197;&#34987;<span class="emphasis"><em>&#22788;&#29702;</em></span> &#25481;&#12290;&#26377;&#26102;&#20505;&#19968;&#20010;&#24322;&#24120;&#23454;&#38469;&#26159;&#22240;&#20026;&#20195;&#30721;&#20013;&#30340; bug (&#27604;&#22914;&#20351;&#29992;&#19968;&#20010;&#19981;&#23384;&#22312;&#30340;&#21464;&#37327;)&#65292;&#20294;&#26159;&#35768;&#22810;&#26102;&#20505;&#65292;&#19968;&#20010;&#24322;&#24120;&#26159;&#21487;&#20197;&#39044;&#35265;&#30340;&#12290;&#22914;&#26524;&#20320;&#25171;&#24320;&#19968;&#20010;&#25991;&#20214;&#65292;&#23427;&#21487;&#33021;&#19981;&#23384;&#22312;&#12290;&#22914;&#26524;&#20320;&#36830;&#25509;&#19968;&#20010;&#25968;&#25454;&#24211;&#65292;&#23427;&#21487;&#33021;&#19981;&#21487;&#36830;&#25509;&#25110;&#27809;&#26377;&#35775;&#38382;&#25152;&#38656;&#30340;&#27491;&#30830;&#30340;&#23433;&#20840;&#35777;&#20070;&#12290;&#22914;&#26524;&#30693;&#36947;&#19968;&#34892;&#20195;&#30721;&#21487;&#33021;&#20250;&#24341;&#21457;&#24322;&#24120;&#65292;&#20320;&#24212;&#35813;&#20351;&#29992;&#19968;&#20010; <code class="literal">try...except</code> &#22359;&#26469;&#22788;&#29702;&#24322;&#24120;&#12290;</p><div class="example"><a name="d0e14443"></a><p class="title"><b>&#20363;&nbsp;6.1.&nbsp;&#25171;&#24320;&#19968;&#20010;&#19981;&#23384;&#22312;&#30340;&#25991;&#20214;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fsock = open("/notthere", "r")</span>      <a name="fileinfo.exceptions.1.1"></a>circled_1_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
IOError: [Errno 2] No such file or directory: '/notthere'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">try:</span>
<code class="prompt">...     </code><span class="userinput">fsock = open("/notthere")</span>       <a name="fileinfo.exceptions.1.2"></a>circled_2_delcric
<code class="prompt">... </code><span class="userinput">except IOError:</span>                     <a name="fileinfo.exceptions.1.3"></a>circled_3_delcric
<code class="prompt">...     </code><span class="userinput">print "The file does not exist, exiting gracefully"</span>
<code class="prompt">... </code><span class="userinput">print "This line will always print"</span> <a name="fileinfo.exceptions.1.4"></a>circled_4_delcric
<font color="teal">The file does not exist, exiting gracefully
This line will always print</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.exceptions.1.1">circled_1_delcric</a> </dt><dd>&#20351;&#29992;&#20869;&#32622; <code class="function">open</code> &#20989;&#25968;&#65292;&#25105;&#20204;&#21487;&#20197;&#35797;&#30528;&#25171;&#24320;&#19968;&#20010;&#25991;&#20214;&#26469;&#35835;&#21462; (&#22312;&#19979;&#19968;&#33410;&#26377;&#20851;&#20110; <code class="function">open</code> &#30340;&#26356;&#22810;&#20869;&#23481;)&#12290;&#20294;&#26159;&#37027;&#20010;&#25991;&#20214;&#19981;&#23384;&#22312;&#65292;&#25152;&#20197;&#36825;&#26679;&#23601;&#24341;&#21457; <code class="errorcode">IOError</code> &#24322;&#24120;&#12290;&#22240;&#20026;&#25105;&#20204;&#27809;&#26377;&#25552;&#20379;&#20219;&#20309;&#26174;&#24335;&#30340;&#23545; <code class="errorcode">IOError</code> &#24322;&#24120;&#30340;&#26816;&#26597;&#65292;<span class="application">Python</span> &#20165;&#20165;&#25171;&#21360;&#20986;&#26576;&#20010;&#20851;&#20110;&#21457;&#29983;&#20102;&#20160;&#20040;&#30340;&#35843;&#35797;&#20449;&#24687;&#65292;&#28982;&#21518;&#32456;&#27490;&#12290;</dd><dt><a href="#fileinfo.exceptions.1.2">circled_2_delcric</a> </dt><dd>&#25105;&#20204;&#35797;&#22270;&#25171;&#24320;&#21516;&#26679;&#19981;&#23384;&#22312;&#30340;&#25991;&#20214;&#65292;&#20294;&#26159;&#36825;&#27425;&#25105;&#20204;&#22312;&#19968;&#20010; <code class="literal">try...except</code> &#20869;&#26469;&#25191;&#34892;&#23427;&#12290;</dd><dt><a href="#fileinfo.exceptions.1.3">circled_3_delcric</a> </dt><dd>&#24403; <code class="function">open</code> &#26041;&#27861;&#24341;&#21457; <code class="errorcode">IOError</code> &#24322;&#24120;&#26102;&#65292;&#25105;&#20204;&#24050;&#32463;&#20934;&#22791;&#22909;&#22788;&#29702;&#23427;&#20102;&#12290;<code class="literal">except IOError:</code> &#34892;&#25429;&#25417;&#24322;&#24120;&#65292;&#25509;&#30528;&#25191;&#34892;&#25105;&#20204;&#33258;&#24050;&#30340;&#20195;&#30721;&#22359;&#65292;&#36825;&#20010;&#20195;&#30721;&#22359;&#22312;&#26412;&#20363;&#20013;&#21482;&#26159;&#25171;&#21360;&#20986;&#26356;&#20196;&#20154;&#24841;&#24555;&#30340;&#38169;&#35823;&#20449;&#24687;&#12290;</dd><dt><a href="#fileinfo.exceptions.1.4">circled_4_delcric</a> </dt><dd>&#19968;&#26086;&#24322;&#24120;&#34987;&#22788;&#29702;&#20102;&#65292;&#22788;&#29702;&#36890;&#24120;&#22312; <code class="literal">try...except</code> &#22359;&#20043;&#21518;&#30340;&#31532;&#19968;&#34892;&#32487;&#32493;&#36827;&#34892;&#12290;&#27880;&#24847;&#36825;&#19968;&#34892;&#23558;&#24635;&#26159;&#25171;&#21360;&#20986;&#26469;&#65292;&#26080;&#35770;&#24322;&#24120;&#26159;&#21542;&#21457;&#29983;&#12290;&#22914;&#26524;&#22312;&#20320;&#30340;&#26681;&#30446;&#24405;&#19979;&#30830;&#23454;&#26377;&#19968;&#20010;&#21483; <code class="filename">notthere</code> &#30340;&#25991;&#20214;&#65292;&#23545; <code class="function">open</code> &#30340;&#35843;&#29992;&#23558;&#25104;&#21151;&#65292;<code class="literal">except</code> &#23376;&#21477;&#23558;&#24573;&#30053;&#65292;&#24182;&#19988;&#26368;&#21518;&#19968;&#34892;&#20173;&#23558;&#25191;&#34892;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#24322;&#24120;&#21487;&#33021;&#30475;&#19978;&#21435;&#19981;&#21451;&#22909; (&#27605;&#31455;&#65292;&#22914;&#26524;&#20320;&#19981;&#25429;&#25417;&#24322;&#24120;&#65292;&#25972;&#20010;&#31243;&#24207;&#23558;&#23849;&#28291;)&#65292;&#20294;&#26159;&#32771;&#34385;&#19968;&#19979;&#21035;&#30340;&#26041;&#27861;&#12290;&#20320;&#35813;&#19981;&#20250;&#24076;&#26395;&#33719;&#24471;&#19968;&#20010;&#25351;&#21521;&#19981;&#23384;&#22312;&#30340;&#25991;&#20214;&#30340;&#23545;&#35937;&#21543;&#65311;&#19981;&#31649;&#24590;&#20040;&#26679;&#20320;&#37117;&#24471;&#26816;&#26597;&#23427;&#30340;&#26377;&#25928;&#24615;&#65292;&#32780;&#19988;&#22914;&#26524;&#20320;&#24536;&#35760;&#20102;&#65292;&#20320;&#30340;&#31243;&#24207;&#23558;&#20250;&#22312;&#19979;&#38754;&#26576;&#20010;&#22320;&#26041;&#32473;&#20986;&#22855;&#24618;&#30340;&#38169;&#35823;&#65292;&#36825;&#26679;&#20320;&#23558;&#19981;&#24471;&#19981;&#36861;&#28335;&#21040;&#28304;&#31243;&#24207;&#12290;&#25105;&#30830;&#20449;&#20320;&#20570;&#36807;&#36825;&#31181;&#20107;&#65307;&#36825;&#21487;&#24182;&#19981;&#26377;&#36259;&#12290;&#20351;&#29992;&#24322;&#24120;&#65292;&#19968;&#21457;&#29983;&#38169;&#35823;&#65292;&#20320;&#23601;&#21487;&#20197;&#22312;&#38382;&#39064;&#30340;&#28304;&#22836;&#36890;&#36807;&#26631;&#20934;&#30340;&#26041;&#27861;&#26469;&#22788;&#29702;&#23427;&#20204;&#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e14544"></a>6.1.1.&nbsp;&#20026;&#20854;&#20182;&#29992;&#36884;&#20351;&#29992;&#24322;&#24120;</h3></div></div></div><p>&#38500;&#20102;&#22788;&#29702;&#23454;&#38469;&#30340;&#38169;&#35823;&#26465;&#20214;&#20043;&#22806;&#65292;&#23545;&#20110;&#24322;&#24120;&#36824;&#26377;&#35768;&#22810;&#20854;&#23427;&#30340;&#29992;&#22788;&#12290;&#22312;&#26631;&#20934; <span class="application">Python</span> &#24211;&#20013;&#19968;&#20010;&#26222;&#36890;&#30340;&#29992;&#27861;&#23601;&#26159;&#35797;&#30528;&#23548;&#20837;&#19968;&#20010;&#27169;&#22359;&#65292;&#28982;&#21518;&#26816;&#26597;&#26159;&#21542;&#23427;&#33021;&#20351;&#29992;&#12290;&#23548;&#20837;&#19968;&#20010;&#24182;&#19981;&#23384;&#22312;&#30340;&#27169;&#22359;&#23558;&#24341;&#21457;&#19968;&#20010; <code class="errorcode">ImportError</code> &#24322;&#24120;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;&#36825;&#31181;&#26041;&#27861;&#26469;&#23450;&#20041;&#22810;&#32423;&#21035;&#30340;&#21151;&#33021;&#8213;&#8213;&#20381;&#38752;&#22312;&#36816;&#34892;&#26102;&#21738;&#20010;&#27169;&#22359;&#26159;&#26377;&#25928;&#30340;&#65292;&#25110;&#25903;&#25345;&#22810;&#31181;&#24179;&#21488; (&#21363;&#24179;&#21488;&#29305;&#23450;&#20195;&#30721;&#34987;&#20998;&#31163;&#21040;&#19981;&#21516;&#30340;&#27169;&#22359;&#20013;)&#12290;</p><p>&#20320;&#20063;&#33021;&#36890;&#36807;&#21019;&#24314;&#19968;&#20010;&#20174;&#20869;&#32622;&#30340; <code class="classname">Exception</code> &#31867;&#32487;&#25215;&#30340;&#31867;&#23450;&#20041;&#20320;&#33258;&#24049;&#30340;&#24322;&#24120;&#65292;&#28982;&#21518;&#20351;&#29992; <code class="function">raise</code> &#21629;&#20196;&#24341;&#21457;&#20320;&#30340;&#24322;&#24120;&#12290;&#22914;&#26524;&#20320;&#23545;&#27492;&#24863;&#20852;&#36259;&#65292;&#35831;&#30475;&#36827;&#19968;&#27493;&#38405;&#35835;&#30340;&#37096;&#20998;&#12290;</p><p>&#19979;&#38754;&#30340;&#20363;&#23376;&#28436;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#24322;&#24120;&#25903;&#25345;&#29305;&#23450;&#24179;&#21488;&#21151;&#33021;&#12290;&#20195;&#30721;&#26469;&#33258; <code class="filename">getpass</code> &#27169;&#22359;&#65292;&#19968;&#20010;&#20174;&#29992;&#25143;&#33719;&#24471;&#21475;&#20196;&#30340;&#23553;&#35013;&#27169;&#22359;&#12290;&#33719;&#24471;&#21475;&#20196;&#22312; <acronym class="acronym">UNIX</acronym>&#12289;Windows &#21644; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#24179;&#21488;&#19978;&#30340;&#23454;&#29616;&#26159;&#19981;&#21516;&#30340;&#65292;&#20294;&#26159;&#36825;&#20010;&#20195;&#30721;&#23553;&#35013;&#20102;&#25152;&#26377;&#30340;&#19981;&#21516;&#20043;&#22788;&#12290;</p><div class="example"><a name="crossplatform.example"></a><p class="title"><b>&#20363;&nbsp;6.2.&nbsp;&#25903;&#25345;&#29305;&#23450;&#24179;&#21488;&#21151;&#33021;</b></p><div class="example-contents"><pre class="programlisting">
  # Bind the name getpass to the appropriate function
  try:
      import termios, TERMIOS                     <a name="fileinfo.exceptions.2.1"></a>circled_1_delcric
  except ImportError:
      try:
          import msvcrt                           <a name="fileinfo.exceptions.2.2"></a>circled_2_delcric
      except ImportError:
          try:
              from EasyDialogs import AskPassword <a name="fileinfo.exceptions.2.3"></a>circled_3_delcric
          except ImportError:
              getpass = default_getpass           <a name="fileinfo.exceptions.2.4"></a>circled_4_delcric
          else:                                   <a name="fileinfo.exceptions.2.5"></a>circled_5_delcric
              getpass = AskPassword
      else:
          getpass = win_getpass
  else:
      getpass = unix_getpass</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.exceptions.2.1">circled_1_delcric</a> </dt><dd><code class="filename">termios</code> &#26159; <acronym class="acronym">UNIX</acronym> &#29420;&#26377;&#30340;&#19968;&#20010;&#27169;&#22359;&#65292;&#23427;&#25552;&#20379;&#20102;&#23545;&#20110;&#36755;&#20837;&#32456;&#31471;&#30340;&#24213;&#23618;&#25511;&#21046;&#12290;&#22914;&#26524;&#36825;&#20010;&#27169;&#22359;&#26080;&#25928; (&#22240;&#20026;&#23427;&#19981;&#22312;&#20320;&#30340;&#31995;&#32479;&#19978;&#65292;&#25110;&#20320;&#30340;&#31995;&#32479;&#19981;&#25903;&#25345;&#23427;)&#65292;&#21017;&#23548;&#20837;&#22833;&#36133;&#65292;<span class="application">Python</span> &#24341;&#21457;&#25105;&#20204;&#25429;&#25417;&#30340; <code class="errorcode">ImportError</code> &#24322;&#24120;&#12290;</dd><dt><a href="#fileinfo.exceptions.2.2">circled_2_delcric</a> </dt><dd>OK&#65292;&#25105;&#20204;&#27809;&#26377; <code class="filename">termios</code>&#65292;&#25152;&#20197;&#35753;&#25105;&#20204;&#35797;&#35797; <code class="filename">msvcrt</code>&#65292;&#23427;&#26159; Windows &#29420;&#26377;&#30340;&#19968;&#20010;&#27169;&#22359;&#65292;&#21487;&#20197;&#25552;&#20379;&#22312; Microsoft <span class="application">Visual C++</span> &#36816;&#34892;&#26381;&#21153;&#20013;&#30340;&#35768;&#22810;&#26377;&#29992;&#30340;&#20989;&#25968;&#30340;&#19968;&#20010;<acronym class="acronym">API</acronym>&#12290;&#22914;&#26524;&#23548;&#20837;&#22833;&#36133;&#65292;<span class="application">Python</span> &#20250;&#24341;&#21457;&#25105;&#20204;&#25429;&#25417;&#30340; <code class="errorcode">ImportError</code> &#24322;&#24120;&#12290;</dd><dt><a href="#fileinfo.exceptions.2.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#21069;&#20004;&#20010;&#19981;&#33021;&#24037;&#20316;&#65292;&#25105;&#20204;&#35797;&#30528;&#20174; <code class="filename">EasyDialogs</code> &#23548;&#20837;&#19968;&#20010;&#20989;&#25968;&#65292;&#23427;&#26159; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#29420;&#26377;&#30340;&#19968;&#20010;&#27169;&#22359;&#65292;&#25552;&#20379;&#20102;&#21508;&#31181;&#21508;&#26679;&#31867;&#22411;&#30340;&#24377;&#20986;&#23545;&#35805;&#26694;&#12290;&#20877;&#19968;&#27425;&#65292;&#22914;&#26524;&#23548;&#20837;&#22833;&#36133;&#65292;<span class="application">Python</span> &#20250;&#24341;&#21457;&#19968;&#20010;&#25105;&#20204;&#25429;&#25417;&#30340; <code class="errorcode">ImportError</code> &#24322;&#24120;&#12290;</dd><dt><a href="#fileinfo.exceptions.2.4">circled_4_delcric</a> </dt><dd>&#36825;&#20123;&#24179;&#21488;&#29305;&#23450;&#30340;&#27169;&#22359;&#27809;&#26377;&#19968;&#20010;&#26377;&#25928; (&#26377;&#21487;&#33021;&#65292;&#22240;&#20026; <span class="application">Python</span> &#24050;&#32463;&#31227;&#26893;&#21040;&#20102;&#35768;&#22810;&#19981;&#21516;&#30340;&#24179;&#21488;&#19978;&#20102;)&#65292;&#25152;&#20197;&#25105;&#20204;&#38656;&#35201;&#22238;&#22836;&#20351;&#29992;&#19968;&#20010;&#32570;&#30465;&#21475;&#20196;&#36755;&#20837;&#20989;&#25968; (&#36825;&#20010;&#20989;&#25968;&#23450;&#20041;&#22312; <code class="filename">getpass</code> &#27169;&#22359;&#20013;&#30340;&#21035;&#30340;&#22320;&#26041;)&#12290;&#27880;&#24847;&#25105;&#20204;&#22312;&#36825;&#37324;&#25152;&#20570;&#30340;&#65306;&#25105;&#20204;&#23558;&#20989;&#25968; <code class="function">default_getpass</code> &#36171;&#32473;&#21464;&#37327; <code class="varname">getpass</code>&#12290;&#22914;&#26524;&#20320;&#35835;&#20102;&#23448;&#26041; <code class="filename">getpass</code> &#25991;&#26723;&#65292;&#23427;&#20250;&#21578;&#35785;&#20320; <code class="filename">getpass</code> &#27169;&#22359;&#23450;&#20041;&#20102;&#19968;&#20010; <code class="function">getpass</code> &#20989;&#25968;&#12290;&#23427;&#26159;&#36825;&#26679;&#20570;&#30340;&#65306;&#36890;&#36807;&#32465;&#23450; <code class="varname">getpass</code> &#21040;&#27491;&#30830;&#30340;&#20989;&#25968;&#26469;&#36866;&#24212;&#20320;&#30340;&#24179;&#21488;&#12290;&#28982;&#21518;&#24403;&#20320;&#35843;&#29992; <code class="function">getpass</code> &#20989;&#25968;&#26102;&#65292;&#20320;&#23454;&#38469;&#19978;&#35843;&#29992;&#20102;&#24179;&#21488;&#29305;&#23450;&#30340;&#20989;&#25968;&#65292;&#26159;&#36825;&#27573;&#20195;&#30721;&#24050;&#32463;&#20026;&#20320;&#35774;&#32622;&#22909;&#30340;&#12290;&#20320;&#19981;&#38656;&#35201;&#30693;&#36947;&#25110;&#20851;&#24515;&#20320;&#30340;&#20195;&#30721;&#27491;&#36816;&#34892;&#22312;&#20309;&#31181;&#24179;&#21488;&#19978;&#65307;&#21482;&#35201;&#35843;&#29992; <code class="function">getpass</code>&#65292;&#21017;&#23427;&#24635;&#33021;&#27491;&#30830;&#22788;&#29702;&#12290;</dd><dt><a href="#fileinfo.exceptions.2.5">circled_5_delcric</a> </dt><dd>&#19968;&#20010; <code class="literal">try...except</code> &#22359;&#21487;&#20197;&#26377;&#19968;&#26465; <code class="literal">else</code> &#23376;&#21477;&#65292;&#23601;&#20687; <code class="literal">if</code> &#35821;&#21477;&#12290;&#22914;&#26524;&#22312; <code class="literal">try</code> &#22359;&#20013;&#27809;&#26377;&#24322;&#24120;&#24341;&#21457;&#65292;&#28982;&#21518; <code class="literal">else</code> &#23376;&#21477;&#34987;&#25191;&#34892;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#37027;&#23601;&#24847;&#21619;&#30528;&#22914;&#26524; <code class="literal">from EasyDialogs import AskPassword</code> &#23548;&#20837;&#21487;&#24037;&#20316;&#65292;&#25152;&#20197;&#25105;&#20204;&#24212;&#35813;&#32465;&#23450; <code class="varname">getpass</code> &#21040; <code class="function">AskPassword</code> &#20989;&#25968;&#12290;&#20854;&#23427;&#27599;&#20010; <code class="literal">try...except</code> &#22359;&#26377;&#30528;&#30456;&#20284;&#30340; <code class="literal">else</code> &#23376;&#21477;&#65292;&#24403;&#25105;&#20204;&#21457;&#29616;&#19968;&#20010; <code class="literal">import</code> &#21487;&#29992;&#26102;&#65292;&#23601;&#32465;&#23450; <code class="varname">getpass</code> &#21040;&#36866;&#21512;&#30340;&#20989;&#25968;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#24322;&#24120;&#65292;&#21253;&#25324;&#23450;&#20041;&#21644;&#24341;&#21457;&#20320;&#33258;&#24050;&#30340;&#24322;&#24120;&#65292;&#20197;&#21450;&#19968;&#27425;&#22788;&#29702;&#22810;&#20010;&#24322;&#24120; (<a href="http://www.python.org/doc/current/tut/node10.html#SECTION0010400000000000000000">http://www.python.org/doc/current/tut/node10.html#SECTION0010400000000000000000</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#20869;&#32622;&#24322;&#24120; (<a href="http://www.python.org/doc/current/lib/module-exceptions.html">http://www.python.org/doc/current/lib/module-exceptions.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; getpass (<a href="http://www.python.org/doc/current/lib/module-getpass.html">http://www.python.org/doc/current/lib/module-getpass.html</a>) &#27169;&#22359;&#30340;&#25991;&#26723;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">traceback</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-traceback.html">http://www.python.org/doc/current/lib/module-traceback.html</a>) &#30340;&#25991;&#26723;&#65292;&#36825;&#20010;&#27169;&#22359;&#22312;&#24322;&#24120;&#24341;&#21457;&#20043;&#21518;&#65292;&#25552;&#20379;&#20102;&#24213;&#23618;&#30340;&#23545;&#24322;&#24120;&#23646;&#24615;&#30340;&#22788;&#29702;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#35752;&#35770;&#20102; <code class="literal">try...except</code> &#22359; (<a href="http://www.python.org/doc/current/ref/try.html">http://www.python.org/doc/current/ref/try.html</a>) &#30340;&#20869;&#37096;&#24037;&#20316;&#26041;&#24335;&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.files"></a>6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#26377;&#19968;&#20010;&#20869;&#32622;&#20989;&#25968;&#65292;<code class="function">open</code>&#65292;&#29992;&#26469;&#25171;&#24320;&#22312;&#30913;&#30424;&#19978;&#30340;&#25991;&#20214;&#12290;<code class="function">open</code> &#36820;&#22238;&#19968;&#20010;&#25991;&#20214;&#23545;&#35937;&#65292;&#23427;&#25317;&#26377;&#19968;&#20123;&#26041;&#27861;&#21644;&#23646;&#24615;&#65292;&#21487;&#20197;&#24471;&#21040;&#34987;&#25171;&#24320;&#25991;&#20214;&#30340;&#20449;&#24687;&#65292;&#20197;&#21450;&#23545;&#34987;&#25171;&#24320;&#25991;&#20214;&#36827;&#34892;&#25805;&#20316;&#12290;</p></div><div class="example"><a name="d0e14796"></a><p class="title"><b>&#20363;&nbsp;6.3.&nbsp;&#25171;&#24320;&#25991;&#20214;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = open("/music/_singles/kairo.mp3", "rb")</span> <a name="fileinfo.files.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>                                           <a name="fileinfo.files.1.2"></a>circled_2_delcric
<font color="teal">&lt;open file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.mode</span>                                      <a name="fileinfo.files.1.3"></a>circled_3_delcric
<font color="teal">'rb'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.name</span>                                      <a name="fileinfo.files.1.4"></a>circled_4_delcric
<font color="teal">'/music/_singles/kairo.mp3'</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.files.1.1">circled_1_delcric</a> </dt><dd><code class="function">open</code> &#26041;&#27861;&#21487;&#20197;&#25509;&#25910;&#19977;&#20010;&#21442;&#25968;&#65306;&#25991;&#20214;&#21517;&#12289;&#27169;&#24335;&#21644;&#32531;&#20914;&#21306;&#21442;&#25968;&#12290;&#21482;&#26377;&#31532;&#19968;&#20010;&#21442;&#25968; (&#25991;&#20214;&#21517;) &#26159;&#24517;&#39035;&#30340;&#65307;&#20854;&#23427;&#20004;&#20010;&#26159;<a class="link" href="#apihelper.optional" title="4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;">&#21487;&#36873;&#30340;</a>&#12290;&#22914;&#26524;&#27809;&#26377;&#25351;&#23450;&#65292;&#25991;&#20214;&#20197;&#25991;&#26412;&#26041;&#24335;&#25171;&#24320;&#12290;&#36825;&#37324;&#25105;&#20204;&#20197;&#20108;&#36827;&#21046;&#26041;&#24335;&#25171;&#24320;&#25991;&#20214;&#36827;&#34892;&#35835;&#21462;&#12290;(<code class="literal">print open.__doc__</code> &#20250;&#32473;&#20986;&#25152;&#26377;&#21487;&#33021;&#27169;&#24335;&#30340;&#24456;&#22909;&#30340;&#35299;&#37322;&#12290;)</dd><dt><a href="#fileinfo.files.1.2">circled_2_delcric</a> </dt><dd><code class="function">open</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#23545;&#35937; (&#21040;&#29616;&#22312;&#20026;&#27490;&#65292;<a class="link" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#36825;&#19968;&#28857;&#24212;&#35813;&#19981;&#20250;&#20351;&#20320;&#24863;&#21040;&#21507;&#24778;</a>)&#12290;&#19968;&#20010;&#25991;&#20214;&#23545;&#35937;&#26377;&#20960;&#20010;&#26377;&#29992;&#30340;&#23646;&#24615;&#12290;</dd><dt><a href="#fileinfo.files.1.3">circled_3_delcric</a> </dt><dd>&#25991;&#20214;&#23545;&#35937;&#30340; <code class="varname">mode</code> &#23646;&#24615;&#21578;&#35785;&#20320;&#25991;&#20214;&#20197;&#20309;&#31181;&#27169;&#24335;&#34987;&#25171;&#24320;&#12290;</dd><dt><a href="#fileinfo.files.1.4">circled_4_delcric</a> </dt><dd>&#25991;&#20214;&#23545;&#35937;&#30340; <code class="varname">name</code> &#23646;&#24615;&#21578;&#35785;&#20320;&#25991;&#20214;&#23545;&#35937;&#25152;&#25171;&#24320;&#30340;&#25991;&#20214;&#21517;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e14868"></a>6.2.1.&nbsp;&#35835;&#21462;&#25991;&#20214;</h3></div></div></div><p>&#20320;&#25171;&#24320;&#25991;&#20214;&#20043;&#21518;&#65292;&#20320;&#35201;&#20570;&#30340;&#31532;&#19968;&#20214;&#20107;&#26159;&#20174;&#20013;&#35835;&#21462;&#65292;&#27491;&#22914;&#19979;&#19968;&#20010;&#20363;&#23376;&#25152;&#23637;&#31034;&#30340;&#12290;</p><div class="example"><a name="d0e14873"></a><p class="title"><b>&#20363;&nbsp;6.4.&nbsp;&#35835;&#21462;&#25991;&#20214;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>
<font color="teal">&lt;open file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.tell()</span>              <a name="fileinfo.files.2.1"></a>circled_1_delcric
<font color="teal">0</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.seek(-128, 2)</span>       <a name="fileinfo.files.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.tell()</span>              <a name="fileinfo.files.2.3"></a>circled_3_delcric
<font color="teal">7542909</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">tagData = f.read(128)</span> <a name="fileinfo.files.2.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">tagData</span>
<font color="teal">'TAGKAIRO****THE BEST GOA         ***DJ MARY-JANE***            
Rave Mix                      2000http://mp3.com/DJMARYJANE     \037'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.tell()</span>              <a name="fileinfo.files.2.5"></a>circled_5_delcric
<font color="teal">7543037</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.files.2.1">circled_1_delcric</a> </dt><dd>&#19968;&#20010;&#25991;&#20214;&#23545;&#35937;&#32500;&#25252;&#23427;&#25152;&#25171;&#24320;&#25991;&#20214;&#30340;&#29366;&#24577;&#12290;&#25991;&#20214;&#23545;&#35937;&#30340; <code class="function">tell</code> &#26041;&#27861;&#21578;&#35785;&#20320;&#22312;&#34987;&#25171;&#24320;&#25991;&#20214;&#20013;&#30340;&#24403;&#21069;&#20301;&#32622;&#12290;&#22240;&#20026;&#25105;&#20204;&#36824;&#27809;&#26377;&#23545;&#36825;&#20010;&#25991;&#20214;&#20570;&#20219;&#20309;&#20107;&#65292;&#24403;&#21069;&#20301;&#32622;&#20026; <code class="constant">0</code>&#65292;&#23427;&#26159;&#25991;&#20214;&#30340;&#36215;&#22987;&#22788;&#12290;</dd><dt><a href="#fileinfo.files.2.2">circled_2_delcric</a> </dt><dd>&#25991;&#20214;&#23545;&#35937;&#30340; <code class="function">seek</code> &#26041;&#27861;&#22312;&#34987;&#25171;&#24320;&#25991;&#20214;&#20013;&#31227;&#21160;&#21040;&#21478;&#19968;&#20010;&#20301;&#32622;&#12290;&#31532;&#20108;&#20010;&#21442;&#25968;&#25351;&#20986;&#31532;&#19968;&#20010;&#21442;&#25968;&#26159;&#20160;&#20040;&#24847;&#24605;&#65306;<code class="constant">0</code> &#34920;&#31034;&#31227;&#21160;&#21040;&#19968;&#20010;&#32477;&#23545;&#20301;&#32622; (&#20174;&#25991;&#20214;&#36215;&#22987;&#22788;&#31639;&#36215;)&#65292;<code class="constant">1</code> &#34920;&#31034;&#31227;&#21040;&#19968;&#20010;&#30456;&#23545;&#20301;&#32622; (&#20174;&#24403;&#21069;&#20301;&#32622;&#31639;&#36215;)&#65292;&#36824;&#26377; <code class="literal">2</code> &#34920;&#31034;&#30456;&#23545;&#20110;&#25991;&#20214;&#23614;&#30340;&#20301;&#32622;&#12290;&#22240;&#20026;&#25105;&#20204;&#25628;&#32034;&#30340; <abbr class="abbrev">MP3</abbr> &#26631;&#35760;&#20445;&#23384;&#22312;&#25991;&#20214;&#30340;&#26411;&#23614;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="literal">2</code> &#24182;&#19988;&#21578;&#35785;&#25991;&#20214;&#23545;&#35937;&#20174;&#25991;&#20214;&#23614;&#31227;&#21160;&#21040; <code class="literal">128</code> &#23383;&#33410;&#30340;&#20301;&#32622;&#12290;</dd><dt><a href="#fileinfo.files.2.3">circled_3_delcric</a> </dt><dd><code class="function">tell</code> &#26041;&#27861;&#30830;&#35748;&#20102;&#24403;&#21069;&#20301;&#32622;&#24050;&#32463;&#31227;&#21160;&#20102;&#12290;</dd><dt><a href="#fileinfo.files.2.4">circled_4_delcric</a> </dt><dd><code class="function">read</code> &#26041;&#27861;&#20174;&#34987;&#25171;&#24320;&#25991;&#20214;&#20013;&#35835;&#21462;&#25351;&#23450;&#20010;&#25968;&#30340;&#23383;&#33410;&#65292;&#24182;&#19988;&#36820;&#22238;&#21547;&#26377;&#35835;&#21462;&#25968;&#25454;&#30340;&#23383;&#31526;&#20018;&#12290;&#21487;&#36873;&#21442;&#25968;&#25351;&#23450;&#20102;&#35835;&#21462;&#30340;&#26368;&#22823;&#23383;&#33410;&#25968;&#12290;&#22914;&#26524;&#27809;&#26377;&#25351;&#23450;&#21442;&#25968;&#65292;<code class="function">read</code> &#23558;&#35835;&#21040;&#25991;&#20214;&#26411;&#23614;&#12290;(&#25105;&#20204;&#26412;&#21487;&#20197;&#22312;&#36825;&#37324;&#31616;&#21333;&#22320;&#35828; <code class="literal">read()</code> &#65292;&#22240;&#20026;&#25105;&#20204;&#30830;&#20999;&#22320;&#30693;&#36947;&#22312;&#25991;&#20214;&#30340;&#20309;&#22788;&#65292;&#20107;&#23454;&#19978;&#65292;&#25105;&#20204;&#35835;&#30340;&#26159;&#26368;&#21518; 128 &#20010;&#23383;&#33410;&#12290;) &#35835;&#20986;&#30340;&#25968;&#25454;&#36171;&#32473;&#21464;&#37327; <code class="varname">tagData</code>&#65292;&#24182;&#19988;&#24403;&#21069;&#30340;&#20301;&#32622;&#26681;&#25454;&#25152;&#35835;&#30340;&#23383;&#33410;&#25968;&#20316;&#20102;&#20462;&#25913;&#12290;</dd><dt><a href="#fileinfo.files.2.5">circled_5_delcric</a> </dt><dd><code class="function">tell</code> &#26041;&#27861;&#30830;&#35748;&#20102;&#24403;&#21069;&#20301;&#32622;&#24050;&#32463;&#31227;&#21160;&#20102;&#12290;&#22914;&#26524;&#20570;&#19968;&#19979;&#31639;&#26415;&#65292;&#20320;&#20250;&#30475;&#21040;&#22312;&#35835;&#20102; 128 &#20010;&#23383;&#33410;&#20043;&#21518;&#65292;&#20301;&#32622;&#25968;&#24050;&#32463;&#22686;&#21152;&#20102; 128&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e14995"></a>6.2.2.&nbsp;&#20851;&#38381;&#25991;&#20214;</h3></div></div></div><p>&#25171;&#24320;&#25991;&#20214;&#28040;&#32791;&#31995;&#32479;&#36164;&#28304;&#65292;&#24182;&#19988;&#20854;&#38388;&#20854;&#23427;&#31243;&#24207;&#21487;&#33021;&#26080;&#27861;&#35775;&#38382;&#23427;&#20204; (&#21462;&#20915;&#20110;&#25991;&#20214;&#27169;&#24335;)&#12290;&#36825;&#23601;&#26159;&#19968;&#26086;&#25805;&#20316;&#23436;&#27605;&#23601;&#35813;&#20851;&#38381;&#25991;&#20214;&#30340;&#37325;&#35201;&#25152;&#22312;&#12290;</p><div class="example"><a name="d0e15000"></a><p class="title"><b>&#20363;&nbsp;6.5.&nbsp;&#20851;&#38381;&#25991;&#20214;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>
<font color="teal">&lt;open file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.closed</span>       <a name="fileinfo.files.3.1"></a>circled_1_delcric
<font color="teal">False</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.close()</span>      <a name="fileinfo.files.3.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f</span>
<font color="teal">&lt;closed file '/music/_singles/kairo.mp3', mode 'rb' at 010E3988&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.closed</span>       <a name="fileinfo.files.3.3"></a>circled_3_delcric
<font color="teal">True</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.seek(0)</span>      <a name="fileinfo.files.3.4"></a>circled_4_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
ValueError: I/O operation on closed file</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.tell()</span>
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
ValueError: I/O operation on closed file</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.read()</span>
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
ValueError: I/O operation on closed file</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.close()</span>      <a name="fileinfo.files.3.5"></a>circled_5_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.files.3.1">circled_1_delcric</a> </dt><dd>&#25991;&#20214;&#23545;&#35937;&#30340; <code class="varname">closed</code> &#23646;&#24615;&#34920;&#31034;&#23545;&#35937;&#26159;&#25171;&#24320;&#36824;&#26159;&#20851;&#38381;&#20102;&#25991;&#20214;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#25991;&#20214;&#20173;&#28982;&#25171;&#24320;&#30528; (<code class="varname">closed</code> &#26159; <code class="constant">False</code>)&#12290;</dd><dt><a href="#fileinfo.files.3.2">circled_2_delcric</a> </dt><dd>&#20026;&#20102;&#20851;&#38381;&#25991;&#20214;&#65292;&#35843;&#29992;&#25991;&#20214;&#23545;&#35937;&#30340; <code class="function">close</code> &#26041;&#27861;&#12290;&#36825;&#26679;&#23601;&#37322;&#25918;&#25481;&#20320;&#21152;&#22312;&#25991;&#20214;&#19978;&#30340;&#38145; (&#22914;&#26524;&#26377;&#30340;&#35805;)&#65292;&#21047;&#26032;&#34987;&#32531;&#20914;&#30340;&#31995;&#32479;&#36824;&#26410;&#20889;&#20837;&#30340;&#36755;&#20986; (&#22914;&#26524;&#26377;&#30340;&#35805;)&#65292;&#24182;&#19988;&#37322;&#25918;&#31995;&#32479;&#36164;&#28304;&#12290;</dd><dt><a href="#fileinfo.files.3.3">circled_3_delcric</a> </dt><dd><code class="varname">closed</code> &#23646;&#24615;&#35777;&#23454;&#20102;&#25991;&#20214;&#34987;&#20851;&#38381;&#20102;&#12290;</dd><dt><a href="#fileinfo.files.3.4">circled_4_delcric</a> </dt><dd>&#25991;&#20214;&#34987;&#20851;&#38381;&#20102;&#65292;&#20294;&#36825;&#24182;&#19981;&#24847;&#21619;&#30528;&#25991;&#20214;&#23545;&#35937;&#19981;&#20877;&#23384;&#22312;&#12290;&#21464;&#37327; <code class="varname">f</code> &#23558;&#32487;&#32493;&#23384;&#22312;&#65292;&#30452;&#21040;&#23427;<a class="link" href="#fileinfo.scope" title="&#20363;&nbsp;5.8.&nbsp;&#23581;&#35797;&#23454;&#29616;&#20869;&#23384;&#27844;&#28431;">&#36229;&#20986;&#20316;&#29992;&#22495;</a>&#25110;&#34987;&#25163;&#24037;&#21024;&#38500;&#12290;&#28982;&#32780;&#65292;&#19968;&#26086;&#25991;&#20214;&#34987;&#20851;&#38381;&#65292;&#25805;&#20316;&#23427;&#30340;&#26041;&#27861;&#23601;&#27809;&#26377;&#19968;&#20010;&#33021;&#20351;&#29992;&#65307;&#23427;&#20204;&#37117;&#20250;&#24341;&#21457;&#24322;&#24120;&#12290;</dd><dt><a href="#fileinfo.files.3.5">circled_5_delcric</a> </dt><dd>&#23545;&#19968;&#20010;&#25991;&#20214;&#24050;&#32463;&#20851;&#38381;&#30340;&#25991;&#20214;&#23545;&#35937;&#35843;&#29992; <code class="function">close</code> <span class="emphasis"><em>&#19981;&#20250;</em></span> &#24341;&#21457;&#24322;&#24120;&#65292;&#23427;&#38745;&#38745;&#22320;&#22833;&#36133;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e15122"></a>6.2.3.&nbsp;&#22788;&#29702; <acronym class="acronym">I/O</acronym> &#38169;&#35823;</h3></div></div></div><p>&#29616;&#22312;&#20320;&#24050;&#32463;&#36275;&#33021;&#29702;&#35299;&#21069;&#19968;&#31456;&#30340;&#20363;&#23376;&#31243;&#24207; <code class="filename">fileinfo.py</code> &#30340;&#25991;&#20214;&#22788;&#29702;&#20195;&#30721;&#20102;&#12290;&#19979;&#38754;&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#20102;&#22914;&#20309;&#23433;&#20840;&#22320;&#25171;&#24320;&#25991;&#20214;&#21644;&#35835;&#21462;&#25991;&#20214;&#65292;&#20197;&#21450;&#20248;&#32654;&#22320;&#22788;&#29702;&#38169;&#35823;&#12290;</p><div class="example"><a name="fileinfo.files.incode"></a><p class="title"><b>&#20363;&nbsp;6.6.&nbsp;<code class="classname">MP3FileInfo</code> &#20013;&#30340;&#25991;&#20214;&#23545;&#35937;</b></p><div class="example-contents"><pre class="programlisting">
        try:                                <a name="fileinfo.files.4.1"></a>circled_1_delcric
            fsock = open(filename, "rb", 0) <a name="fileinfo.files.4.2"></a>circled_2_delcric
            try:                           
                fsock.seek(-128, 2)         <a name="fileinfo.files.4.3"></a>circled_3_delcric
                tagdata = fsock.read(128)   <a name="fileinfo.files.4.4"></a>circled_4_delcric
            finally:                        <a name="fileinfo.files.4.5"></a>circled_5_delcric
                fsock.close()              
            .
            .
            .
        except IOError:                     <a name="fileinfo.files.4.6"></a>circled_6_delcric
            pass                           </pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.files.4.1">circled_1_delcric</a> </dt><dd>&#22240;&#20026;&#25171;&#24320;&#21644;&#35835;&#21462;&#25991;&#20214;&#26377;&#39118;&#38505;&#65292;&#24182;&#19988;&#21487;&#33021;&#24341;&#21457;&#24322;&#24120;&#65292;&#25152;&#26377;&#36825;&#20123;&#20195;&#30721;&#37117;&#29992;&#19968;&#20010; <code class="literal">try...except</code> &#22359;&#23553;&#35013;&#12290;(&#22079;&#65292;<a class="link" href="#odbchelper.indenting" title="2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;">&#26631;&#20934;&#21270;&#30340;&#32553;&#36817;</a>&#19981;&#22909;&#21527;&#65311;&#36825;&#23601;&#26159;&#20320;&#24320;&#22987;&#27427;&#36175;&#23427;&#30340;&#22320;&#26041;&#12290;)</dd><dt><a href="#fileinfo.files.4.2">circled_2_delcric</a> </dt><dd><code class="function">open</code> &#20989;&#25968;&#21487;&#33021;&#24341;&#21457; <code class="errorcode">IOError</code> &#24322;&#24120;&#12290;(&#21487;&#33021;&#26159;&#25991;&#20214;&#19981;&#23384;&#22312;&#12290;)</dd><dt><a href="#fileinfo.files.4.3">circled_3_delcric</a> </dt><dd><code class="function">seek</code> &#26041;&#27861;&#21487;&#33021;&#24341;&#21457; <code class="errorcode">IOError</code> &#24322;&#24120;&#12290;(&#21487;&#33021;&#26159;&#25991;&#20214;&#38271;&#24230;&#23567;&#20110; 128 &#23383;&#33410;&#12290;)</dd><dt><a href="#fileinfo.files.4.4">circled_4_delcric</a> </dt><dd><code class="function">read</code> &#26041;&#27861;&#21487;&#33021;&#24341;&#21457; <code class="errorcode">IOError</code> &#24322;&#24120;&#12290;(&#21487;&#33021;&#30913;&#30424;&#26377;&#22351;&#25159;&#21306;&#65292;&#25110;&#23427;&#22312;&#19968;&#20010;&#32593;&#32476;&#39537;&#21160;&#22120;&#19978;&#65292;&#32780;&#32593;&#32476;&#21018;&#22909;&#26029;&#20102;&#12290;)</dd><dt><a href="#fileinfo.files.4.5">circled_5_delcric</a> </dt><dd>&#36825;&#26159;&#26032;&#30340;&#65306;&#19968;&#20010; <code class="literal">try...finally</code> &#22359;&#12290;&#19968;&#26086;&#25991;&#20214;&#36890;&#36807; <code class="function">open</code> &#20989;&#25968;&#34987;&#25104;&#21151;&#22320;&#25171;&#24320;&#65292;&#25105;&#20204;&#24212;&#35813;&#32477;&#23545;&#20445;&#35777;&#25226;&#23427;&#20851;&#38381;&#65292;&#21363;&#20351;&#26159;&#22312; <code class="function">seek</code> &#25110; <code class="function">read</code> &#26041;&#27861;&#24341;&#21457;&#20102;&#19968;&#20010;&#24322;&#24120;&#26102;&#12290;<code class="literal">try...finally</code> &#22359;&#21487;&#20197;&#29992;&#26469;&#65306;&#22312; <code class="literal">finally</code> &#22359;&#20013;&#30340;&#20195;&#30721;&#23558;<span class="emphasis"><em>&#24635;&#26159;</em></span> &#34987;&#25191;&#34892;&#65292;&#29978;&#33267;&#26576;&#20123;&#19996;&#35199;&#22312; <code class="literal">try</code> &#22359;&#20013;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#20063;&#20250;&#25191;&#34892;&#12290;&#21487;&#20197;&#36825;&#26679;&#32771;&#34385;&#65292;&#19981;&#31649;&#22312;&#36335;&#19978;&#21457;&#29983;&#20160;&#20040;&#65292;&#20195;&#30721;&#37117;&#20250;&#34987; &#8220;&#21363;&#23558;&#28781;&#20129;&#8221; &#22320;&#25191;&#34892;&#12290;</dd><dt><a href="#fileinfo.files.4.6">circled_6_delcric</a> </dt><dd>&#26368;&#21518;&#65292;&#22788;&#29702;&#25105;&#20204;&#30340; <code class="errorcode">IOError</code> &#24322;&#24120;&#12290;&#23427;&#21487;&#33021;&#26159;&#30001;&#35843;&#29992; <code class="function">open</code>&#12289;<code class="function">seek</code> &#25110; <code class="function">read</code> &#24341;&#21457;&#30340; <code class="errorcode">IOError</code> &#24322;&#24120;&#12290;&#36825;&#37324;&#65292;&#25105;&#20204;&#20854;&#23454;&#19981;&#29992;&#20851;&#24515;&#65292;&#22240;&#20026;&#23558;&#35201;&#20570;&#30340;&#20107;&#23601;&#26159;&#38745;&#38745;&#22320;&#24573;&#30053;&#23427;&#28982;&#21518;&#32487;&#32493;&#12290;(&#35760;&#20303;&#65292;<code class="literal">pass</code> &#26159;&#19968;&#26465;&#19981;&#20570;&#20219;&#20309;&#20107;&#30340; <span class="application">Python</span> &#35821;&#21477;&#12290;) &#36825;&#26679;&#23436;&#20840;&#21512;&#27861;&#65292;"<span class="quote">&#22788;&#29702;</span>" &#19968;&#20010;&#24322;&#24120;&#21487;&#20197;&#26126;&#30830;&#34920;&#31034;&#19981;&#20570;&#20219;&#20309;&#20107;&#12290;&#23427;&#20173;&#28982;&#34987;&#35748;&#20026;&#22788;&#29702;&#36807;&#20102;&#65292;&#24182;&#19988;&#22788;&#29702;&#23558;&#27491;&#24120;&#32487;&#32493;&#65292;&#20174; <code class="literal">try...except</code> &#22359;&#30340;&#19979;&#19968;&#34892;&#20195;&#30721;&#24320;&#22987;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e15243"></a>6.2.4.&nbsp;&#20889;&#20837;&#25991;&#20214;</h3></div></div></div><p>&#27491;&#22914;&#20320;&#25152;&#26399;&#24453;&#30340;&#65292;&#20320;&#20063;&#33021;&#29992;&#19982;&#35835;&#21462;&#25991;&#20214;&#21516;&#26679;&#30340;&#26041;&#24335;&#20889;&#20837;&#25991;&#20214;&#12290;&#26377;&#20004;&#31181;&#22522;&#26412;&#30340;&#25991;&#20214;&#27169;&#24335;&#65306;</p><div class="itemizedlist"><ul><li>&#36861;&#21152; (Append) &#27169;&#24335;&#23558;&#25968;&#25454;&#36861;&#21152;&#21040;&#25991;&#20214;&#23614;&#12290;</li><li>&#20889;&#20837; (write) &#27169;&#24335;&#23558;&#35206;&#30422;&#25991;&#20214;&#30340;&#21407;&#26377;&#20869;&#23481;&#12290;</li></ul></div><p>&#22914;&#26524;&#25991;&#20214;&#36824;&#19981;&#23384;&#22312;&#65292;&#20219;&#24847;&#19968;&#31181;&#27169;&#24335;&#37117;&#23558;&#33258;&#21160;&#21019;&#24314;&#25991;&#20214;&#65292;&#22240;&#27492;&#20174;&#26469;&#19981;&#38656;&#35201;&#20219;&#20309;&#22797;&#26434;&#30340;&#36923;&#36753;&#65306;&#8220;&#22914;&#26524; log &#25991;&#20214;&#36824;&#19981;&#23384;&#22312;&#65292;&#23558;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#31354;&#25991;&#20214;&#65292;&#27491;&#22240;&#20026;&#22914;&#27492;&#65292;&#20320;&#21487;&#20197;&#31532;&#19968;&#27425;&#23601;&#25171;&#24320;&#23427;&#8221;&#12290;&#25171;&#24320;&#25991;&#20214;&#24182;&#24320;&#22987;&#20889;&#23601;&#21487;&#20197;&#20102;&#12290;</p><div class="example"><a name="fileinfo.files.writeandappend"></a><p class="title"><b>&#20363;&nbsp;6.7.&nbsp;&#20889;&#20837;&#25991;&#20214;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">logfile = open('test.log', 'w')</span> <a name="fileinfo.files.5.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">logfile.write('test succeeded')</span> <a name="fileinfo.files.5.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">logfile.close()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print file('test.log').read()</span>   <a name="fileinfo.files.5.3"></a>circled_3_delcric
<font color="teal">test succeeded</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">logfile = open('test.log', 'a')</span> <a name="fileinfo.files.5.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">logfile.write('line 2')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">logfile.close()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print file('test.log').read()</span>   <a name="fileinfo.files.5.5"></a>circled_5_delcric
<font color="teal">test succeededline 2</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.files.5.1">circled_1_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#22823;&#32966;&#22320;&#24320;&#22987;&#21019;&#24314;&#26032;&#25991;&#20214; <code class="filename">test.log</code> &#25110;&#35206;&#30422;&#29616;&#26377;&#25991;&#20214;&#65292;&#24182;&#20026;&#20889;&#20837;&#30446;&#30340;&#32780;&#25171;&#24320;&#23427;&#12290;(&#31532;&#20108;&#20010;&#21442;&#25968; <code class="literal">"w"</code> &#30340;&#24847;&#24605;&#26159;&#20026;&#25991;&#20214;&#20889;&#20837;&#32780;&#25171;&#24320;&#12290;) &#26159;&#30340;&#65292;&#23427;&#21644;&#24819;&#35937;&#20013;&#30340;&#19968;&#26679;&#21361;&#38505;&#12290;&#25105;&#24076;&#26395;&#20320;&#19981;&#35201;&#20851;&#24515;&#25991;&#20214;&#20197;&#21069;&#30340;&#20869;&#23481;&#65292;&#22240;&#20026;&#23427;&#29616;&#22312;&#24050;&#32463;&#19981;&#23384;&#22312;&#20102;&#12290;</dd><dt><a href="#fileinfo.files.5.2">circled_2_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#20351;&#29992; <code class="function">open</code> &#36820;&#22238;&#30340;&#25991;&#20214;&#23545;&#35937;&#30340; <code class="function">write</code> &#26041;&#27861;&#21521;&#19968;&#20010;&#26032;&#25171;&#24320;&#30340;&#25991;&#20214;&#28155;&#21152;&#25968;&#25454;&#12290;</dd><dt><a href="#fileinfo.files.5.3">circled_3_delcric</a> </dt><dd><code class="function">file</code> &#26159; <code class="function">open</code> &#30340;&#21516;&#20041;&#35821;&#12290;&#36825;&#19968;&#34892;&#35821;&#21477;&#25171;&#24320;&#25991;&#20214;&#65292;&#35835;&#21462;&#20869;&#23481;&#65292;&#24182;&#25171;&#21360;&#23427;&#20204;&#12290;</dd><dt><a href="#fileinfo.files.5.4">circled_4_delcric</a> </dt><dd>&#30896;&#24039;&#20320;&#30693;&#36947; <code class="filename">test.log</code> &#23384;&#22312; (&#22240;&#20026;&#20320;&#21018;&#21521;&#23427;&#20889;&#23436;&#20102;&#25968;&#25454;)&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#25171;&#24320;&#23427;&#24182;&#21521;&#20854;&#36861;&#21152;&#25968;&#25454;&#12290;(<code class="literal">"a"</code> &#21442;&#25968;&#30340;&#24847;&#24605;&#26159;&#20026;&#36861;&#21152;&#30446;&#30340;&#25171;&#24320;&#25991;&#20214;&#12290;) &#23454;&#38469;&#19978;&#21363;&#20351;&#25991;&#20214;&#19981;&#23384;&#22312;&#20320;&#20063;&#21487;&#20197;&#36825;&#26679;&#20570;&#65292;&#22240;&#20026;&#20197;&#36861;&#21152;&#26041;&#24335;&#25171;&#24320;&#19968;&#25991;&#20214;&#26102;&#65292;&#22914;&#26524;&#38656;&#35201;&#30340;&#35805;&#20250;&#21019;&#24314;&#25991;&#20214;&#12290;&#20294;&#26159;&#36861;&#21152;&#25805;&#20316;<span class="emphasis"><em>&#20174;&#19981;</em></span> &#25439;&#22351;&#25991;&#20214;&#30340;&#29616;&#26377;&#20869;&#23481;&#12290;</dd><dt><a href="#fileinfo.files.5.5">circled_5_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#25152;&#30475;&#21040;&#30340;&#65292;&#21407;&#26469;&#30340;&#34892;&#21644;&#20320;&#20197;&#36861;&#21152;&#26041;&#24335;&#20889;&#20837;&#30340;&#31532;&#20108;&#34892;&#29616;&#22312;&#37117;&#22312; <code class="filename">test.log</code> &#20013;&#20102;&#12290;&#21516;&#26102;&#27880;&#24847;&#20004;&#34892;&#20043;&#38388;&#24182;&#27809;&#21253;&#21547;&#22238;&#36710;&#31526;&#12290;&#22240;&#20026;&#20004;&#27425;&#20889;&#20837;&#25991;&#20214;&#26102;&#37117;&#27809;&#26377;&#26126;&#30830;&#22320;&#20889;&#20837;&#22238;&#36710;&#31526;&#65292;&#25152;&#20197;&#25991;&#20214;&#20013;&#27809;&#26377;&#21253;&#21547;&#22238;&#36710;&#31526;&#12290;&#20320;&#21487;&#20197;&#29992; <code class="literal">"\n"</code> &#20889;&#20837;&#22238;&#36710;&#31526;&#12290;&#22240;&#20026;&#20320;&#27809;&#20570;&#36825;&#39033;&#24037;&#20316;&#65292;&#25152;&#20197;&#20320;&#20889;&#21040;&#25991;&#20214;&#30340;&#25152;&#26377;&#20869;&#23481;&#37117;&#23558;&#26174;&#31034;&#22312;&#21516;&#19968;&#34892;&#19978;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#25991;&#20214;&#30340;&#35835;&#21462;&#21644;&#20889;&#20837;&#65292;&#21253;&#25324;&#22914;&#20309;&#23558;&#19968;&#20010;&#25991;&#20214;&#19968;&#27425;&#19968;&#34892;&#22320;&#35835;&#21040; list &#20013; (<a href="http://www.python.org/doc/current/tut/node9.html#SECTION009210000000000000000">http://www.python.org/doc/current/tut/node9.html#SECTION009210000000000000000</a>)&#12290;</li><li>eff-bot (<a href="http://www.effbot.org/guides/">http://www.effbot.org/guides/</a>) &#35752;&#35770;&#20102;&#21508;&#31181;&#21508;&#26679;&#35835;&#21462;&#25991;&#20214;&#26041;&#27861; (<a href="http://www.effbot.org/guides/readline-performance.htm">http://www.effbot.org/guides/readline-performance.htm</a>) &#30340;&#25928;&#29575;&#21644;&#24615;&#33021;&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110;&#25991;&#20214;&#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/552">http://www.faqts.com/knowledge-base/index.phtml/fid/552</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#25991;&#20214;&#23545;&#35937;&#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/bltin-file-objects.html">http://www.python.org/doc/current/lib/bltin-file-objects.html</a>)&#12290;</li></ul></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.for"></a>6.3.&nbsp;<code class="literal">for</code> &#24490;&#29615;</h2></div></div></div><div class="abstract"><p>&#19982;&#20854;&#23427;&#22823;&#22810;&#25968;&#35821;&#35328;&#19968;&#26679;&#65292;<span class="application">Python</span> &#20063;&#25317;&#26377; <code class="literal">for</code> &#24490;&#29615;&#12290;&#20320;&#21040;&#29616;&#22312;&#36824;&#26410;&#26366;&#30475;&#21040;&#23427;&#20204;&#30340;&#21807;&#19968;&#21407;&#22240;&#23601;&#26159;&#65292;<span class="application">Python</span> &#22312;&#20854;&#23427;&#22826;&#22810;&#30340;&#26041;&#38754;&#34920;&#29616;&#20986;&#33394;&#65292;&#36890;&#24120;&#20320;&#19981;&#38656;&#35201;&#23427;&#20204;&#12290;</p></div><p>&#20854;&#23427;&#22823;&#22810;&#25968;&#35821;&#35328;&#27809;&#26377;&#20687; <span class="application">Python</span> &#19968;&#26679;&#30340;&#24378;&#22823;&#30340; list &#25968;&#25454;&#31867;&#22411;&#65292;&#25152;&#20197;&#20320;&#38656;&#35201;&#20146;&#33258;&#20570;&#24456;&#22810;&#20107;&#24773;&#65292;&#25351;&#23450;&#24320;&#22987;&#65292;&#32467;&#26463;&#21644;&#27493;&#38271;&#65292;&#26469;&#23450;&#20041;&#19968;&#23450;&#33539;&#22260;&#30340;&#25972;&#25968;&#25110;&#23383;&#31526;&#25110;&#20854;&#23427;&#21487;&#37325;&#22797;&#30340;&#23454;&#20307;&#12290;&#20294;&#26159;&#22312; <span class="application">Python</span> &#20013;&#65292;<code class="literal">for</code> &#24490;&#29615;&#31616;&#21333;&#22320;&#22312;&#19968;&#20010;&#21015;&#34920;&#19978;&#24490;&#29615;&#65292;&#19982; <a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">list &#35299;&#26512;</a>&#30340;&#24037;&#20316;&#26041;&#24335;&#30456;&#21516;&#12290;</p><div class="example"><a name="d0e15442"></a><p class="title"><b>&#20363;&nbsp;6.8.&nbsp;<code class="literal">for</code> &#24490;&#29615;&#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ['a', 'b', 'e']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for s in li:</span>         <a name="fileinfo.for.1.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">print s</span>          <a name="fileinfo.for.1.2"></a>circled_2_delcric
<font color="teal">a
b
e</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "\n".join(li)</span>  <a name="fileinfo.for.1.3"></a>circled_3_delcric
<font color="teal">a
b
e</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.for.1.1">circled_1_delcric</a> </dt><dd><code class="literal">for</code> &#24490;&#29615;&#30340;&#35821;&#27861;&#21516; <a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">list &#35299;&#26512;</a>&#30456;&#20284;&#12290;<code class="varname">li</code> &#26159;&#19968;&#20010; list&#65292;&#32780; <code class="varname">s</code> &#23558;&#20174;&#31532;&#19968;&#20010;&#20803;&#32032;&#24320;&#22987;&#20381;&#27425;&#25509;&#25910;&#27599;&#20010;&#20803;&#32032;&#30340;&#20540;&#12290;</dd><dt><a href="#fileinfo.for.1.2">circled_2_delcric</a> </dt><dd>&#20687; <code class="literal">if</code> &#35821;&#21477;&#25110;&#20854;&#23427;&#20219;&#24847;<a class="link" href="#odbchelper.indenting" title="2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;">&#32553;&#36827;&#22359;</a>&#65292;<code class="literal">for</code> &#24490;&#29615;&#21487;&#20197;&#21253;&#21547;&#20219;&#24847;&#25968;&#30446;&#30340;&#20195;&#30721;&#34892;&#12290;</dd><dt><a href="#fileinfo.for.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#23601;&#26159;&#20320;&#20197;&#21069;&#27809;&#30475;&#21040;&#36807; <code class="literal">for</code> &#24490;&#29615;&#30340;&#21407;&#22240;&#65306;&#33267;&#20170;&#25105;&#20204;&#37117;&#19981;&#38656;&#35201;&#23427;&#12290;&#22826;&#20196;&#20154;&#21507;&#24778;&#20102;&#65292;&#24403;&#20320;&#24819;&#35201;&#30340;&#21482;&#26159;&#19968;&#20010; <code class="function">join</code> &#25110;&#26159; list &#35299;&#26512;&#26102;&#65292;&#22312;&#20854;&#23427;&#35821;&#35328;&#20013;&#24120;&#24120;&#38656;&#35201;&#20351;&#29992; <code class="literal">for</code> &#24490;&#29615;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#35201;&#20570;&#19968;&#20010; "<span class="quote">&#36890;&#24120;&#30340;</span>" (<span class="application">Visual Basic</span> &#26631;&#20934;&#30340;) &#35745;&#25968; <code class="literal">for</code> &#24490;&#29615;&#20063;&#38750;&#24120;&#31616;&#21333;&#12290;</p><div class="example"><a name="fileinfo.for.counter"></a><p class="title"><b>&#20363;&nbsp;6.9.&nbsp;&#31616;&#21333;&#35745;&#25968;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for i in rangecircled_5_delcric:</span>             <a name="fileinfo.for.3.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">print i</span>
<font color="teal">0
1
2
3
4</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = ['a', 'b', 'c', 'd', 'e']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for i in range(len(li)):</span>       <a name="fileinfo.for.3.2"></a>circled_2_delcric
<code class="prompt">...     </code><span class="userinput">print li[i]</span>
<font color="teal">a
b
c
d
e</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.for.3.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#odbchelper.multiassign.range" title="&#20363;&nbsp;3.20.&nbsp;&#36830;&#32493;&#20540;&#36171;&#20540;">&#20363;&nbsp;3.20 &#8220;&#36830;&#32493;&#20540;&#36171;&#20540;&#8221;</a> &#25152;&#30475;&#21040;&#30340;&#65292;<code class="function">range</code> &#29983;&#25104;&#19968;&#20010;&#25972;&#25968;&#30340; list&#65292;&#36890;&#36807;&#23427;&#26469;&#25511;&#21046;&#24490;&#29615;&#12290;&#25105;&#30693;&#36947;&#23427;&#30475;&#19978;&#21435;&#26377;&#20123;&#22855;&#24618;&#65292;&#20294;&#26159;&#23427;&#23545;&#35745;&#25968;&#24490;&#29615;&#20598;&#23572; (&#25105;&#21482;&#26159;&#35828;<span class="emphasis"><em>&#20598;&#23572;</em></span>) &#20250;&#26377;&#29992; &#12290;</dd><dt><a href="#fileinfo.for.3.2">circled_2_delcric</a> </dt><dd>&#25105;&#20204;&#20174;&#26469;&#27809;&#36825;&#20040;&#29992;&#36807;&#12290;&#36825;&#26159; <span class="application">Visual Basic</span> &#30340;&#24605;&#32500;&#39118;&#26684;&#12290;&#25670;&#33073;&#23427;&#21543;&#12290;&#27491;&#30830;&#36941;&#21382; list &#30340;&#26041;&#27861;&#26159;&#21069;&#38754;&#30340;&#20363;&#23376;&#25152;&#23637;&#31034;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="literal">for</code> &#24490;&#29615;&#19981;&#20165;&#20165;&#29992;&#20110;&#31616;&#21333;&#35745;&#25968;&#12290;&#23427;&#20204;&#21487;&#20197;&#36941;&#21382;&#20219;&#20309;&#31867;&#22411;&#30340;&#19996;&#35199;&#12290;&#19979;&#38754;&#30340;&#20363;&#23376;&#26159;&#19968;&#20010;&#29992; <code class="literal">for</code> &#24490;&#29615;&#36941;&#21382; dictionary &#30340;&#20363;&#23376;&#12290;</p><div class="example"><a name="dictionaryiter.example"></a><p class="title"><b>&#20363;&nbsp;6.10.&nbsp;&#36941;&#21382; dictionary</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import os</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for k, v in os.environ.items():</span>      <a name="fileinfo.for.2.1"></a>circled_1_delcric <a name="fileinfo.for.2.2"></a>circled_2_delcric
<code class="prompt">...     </code><span class="userinput">print "%s=%s" % (k, v)</span>
<font color="teal">USERPROFILE=C:\Documents and Settings\mpilgrim
OS=Windows_NT
COMPUTERNAME=MPILGRIM
USERNAME=mpilgrim

[...&#30053;...]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print "\n".join(["%s=%s" % (k, v)</span>
<code class="prompt">...     </code><span class="userinput">for k, v in os.environ.items()])</span> <a name="fileinfo.for.2.3"></a>circled_3_delcric
<font color="teal">USERPROFILE=C:\Documents and Settings\mpilgrim
OS=Windows_NT
COMPUTERNAME=MPILGRIM
USERNAME=mpilgrim

[...&#30053;...]</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.for.2.1">circled_1_delcric</a> </dt><dd><code class="varname">os.environ</code> &#26159;&#22312;&#20320;&#30340;&#31995;&#32479;&#19978;&#25152;&#23450;&#20041;&#30340;&#29615;&#22659;&#21464;&#37327;&#30340; dictionary&#12290;&#22312; Windows &#19979;&#65292;&#36825;&#20123;&#21464;&#37327;&#26159;&#21487;&#20197;&#20174; <acronym class="acronym">MS-DOS</acronym> &#35775;&#38382;&#30340;&#29992;&#25143;&#21644;&#31995;&#32479;&#21464;&#37327;&#12290;&#22312; <acronym class="acronym">UNIX</acronym> &#19979;&#65292;&#23427;&#20204;&#26159;&#22312;&#20320;&#30340; shell &#21551;&#21160;&#33050;&#26412;&#20013;&#25152; export (&#36755;&#20986;) &#30340;&#21464;&#37327;&#12290;&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#20013;&#65292;&#27809;&#26377;&#29615;&#22659;&#21464;&#37327;&#30340;&#27010;&#24565;&#65292;&#25152;&#20197;&#36825;&#20010; dictionary &#20026;&#31354;&#12290;</dd><dt><a href="#fileinfo.for.2.2">circled_2_delcric</a> </dt><dd><code class="literal">os.environ.items()</code> &#36820;&#22238;&#19968;&#20010; tuple &#30340; list&#65306;<code class="literal">[(<em class="replaceable">key1</em>, <em class="replaceable">value1</em>), (<em class="replaceable">key2</em>, <em class="replaceable">value2</em>), ...]</code>&#12290;<code class="literal">for</code> &#24490;&#29615;&#23545;&#36825;&#20010; list &#36827;&#34892;&#36941;&#21382;&#12290;&#31532;&#19968;&#36718;&#65292;&#23427;&#23558; <code class="literal"><em class="replaceable">key1</em></code> &#36171;&#32473; <code class="varname">k</code> &#65292;<code class="literal"><em class="replaceable">value1</em></code> &#36171;&#32473; <code class="varname">v</code>&#65292;&#25152;&#20197; <code class="varname">k</code> = <code class="literal">USERPROFILE</code>&#65292;<code class="varname">v</code> = <code class="literal">C:\Documents and Settings\mpilgrim</code>&#12290;&#31532;&#20108;&#36718;&#65292;<code class="varname">k</code> &#24471;&#21040;&#31532;&#20108;&#20010;&#38190;&#23383; <code class="literal">OS</code>&#65292;<code class="varname">v</code> &#24471;&#21040;&#30456;&#24212;&#30340;&#20540; <code class="literal">Windows_NT</code>&#12290;</dd><dt><a href="#fileinfo.for.2.3">circled_3_delcric</a> </dt><dd>&#20351;&#29992;<a class="link" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#22810;&#21464;&#37327;&#36171;&#20540;</a>&#21644; <a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">list &#35299;&#26512;</a>&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#21333;&#34892;&#35821;&#21477;&#26469;&#26367;&#25442;&#25972;&#20010; <code class="literal">for</code> &#24490;&#29615;&#12290;&#22312;&#23454;&#38469;&#30340;&#32534;&#30721;&#20013;&#26159;&#21542;&#36825;&#26679;&#20570;&#21482;&#26159;&#20010;&#20154;&#39118;&#26684;&#38382;&#39064;&#65307;&#25105;&#21916;&#27426;&#23427;&#26159;&#22240;&#20026;&#65292;&#23558;&#19968;&#20010; dictionary &#26144;&#23556;&#21040;&#19968;&#20010; list&#65292;&#28982;&#21518;&#23558; list &#21512;&#24182;&#25104;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#36825;&#19968;&#36807;&#31243;&#26174;&#24471;&#24456;&#28165;&#26224;&#12290;&#20854;&#23427;&#30340;&#31243;&#24207;&#21592;&#23425;&#24895;&#23558;&#20854;&#20889;&#25104;&#19968;&#20010; <code class="literal">for</code> &#24490;&#29615;&#12290;&#35831;&#27880;&#24847;&#22312;&#20004;&#31181;&#24773;&#20917;&#19979;&#36755;&#20986;&#26159;&#19968;&#26679;&#30340;&#65292;&#28982;&#32780;&#36825;&#19968;&#29256;&#26412;&#31245;&#24494;&#24555;&#19968;&#20123;&#65292;&#22240;&#20026;&#23427;&#21482;&#26377;&#19968;&#26465; <code class="function">print</code> &#35821;&#21477;&#32780;&#19981;&#26159;&#35768;&#22810;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#25105;&#20204;&#26469;&#30475;&#30475;&#22312; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532; 5 &#31456;</a> &#20171;&#32461;&#30340;&#26679;&#20363;&#31243;&#24207; <code class="filename">fileinfo.py</code> &#20013; <code class="classname">MP3FileInfo</code> &#30340; <code class="literal">for</code> &#24490;&#29615; &#12290;</p><div class="example"><a name="fileinfo.multiassign.for.example"></a><p class="title"><b>&#20363;&nbsp;6.11.&nbsp;<code class="classname">MP3FileInfo</code> &#20013;&#30340; <code class="literal">for</code> &#24490;&#29615;</b></p><div class="example-contents"><pre class="programlisting">
    tagDataMap = {"title"   : (  3,  33, stripnulls),
                  "artist"  : ( 33,  63, stripnulls),
                  "album"   : ( 63,  93, stripnulls),
                  "year"    : ( 93,  97, stripnulls),
                  "comment" : ( 97, 126, stripnulls),
                  "genre"   : (127, 128, ord)}                               <a name="fileinfo.multiassign.5.1"></a>circled_1_delcric
    .
    .
    .
            if tagdata[:3] == "TAG":
                for tag, (start, end, parseFunc) in self.tagDataMap.items(): <a name="fileinfo.multiassign.5.2"></a>circled_2_delcric
                    self[tag] = parseFunc(tagdata[start:end])                <a name="fileinfo.multiassign.5.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.multiassign.5.1">circled_1_delcric</a> </dt><dd><code class="varname">tagDataMap</code> &#26159;&#19968;&#20010;<a class="link" href="#fileinfo.classattributes" title="5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;">&#31867;&#23646;&#24615;</a>&#65292;&#23427;&#23450;&#20041;&#20102;&#25105;&#20204;&#27491;&#22312;&#19968;&#20010; <abbr class="abbrev">MP3</abbr> &#25991;&#20214;&#20013;&#25628;&#32034;&#30340;&#26631;&#35760;&#12290;&#26631;&#35760;&#23384;&#20648;&#20026;&#23450;&#38271;&#23383;&#27573;&#65292;&#21482;&#35201;&#25105;&#20204;&#35835;&#20986;&#25991;&#20214;&#26368;&#21518; 128 &#20010;&#23383;&#33410;&#65292;&#37027;&#20040;&#31532; 3 &#21040; 32 &#23383;&#33410;&#24635;&#26159;&#27468;&#26354;&#30340;&#21517;&#23383;&#65292;33-62 &#24635;&#26159;&#27468;&#25163;&#30340;&#21517;&#23383;&#65292;63-92 &#20026;&#19987;&#36753;&#30340;&#21517;&#23383;&#65292;&#31561;&#31561;&#12290;&#35831;&#27880;&#24847; <code class="varname">tagDataMap</code> &#26159;&#19968;&#20010; tuple &#30340; dictionary&#65292;&#27599;&#20010; tuple &#21253;&#21547;&#20004;&#20010;&#25972;&#25968;&#21644;&#19968;&#20010;&#20989;&#25968;&#24341;&#29992;&#12290;</dd><dt><a href="#fileinfo.multiassign.5.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#30475;&#19978;&#21435;&#22797;&#26434;&#19968;&#20123;&#65292;&#20294;&#20854;&#23454;&#24182;&#38750;&#22914;&#27492;&#12290;&#36825;&#37324;&#30340; <code class="literal">for</code> &#21464;&#37327;&#32467;&#26500;&#19982; <code class="function">items</code> &#25152;&#36820;&#22238;&#30340; list &#30340;&#20803;&#32032;&#30340;&#32467;&#26500;&#30456;&#21305;&#37197;&#12290;&#35760;&#20303;&#65292;<code class="function">items</code> &#36820;&#22238;&#19968;&#20010;&#24418;&#22914; <code class="literal">(<em class="replaceable">key</em>, <em class="replaceable">value</em>)</code> &#30340; tuple &#30340; list&#12290;list &#31532;&#19968;&#20010;&#20803;&#32032;&#26159; <code class="literal">("title", (3, 33, &lt;function stripnulls&gt;))</code>&#65292;&#25152;&#20197;&#24490;&#29615;&#30340;&#31532;&#19968;&#36718;&#65292;<code class="varname">tag</code> &#20026; <code class="literal">"title"</code>&#65292;<code class="varname">start</code> &#20026; <code class="literal">3</code>&#65292;<code class="varname">end</code> &#20026; <code class="literal">33</code>&#65292;<code class="varname">parseFunc</code> &#20026;&#20989;&#25968; <code class="function">stripnulls</code>&#12290;</dd><dt><a href="#fileinfo.multiassign.5.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#25105;&#20204;&#24050;&#32463;&#20174;&#19968;&#20010;&#21333;&#20010;&#30340; <abbr class="abbrev">MP3</abbr> &#26631;&#35760;&#20013;&#25552;&#21462;&#20986;&#20102;&#25152;&#26377;&#30340;&#21442;&#25968;&#65292;&#23558;&#26631;&#35760;&#25968;&#25454;&#20445;&#23384;&#36215;&#26469;&#25402;&#23481;&#26131;&#12290;&#25105;&#20204;&#20174; <code class="varname">start</code> &#21040; <code class="varname">end</code> &#23545; <code class="varname">tagdata</code> &#36827;&#34892;<a class="link" href="#odbchelper.list.slice" title="&#20363;&nbsp;3.8.&nbsp;list &#30340;&#20998;&#29255; (slice)">&#20998;&#29255;</a>&#65292;&#20174;&#32780;&#24471;&#21040;&#36825;&#20010;&#26631;&#35760;&#30340;&#23454;&#38469;&#25968;&#25454;&#65292;&#35843;&#29992; <code class="varname">parseFunc</code> &#23545;&#25968;&#25454;&#36827;&#34892;&#21518;&#32493;&#30340;&#22788;&#29702;&#65292;&#25509;&#30528;&#23558; <code class="varname">parseFunc</code> &#30340;&#36820;&#22238;&#20540;&#20316;&#20026;&#20540;&#36171;&#20540;&#32473;&#20266;&#23383;&#20856; <code class="varname">self</code> &#20013;&#30340;&#38190;&#23383; <code class="varname">tag</code>&#12290;&#22312;&#36941;&#21382;&#23436; <code class="varname">tagDataMap</code> &#20013;&#25152;&#26377;&#20803;&#32032;&#20043;&#21518;&#65292;<code class="varname">self</code> &#25317;&#26377;&#20102;&#25152;&#26377;&#26631;&#35760;&#30340;&#20540;&#65292;<a class="link" href="#fileinfo.specialmethods.setname" title="&#20363;&nbsp;5.15.&nbsp;&#35774;&#32622; MP3FileInfo &#30340; name">&#20320;&#30693;&#36947;&#30475;&#19978;&#21435;&#26159;&#20160;&#20040;&#26679;</a>&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.modules"></a>6.4.&nbsp;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code></h2></div></div></div><div class="abstract"><p>&#19982;&#20854;&#23427;&#20219;&#20309; <span class="application">Python</span> &#30340;&#19996;&#35199;&#19968;&#26679;&#65292;&#27169;&#22359;&#20063;&#26159;&#23545;&#35937;&#12290;&#21482;&#35201;&#23548;&#20837;&#20102;&#65292;&#24635;&#21487;&#20197;&#29992;&#20840;&#23616; dictionary <code class="literal"><code class="filename">sys</code>.modules</code> &#26469;&#24471;&#21040;&#19968;&#20010;&#27169;&#22359;&#30340;&#24341;&#29992;&#12290;</p></div><div class="example"><a name="d0e15882"></a><p class="title"><b>&#20363;&nbsp;6.12.&nbsp;<code class="literal"><code class="filename">sys</code>.modules</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import sys</span>                          <a name="fileinfo.modules.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print '\n'.join(sys.modules.keys())</span> <a name="fileinfo.modules.1.2"></a>circled_2_delcric
<font color="teal">win32api
os.path
os
exceptions
__main__
ntpath
nt
sys
__builtin__
site
signal
UserDict
stat</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.modules.1.1">circled_1_delcric</a> </dt><dd><code class="filename">sys</code> &#27169;&#22359;&#21253;&#21547;&#20102;&#31995;&#32479;&#32423;&#30340;&#20449;&#24687;&#65292;&#20687;&#27491;&#22312;&#36816;&#34892;&#30340; <span class="application">Python</span> &#30340;&#29256;&#26412; (<code class="literal"><code class="filename">sys</code>.version</code> &#25110; <code class="literal"><code class="filename">sys</code>.version_info</code>)&#65292;&#21644;&#31995;&#32479;&#32423;&#36873;&#39033;&#65292;&#20687;&#26368;&#22823;&#20801;&#35768;&#36882;&#24402;&#30340;&#28145;&#24230; (<code class="literal"><code class="filename">sys</code>.getrecursionlimit()</code> &#21644; <code class="literal"><code class="filename">sys</code>.setrecursionlimit()</code>)&#12290;</dd><dt><a href="#fileinfo.modules.1.2">circled_2_delcric</a> </dt><dd><code class="literal"><code class="filename">sys</code>.modules</code> &#26159;&#19968;&#20010;&#23383;&#20856;&#65292;&#23427;&#21253;&#21547;&#20102;&#20174; <span class="application">Python</span> &#24320;&#22987;&#36816;&#34892;&#36215;&#65292;&#34987;&#23548;&#20837;&#30340;&#25152;&#26377;&#27169;&#22359;&#12290;&#38190;&#23383;&#23601;&#26159;&#27169;&#22359;&#21517;&#65292;&#38190;&#20540;&#23601;&#26159;&#27169;&#22359;&#23545;&#35937;&#12290;&#35831;&#27880;&#24847;&#38500;&#20102;&#20320;&#30340;&#31243;&#24207;&#23548;&#20837;&#30340;&#27169;&#22359;&#22806;&#36824;&#26377;&#20854;&#23427;&#27169;&#22359;&#12290;<span class="application">Python</span> &#22312;&#21551;&#21160;&#26102;&#39044;&#20808;&#35013;&#20837;&#20102;&#19968;&#20123;&#27169;&#22359;&#65292;&#22914;&#26524;&#20320;&#22312;&#19968;&#20010; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#29615;&#22659;&#19979;&#65292;<code class="literal"><code class="filename">sys</code>.modules</code> &#21253;&#21547;&#20102;&#20320;&#22312; <acronym class="acronym">IDE</acronym> &#20013;&#36816;&#34892;&#30340;&#25152;&#26377;&#31243;&#24207;&#25152;&#23548;&#20837;&#30340;&#25152;&#26377;&#27169;&#22359;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#19979;&#38754;&#30340;&#20363;&#23376;&#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code>&#12290;</p><div class="example"><a name="d0e15969"></a><p class="title"><b>&#20363;&nbsp;6.13.&nbsp;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code></b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import fileinfo</span>         <a name="fileinfo.modules.1.3"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print '\n'.join(sys.modules.keys())</span>
<font color="teal">win32api
os.path
os
fileinfo
exceptions
__main__
ntpath
nt
sys
__builtin__
site
signal
UserDict
stat</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fileinfo</span>
<font color="teal">&lt;module 'fileinfo' from 'fileinfo.pyc'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys.modules["fileinfo"]</span> <a name="fileinfo.modules.1.4"></a>circled_2_delcric
<font color="teal">&lt;module 'fileinfo' from 'fileinfo.pyc'&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.modules.1.3">circled_1_delcric</a> </dt><dd>&#24403;&#23548;&#20837;&#26032;&#30340;&#27169;&#22359;&#65292;&#23427;&#20204;&#21152;&#20837;&#21040; <code class="literal"><code class="filename">sys</code>.modules</code> &#20013;&#12290;&#36825;&#23601;&#35299;&#37322;&#20102;&#20026;&#20160;&#20040;&#31532;&#20108;&#27425;&#23548;&#20837;&#30456;&#21516;&#30340;&#27169;&#22359;&#26102;&#38750;&#24120;&#30340;&#24555;&#65306;<span class="application">Python</span> &#24050;&#32463;&#22312; <code class="literal"><code class="filename">sys</code>.modules</code> &#20013;&#35013;&#20837;&#21644;&#32531;&#20914;&#20102;&#65292;&#25152;&#20197;&#31532;&#20108;&#27425;&#23548;&#20837;&#20165;&#20165;&#23545;&#23383;&#20856;&#20570;&#20102;&#19968;&#20010;&#26597;&#35810;&#12290;</dd><dt><a href="#fileinfo.modules.1.4">circled_2_delcric</a> </dt><dd>&#19968;&#26086;&#32473;&#20986;&#20219;&#20309;&#20197;&#21069;&#23548;&#20837;&#36807;&#30340;&#27169;&#22359;&#21517; (&#20197;&#23383;&#31526;&#20018;&#26041;&#24335;)&#65292;&#36890;&#36807; <code class="literal"><code class="filename">sys</code>.modules</code> &#23383;&#20856;&#65292;&#20320;&#21487;&#20197;&#24471;&#21040;&#23545;&#27169;&#22359;&#26412;&#36523;&#30340;&#19968;&#20010;&#24341;&#29992;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#19979;&#38754;&#30340;&#20363;&#23376;&#23558;&#23637;&#31034;&#36890;&#36807;&#32467;&#21512;&#20351;&#29992; <code class="literal">__module__</code> &#31867;&#23646;&#24615;&#21644; <code class="literal"><code class="filename">sys</code>.modules</code> dictionary &#26469;&#33719;&#21462;&#24050;&#30693;&#31867;&#25152;&#22312;&#30340;&#27169;&#22359;&#12290;</p><div class="example"><a name="d0e16044"></a><p class="title"><b>&#20363;&nbsp;6.14.&nbsp;<code class="literal">__module__</code> &#31867;&#23646;&#24615;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from fileinfo import MP3FileInfo</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">MP3FileInfo.__module__</span>              <a name="fileinfo.modules.2.1"></a>circled_1_delcric
<font color="teal">'fileinfo'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys.modules[MP3FileInfo.__module__]</span> <a name="fileinfo.modules.2.2"></a>circled_2_delcric
<font color="teal">&lt;module 'fileinfo' from 'fileinfo.pyc'&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.modules.2.1">circled_1_delcric</a> </dt><dd>&#27599;&#20010; <span class="application">Python</span> &#31867;&#37117;&#25317;&#26377;&#19968;&#20010;&#20869;&#32622;&#30340;<a class="link" href="#fileinfo.classattributes" title="5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;">&#31867;&#23646;&#24615;</a> <code class="literal">__module__</code>&#65292;&#23427;&#23450;&#20041;&#20102;&#36825;&#20010;&#31867;&#30340;&#27169;&#22359;&#30340;&#21517;&#23383;&#12290;</dd><dt><a href="#fileinfo.modules.2.2">circled_2_delcric</a> </dt><dd>&#23558;&#23427;&#19982; <code class="literal"><code class="filename">sys</code>.modules</code> &#23383;&#20856;&#22797;&#21512;&#20351;&#29992;&#65292;&#20320;&#21487;&#20197;&#24471;&#21040;&#23450;&#20041;&#20102;&#26576;&#20010;&#31867;&#30340;&#27169;&#22359;&#30340;&#24341;&#29992;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#20934;&#22791;&#22909;&#20102;&#65292;&#30475;&#30475;&#22312;&#26679;&#20363;&#31243;&#24207; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532; 5 &#31456;</a> <code class="literal"><code class="filename">sys</code>.modules</code> &#20171;&#32461;&#30340; <code class="filename">fileinfo.py</code> &#20013;&#26159;&#22914;&#20309;&#20351;&#29992;&#30340;&#12290;&#36825;&#20010;&#20363;&#23376;&#26174;&#31034;&#23427;&#30340;&#19968;&#37096;&#20998;&#20195;&#30721;&#12290;</p><div class="example"><a name="d0e16107"></a><p class="title"><b>&#20363;&nbsp;6.15.&nbsp;<code class="filename">fileinfo.py</code> &#20013;&#30340; <code class="literal"><code class="filename">sys</code>.modules</code></b></p><div class="example-contents"><pre class="programlisting">
    def getFileInfoClass(filename, module=sys.modules[FileInfo.__module__]):       <a name="fileinfo.modules.3.1"></a>circled_1_delcric
        "get file info class from filename extension"                             
        subclass = "%sFileInfo" % os.path.splitext(filename)[1].upper()[1:]        <a name="fileinfo.modules.3.2"></a>circled_2_delcric
        return hasattr(module, subclass) and getattr(module, subclass) or FileInfo <a name="fileinfo.modules.3.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.modules.3.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010;&#26377;&#20004;&#20010;&#21442;&#25968;&#30340;&#20989;&#25968;&#65307;<code class="varname">filename</code> &#26159;&#24517;&#39035;&#30340;&#65292;&#20294; <code class="varname">module</code> &#26159;<a class="link" href="#apihelper.optional" title="4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;">&#21487;&#36873;&#30340;</a>&#24182;&#19988; module &#30340;&#32570;&#30465;&#20540;&#21253;&#21547;&#20102; <code class="classname">FileInfo</code> &#31867;&#12290;&#36825;&#26679;&#30475;&#19978;&#21435;&#25928;&#29575;&#20302;&#65292;&#22240;&#20026;&#20320;&#21487;&#33021;&#35748;&#20026; <span class="application">Python</span> &#20250;&#22312;&#27599;&#27425;&#20989;&#25968;&#35843;&#29992;&#26102;&#35745;&#31639;&#36825;&#20010; <code class="literal"><code class="filename">sys</code>.modules</code> &#34920;&#36798;&#24335;&#12290;&#23454;&#38469;&#19978;&#65292;<span class="application">Python</span> &#20165;&#20250;&#23545;&#32570;&#30465;&#34920;&#36798;&#24335;&#35745;&#31639;&#19968;&#27425;&#65292;&#26159;&#22312;&#27169;&#22359;&#23548;&#20837;&#30340;&#31532;&#19968;&#27425;&#12290;&#27491;&#22914;&#21518;&#38754;&#25105;&#20204;&#20250;&#30475;&#21040;&#30340;&#65292;&#25105;&#20204;&#27704;&#36828;&#19981;&#20250;&#29992;&#19968;&#20010; <code class="varname">module</code> &#21442;&#25968;&#26469;&#35843;&#29992;&#36825;&#20010;&#20989;&#25968;&#65292;&#25152;&#20197; <code class="varname">module</code> &#30340;&#21151;&#33021;&#26159;&#20316;&#20026;&#19968;&#20010;&#20989;&#25968;&#32423;&#21035;&#30340;&#24120;&#37327;&#12290;</dd><dt><a href="#fileinfo.modules.3.2">circled_2_delcric</a> </dt><dd>&#25105;&#20204;&#20250;&#22312;&#21518;&#38754;&#20877;&#20180;&#32454;&#30740;&#31350;&#36825;&#19968;&#34892;&#65292;&#22312;&#25105;&#20204;&#20102;&#35299;&#20102; <code class="filename">os</code> &#27169;&#22359;&#20043;&#21518;&#12290;&#37027;&#20040;&#29616;&#22312;&#65292;&#21482;&#35201;&#30456;&#20449; <code class="varname">subclass</code> &#26368;&#32456;&#20026;&#19968;&#20010;&#31867;&#30340;&#21517;&#23383;&#23601;&#34892;&#20102;&#65292;&#20687; <code class="classname">MP3FileInfo</code>&#12290;</dd><dt><a href="#fileinfo.modules.3.3">circled_3_delcric</a> </dt><dd>&#20320;&#24050;&#32463;&#20102;&#35299;&#20102; <a class="link" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;"><code class="function">getattr</code></a>&#65292;&#23427;&#21487;&#20197;&#36890;&#36807;&#21517;&#23383;&#24471;&#21040;&#19968;&#20010;&#23545;&#35937;&#30340;&#24341;&#29992;&#12290;<code class="function">hasattr</code> &#26159;&#19968;&#20010;&#34917;&#20805;&#24615;&#30340;&#20989;&#25968;&#65292;&#29992;&#26469;&#26816;&#26597;&#19968;&#20010;&#23545;&#35937;&#26159;&#21542;&#20855;&#26377;&#19968;&#20010;&#29305;&#23450;&#30340;&#23646;&#24615;&#65307;&#22312;&#26412;&#20363;&#20013;&#65292;&#29992;&#26469;&#26816;&#26597;&#19968;&#20010;&#27169;&#22359;&#26159;&#21542;&#26377;&#19968;&#20010;&#29305;&#21035;&#30340;&#31867; (&#28982;&#32780;&#23427;&#21487;&#20197;&#29992;&#20110;&#20219;&#20309;&#31867;&#21644;&#20219;&#20309;&#23646;&#24615;&#65292;&#23601;&#20687; <code class="function">getattr</code>)&#12290;&#29992;&#33521;&#35821;&#26469;&#35828;&#65292;&#36825;&#34892;&#20195;&#30721;&#26159;&#35828;&#65292;"<span class="quote">If this module has the class named by <code class="varname">subclass</code> then return it, otherwise return the base class <code class="classname">FileInfo</code> (&#22914;&#26524;&#36825;&#20010;&#27169;&#22359;&#26377;&#19968;&#20010;&#21517;&#20026; <code class="varname">subclass</code> &#30340;&#31867;&#65292;&#37027;&#20040;&#36820;&#22238;&#23427;&#65292;&#21542;&#21017;&#36820;&#22238;&#22522;&#31867; <code class="classname">FileInfo</code>)</span>"&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#32570;&#30465;&#21442;&#25968;&#21040;&#24213;&#22312;&#20160;&#20040;&#26102;&#20505;&#21644;&#26159;&#22914;&#20309;&#35745;&#31639;&#30340; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">sys</code> (<a href="http://www.python.org/doc/current/lib/module-sys.html">http://www.python.org/doc/current/lib/module-sys.html</a>) &#27169;&#22359;&#30340;&#25991;&#26723;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.os"></a>6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;</h2></div></div></div><div class="abstract"><p><code class="filename">os.path</code> &#27169;&#22359;&#26377;&#20960;&#20010;&#25805;&#20316;&#25991;&#20214;&#21644;&#30446;&#24405;&#30340;&#20989;&#25968;&#12290;&#36825;&#37324;&#65292;&#25105;&#20204;&#30475;&#30475;&#22914;&#20309;&#25805;&#20316;&#36335;&#24452;&#21517;&#21644;&#21015;&#20986;&#19968;&#20010;&#30446;&#24405;&#30340;&#20869;&#23481;&#12290;</p></div><div class="example"><a name="fileinfo.os.path.join.example"></a><p class="title"><b>&#20363;&nbsp;6.16.&nbsp;&#26500;&#36896;&#36335;&#24452;&#21517;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import os</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.join("c:\\music\\ap\\", "mahadeva.mp3")</span> <a name="fileinfo.os.1.1"></a>circled_1_delcric <a name="fileinfo.os.1.2"></a>circled_2_delcric
<font color="teal">'c:\\music\\ap\\mahadeva.mp3'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.join("c:\\music\\ap", "mahadeva.mp3")</span>   <a name="fileinfo.os.1.3"></a>circled_3_delcric
<font color="teal">'c:\\music\\ap\\mahadeva.mp3'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.expanduser("~")</span>                         <a name="fileinfo.os.1.4"></a>circled_4_delcric
<font color="teal">'c:\\Documents and Settings\\mpilgrim\\My Documents'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.join(os.path.expanduser("~"), "Python")</span> <a name="fileinfo.os.1.5"></a>circled_5_delcric
<font color="teal">'c:\\Documents and Settings\\mpilgrim\\My Documents\\Python'</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.os.1.1">circled_1_delcric</a> </dt><dd><code class="filename">os.path</code> &#26159;&#19968;&#20010;&#27169;&#22359;&#30340;&#24341;&#29992;&#65307;&#20351;&#29992;&#21738;&#19968;&#20010;&#27169;&#22359;&#35201;&#30475;&#20320;&#27491;&#36816;&#34892;&#22312;&#21738;&#31181;&#24179;&#21488;&#19978;&#12290;&#23601;&#20687; <a class="link" href="#crossplatform.example" title="&#20363;&nbsp;6.2.&nbsp;&#25903;&#25345;&#29305;&#23450;&#24179;&#21488;&#21151;&#33021;"><code class="filename">getpass</code></a> &#36890;&#36807;&#23558; <code class="varname">getpass</code> &#35774;&#32622;&#20026;&#19968;&#20010;&#19982;&#24179;&#21488;&#30456;&#20851;&#30340;&#20989;&#25968;&#20174;&#32780;&#23553;&#35013;&#20102;&#24179;&#21488;&#20043;&#38388;&#30340;&#19981;&#21516;&#12290;<code class="filename">os</code> &#36890;&#36807;&#35774;&#32622; <code class="varname">path</code> &#23553;&#35013;&#19981;&#21516;&#30340;&#30456;&#20851;&#24179;&#21488;&#27169;&#22359;&#12290;</dd><dt><a href="#fileinfo.os.1.2">circled_2_delcric</a> </dt><dd><code class="filename">os.path</code> &#30340; <code class="function">join</code> &#20989;&#25968;&#25226;&#19968;&#20010;&#25110;&#22810;&#20010;&#37096;&#20998;&#36335;&#24452;&#21517;&#36830;&#25509;&#25104;&#19968;&#20010;&#36335;&#24452;&#21517;&#12290;&#22312;&#36825;&#20010;&#31616;&#21333;&#30340;&#20363;&#23376;&#20013;&#65292;&#23427;&#21482;&#26159;&#23558;&#23383;&#31526;&#20018;&#36827;&#34892;&#36830;&#25509;&#12290;(&#35831;&#27880;&#24847;&#22312; Windows &#19979;&#22788;&#29702;&#36335;&#24452;&#21517;&#26159;&#19968;&#20010;&#40635;&#28902;&#30340;&#20107;&#65292;&#22240;&#20026;&#21453;&#26012;&#32447;&#23383;&#31526;&#24517;&#39035;&#34987;&#36716;&#20041;&#12290;)</dd><dt><a href="#fileinfo.os.1.3">circled_3_delcric</a> </dt><dd>&#22312;&#36825;&#20010;&#20960;&#20046;&#27809;&#26377;&#20215;&#20540;&#30340;&#20363;&#23376;&#20013;&#65292;&#22312;&#23558;&#36335;&#24452;&#21517;&#21152;&#21040;&#25991;&#20214;&#21517;&#19978;&#20043;&#21069;&#65292;<code class="function">join</code> &#23558;&#22312;&#36335;&#24452;&#21517;&#21518;&#28155;&#21152;&#39069;&#22806;&#30340;&#21453;&#26012;&#32447;&#12290;&#24403;&#21457;&#29616;&#36825;&#19968;&#28857;&#26102;&#25105;&#39640;&#20852;&#26497;&#20102;&#65292;&#22240;&#20026;&#24403;&#29992;&#19968;&#31181;&#26032;&#30340;&#35821;&#35328;&#21019;&#24314;&#25105;&#33258;&#24050;&#30340;&#24037;&#20855;&#21253;&#26102;&#65292;<code class="function">addSlashIfNecessary</code> &#24635;&#26159;&#25105;&#24517;&#39035;&#35201;&#20889;&#30340;&#37027;&#20123;&#24858;&#34850;&#30340;&#23567;&#20989;&#25968;&#20043;&#19968;&#12290;&#22312; <span class="application">Python</span> &#20013;<span class="emphasis"><em>&#19981;&#35201;</em></span> &#20889;&#36825;&#26679;&#30340;&#24858;&#34850;&#30340;&#23567;&#20989;&#25968;&#65292;&#32874;&#26126;&#30340;&#20154;&#24050;&#32463;&#20026;&#20320;&#32771;&#34385;&#21040;&#20102;&#12290;</dd><dt><a href="#fileinfo.os.1.4">circled_4_delcric</a> </dt><dd><code class="function">expanduser</code> &#23558;&#23545;&#20351;&#29992; <code class="literal">~</code> &#26469;&#34920;&#31034;&#24403;&#21069;&#29992;&#25143;&#26681;&#30446;&#24405;&#30340;&#36335;&#24452;&#21517;&#36827;&#34892;&#25193;&#23637;&#12290;&#22312;&#20219;&#20309;&#24179;&#21488;&#19978;&#65292;&#21482;&#35201;&#29992;&#25143;&#25317;&#26377;&#19968;&#20010;&#26681;&#30446;&#24405;&#65292;&#23427;&#23601;&#20250;&#26377;&#25928;&#65292;&#20687; Windows&#12289;<acronym class="acronym">UNIX</acronym> &#21644; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X&#65292;&#20294;&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#19978;&#26080;&#25928;&#12290;</dd><dt><a href="#fileinfo.os.1.5">circled_5_delcric</a> </dt><dd>&#23558;&#36825;&#20123;&#25216;&#26415;&#32452;&#21512;&#22312;&#19968;&#36215;&#65292;&#20320;&#21487;&#20197;&#23481;&#26131;&#22320;&#20026;&#22312;&#29992;&#25143;&#26681;&#30446;&#24405;&#19979;&#30340;&#30446;&#24405;&#21644;&#25991;&#20214;&#26500;&#36896;&#20986;&#36335;&#24452;&#21517;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="splittingpathnames.example"></a><p class="title"><b>&#20363;&nbsp;6.17.&nbsp;&#20998;&#21106;&#36335;&#24452;&#21517;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.split("c:\\music\\ap\\mahadeva.mp3")</span>                        <a name="fileinfo.os.2.1"></a>circled_1_delcric
<font color="teal">('c:\\music\\ap', 'mahadeva.mp3')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">(filepath, filename) = os.path.split("c:\\music\\ap\\mahadeva.mp3")</span> <a name="fileinfo.os.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filepath</span>                                                            <a name="fileinfo.os.2.3"></a>circled_3_delcric
<font color="teal">'c:\\music\\ap'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filename</span>                                                            <a name="fileinfo.os.2.4"></a>circled_4_delcric
<font color="teal">'mahadeva.mp3'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">(shortname, extension) = os.path.splitext(filename)</span>                 <a name="fileinfo.os.2.5"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">shortname</span>
<font color="teal">'mahadeva'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">extension</span>
<font color="teal">'.mp3'</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.os.2.1">circled_1_delcric</a> </dt><dd><code class="function">split</code> &#20989;&#25968;&#23545;&#19968;&#20010;&#20840;&#36335;&#24452;&#21517;&#36827;&#34892;&#20998;&#21106;&#65292;&#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#36335;&#24452;&#21644;&#25991;&#20214;&#21517;&#30340; tuple&#12290;&#36824;&#35760;&#24471;&#25105;&#35828;&#36807;&#20320;&#21487;&#20197;&#20351;&#29992;<a class="link" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#22810;&#21464;&#37327;&#36171;&#20540;</a>&#20174;&#19968;&#20010;&#20989;&#25968;&#36820;&#22238;&#22810;&#20010;&#20540;&#21527;&#65311;&#23545;&#65292;<code class="function">split</code> &#23601;&#26159;&#36825;&#26679;&#19968;&#20010;&#20989;&#25968;&#12290;</dd><dt><a href="#fileinfo.os.2.2">circled_2_delcric</a> </dt><dd>&#25105;&#20204;&#23558; <code class="function">split</code> &#20989;&#25968;&#30340;&#36820;&#22238;&#20540;&#36171;&#20540;&#32473;&#19968;&#20010;&#20004;&#20010;&#21464;&#37327;&#30340; tuple&#12290;&#27599;&#20010;&#21464;&#37327;&#25509;&#25910;&#21040;&#36820;&#22238; tuple &#30456;&#23545;&#24212;&#30340;&#20803;&#32032;&#20540;&#12290;</dd><dt><a href="#fileinfo.os.2.3">circled_3_delcric</a> </dt><dd>&#31532;&#19968;&#20010;&#21464;&#37327;&#65292;<code class="varname">filepath</code>&#65292;&#25509;&#25910;&#21040;&#20174; <code class="function">split</code> &#36820;&#22238; tuple &#30340;&#31532;&#19968;&#20010;&#20803;&#32032;&#30340;&#20540;&#65292;&#25991;&#20214;&#36335;&#24452;&#12290;</dd><dt><a href="#fileinfo.os.2.4">circled_4_delcric</a> </dt><dd>&#31532;&#20108;&#20010;&#21464;&#37327;&#65292;<code class="varname">filename</code>&#65292;&#25509;&#25910;&#21040;&#20174; <code class="function">split</code> &#36820;&#22238; tuple &#30340;&#31532;&#20108;&#20010;&#20803;&#32032;&#30340;&#20540;&#65292;&#25991;&#20214;&#21517;&#12290;</dd><dt><a href="#fileinfo.os.2.5">circled_5_delcric</a> </dt><dd><code class="filename">os.path</code> &#20063;&#21253;&#21547;&#20102;&#19968;&#20010; <code class="function">splitext</code> &#20989;&#25968;&#65292;&#21487;&#20197;&#29992;&#26469;&#23545;&#25991;&#20214;&#21517;&#36827;&#34892;&#20998;&#21106;&#65292;&#24182;&#19988;&#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#20102;&#25991;&#20214;&#21517;&#21644;&#25991;&#20214;&#25193;&#23637;&#21517;&#30340; tuple&#12290;&#25105;&#20204;&#20351;&#29992;&#30456;&#21516;&#30340;&#25216;&#26415;&#26469;&#23558;&#23427;&#20204;&#36171;&#20540;&#32473;&#29420;&#31435;&#30340;&#21464;&#37327;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="fileinfo.listdir.example"></a><p class="title"><b>&#20363;&nbsp;6.18.&nbsp;&#21015;&#20986;&#30446;&#24405;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.listdir("c:\\music\\_singles\\")</span>              <a name="fileinfo.os.3.1"></a>circled_1_delcric
<font color="teal">['a_time_long_forgotten_con.mp3', 'hellraiser.mp3',
'kairo.mp3', 'long_way_home1.mp3', 'sidewinder.mp3', 
'spinning.mp3']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">dirname = "c:\\"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.listdir(dirname)</span>                              <a name="fileinfo.os.3.2"></a>circled_2_delcric
<font color="teal">['AUTOEXEC.BAT', 'boot.ini', 'CONFIG.SYS', 'cygwin',
'docbook', 'Documents and Settings', 'Incoming', 'Inetpub', 'IO.SYS',
'MSDOS.SYS', 'Music', 'NTDETECT.COM', 'ntldr', 'pagefile.sys',
'Program Files', 'Python20', 'RECYCLER',
'System Volume Information', 'TEMP', 'WINNT']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[f for f in os.listdir(dirname)</span>
<code class="prompt">...     </code><span class="userinput">if os.path.isfile(os.path.join(dirname, f))]</span> <a name="fileinfo.os.3.3"></a>circled_3_delcric
<font color="teal">['AUTOEXEC.BAT', 'boot.ini', 'CONFIG.SYS', 'IO.SYS', 'MSDOS.SYS',
'NTDETECT.COM', 'ntldr', 'pagefile.sys']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[f for f in os.listdir(dirname)</span>
<code class="prompt">...     </code><span class="userinput">if os.path.isdir(os.path.join(dirname, f))]</span>  <a name="fileinfo.os.3.4"></a>circled_4_delcric
<font color="teal">['cygwin', 'docbook', 'Documents and Settings', 'Incoming',
'Inetpub', 'Music', 'Program Files', 'Python20', 'RECYCLER',
'System Volume Information', 'TEMP', 'WINNT']</font></pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.os.3.1">circled_1_delcric</a> </dt><dd><code class="function">listdir</code> &#20989;&#25968;&#25509;&#25910;&#19968;&#20010;&#36335;&#24452;&#21517;&#65292;&#24182;&#36820;&#22238;&#37027;&#20010;&#30446;&#24405;&#30340;&#20869;&#23481;&#30340; list&#12290;</dd><dt><a href="#fileinfo.os.3.2">circled_2_delcric</a> </dt><dd><code class="function">listdir</code> &#21516;&#26102;&#36820;&#22238;&#25991;&#20214;&#21644;&#25991;&#20214;&#22841;&#65292;&#24182;&#19981;&#25351;&#20986;&#21738;&#20010;&#26159;&#25991;&#20214;&#65292;&#21738;&#20010;&#26159;&#25991;&#20214;&#22841;&#12290;</dd><dt><a href="#fileinfo.os.3.3">circled_3_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#20351;&#29992;<a class="link" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#36807;&#28388;&#21015;&#34920;</a>&#21644; <code class="filename">os.path</code> &#27169;&#22359;&#30340; <code class="function">isfile</code> &#20989;&#25968;&#65292;&#20174;&#25991;&#20214;&#22841;&#20013;&#23558;&#25991;&#20214;&#20998;&#31163;&#20986;&#26469;&#12290;<code class="function">isfile</code> &#25509;&#25910;&#19968;&#20010;&#36335;&#24452;&#21517;&#65292;&#22914;&#26524;&#36335;&#24452;&#34920;&#31034;&#19968;&#20010;&#25991;&#20214;&#65292;&#21017;&#36820;&#22238; 1&#65292;&#21542;&#21017;&#20026; 0&#12290;&#22312;&#36825;&#37324;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="literal"><code class="filename">os.path</code>.<code class="function">join</code></code> &#26469;&#30830;&#20445;&#24471;&#21040;&#19968;&#20010;&#20840;&#36335;&#24452;&#21517;&#65292;&#20294; <code class="function">isfile</code> &#23545;&#37096;&#20998;&#36335;&#24452; (&#30456;&#23545;&#20110;&#24403;&#21069;&#30446;&#24405;) &#20063;&#26159;&#26377;&#25928;&#30340;&#12290;&#20320;&#21487;&#20197;&#20351;&#29992; <code class="literal">os.getcwd()</code> &#26469;&#24471;&#21040;&#24403;&#21069;&#30446;&#24405;&#12290;</dd><dt><a href="#fileinfo.os.3.4">circled_4_delcric</a> </dt><dd><code class="filename">os.path</code> &#36824;&#26377;&#19968;&#20010; <code class="function">isdir</code> &#20989;&#25968;&#65292;&#24403;&#36335;&#24452;&#34920;&#31034;&#19968;&#20010;&#30446;&#24405;&#65292;&#21017;&#36820;&#22238; 1&#65292;&#21542;&#21017;&#20026; 0&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;&#23427;&#26469;&#24471;&#21040;&#19968;&#20010;&#30446;&#24405;&#19979;&#30340;&#23376;&#30446;&#24405;&#21015;&#34920;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e16563"></a><p class="title"><b>&#20363;&nbsp;6.19.&nbsp;&#22312; <code class="filename">fileinfo.py</code> &#20013;&#21015;&#20986;&#30446;&#24405;</b></p><div class="example-contents"><pre class="programlisting">
def listDirectory(directory, fileExtList):                                        
    "get list of file info objects for files of particular extensions" 
    fileList = [os.path.normcase(f)
                for f in os.listdir(directory)]            <a name="fileinfo.os.3a.1"></a>circled_1_delcric <a name="fileinfo.os.3a.2"></a>circled_2_delcric
    fileList = [os.path.join(directory, f) 
               for f in fileList
                if os.path.splitext(f)[1] in fileExtList]  <a name="fileinfo.os.3a.3"></a>circled_3_delcric <a name="fileinfo.os.3a.4"></a>circled_4_delcric <a name="fileinfo.os.3a.5"></a>circled_5_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.os.3a.1">circled_1_delcric</a> </dt><dd><code class="literal">os.listdir(directory)</code> &#36820;&#22238;&#22312; <code class="varname">directory</code> &#20013;&#25152;&#26377;&#25991;&#20214;&#21644;&#25991;&#20214;&#22841;&#30340;&#19968;&#20010; list&#12290;</dd><dt><a href="#fileinfo.os.3a.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992; <code class="varname">f</code> &#23545; list &#36827;&#34892;&#36941;&#21382;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="literal">os.path.normcase(f)</code> &#26681;&#25454;&#25805;&#20316;&#31995;&#32479;&#30340;&#32570;&#30465;&#20540;&#23545;&#22823;&#23567;&#20889;&#36827;&#34892;&#26631;&#20934;&#21270;&#22788;&#29702;&#12290;<code class="function">normcase</code> &#26159;&#19968;&#20010;&#26377;&#29992;&#30340;&#20989;&#25968;&#65292;&#29992;&#20110;&#23545;&#22823;&#23567;&#20889;&#19981;&#25935;&#24863;&#25805;&#20316;&#31995;&#32479;&#30340;&#19968;&#20010;&#34917;&#20805;&#12290;&#36825;&#31181;&#25805;&#20316;&#31995;&#32479;&#35748;&#20026; <code class="filename">mahadeva.mp3</code> &#21644; <code class="filename">mahadeva.MP3</code> &#26159;&#21516;&#19968;&#20010;&#25991;&#20214;&#21517;&#12290;&#20363;&#22914;&#65292;&#22312; Windows &#21644; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#19979;&#65292;<code class="function">normcase</code> &#23558;&#25226;&#25972;&#20010;&#25991;&#20214;&#21517;&#36716;&#25442;&#20026;&#23567;&#20889;&#23383;&#27597;&#65307;&#32780;&#22312; <acronym class="acronym">UNIX</acronym> &#20860;&#23481;&#30340;&#31995;&#32479;&#19979;&#65292;&#23427;&#23558;&#36820;&#22238;&#26410;&#20316;&#20462;&#25913;&#30340;&#25991;&#20214;&#21517;&#12290;</dd><dt><a href="#fileinfo.os.3a.3">circled_3_delcric</a> </dt><dd>&#20877;&#27425;&#29992; <code class="varname">f</code> &#23545;&#26631;&#20934;&#21270;&#21518;&#30340; list &#36827;&#34892;&#36941;&#21382;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="literal">os.path.splitext(f)</code> &#23558;&#27599;&#20010;&#25991;&#20214;&#21517;&#20998;&#21106;&#20026;&#21517;&#23383;&#21644;&#25193;&#23637;&#21517;&#12290;</dd><dt><a href="#fileinfo.os.3a.4">circled_4_delcric</a> </dt><dd>&#23545;&#27599;&#20010;&#25991;&#20214;&#65292;&#25105;&#20204;&#26597;&#30475;&#25193;&#23637;&#21517;&#26159;&#21542;&#22312;&#25105;&#20204;&#20851;&#24515;&#30340;&#25991;&#20214;&#25193;&#23637;&#21517; list &#20013; (<code class="varname">fileExtList</code>&#65292;&#34987;&#20256;&#36882;&#32473; <code class="function">listDirectory</code> &#20989;&#25968;)&#12290;</dd><dt><a href="#fileinfo.os.3a.5">circled_5_delcric</a> </dt><dd>&#23545;&#27599;&#20010;&#25105;&#20204;&#25152;&#20851;&#24515;&#30340;&#25991;&#20214;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="literal">os.path.join(directory, f)</code> &#26469;&#26500;&#36896;&#36825;&#20010;&#25991;&#20214;&#30340;&#20840;&#36335;&#24452;&#21517;&#65292;&#25509;&#30528;&#36820;&#22238;&#36825;&#20010;&#20840;&#36335;&#24452;&#21517;&#30340; list&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="tip.os">&#27880;&#24847;: </a></b><br>&#21482;&#35201;&#26377;&#21487;&#33021;&#65292;&#20320;&#23601;&#24212;&#35813;&#20351;&#29992;&#22312; <code class="filename">os</code> &#21644; <code class="filename">os.path</code> &#20013;&#30340;&#20989;&#25968;&#36827;&#34892;&#25991;&#20214;&#12289;&#30446;&#24405;&#21644;&#36335;&#24452;&#30340;&#25805;&#20316;&#12290;&#36825;&#20123;&#27169;&#22359;&#26159;&#23545;&#24179;&#21488;&#30456;&#20851;&#27169;&#22359;&#30340;&#23553;&#35013;&#27169;&#22359;&#65292;&#25152;&#20197;&#20687; <code class="function">os.path.split</code> &#36825;&#26679;&#30340;&#20989;&#25968;&#21487;&#20197;&#24037;&#20316;&#22312; <acronym class="acronym">UNIX</acronym>&#12289;Windows&#12289;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#21644; <span class="application">Python</span> &#25152;&#25903;&#25345;&#30340;&#20219;&#19968;&#31181;&#24179;&#21488;&#19978;&#12290;</blockquote></div><p>&#36824;&#26377;&#19968;&#31181;&#33719;&#24471;&#30446;&#24405;&#20869;&#23481;&#30340;&#26041;&#27861;&#12290;&#23427;&#38750;&#24120;&#24378;&#22823;&#65292;&#24182;&#20351;&#29992;&#20102;&#19968;&#20123;&#20320;&#22312;&#21629;&#20196;&#34892;&#19978;&#24037;&#20316;&#26102;&#21487;&#33021;&#24050;&#32463;&#29087;&#24713;&#30340;&#36890;&#37197;&#31526;&#12290;</p><div class="example"><a name="fileinfo.os.glob.example"></a><p class="title"><b>&#20363;&nbsp;6.20.&nbsp;&#20351;&#29992; <code class="filename">glob</code> &#21015;&#20986;&#30446;&#24405;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.listdir("c:\\music\\_singles\\")</span>               <a name="fileinfo.os.4.1"></a>circled_1_delcric
<font color="teal">['a_time_long_forgotten_con.mp3', 'hellraiser.mp3',
'kairo.mp3', 'long_way_home1.mp3', 'sidewinder.mp3',
'spinning.mp3']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import glob</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">glob.glob('c:\\music\\_singles\\*.mp3')</span>           <a name="fileinfo.os.4.2"></a>circled_2_delcric
<font color="teal">['c:\\music\\_singles\\a_time_long_forgotten_con.mp3',
'c:\\music\\_singles\\hellraiser.mp3',
'c:\\music\\_singles\\kairo.mp3',
'c:\\music\\_singles\\long_way_home1.mp3',
'c:\\music\\_singles\\sidewinder.mp3',
'c:\\music\\_singles\\spinning.mp3']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">glob.glob('c:\\music\\_singles\\s*.mp3')</span>          <a name="fileinfo.os.4.3"></a>circled_3_delcric
<font color="teal">['c:\\music\\_singles\\sidewinder.mp3',
'c:\\music\\_singles\\spinning.mp3']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">glob.glob('c:\\music\\*\\*.mp3')</span>                  <a name="fileinfo.os.4.4"></a>circled_4_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.os.4.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#21069;&#38754;&#30475;&#21040;&#30340;&#65292;<code class="function">os.listdir</code> &#31616;&#21333;&#22320;&#21462;&#19968;&#20010;&#30446;&#24405;&#36335;&#24452;&#65292;&#36820;&#22238;&#30446;&#24405;&#20013;&#30340;&#25152;&#26377;&#25991;&#20214;&#21644;&#23376;&#30446;&#24405;&#12290;</dd><dt><a href="#fileinfo.os.4.2">circled_2_delcric</a> </dt><dd><code class="filename">glob</code> &#27169;&#22359;&#65292;&#21478;&#19968;&#26041;&#38754;&#65292;&#25509;&#21463;&#19968;&#20010;&#36890;&#37197;&#31526;&#24182;&#19988;&#36820;&#22238;&#25991;&#20214;&#30340;&#25110;&#30446;&#24405;&#30340;&#23436;&#25972;&#36335;&#24452;&#19982;&#20043;&#21305;&#37197;&#12290;&#36825;&#20010;&#36890;&#37197;&#31526;&#26159;&#19968;&#20010;&#30446;&#24405;&#36335;&#24452;&#21152;&#19978;&#8220;*.mp3&#8221;&#65292;&#23427;&#23558;&#21305;&#37197;&#25152;&#26377;&#30340; <code class="filename">.mp3</code> &#25991;&#20214;&#12290;&#27880;&#24847;&#36820;&#22238;&#21015;&#34920;&#30340;&#27599;&#19968;&#20010;&#20803;&#32032;&#24050;&#32463;&#21253;&#21547;&#20102;&#25991;&#20214;&#30340;&#23436;&#25972;&#36335;&#24452;&#12290;</dd><dt><a href="#fileinfo.os.4.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#20320;&#35201;&#26597;&#25214;&#25351;&#23450;&#30446;&#24405;&#20013;&#25152;&#26377;&#20197;&#8220;s&#8221;&#24320;&#22836;&#24182;&#20197;&#8220;.mp3&#8221;&#32467;&#23614;&#30340;&#25991;&#20214;&#65292;&#20063;&#21487;&#20197;&#36825;&#20040;&#20570;&#12290;</dd><dt><a href="#fileinfo.os.4.4">circled_4_delcric</a> </dt><dd>&#29616;&#22312;&#32771;&#26597;&#36825;&#31181;&#24773;&#20917;&#65306;&#20320;&#26377;&#19968;&#20010; <code class="filename">music</code> &#30446;&#24405;&#65292;&#23427;&#21253;&#21547;&#20960;&#20010;&#23376;&#30446;&#24405;&#65292;&#23376;&#30446;&#24405;&#20013;&#21253;&#21547;&#19968;&#20123; <code class="filename">.mp3</code> &#25991;&#20214;&#12290;&#20351;&#29992;&#20004;&#20010;&#36890;&#37197;&#31526;&#65292;&#20165;&#20165;&#35843;&#29992; <code class="filename">glob</code> &#19968;&#27425;&#23601;&#21487;&#20197;&#31435;&#21051;&#33719;&#24471;&#25152;&#26377;&#36825;&#20123;&#25991;&#20214;&#30340;&#19968;&#20010; list&#12290;&#19968;&#20010;&#36890;&#37197;&#31526;&#26159; <code class="literal">"*.mp3"</code> (&#29992;&#20110;&#21305;&#37197; <code class="filename">.mp3</code> &#25991;&#20214;)&#65292;&#21478;&#19968;&#20010;&#36890;&#37197;&#31526;&#26159;<span class="emphasis"><em>&#23376;&#30446;&#24405;&#21517;&#26412;&#36523;</em></span>&#65292;&#29992;&#20110;&#21305;&#37197; <code class="filename">c:\music</code> &#20013;&#30340;&#25152;&#26377;&#23376;&#30446;&#24405;&#12290;&#36825;&#30475;&#19978;&#21435;&#24456;&#31616;&#21333;&#65292;&#20294;&#23427;&#34164;&#21547;&#20102;&#24378;&#22823;&#30340;&#21151;&#33021;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110; <code class="filename">os</code> &#27169;&#22359;&#30340;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/240">http://www.faqts.com/knowledge-base/index.phtml/fid/240</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">os</code> (<a href="http://www.python.org/doc/current/lib/module-os.html">http://www.python.org/doc/current/lib/module-os.html</a>) &#27169;&#22359;&#21644; <code class="filename">os.path</code> (<a href="http://www.python.org/doc/current/lib/module-os.path.html">http://www.python.org/doc/current/lib/module-os.path.html</a>) &#27169;&#22359;&#30340;&#25991;&#26723;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.alltogether"></a>6.6.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</h2></div></div></div><div class="abstract"><p>&#20877;&#19968;&#27425;&#65292;&#25152;&#26377;&#30340;&#22810;&#31859;&#35834;&#39592;&#29260;&#37117;&#25918;&#22909;&#20102;&#12290;&#25105;&#20204;&#24050;&#32463;&#30475;&#36807;&#27599;&#34892;&#20195;&#30721;&#26159;&#22914;&#20309;&#24037;&#20316;&#30340;&#20102;&#12290;&#29616;&#22312;&#24448;&#22238;&#36208;&#19968;&#27493;&#65292;&#30475;&#19968;&#19979;&#25918;&#22312;&#19968;&#36215;&#26159;&#24590;&#20040;&#26679;&#30340;&#12290;</p></div><div class="example"><a name="fileinfo.nested"></a><p class="title"><b>&#20363;&nbsp;6.21.&nbsp;<code class="function">listDirectory</code></b></p><div class="example-contents"><pre class="programlisting">
def listDirectory(directory, fileExtList):                                         <a name="fileinfo.alltogether.1.1"></a>circled_1_delcric
    "get list of file info objects for files of particular extensions"
    fileList = [os.path.normcase(f)
                for f in os.listdir(directory)]           
    fileList = [os.path.join(directory, f) 
               for f in fileList
                if os.path.splitext(f)[1] in fileExtList]                          <a name="fileinfo.alltogether.1.2"></a>circled_2_delcric
    def getFileInfoClass(filename, module=sys.modules[FileInfo.__module__]):       <a name="fileinfo.alltogether.1.3"></a>circled_3_delcric
        "get file info class from filename extension"                             
        subclass = "%sFileInfo" % os.path.splitext(filename)[1].upper()[1:]        <a name="fileinfo.alltogether.1.4"></a>circled_4_delcric
        return hasattr(module, subclass) and getattr(module, subclass) or FileInfo <a name="fileinfo.alltogether.1.5"></a>circled_5_delcric
    return [getFileInfoClass(f)(f) for f in fileList]                              <a name="fileinfo.alltogether.1.6"></a>circled_6_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#fileinfo.alltogether.1.1">circled_1_delcric</a> </dt><dd><code class="function">listDirectory</code> &#26159;&#25972;&#20010;&#27169;&#22359;&#20027;&#35201;&#30340;&#26377;&#36259;&#20043;&#22788;&#12290;&#23427;&#25509;&#25910;&#19968;&#20010; dictionary (&#22312;&#25105;&#30340;&#20363;&#23376;&#20013;&#22914; <code class="filename">c:\music\_singles\</code>) &#21644;&#19968;&#20010;&#24863;&#20852;&#36259;&#30340;&#25991;&#20214;&#25193;&#23637;&#21517;&#21015;&#34920; (&#22914; <code class="literal">['.mp3']</code>)&#65292;&#25509;&#30528;&#23427;&#36820;&#22238;&#19968;&#20010;&#31867;&#23454;&#20363;&#30340; list &#65292;&#36825;&#20123;&#31867;&#23454;&#20363;&#30340;&#34892;&#20026;&#20687; dictionary&#65292;&#21253;&#21547;&#20102;&#22312;&#30446;&#24405;&#20013;&#27599;&#20010;&#24863;&#20852;&#36259;&#25991;&#20214;&#30340;&#20803;&#25968;&#25454;&#12290;&#24182;&#19988;&#23454;&#29616;&#36215;&#26469;&#21482;&#29992;&#20102;&#20960;&#34892;&#30452;&#35266;&#30340;&#20195;&#30721;&#12290;</dd><dt><a href="#fileinfo.alltogether.1.2">circled_2_delcric</a> </dt><dd>&#27491;&#22914;&#22312;<a class="link" href="#fileinfo.os" title="6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;">&#21069;&#19968;&#33410;</a>&#25105;&#20204;&#25152;&#30475;&#21040;&#30340;&#65292;&#36825;&#34892;&#20195;&#30721;&#24471;&#21040;&#19968;&#20010;&#20840;&#36335;&#24452;&#21517;&#30340;&#21015;&#34920;&#65292;&#23427;&#30340;&#20803;&#32032;&#26159;&#22312; <code class="varname">directory</code> &#20013;&#26377;&#30528;&#25105;&#20204;&#24863;&#20852;&#36259;&#30340;&#25991;&#20214;&#21518;&#32512; (&#30001; <code class="varname">fileExtList</code> &#25152;&#25351;&#23450;&#30340;) &#30340;&#25152;&#26377;&#25991;&#20214;&#30340;&#36335;&#24452;&#21517;&#12290;</dd><dt><a href="#fileinfo.alltogether.1.3">circled_3_delcric</a> </dt><dd>&#32769;&#23398;&#26657;&#20986;&#36523;&#30340; <span class="application">Pascal</span> &#31243;&#24207;&#21592;&#21487;&#33021;&#23545;&#23884;&#22871;&#20989;&#25968;&#24863;&#21040;&#29087;&#24713;&#65292;&#20294;&#22823;&#37096;&#20998;&#20154;&#65292;&#24403;&#25105;&#21578;&#35785;&#20182;&#20204; <span class="application">Python</span> &#25903;&#25345;&#23884;&#22871;&#20989;&#25968;&#26102;&#65292;&#37117;&#33579;&#28982;&#22320;&#30475;&#30528;&#25105;&#12290;<span class="emphasis"><em>&#23884;&#22871;&#20989;&#25968;</em></span>&#65292;&#20174;&#23383;&#38754;&#29702;&#35299;&#65292;&#26159;&#23450;&#20041;&#22312;&#20989;&#25968;&#20869;&#30340;&#20989;&#25968;&#12290;&#23884;&#22871;&#20989;&#25968; <code class="function">getFileInfoClass</code> &#21482;&#33021;&#22312;&#23450;&#20041;&#23427;&#30340;&#20989;&#25968; <code class="function">listDirectory</code> &#20869;&#36827;&#34892;&#35843;&#29992;&#12290;&#27491;&#22914;&#20219;&#20309;&#20854;&#23427;&#30340;&#20989;&#25968;&#19968;&#26679;&#65292;&#19981;&#38656;&#35201;&#19968;&#20010;&#25509;&#21475;&#22768;&#26126;&#25110;&#22855;&#24618;&#30340;&#20160;&#20040;&#19996;&#35199;&#65292;&#21482;&#35201;&#23450;&#20041;&#20989;&#25968;&#65292;&#24320;&#22987;&#32534;&#30721;&#23601;&#34892;&#20102;&#12290;</dd><dt><a href="#fileinfo.alltogether.1.4">circled_4_delcric</a> </dt><dd>&#26082;&#28982;&#20320;&#24050;&#32463;&#30475;&#36807; <a class="link" href="#fileinfo.os" title="6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;"><code class="filename">os</code></a> &#27169;&#22359;&#20102;&#65292;&#36825;&#19968;&#34892;&#24212;&#35813;&#33021;&#29702;&#35299;&#20102;&#12290;&#23427;&#24471;&#21040;&#25991;&#20214;&#30340;&#25193;&#23637;&#21517; (<code class="literal">os.path.splitext(filename)[1]</code>)&#65292;&#23558;&#20854;&#36716;&#25442;&#20026;&#22823;&#20889;&#23383;&#27597; (<code class="literal">.upper()</code>)&#65292;&#20174;&#22278;&#28857;&#22788;&#36827;&#34892;&#20998;&#29255; (<code class="literal">[1:]</code>)&#65292;&#20351;&#29992;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#20174;&#20854;&#20013;&#29983;&#25104;&#19968;&#20010;&#31867;&#21517;&#12290;&#25152;&#20197; <code class="filename">c:\music\ap\mahadeva.mp3</code> &#21464;&#25104; <code class="literal">.mp3</code> &#20877;&#21464;&#25104; <code class="literal">MP3</code> &#20877;&#21464;&#25104; <code class="literal">MP3FileInfo</code>&#12290;</dd><dt><a href="#fileinfo.alltogether.1.5">circled_5_delcric</a> </dt><dd>&#22312;&#29983;&#25104;&#23436;&#22788;&#29702;&#36825;&#20010;&#25991;&#20214;&#30340;&#22788;&#29702;&#31867;&#30340;&#21517;&#23383;&#20043;&#21518;&#65292;&#25105;&#20204;&#26597;&#38405;&#22312;&#36825;&#20010;&#27169;&#22359;&#20013;&#26159;&#21542;&#23384;&#22312;&#36825;&#20010;&#22788;&#29702;&#31867;&#12290;&#22914;&#26524;&#23384;&#22312;&#65292;&#25105;&#20204;&#36820;&#22238;&#36825;&#20010;&#31867;&#65292;&#21542;&#21017;&#25105;&#20204;&#36820;&#22238;&#22522;&#31867; <code class="classname">FileInfo</code>&#12290;&#36825;&#19968;&#28857;&#24456;&#37325;&#35201;&#65306;<span class="emphasis"><em>&#36825;&#20010;&#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#31867;</em></span>&#12290;&#19981;&#26159;&#31867;&#30340;&#23454;&#20363;&#65292;&#32780;&#26159;&#31867;&#26412;&#36523;&#12290;</dd><dt><a href="#fileinfo.alltogether.1.6">circled_6_delcric</a> </dt><dd>&#23545;&#27599;&#20010;&#23646;&#20110;&#25105;&#20204; "<span class="quote">&#24863;&#20852;&#36259;&#25991;&#20214;</span>" &#21015;&#34920; (<code class="varname">fileList</code>)&#20013;&#30340;&#25991;&#20214;&#65292;&#25105;&#20204;&#29992;&#25991;&#20214;&#21517; (<code class="varname">f</code>) &#26469;&#35843;&#29992; <code class="function">getFileInfoClass</code>&#12290;&#35843;&#29992; <code class="literal">getFileInfoClass(f)</code> &#36820;&#22238;&#19968;&#20010;&#31867;&#65307;&#25105;&#20204;&#24182;&#19981;&#30693;&#36947;&#30830;&#20999;&#26159;&#21738;&#19968;&#20010;&#31867;&#65292;&#20294;&#26159;&#25105;&#20204;&#24182;&#19981;&#20851;&#24515;&#12290;&#25509;&#30528;&#25105;&#20204;&#21019;&#24314;&#36825;&#20010;&#31867; (&#19981;&#31649;&#23427;&#26159;&#20160;&#20040;) &#30340;&#19968;&#20010;&#23454;&#20363;&#65292;&#20256;&#20837;&#25991;&#20214;&#21517; (&#21448;&#26159; <code class="varname">f</code>) &#32473; <code class="function">__init__</code> &#26041;&#27861;&#12290;&#27491;&#22914;&#25105;&#20204;&#22312;<a class="link" href="#fileinfo.specialmethods.setname" title="&#20363;&nbsp;5.15.&nbsp;&#35774;&#32622; MP3FileInfo &#30340; name">&#26412;&#31456;&#30340;&#21069;&#38754;</a>&#25152;&#30475;&#21040;&#30340;&#65292;<code class="classname">FileInfo</code> &#30340; <code class="function">__init__</code> &#26041;&#27861;&#35774;&#32622;&#20102; <code class="literal">self["name"]</code>&#65292;&#23427;&#23558;&#24341;&#21457; <code class="function">__setitem__</code> &#30340;&#35843;&#29992;&#65292;&#32780; <code class="function">__setitem__</code> &#22312;&#23376;&#31867; (<code class="classname">MP3FileInfo</code>) &#20013;&#34987;&#35206;&#30422;&#25481;&#20102;&#65292;&#29992;&#26469;&#36866;&#24403;&#22320;&#23545;&#25991;&#20214;&#36827;&#34892;&#20998;&#26512;&#65292;&#21462;&#20986;&#25991;&#20214;&#30340;&#20803;&#25968;&#25454;&#12290;&#25105;&#20204;&#23545;&#25152;&#26377;&#24863;&#20852;&#36259;&#30340;&#25991;&#20214;&#36827;&#34892;&#22788;&#29702;&#65292;&#36820;&#22238;&#32467;&#26524;&#23454;&#20363;&#30340;&#19968;&#20010; list&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#35831;&#27880;&#24847; <code class="function">listDirectory</code> &#23436;&#20840;&#26159;&#36890;&#29992;&#30340;&#12290;&#23427;&#20107;&#20808;&#19981;&#30693;&#36947;&#23558;&#24471;&#21040;&#21738;&#31181;&#31867;&#22411;&#30340;&#25991;&#20214;&#65292;&#20063;&#19981;&#30693;&#36947;&#21738;&#20123;&#23450;&#20041;&#22909;&#30340;&#31867;&#33021;&#22815;&#22788;&#29702;&#36825;&#20123;&#25991;&#20214;&#12290;&#23427;&#26816;&#26597;&#30446;&#24405;&#20013;&#35201;&#36827;&#34892;&#22788;&#29702;&#30340;&#25991;&#20214;&#65292;&#28982;&#21518;&#21453;&#35266;&#26412;&#36523;&#27169;&#22359;&#65292;&#20102;&#35299;&#23450;&#20041;&#20102;&#20160;&#20040;&#29305;&#21035;&#30340;&#22788;&#29702;&#31867; (&#20687; <code class="classname">MP3FileInfo</code>)&#12290;&#20320;&#21487;&#20197;&#23545;&#36825;&#20010;&#31243;&#24207;&#36827;&#34892;&#25193;&#20805;&#65292;&#23545;&#20854;&#23427;&#31867;&#22411;&#30340;&#25991;&#20214;&#36827;&#34892;&#22788;&#29702;&#65292;&#21482;&#35201;&#29992;&#36866;&#21512;&#30340;&#21517;&#23383;&#23450;&#20041;&#31867;&#65306;<code class="classname">HTMLFileInfo</code> &#29992;&#20110; <acronym class="acronym">HTML</acronym> &#25991;&#20214;&#65292;<code class="classname">DOCFileInfo</code> &#29992;&#20110; <span class="application">Word</span> <code class="literal">.doc</code> &#25991;&#20214;&#65292;&#31561;&#31561;&#12290;&#19981;&#38656;&#35201;&#25913;&#21160;&#20989;&#25968;&#26412;&#36523;&#65292; <code class="function">listDirectory</code> &#23558;&#20250;&#23545;&#23427;&#20204;&#37117;&#36827;&#34892;&#22788;&#29702;&#65292;&#23558;&#24037;&#20316;&#20132;&#32473;&#36866;&#24403;&#30340;&#31867;&#65292;&#25509;&#30528;&#25910;&#38598;&#32467;&#26524;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="fileinfo.summary2"></a>6.7.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#22312; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532; 5 &#31456;</a> &#20171;&#32461;&#30340; <code class="filename">fileinfo.py</code> &#31243;&#24207;&#29616;&#22312;&#24212;&#35813;&#23436;&#20840;&#29702;&#35299;&#20102;&#12290;</p></div><div class="informalexample"><pre class="programlisting">
"""Framework for getting filetype-specific metadata.

Instantiate appropriate class with filename.  Returned object acts like a
dictionary, with key-value pairs for each piece of metadata.
    import fileinfo
    info = fileinfo.MP3FileInfo("/music/ap/mahadeva.mp3")
    print "\\n".join(["%s=%s" % (k, v) for k, v in info.items()])

Or use listDirectory function to get info on all files in a directory.
    for info in fileinfo.listDirectory("/music/ap/", [".mp3"]):
        ...

Framework can be extended by adding classes for particular file types, e.g.
HTMLFileInfo, MPGFileInfo, DOCFileInfo.  Each class is completely responsible for
parsing its files appropriately; see MP3FileInfo for example.
"""
import os
import sys
from UserDict import UserDict

def stripnulls(data):
    "strip whitespace and nulls"
    return data.replace("\00", "").strip()

class FileInfo(UserDict):
    "store file metadata"
    def __init__(self, filename=None):
        UserDict.__init__(self)
        self["name"] = filename

class MP3FileInfo(FileInfo):
    "store ID3v1.0 MP3 tags"
    tagDataMap = {"title"   : (  3,  33, stripnulls),
                  "artist"  : ( 33,  63, stripnulls),
                  "album"   : ( 63,  93, stripnulls),
                  "year"    : ( 93,  97, stripnulls),
                  "comment" : ( 97, 126, stripnulls),
                  "genre"   : (127, 128, ord)}

    def __parse(self, filename):
        "parse ID3v1.0 tags from MP3 file"
        self.clear()
        try:                               
            fsock = open(filename, "rb", 0)
            try:                           
                fsock.seek(-128, 2)        
                tagdata = fsock.read(128)  
            finally:                       
                fsock.close()              
            if tagdata[:3] == "TAG":
                for tag, (start, end, parseFunc) in self.tagDataMap.items():
                    self[tag] = parseFunc(tagdata[start:end])               
        except IOError:                    
            pass                           

    def __setitem__(self, key, item):
        if key == "name" and item:
            self.__parse(item)
        FileInfo.__setitem__(self, key, item)

def listDirectory(directory, fileExtList):                                        
    "get list of file info objects for files of particular extensions"
    fileList = [os.path.normcase(f)
                for f in os.listdir(directory)]           
    fileList = [os.path.join(directory, f) 
               for f in fileList
                if os.path.splitext(f)[1] in fileExtList] 
    def getFileInfoClass(filename, module=sys.modules[FileInfo.__module__]):      
        "get file info class from filename extension"                             
        subclass = "%sFileInfo" % os.path.splitext(filename)[1].upper()[1:]       
        return hasattr(module, subclass) and getattr(module, subclass) or FileInfo
    return [getFileInfoClass(f)(f) for f in fileList]                             

if __name__ == "__main__":
    for info in listDirectory("/music/_singles/", [".mp3"]):
        print "\n".join(["%s=%s" % (k, v) for k, v in info.items()])
        print</pre></div><div class="highlights"><p>&#22312;&#30740;&#31350;&#19979;&#19968;&#31456;&#20043;&#21069;&#65292;&#30830;&#20445;&#20320;&#21487;&#20197;&#26080;&#22256;&#38590;&#22320;&#23436;&#25104;&#19979;&#38754;&#30340;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#20351;&#29992; <a class="link" href="#fileinfo.exception" title="6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;"><code class="literal">try...except</code></a> &#26469;&#25429;&#25417;&#24322;&#24120;</li><li>&#20351;&#29992; <a class="link" href="#fileinfo.files.incode" title="&#20363;&nbsp;6.6.&nbsp;MP3FileInfo &#20013;&#30340;&#25991;&#20214;&#23545;&#35937;"><code class="literal">try...finally</code></a> &#26469;&#20445;&#25252;&#39069;&#22806;&#30340;&#36164;&#28304;</li><li>&#35835;&#21462;<a class="link" href="#fileinfo.files" title="6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;">&#25991;&#20214;</a></li><li>&#22312;&#19968;&#20010; <a class="link" href="#fileinfo.multiassign.for.example" title="&#20363;&nbsp;6.11.&nbsp;MP3FileInfo &#20013;&#30340; for &#24490;&#29615;"><code class="literal">for</code> &#24490;&#29615;</a>&#20013;&#19968;&#27425;&#36171;&#22810;&#20010;&#20540;</li><li>&#20351;&#29992; <a class="link" href="#fileinfo.os" title="6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;"><code class="filename">os</code></a> &#27169;&#22359;&#26469;&#28385;&#36275;&#20320;&#30340;&#36328;&#24179;&#21488;&#25991;&#20214;&#25805;&#20316;&#30340;&#38656;&#35201;</li><li>&#36890;&#36807;&#23558;&#31867;&#30475;&#25104;&#23545;&#35937;&#24182;&#20256;&#20837;&#21442;&#25968;&#65292;&#21160;&#24577;&#22320;<a class="link" href="#fileinfo.alltogether" title="6.6.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#23454;&#20363;&#21270;&#26410;&#30693;&#31867;&#22411;&#30340;&#31867;</a></li></ul></div></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="re"></a>&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;</h1></div></div></div><div class="abstract"><p>&#27491;&#21017;&#34920;&#36798;&#24335;&#26159;&#25628;&#32034;&#12289;&#26367;&#25442;&#21644;&#35299;&#26512;&#22797;&#26434;&#23383;&#31526;&#27169;&#24335;&#30340;&#19968;&#31181;&#24378;&#22823;&#32780;&#26631;&#20934;&#30340;&#26041;&#27861;&#12290;&#22914;&#26524;&#20320;&#26366;&#32463;&#22312;&#20854;&#20182;&#35821;&#35328; (&#22914; <span class="application">Perl</span>) &#20013;&#20351;&#29992;&#36807;&#23427;&#65292;&#30001;&#20110;&#23427;&#20204;&#30340;&#35821;&#27861;&#38750;&#24120;&#30456;&#20284;&#65292;&#20320;&#20165;&#20165;&#38405;&#35835;&#19968;&#19979; <code class="filename">re</code> &#27169;&#22359;&#30340;&#25688;&#35201;&#65292;&#22823;&#33268;&#20102;&#35299;&#20854;&#20013;&#21487;&#29992;&#30340;&#20989;&#25968;&#21644;&#21442;&#25968;&#23601;&#21487;&#20197;&#20102;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="re.intro"></a>7.1.&nbsp;&#27010;&#35272;</h2></div></div></div><p>&#23383;&#31526;&#20018;&#20063;&#26377;&#24456;&#22810;&#26041;&#27861;&#65292;&#21487;&#20197;&#36827;&#34892;&#25628;&#32034; (<code class="function">index</code>&#12289;<code class="function">find</code> &#21644; <code class="function">count</code>)&#12289;&#26367;&#25442; (<code class="function">replace</code>) &#21644;&#35299;&#26512; (<code class="function">split</code>)&#65292;&#20294;&#23427;&#20204;&#20165;&#38480;&#20110;&#22788;&#29702;&#26368;&#31616;&#21333;&#30340;&#24773;&#20917;&#12290;&#25628;&#32034;&#26041;&#27861;&#26597;&#25214;&#21333;&#20010;&#21644;&#22266;&#23450;&#32534;&#30721;&#30340;&#23376;&#20018;&#65292;&#24182;&#19988;&#23427;&#20204;&#24635;&#26159;&#22823;&#23567;&#20889;&#25935;&#24863;&#30340;&#12290;&#23545;&#19968;&#20010;&#23383;&#31526;&#20018;<code class="varname">s</code>&#65292;&#22914;&#26524;&#35201;&#36827;&#34892;&#22823;&#23567;&#20889;&#19981;&#25935;&#24863;&#30340;&#25628;&#32034;&#65292;&#21017;&#20320;&#24517;&#39035;&#35843;&#29992; <code class="function">s.lower()</code> &#25110; <code class="function">s.upper()</code> &#23558; <code class="varname">s</code> &#36716;&#25442;&#25104;&#20840;&#23567;&#20889;&#25110;&#32773;&#20840;&#22823;&#20889;&#65292;&#28982;&#21518;&#30830;&#20445;&#25628;&#32034;&#20018;&#26377;&#30528;&#30456;&#21305;&#37197;&#30340;&#22823;&#23567;&#20889;&#12290;<code class="function">replace</code> &#21644; <code class="function">split</code>&#26041;&#27861;&#26377;&#30528;&#31867;&#20284;&#30340;&#38480;&#21046;&#12290;</p><div class="abstract"><p>&#22914;&#26524;&#20320;&#35201;&#35299;&#20915;&#30340;&#38382;&#39064;&#21033;&#29992;&#23383;&#31526;&#20018;&#20989;&#25968;&#33021;&#22815;&#23436;&#25104;&#65292;&#20320;&#24212;&#35813;&#20351;&#29992;&#23427;&#20204;&#12290;&#23427;&#20204;&#24555;&#36895;&#12289;&#31616;&#21333;&#19988;&#23481;&#26131;&#38405;&#35835;&#65292;&#32780;&#24555;&#36895;&#12289;&#31616;&#21333;&#12289;&#21487;&#35835;&#24615;&#24378;&#30340;&#20195;&#30721;&#21487;&#20197;&#35828;&#20986;&#24456;&#22810;&#22909;&#22788;&#12290;&#20294;&#26159;&#65292;&#22914;&#26524;&#20320;&#21457;&#29616;&#20320;&#20351;&#29992;&#20102;&#35768;&#22810;&#19981;&#21516;&#30340;&#23383;&#31526;&#20018;&#20989;&#25968;&#21644; <code class="literal">if</code> &#35821;&#21477;&#26469;&#22788;&#29702;&#19968;&#20010;&#29305;&#27530;&#24773;&#20917;&#65292;&#25110;&#32773;&#20320;&#32452;&#21512;&#20351;&#29992;&#20102; <code class="function">split</code>&#12289;<code class="function">join</code> &#31561;&#20989;&#25968;&#32780;&#23548;&#33268;&#29992;&#19968;&#31181;&#22855;&#24618;&#30340;&#29978;&#33267;&#35835;&#19981;&#19979;&#21435;&#30340;&#26041;&#24335;&#29702;&#35299;&#21015;&#34920;&#65292;&#27492;&#26102;&#65292;&#20320;&#20063;&#35768;&#38656;&#35201;&#36716;&#21040;&#27491;&#21017;&#34920;&#36798;&#24335;&#20102;&#12290;</p></div><p>&#23613;&#31649;&#27491;&#21017;&#34920;&#36798;&#24335;&#35821;&#27861;&#36739;&#20043;&#26222;&#36890;&#20195;&#30721;&#30456;&#23545;&#40635;&#28902;&#19968;&#20123;&#65292;&#20294;&#26159;&#21364;&#21487;&#20197;&#24471;&#21040;&#26356;&#21487;&#35835;&#30340;&#32467;&#26524;&#65292;&#19982;&#29992;&#19968;&#38271;&#20018;&#23383;&#31526;&#20018;&#20989;&#25968;&#30340;&#35299;&#20915;&#26041;&#26696;&#30456;&#27604;&#35201;&#22909;&#24456;&#22810;&#12290;&#22312;&#27491;&#21017;&#34920;&#36798;&#24335;&#20869;&#37096;&#26377;&#22810;&#31181;&#26041;&#27861;&#23884;&#20837;&#27880;&#37322;&#65292;&#20174;&#32780;&#20351;&#20043;&#20855;&#26377;&#33258;&#25991;&#26723;&#21270; (self-documenting) &#30340;&#33021;&#21147;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="re.matching"></a>7.2.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;</h2></div></div></div><div class="abstract"><p>&#36825;&#19968;&#31995;&#21015;&#30340;&#20363;&#23376;&#26159;&#30001;&#25105;&#20960;&#24180;&#21069;&#26085;&#24120;&#24037;&#20316;&#20013;&#30340;&#29616;&#23454;&#38382;&#39064;&#21551;&#21457;&#32780;&#26469;&#30340;&#65292;&#24403;&#26102;&#25105;&#38656;&#35201;&#20174;&#19968;&#20010;&#32769;&#21270;&#31995;&#32479;&#20013;&#23548;&#20986;&#34903;&#36947;&#22320;&#22336;&#65292;&#22312;&#23558;&#23427;&#20204;&#23548;&#20837;&#26032;&#30340;&#31995;&#32479;&#20043;&#21069;&#65292;&#36827;&#34892;&#28165;&#29702;&#21644;&#26631;&#20934;&#21270;&#12290;(&#30475;&#65292;&#25105;&#19981;&#26159;&#21482;&#23558;&#36825;&#20123;&#19996;&#35199;&#22534;&#21040;&#19968;&#36215;&#65292;&#23427;&#26377;&#23454;&#38469;&#30340;&#29992;&#22788;&#12290;)&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#25105;&#22914;&#20309;&#22788;&#29702;&#36825;&#20010;&#38382;&#39064;&#12290;</p></div><div class="example"><a name="d0e17108"></a><p class="title"><b>&#20363;&nbsp;7.1.&nbsp;&#22312;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#21305;&#37197;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = '100 NORTH MAIN ROAD'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s.replace('ROAD', 'RD.')</span>               <a name="re.matching.1.1"></a>circled_1_delcric
<font color="teal">'100 NORTH MAIN RD.'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = '100 NORTH BROAD ROAD'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s.replace('ROAD', 'RD.')</span>               <a name="re.matching.1.2"></a>circled_2_delcric
<font color="teal">'100 NORTH BRD. RD.'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s[:-4] + s[-4:].replace('ROAD', 'RD.')</span> <a name="re.matching.1.3"></a>circled_3_delcric
<font color="teal">'100 NORTH BROAD RD.'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import re</span>                              <a name="re.matching.1.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('ROAD$', 'RD.', s)</span>              <a name="re.matching.1.5"></a>circled_5_delcric <a name="re.matching.1.6"></a>circled_6_delcric
<font color="teal">'100 NORTH BROAD RD.'</font></pre><div class="calloutlist"><dl compact><dt><a href="#re.matching.1.1">circled_1_delcric</a> </dt><dd>&#25105;&#30340;&#30446;&#26631;&#26159;&#23558;&#34903;&#36947;&#22320;&#22336;&#26631;&#20934;&#21270;&#65292;<code class="literal">'ROAD'</code> &#36890;&#24120;&#34987;&#30053;&#20889;&#20026; <code class="literal">'RD.'</code>&#12290;&#20045;&#30475;&#36215;&#26469;&#65292;&#25105;&#20197;&#20026;&#36825;&#20010;&#22826;&#31616;&#21333;&#20102;&#65292;&#21482;&#29992;&#23383;&#31526;&#20018;&#30340;&#26041;&#27861; <code class="function">replace</code> &#23601;&#21487;&#20197;&#20102;&#12290;&#27605;&#31455;&#65292;&#25152;&#26377;&#30340;&#25968;&#25454;&#37117;&#24050;&#32463;&#26159;&#22823;&#20889;&#30340;&#20102;&#65292;&#22240;&#27492;&#22823;&#23567;&#20889;&#19981;&#21305;&#37197;&#23558;&#19981;&#26159;&#38382;&#39064;&#12290;&#24182;&#19988;&#65292;&#35201;&#25628;&#32034;&#30340;&#20018;<code class="literal">'ROAD'</code>&#26159;&#19968;&#20010;&#24120;&#37327;&#65292;&#22312;&#36825;&#20010;&#36855;&#24785;&#30340;&#31616;&#21333;&#20363;&#23376;&#20013;&#65292;<code class="function">s.replace</code> &#30340;&#30830;&#33021;&#22815;&#32988;&#20219;&#12290;</dd><dt><a href="#re.matching.1.2">circled_2_delcric</a> </dt><dd>&#19981;&#24184;&#30340;&#26159;&#65292;&#29983;&#27963;&#20805;&#28385;&#20102;&#29305;&#20363;&#65292;&#24182;&#19988;&#25105;&#24456;&#24555;&#23601;&#24847;&#35782;&#21040;&#36825;&#20010;&#38382;&#39064;&#12290;&#27604;&#22914;&#65306;<code class="literal">'ROAD'</code> &#22312;&#22320;&#22336;&#20013;&#20986;&#29616;&#20004;&#27425;&#65292;&#19968;&#27425;&#26159;&#20316;&#20026;&#34903;&#36947;&#21517;&#31216; <code class="literal">'BROAD'</code> &#30340;&#19968;&#37096;&#20998;&#65292;&#19968;&#27425;&#26159;&#20316;&#20026; <code class="literal">'ROAD'</code> &#26412;&#36523;&#12290;<code class="function">replace</code> &#26041;&#27861;&#36935;&#21040;&#36825;&#20004;&#22788;&#30340;<code class="literal">'ROAD'</code>&#24182;&#27809;&#26377;&#21306;&#21035;&#65292;&#22240;&#27492;&#37117;&#36827;&#34892;&#20102;&#26367;&#25442;&#65292;&#32780;&#25105;&#21457;&#29616;&#22320;&#22336;&#34987;&#30772;&#22351;&#25481;&#20102;&#12290;</dd><dt><a href="#re.matching.1.3">circled_3_delcric</a> </dt><dd>&#20026;&#20102;&#35299;&#20915;&#22312;&#22320;&#22336;&#20013;&#20986;&#29616;&#22810;&#27425;<code class="literal">'ROAD'</code>&#23376;&#20018;&#30340;&#38382;&#39064;&#65292;&#26377;&#21487;&#33021;&#37319;&#29992;&#31867;&#20284;&#36825;&#26679;&#30340;&#26041;&#27861;&#65306;&#21482;&#22312;&#22320;&#22336;&#30340;&#26368;&#21518;&#22235;&#20010;&#23383;&#31526;&#20013;&#25628;&#32034;&#26367;&#25442; <code class="literal">'ROAD'</code> (s[-4:])&#65292;&#24573;&#30053;&#23383;&#31526;&#20018;&#30340;&#20854;&#20182;&#37096;&#20998; (s[:-4])&#12290;&#20294;&#26159;&#65292;&#20320;&#21487;&#33021;&#21457;&#29616;&#36825;&#24050;&#32463;&#21464;&#24471;&#19981;&#26041;&#20415;&#20102;&#12290;&#20363;&#22914;&#65292;&#35813;&#27169;&#24335;&#20381;&#36182;&#20110;&#20320;&#35201;&#26367;&#25442;&#30340;&#23383;&#31526;&#20018;&#30340;&#38271;&#24230;&#20102; (&#22914;&#26524;&#20320;&#35201;&#25226; <code class="literal">'STREET'</code> &#26367;&#25442;&#20026; <code class="literal">'ST.'</code>&#65292;&#20320;&#38656;&#35201;&#21033;&#29992; <code class="literal">s[:-6]</code> &#21644; <code class="literal">s[-6:].replace(...)</code>)&#12290;&#20320;&#24895;&#24847;&#22312;&#20845;&#26376;&#20010;&#26399;&#38388;&#22238;&#26469;&#35843;&#35797;&#23427;&#20204;&#20040;&#65311;&#25105;&#26412;&#20154;&#26159;&#19981;&#24895;&#24847;&#30340;&#12290;</dd><dt><a href="#re.matching.1.4">circled_4_delcric</a> </dt><dd>&#26159;&#26102;&#20505;&#36716;&#21040;&#27491;&#21017;&#34920;&#36798;&#24335;&#20102;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#25152;&#26377;&#21644;&#27491;&#21017;&#34920;&#36798;&#24335;&#30456;&#20851;&#30340;&#21151;&#33021;&#37117;&#21253;&#21547;&#22312; <code class="filename">re</code> &#27169;&#22359;&#20013;&#12290;</dd><dt><a href="#re.matching.1.5">circled_5_delcric</a> </dt><dd>&#26469;&#30475;&#31532;&#19968;&#20010;&#21442;&#25968;&#65306;<code class="literal">'ROAD$'</code>&#12290;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#38750;&#24120;&#31616;&#21333;&#65292;&#21482;&#26377;&#24403; <code class="literal">'ROAD'</code> &#20986;&#29616;&#22312;&#19968;&#20010;&#23383;&#31526;&#20018;&#30340;&#23614;&#37096;&#26102;&#25165;&#20250;&#21305;&#37197;&#12290;&#23383;&#31526;<code class="literal">$</code>&#34920;&#31034;&#8220;&#23383;&#31526;&#20018;&#30340;&#26411;&#23614;&#8221;(&#36824;&#26377;&#19968;&#20010;&#23545;&#24212;&#30340;&#23383;&#31526;&#65292;&#23574;&#21495;<code class="literal">^</code>&#65292;&#34920;&#31034;&#8220;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#8221;)&#12290;</dd><dt><a href="#re.matching.1.6">circled_6_delcric</a> </dt><dd>&#21033;&#29992; <code class="function">re.sub</code> &#20989;&#25968;&#65292;&#23545;&#23383;&#31526;&#20018; <code class="varname">s</code> &#36827;&#34892;&#25628;&#32034;&#65292;&#28385;&#36275;&#27491;&#21017;&#34920;&#36798;&#24335; <code class="literal">'ROAD$'</code> &#30340;&#29992; <code class="literal">'RD.'</code> &#26367;&#25442;&#12290;&#36825;&#26679;&#23558;&#21305;&#37197;&#23383;&#31526;&#20018; <code class="varname">s</code> &#26411;&#23614;&#30340; <code class="literal">'ROAD'</code>&#65292;&#32780;&#19981;&#20250;&#21305;&#37197;&#23646;&#20110;&#21333;&#35789; <code class="literal">'ROAD'</code> &#19968;&#37096;&#20998;&#30340; <code class="literal">'ROAD'</code>&#65292;&#36825;&#26159;&#22240;&#20026;&#23427;&#26159;&#20986;&#29616;&#22312; <code class="varname">s</code> &#30340;&#20013;&#38388;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#32487;&#32493;&#25105;&#30340;&#28165;&#29702;&#22320;&#22336;&#30340;&#25925;&#20107;&#12290;&#24456;&#24555;&#25105;&#21457;&#29616;&#65292;&#22312;&#19978;&#38754;&#30340;&#20363;&#23376;&#20013;&#65292;&#20165;&#20165;&#21305;&#37197;&#22320;&#22336;&#26411;&#23614;&#30340; <code class="literal">'ROAD'</code> &#19981;&#26159;&#24456;&#22909;&#65292;&#22240;&#20026;&#19981;&#26159;&#25152;&#26377;&#30340;&#22320;&#22336;&#37117;&#21253;&#25324;&#34920;&#31034;&#34903;&#36947;&#30340;&#21333;&#35789; (<code class="literal">'ROAD'</code>)&#65307;&#26377;&#19968;&#20123;&#30452;&#25509;&#20197;&#34903;&#36947;&#21517;&#32467;&#23614;&#12290;&#22823;&#37096;&#20998;&#24773;&#20917;&#19979;&#65292;&#19981;&#20250;&#36935;&#21040;&#36825;&#31181;&#24773;&#20917;&#65292;&#20294;&#26159;&#65292;&#22914;&#26524;&#34903;&#36947;&#21517;&#31216;&#20026; <code class="literal">'BROAD'</code>&#65292;&#37027;&#20040;&#27491;&#21017;&#34920;&#36798;&#24335;&#23558;&#20250;&#21305;&#37197; <code class="literal">'BROAD'</code> &#30340;&#19968;&#37096;&#20998;&#20026; <code class="literal">'ROAD'</code>&#65292;&#32780;&#36825;&#24182;&#19981;&#26159;&#25105;&#24819;&#35201;&#30340;&#12290;</p><div class="example"><a name="d0e17300"></a><p class="title"><b>&#20363;&nbsp;7.2.&nbsp;&#21305;&#37197;&#25972;&#20010;&#21333;&#35789;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = '100 BROAD'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('ROAD$', 'RD.', s)</span>
<font color="teal">'100 BRD.'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('\\bROAD$', 'RD.', s)</span>  <a name="re.matching.2.2"></a>circled_1_delcric
<font color="teal">'100 BROAD'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub(r'\bROAD$', 'RD.', s)</span>  <a name="re.matching.2.3"></a>circled_2_delcric
<font color="teal">'100 BROAD'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = '100 BROAD ROAD APT. 3'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub(r'\bROAD$', 'RD.', s)</span>  <a name="re.matching.2.4"></a>circled_3_delcric
<font color="teal">'100 BROAD ROAD APT. 3'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub(r'\bROAD\b', 'RD.', s)</span> <a name="re.matching.2.5"></a>circled_4_delcric
<font color="teal">'100 BROAD RD. APT 3'</font></pre><div class="calloutlist"><dl compact><dt><a href="#re.matching.2.2">circled_1_delcric</a> </dt><dd>&#25105;&#30495;&#27491;&#24819;&#35201;&#20570;&#30340;&#26159;&#65292;&#24403; <code class="literal">'ROAD'</code> &#20986;&#29616;&#22312;&#23383;&#31526;&#20018;&#30340;&#26411;&#23614;&#65292;&#24182;&#19988;&#26159;&#20316;&#20026;&#19968;&#20010;&#29420;&#31435;&#30340;&#21333;&#35789;&#26102;&#65292;&#32780;&#19981;&#26159;&#19968;&#20123;&#38271;&#21333;&#35789;&#30340;&#19968;&#37096;&#20998;&#65292;&#25165;&#23545;&#20182;&#36827;&#34892;&#21305;&#37197;&#12290;&#20026;&#20102;&#22312;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#34920;&#36798;&#36825;&#20010;&#24847;&#24605;&#65292;&#20320;&#21033;&#29992; <code class="literal">\b</code>&#65292;&#23427;&#30340;&#21547;&#20041;&#26159;&#8220;&#21333;&#35789;&#30340;&#36793;&#30028;&#24517;&#39035;&#22312;&#36825;&#37324;&#8221;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#30001;&#20110;&#23383;&#31526; <code class="literal">'\'</code> &#22312;&#19968;&#20010;&#23383;&#31526;&#20018;&#20013;&#24517;&#39035;&#36716;&#20041;&#65292;&#36825;&#20250;&#21464;&#24471;&#38750;&#24120;&#40635;&#28902;&#12290;&#26377;&#26102;&#20505;&#65292;&#36825;&#31867;&#38382;&#39064;&#34987;&#31216;&#20026;&#8220;&#21453;&#26012;&#32447;&#28798;&#38590;&#8221;&#65292;&#36825;&#20063;&#26159; <span class="application">Perl</span> &#20013;&#27491;&#21017;&#34920;&#36798;&#24335;&#27604; <span class="application">Python</span> &#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#35201;&#30456;&#23545;&#23481;&#26131;&#30340;&#21407;&#22240;&#20043;&#19968;&#12290;&#21478;&#19968;&#26041;&#38754;&#65292;<span class="application">Perl</span> &#20063;&#28151;&#28102;&#20102;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#20854;&#20182;&#35821;&#27861;&#65292;&#22240;&#27492;&#65292;&#22914;&#26524;&#20320;&#21457;&#29616;&#19968;&#20010; bug&#65292;&#24456;&#38590;&#24324;&#28165;&#26970;&#31350;&#31455;&#26159;&#19968;&#20010;&#35821;&#27861;&#38169;&#35823;&#65292;&#36824;&#26159;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#38169;&#35823;&#12290;</dd><dt><a href="#re.matching.2.3">circled_2_delcric</a> </dt><dd>&#20026;&#20102;&#36991;&#20813;&#21453;&#26012;&#32447;&#28798;&#38590;&#65292;&#20320;&#21487;&#20197;&#21033;&#29992;&#25152;&#35859;&#30340;&#8220;&#21407;&#22987;&#23383;&#31526;&#20018;&#8221;&#65292;&#21482;&#35201;&#20026;&#23383;&#31526;&#20018;&#28155;&#21152;&#19968;&#20010;&#21069;&#32512; <code class="literal">r</code> &#23601;&#21487;&#20197;&#20102;&#12290;&#36825;&#23558;&#21578;&#35785; <span class="application">Python</span>&#65292;&#23383;&#31526;&#20018;&#20013;&#30340;&#25152;&#26377;&#23383;&#31526;&#37117;&#19981;&#36716;&#20041;&#65307;<code class="literal">'\t'</code> &#26159;&#19968;&#20010;&#21046;&#34920;&#31526;&#65292;&#32780; <code class="literal">r'\t'</code> &#26159;&#19968;&#20010;&#30495;&#27491;&#30340;&#21453;&#26012;&#32447;&#23383;&#31526; <code class="literal">'\'</code>&#65292;&#32039;&#36319;&#30528;&#19968;&#20010;&#23383;&#27597; <code class="literal">'t'</code>&#12290;&#25105;&#25512;&#33616;&#21482;&#35201;&#22788;&#29702;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#23601;&#20351;&#29992;&#21407;&#22987;&#23383;&#31526;&#20018;&#65307;&#21542;&#21017;&#65292;&#20107;&#24773;&#20250;&#24456;&#24555;&#21464;&#24471;&#28151;&#20081; (&#24182;&#19988;&#27491;&#21017;&#34920;&#36798;&#24335;&#33258;&#24049;&#20063;&#20250;&#24456;&#24555;&#34987;&#33258;&#24049;&#25630;&#20081;&#20102;)&#12290;</dd><dt><a href="#re.matching.2.4">circled_3_delcric</a> </dt><dd>(&#19968;&#22768;&#21497;&#24687;) &#24456;&#19981;&#24184;&#65292;&#25105;&#24456;&#24555;&#21457;&#29616;&#26356;&#22810;&#30340;&#19982;&#25105;&#30340;&#36923;&#36753;&#30456;&#30683;&#30462;&#30340;&#20363;&#23376;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#34903;&#36947;&#22320;&#22336;&#21253;&#21547;&#26377;&#20316;&#20026;&#25972;&#20010;&#21333;&#35789;&#30340;<code class="literal">'ROAD'</code>&#65292;&#20294;&#26159;&#23427;&#19981;&#26159;&#22312;&#26411;&#23614;&#65292;&#22240;&#20026;&#22320;&#22336;&#22312;&#34903;&#36947;&#21629;&#21517;&#21518;&#20250;&#26377;&#19968;&#20010;&#25151;&#38388;&#21495;&#12290;&#30001;&#20110; <code class="literal">'ROAD'</code> &#19981;&#26159;&#22312;&#27599;&#19968;&#20010;&#23383;&#31526;&#20018;&#30340;&#26411;&#23614;&#65292;&#27809;&#26377;&#21305;&#37197;&#19978;&#65292;&#22240;&#27492;&#35843;&#29992; <code class="function">re.sub</code> &#27809;&#26377;&#26367;&#25442;&#20219;&#20309;&#19996;&#35199;&#65292;&#20320;&#33719;&#24471;&#30340;&#21482;&#26159;&#21021;&#22987;&#23383;&#31526;&#20018;&#65292;&#36825;&#20063;&#19981;&#26159;&#25105;&#20204;&#24819;&#35201;&#30340;&#12290;</dd><dt><a href="#re.matching.2.5">circled_4_delcric</a> </dt><dd>&#20026;&#20102;&#35299;&#20915;&#36825;&#20010;&#38382;&#39064;&#65292;&#25105;&#21435;&#25481;&#20102; <code class="literal">$</code> &#23383;&#31526;&#65292;&#21152;&#19978;&#21478;&#19968;&#20010; <code class="literal">\b</code>&#12290;&#29616;&#22312;&#65292;&#27491;&#21017;&#34920;&#36798;&#24335;"<span class="quote">&#21305;&#37197;&#23383;&#31526;&#20018;&#20013;&#20316;&#20026;&#25972;&#20010;&#21333;&#35789;&#20986;&#29616;&#30340;<code class="literal">'ROAD'</code></span>"&#20102;&#65292;&#19981;&#35770;&#26159;&#22312;&#26411;&#23614;&#12289;&#24320;&#22987;&#36824;&#26159;&#20013;&#38388;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="re.roman"></a>7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;</h2></div></div></div><div class="abstract"><p>&#20320;&#21487;&#33021;&#32463;&#24120;&#30475;&#21040;&#32599;&#39532;&#25968;&#23383;&#65292;&#21363;&#20351;&#20320;&#27809;&#26377;&#24847;&#35782;&#21040;&#23427;&#20204;&#12290;&#20320;&#21487;&#33021;&#26366;&#32463;&#22312;&#32769;&#30005;&#24433;&#25110;&#32773;&#30005;&#35270;&#20013;&#30475;&#21040;&#23427;&#20204; ("<span class="quote">&#29256;&#26435;&#25152;&#26377; <code class="literal">MCMXLVI</code></span>" &#32780;&#19981;&#26159; "<span class="quote">&#29256;&#26435;&#25152;&#26377;<code class="literal">1946</code></span>")&#65292;&#25110;&#32773;&#22312;&#26576;&#22270;&#20070;&#39302;&#25110;&#26576;&#22823;&#23398;&#30340;&#36129;&#29486;&#22681;&#19978;&#30475;&#21040;&#23427;&#20204; ("<span class="quote">&#25104;&#31435;&#20110; <code class="literal">MDCCCLXXXVIII</code></span>"&#32780;&#19981;&#26159;"<span class="quote">&#25104;&#31435;&#20110;<code class="literal">1888</code></span>")&#12290;&#20320;&#20063;&#21487;&#33021;&#22312;&#26576;&#20123;&#25991;&#29486;&#30340;&#22823;&#32434;&#25110;&#32773;&#30446;&#24405;&#19978;&#30475;&#21040;&#23427;&#20204;&#12290;&#36825;&#26159;&#19968;&#20010;&#34920;&#31034;&#25968;&#23383;&#30340;&#31995;&#32479;&#65292;&#23427;&#23454;&#38469;&#19978;&#33021;&#22815;&#36861;&#28335;&#21040;&#36828;&#21476;&#30340;&#32599;&#39532;&#24093;&#22269; (&#22240;&#27492;&#32780;&#24471;&#21517;)&#12290;</p></div><p>&#22312;&#32599;&#39532;&#25968;&#23383;&#20013;&#65292;&#21033;&#29992;7&#20010;&#19981;&#21516;&#23383;&#27597;&#36827;&#34892;&#37325;&#22797;&#25110;&#32773;&#32452;&#21512;&#26469;&#34920;&#36798;&#21508;&#24335;&#21508;&#26679;&#30340;&#25968;&#23383;&#12290;</p><div class="itemizedlist"><ul><li><code class="literal">I</code> = <code class="literal">1</code></li><li><code class="literal">V</code> = <code class="literal">5</code></li><li><code class="literal">X</code> = <code class="literal">10</code></li><li><code class="literal">L</code> = <code class="literal">50</code></li><li><code class="literal">C</code> = <code class="literal">100</code></li><li><code class="literal">D</code> = <code class="literal">500</code></li><li><code class="literal">M</code> = <code class="literal">1000</code></li></ul></div><p>&#19979;&#38754;&#26159;&#20851;&#20110;&#26500;&#36896;&#32599;&#39532;&#25968;&#23383;&#30340;&#19968;&#20123;&#36890;&#29992;&#30340;&#35268;&#21017;&#30340;&#20171;&#32461;&#65306;</p><div class="itemizedlist"><ul><li>&#23383;&#31526;&#26159;&#21472;&#21152;&#30340;&#12290;<code class="literal">I</code> &#34920;&#31034; <code class="constant">1</code>&#65292;<code class="literal">II</code> &#34920;&#31034; <code class="literal">2</code>&#65292;&#32780; <code class="literal">III</code> &#34920;&#31034; <code class="literal">3</code>&#12290;<code class="literal">VI</code> &#34920;&#31034; <code class="literal">6</code> (&#23383;&#38754;&#19978;&#20026;&#36880;&#23383;&#31526;&#30456;&#21152;&#65292;"<span class="quote"><code class="literal">5</code> &#21152; <code class="literal">1</code></span>")&#65292;<code class="literal">VII</code> &#34920;&#31034; <code class="literal">7</code>&#65292;<code class="literal">VIII</code> &#34920;&#31034; <code class="literal">8</code>&#12290;</li><li>&#21547;&#21313;&#23383;&#31526; (<code class="literal">I</code>&#12289;<code class="literal">X</code>&#12289;<code class="literal">C</code> &#21644; <code class="literal">M</code>) &#33267;&#22810;&#21487;&#20197;&#37325;&#22797;&#19977;&#27425;&#12290;&#23545;&#20110; <code class="literal">4</code>&#65292;&#20320;&#21017;&#38656;&#35201;&#21033;&#29992;&#19979;&#19968;&#20010;&#26368;&#22823;&#30340;&#21547;&#20116;&#23383;&#31526;&#36827;&#34892;&#20943;&#25805;&#20316;&#24471;&#21040;&#65306;&#20320;&#19981;&#33021;&#25226; <code class="literal">4</code> &#34920;&#31034;&#25104; <code class="literal">IIII</code>&#65292;&#32780;&#24212;&#34920;&#31034;&#20026; <code class="literal">IV</code> ("<span class="quote">&#27604; <code class="literal">5</code> &#23567; <code class="literal">1</code></span>")&#12290;&#25968;&#23383; <code class="literal">40</code> &#20889;&#25104; <code class="literal">XL</code> (&#27604; <code class="literal">50</code> &#23567; <code class="literal">10</code>)&#65292;<code class="literal">41</code> &#20889;&#25104; <code class="literal">XLI</code>&#65292;<code class="literal">42</code> &#20889;&#25104; <code class="literal">XLII</code>&#65292;<code class="literal">43</code> &#20889;&#25104; <code class="literal">XLIII</code>&#65292;&#32780; <code class="literal">44</code> &#20889;&#25104; <code class="literal">XLIV</code> (&#27604; <code class="literal">50</code> &#23567; <code class="literal">10</code>&#65292;&#28982;&#21518;&#27604; <code class="literal">5</code> &#23567;<code class="literal">1</code>)&#12290;</li><li>&#31867;&#20284;&#22320;&#65292;&#23545;&#20110;&#25968;&#23383; <code class="literal">9</code>&#65292;&#20320;&#24517;&#39035;&#21033;&#29992;&#19979;&#19968;&#20010;&#21547;&#21313;&#23383;&#31526;&#36827;&#34892;&#20943;&#25805;&#20316;&#24471;&#21040;&#65306;<code class="literal">8</code> &#34920;&#31034;&#20026; <code class="literal">VIII</code>&#65292;&#32780; <code class="literal">9</code> &#21017;&#34920;&#31034;&#20026; <code class="literal">IX</code> (&#27604; <code class="literal">10</code> &#23567; <code class="literal">1</code>)&#65292;&#32780;&#19981;&#26159; <code class="literal">VIIII</code> (&#22240;&#20026;&#23383;&#31526; <code class="literal">I</code> &#19981;&#33021;&#36830;&#32493;&#37325;&#22797;&#22235;&#27425;)&#12290;&#25968;&#23383; <code class="literal">90</code> &#34920;&#31034;&#20026; <code class="literal">XC</code>&#65292;<code class="literal">900</code> &#34920;&#31034;&#20026; <code class="literal">CM</code>&#12290;</li><li>&#21547;&#20116;&#23383;&#31526;&#19981;&#33021;&#37325;&#22797;&#12290;&#25968;&#23383; <code class="literal">10</code> &#24120;&#34920;&#31034;&#20026;<code class="literal">X</code>&#65292;&#32780;&#20174;&#26469;&#19981;&#29992;<code class="literal">VV</code>&#26469;&#34920;&#31034;&#12290;&#25968;&#23383; <code class="literal">100</code> &#24120;&#34920;&#31034;&#20026;<code class="literal">C</code>&#65292;&#20063;&#20174;&#26469;&#19981;&#34920;&#31034;&#20026; <code class="literal">LL</code>&#12290;</li><li>&#32599;&#39532;&#25968;&#23383;&#19968;&#33324;&#20174;&#39640;&#20301;&#21040;&#20302;&#20301;&#20070;&#20889;&#65292;&#20174;&#24038;&#21040;&#21491;&#38405;&#35835;&#65292;&#22240;&#27492;&#19981;&#21516;&#39034;&#24207;&#30340;&#23383;&#31526;&#24847;&#20041;&#22823;&#19981;&#30456;&#21516;&#12290;<code class="literal">DC</code> &#34920;&#31034; <code class="literal">600</code>&#65307;&#32780; <code class="literal">CD</code> &#26159;&#19968;&#20010;&#23436;&#20840;&#19981;&#21516;&#30340;&#25968;&#23383; (&#20026; <code class="literal">400</code>&#65292;&#20063;&#23601;&#26159;&#27604; <code class="literal">500</code> &#23567;<code class="literal">100</code>)&#12290;<code class="literal">CI</code> &#34920;&#31034; <code class="literal">101</code>&#65307;&#32780;<code class="literal">IC</code> &#29978;&#33267;&#19981;&#26159;&#19968;&#20010;&#21512;&#27861;&#30340;&#32599;&#39532;&#23383;&#27597; (&#22240;&#20026;&#20320;&#19981;&#33021;&#30452;&#25509;&#20174;&#25968;&#23383;<code class="literal">100</code>&#20943;&#21435;<code class="literal">1</code>&#65307;&#36825;&#38656;&#35201;&#20889;&#25104; <code class="literal">XCIX</code>&#65292;&#24847;&#24605;&#26159;&#27604; <code class="literal">100</code> &#23567; <code class="literal">10</code>&#65292;&#28982;&#21518;&#21152;&#19978;&#25968;&#23383; <code class="literal">9</code>&#65292;&#20063;&#23601;&#26159;&#27604; <code class="literal">10</code> &#23567; <code class="literal">1</code>&#30340;&#25968;&#23383;)&#12290;</li></ul></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e17763"></a>7.3.1.&nbsp;&#26657;&#39564;&#21315;&#20301;&#25968;</h3></div></div></div><p>&#24590;&#26679;&#26657;&#39564;&#20219;&#24847;&#19968;&#20010;&#23383;&#31526;&#20018;&#26159;&#21542;&#20026;&#19968;&#20010;&#26377;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#21602;&#65311;&#25105;&#20204;&#27599;&#27425;&#21482;&#30475;&#19968;&#20301;&#25968;&#23383;&#65292;&#30001;&#20110;&#32599;&#39532;&#25968;&#23383;&#19968;&#33324;&#26159;&#20174;&#39640;&#20301;&#21040;&#20302;&#20301;&#20070;&#20889;&#12290;&#25105;&#20204;&#20174;&#39640;&#20301;&#24320;&#22987;&#65306;&#21315;&#20301;&#12290;&#23545;&#20110;&#22823;&#20110;&#25110;&#31561;&#20110; 1000 &#30340;&#25968;&#23383;&#65292;&#21315;&#20301;&#30001;&#19968;&#31995;&#21015;&#30340;&#23383;&#31526; <code class="literal">M</code> &#34920;&#31034;&#12290;</p><div class="example"><a name="d0e17771"></a><p class="title"><b>&#20363;&nbsp;7.3.&nbsp;&#26657;&#39564;&#21315;&#20301;&#25968;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import re</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?$'</span>       <a name="re.roman.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'M')</span>    <a name="re.roman.1.2"></a>circled_2_delcric
<font color="teal">&lt;SRE_Match object at 0106FB58&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MM')</span>   <a name="re.roman.1.3"></a>circled_3_delcric
<font color="teal">&lt;SRE_Match object at 0106C290&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMM')</span>  <a name="re.roman.1.4"></a>circled_4_delcric
<font color="teal">&lt;SRE_Match object at 0106AA38&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMMM')</span> <a name="re.roman.1.5"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, '')</span>     <a name="re.roman.1.6"></a>circled_6_delcric
<font color="teal">&lt;SRE_Match object at 0106F4A8&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#re.roman.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#26377;&#19977;&#37096;&#20998;&#65306;<div class="itemizedlist"><ul><li><code class="literal">^</code> &#34920;&#31034;&#20165;&#22312;&#19968;&#20010;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#21305;&#37197;&#20854;&#21518;&#30340;&#23383;&#31526;&#20018;&#20869;&#23481;&#12290;&#22914;&#26524;&#27809;&#26377;&#36825;&#20010;&#23383;&#31526;&#65292;&#36825;&#20010;&#27169;&#24335;&#23558;&#21305;&#37197;&#20986;&#29616;&#22312;&#23383;&#31526;&#20018;&#20219;&#24847;&#20301;&#32622;&#19978;&#30340;
<code class="literal">M</code>&#65292;&#32780;&#36825;&#24182;&#19981;&#26159;&#20320;&#24819;&#35201;&#30340;&#12290;&#20320;&#24819;&#30830;&#35748;&#30340;&#26159;&#65306;&#23383;&#31526;&#20018;&#20013;&#26159;&#21542;&#20986;&#29616;&#23383;&#31526; <code class="literal">M</code>&#65292;&#22914;&#26524;&#20986;&#29616;&#65292;&#21017;&#24517;&#39035;&#26159;&#22312;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#12290;</li><li><code class="literal">M?</code> &#21487;&#36873;&#22320;&#21305;&#37197;&#21333;&#20010;&#23383;&#31526; <code class="literal">M</code>&#65292;&#30001;&#20110;&#23427;&#26368;&#22810;&#21487;&#37325;&#22797;&#20986;&#29616;&#19977;&#27425;&#65292;&#20320;&#21487;&#20197;&#22312;&#19968;&#34892;&#20013;&#21305;&#37197; 0 &#27425;&#21040; 3 &#27425;&#23383;&#31526; <code class="literal">M</code>&#12290;</li><li><code class="literal">$</code> &#23383;&#31526;&#38480;&#21046;&#27169;&#24335;&#21482;&#33021;&#22815;&#22312;&#19968;&#20010;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#21305;&#37197;&#12290;&#24403;&#21644;&#27169;&#24335;&#24320;&#22836;&#30340;&#23383;&#31526; <code class="literal">^</code> &#32467;&#21512;&#20351;&#29992;&#26102;&#65292;&#36825;&#24847;&#21619;&#30528;&#27169;&#24335;&#24517;&#39035;&#21305;&#37197;&#25972;&#20010;&#20018;&#65292;&#24182;&#19988;&#22312;&#22312;&#23383;&#31526; <code class="literal">M</code> &#30340;&#21069;&#21518;&#37117;&#19981;&#33021;&#22815;&#20986;&#29616;&#20854;&#20182;&#30340;&#20219;&#24847;&#23383;&#31526;&#12290;</li></ul></div></dd><dt><a href="#re.roman.1.2">circled_2_delcric</a> </dt><dd><code class="filename">re</code> &#27169;&#22359;&#30340;&#20851;&#38190;&#26159;&#19968;&#20010; <code class="function">search</code> &#20989;&#25968;&#65292;&#35813;&#20989;&#25968;&#26377;&#20004;&#20010;&#21442;&#25968;&#65292;&#19968;&#20010;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335; (<code class="varname">pattern</code>)&#65292;&#19968;&#20010;&#26159;&#23383;&#31526;&#20018;  (<code class="literal">'M'</code>)&#65292;&#20989;&#25968;&#35797;&#22270;&#21305;&#37197;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#22914;&#26524;&#21457;&#29616;&#19968;&#20010;&#21305;&#37197;&#65292;<code class="function">search</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#25317;&#26377;&#22810;&#31181;&#26041;&#27861;&#21487;&#20197;&#25551;&#36848;&#36825;&#20010;&#21305;&#37197;&#30340;&#23545;&#35937;&#65292;&#22914;&#26524;&#27809;&#26377;&#21457;&#29616;&#21305;&#37197;&#65292;<code class="function">search</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010; <code class="literal">None</code>&#65292;&#19968;&#20010; <span class="application">Python</span> &#31354;&#20540; (null value)&#12290;&#20320;&#27492;&#21051;&#20851;&#27880;&#30340;&#21807;&#19968;&#20107;&#24773;&#65292;&#23601;&#26159;&#27169;&#24335;&#26159;&#21542;&#21305;&#37197;&#19978;&#65292;&#20110;&#26159;&#25105;&#20204;&#21033;&#29992; <code class="function">search</code> &#20989;&#25968;&#30340;&#36820;&#22238;&#20540;&#20102;&#35299;&#36825;&#20010;&#20107;&#23454;&#12290;&#23383;&#31526;&#20018;<code class="literal">'M'</code> &#21305;&#37197;&#19978;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#22240;&#20026;&#31532;&#19968;&#20010;&#21487;&#36873;&#30340; <code class="literal">M</code> &#21305;&#37197;&#19978;&#65292;&#32780;&#31532;&#20108;&#20010;&#21644;&#31532;&#19977;&#20010; <code class="literal">M</code> &#34987;&#24573;&#30053;&#25481;&#20102;&#12290;</dd><dt><a href="#re.roman.1.3">circled_3_delcric</a> </dt><dd><code class="literal">'MM'</code> &#33021;&#21305;&#37197;&#19978;&#26159;&#22240;&#20026;&#31532;&#19968;&#21644;&#31532;&#20108;&#20010;&#21487;&#36873;&#30340; <code class="literal">M</code> &#21305;&#37197;&#19978;&#65292;&#32780;&#24573;&#30053;&#25481;&#31532;&#19977;&#20010; <code class="literal">M</code>&#12290;</dd><dt><a href="#re.roman.1.4">circled_4_delcric</a> </dt><dd><code class="literal">'MMM'</code> &#33021;&#21305;&#37197;&#19978;&#22240;&#20026;&#19977;&#20010; <code class="literal">M</code> &#37117;&#21305;&#37197;&#19978;&#20102;&#12290;</dd><dt><a href="#re.roman.1.5">circled_5_delcric</a> </dt><dd><code class="literal">'MMMM'</code> &#27809;&#26377;&#21305;&#37197;&#19978;&#12290;&#22240;&#20026;&#25152;&#26377;&#30340;&#19977;&#20010; <code class="literal">M</code> &#37117;&#21305;&#37197;&#23436;&#20102;&#65292;&#20294;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#36824;&#26377;&#23383;&#31526;&#20018;&#23614;&#37096;&#30340;&#38480;&#21046; (&#30001;&#20110;&#23383;&#31526; <code class="literal">$</code>)&#65292;&#32780;&#23383;&#31526;&#20018;&#21448;&#27809;&#26377;&#32467;&#26463; (&#22240;&#20026;&#36824;&#26377;&#31532;&#22235;&#20010; <code class="literal">M</code> &#23383;&#31526;)&#65292;&#22240;&#27492; <code class="function">search</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010; <code class="literal">None</code>&#12290;</dd><dt><a href="#re.roman.1.6">circled_6_delcric</a> </dt><dd>&#26377;&#36259;&#30340;&#26159;&#65292;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#20063;&#33021;&#22815;&#21305;&#37197;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#22240;&#20026;&#25152;&#26377;&#30340;&#23383;&#31526; <code class="literal">M</code> &#37117;&#26159;&#21487;&#36873;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e17955"></a>7.3.2.&nbsp;&#26657;&#39564;&#30334;&#20301;&#25968;</h3></div></div></div><p>&#19982;&#21315;&#20301;&#25968;&#30456;&#27604;&#65292;&#30334;&#20301;&#25968;&#35782;&#21035;&#36215;&#26469;&#35201;&#22256;&#38590;&#24471;&#22810;&#65292;&#36825;&#26159;&#22240;&#20026;&#26377;&#22810;&#31181;&#30456;&#20114;&#29420;&#31435;&#30340;&#34920;&#36798;&#26041;&#24335;&#37117;&#21487;&#20197;&#34920;&#36798;&#30334;&#20301;&#25968;&#65292;&#32780;&#20855;&#20307;&#29992;&#37027;&#31181;&#26041;&#24335;&#34920;&#36798;&#21644;&#20855;&#20307;&#30340;&#25968;&#20540;&#26377;&#20851;&#12290;</p><div class="itemizedlist"><ul><li><code class="literal">100</code> = <code class="literal">C</code></li><li><code class="literal">200</code> = <code class="literal">CC</code></li><li><code class="literal">300</code> = <code class="literal">CCC</code></li><li><code class="literal">400</code> = <code class="literal">CD</code></li><li><code class="literal">500</code> = <code class="literal">D</code></li><li><code class="literal">600</code> = <code class="literal">DC</code></li><li><code class="literal">700</code> = <code class="literal">DCC</code></li><li><code class="literal">800</code> = <code class="literal">DCCC</code></li><li><code class="literal">900</code> = <code class="literal">CM</code></li></ul></div><p>&#22240;&#27492;&#26377;&#22235;&#31181;&#21487;&#33021;&#30340;&#27169;&#24335;&#65306;</p><div class="itemizedlist"><ul><li><code class="literal">CM</code></li><li><code class="literal">CD</code></li><li>&#38646;&#21040;&#19977;&#27425;&#20986;&#29616; <code class="literal">C</code> &#23383;&#31526; (&#20986;&#29616;&#38646;&#27425;&#34920;&#31034;&#30334;&#20301;&#25968;&#20026; 0)</li><li><code class="literal">D</code>&#65292;&#21518;&#38754;&#36319;&#38646;&#20010;&#21040;&#19977;&#20010; <code class="literal">C</code> &#23383;&#31526;</li></ul></div><p>&#21518;&#38754;&#20004;&#20010;&#27169;&#24335;&#21487;&#20197;&#32467;&#21512;&#21040;&#19968;&#36215;&#65306;</p><div class="itemizedlist"><ul><li>&#19968;&#20010;&#21487;&#36873;&#30340;&#23383;&#31526; <code class="literal">D</code>&#65292;&#21152;&#19978;&#38646;&#21040; 3 &#20010; <code class="literal">C</code> &#23383;&#31526;&#12290;</li></ul></div><p>&#36825;&#20010;&#20363;&#23376;&#26174;&#31034;&#22914;&#20309;&#26377;&#25928;&#22320;&#35782;&#21035;&#32599;&#39532;&#25968;&#23383;&#30340;&#30334;&#20301;&#25968;&#12290;</p><div class="example"><a name="re.roman.hundreds"></a><p class="title"><b>&#20363;&nbsp;7.4.&nbsp;&#26816;&#39564;&#30334;&#20301;&#25968;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import re</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?(CM|CD|D?C?C?C?)$'</span> <a name="re.roman.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCM')</span>            <a name="re.roman.2.2"></a>circled_2_delcric
<font color="teal">&lt;SRE_Match object at 01070390&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MD')</span>             <a name="re.roman.2.3"></a>circled_3_delcric
<font color="teal">&lt;SRE_Match object at 01073A50&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMMCCC')</span>         <a name="re.roman.2.4"></a>circled_4_delcric
<font color="teal">&lt;SRE_Match object at 010748A8&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCMC')</span>           <a name="re.roman.2.5"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, '')</span>               <a name="re.roman.2.6"></a>circled_6_delcric
<font color="teal">&lt;SRE_Match object at 01071D98&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#re.roman.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#30340;&#39318;&#37096;&#21644;&#19978;&#19968;&#20010;&#27169;&#24335;&#30456;&#21516;&#65292;&#26816;&#26597;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987; (<code class="literal">^</code>)&#65292;&#25509;&#30528;&#21305;&#37197;&#21315;&#20301;&#25968; (<code class="literal">M?M?M?</code>)&#65292;&#28982;&#21518;&#25165;&#26159;&#36825;&#20010;&#27169;&#24335;&#30340;&#26032;&#20869;&#23481;&#12290;&#22312;&#25324;&#21495;&#20869;&#65292;&#23450;&#20041;&#20102;&#21253;&#21547;&#26377;&#19977;&#20010;&#20114;&#30456;&#29420;&#31435;&#30340;&#27169;&#24335;&#38598;&#21512;&#65292;&#30001;&#22402;&#30452;&#32447;&#38548;&#24320;&#65306;<code class="literal">CM</code>&#12289;<code class="literal">CD</code> &#21644; <code class="literal">D?C?C?C?</code> (<code class="literal">D</code>&#26159;&#21487;&#36873;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159; 0 &#21040; 3 &#20010;&#21487;&#36873;&#30340; <code class="literal">C</code> &#23383;&#31526;)&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#35299;&#26512;&#22120;&#20381;&#27425;&#26816;&#26597;&#36825;&#20123;&#27169;&#24335; (&#20174;&#24038;&#21040;&#21491;)&#65292;&#22914;&#26524;&#21305;&#37197;&#19978;&#31532;&#19968;&#20010;&#27169;&#24335;&#65292;&#21017;&#24573;&#30053;&#21097;&#19979;&#30340;&#27169;&#24335;&#12290;</dd><dt><a href="#re.roman.2.2">circled_2_delcric</a> </dt><dd><code class="literal">'MCM'</code> &#21305;&#37197;&#19978;&#65292;&#22240;&#20026;&#31532;&#19968;&#20010; <code class="literal">M</code> &#23383;&#31526;&#21305;&#37197;&#65292;&#31532;&#20108;&#21644;&#31532;&#19977;&#20010; <code class="literal">M</code> &#23383;&#31526;&#34987;&#24573;&#30053;&#25481;&#65292;&#32780; <code class="literal">CM</code> &#21305;&#37197;&#19978; (&#22240;&#27492; <code class="literal">CD</code> &#21644; <code class="literal">D?C?C?C?</code> &#20004;&#20010;&#27169;&#24335;&#19981;&#20877;&#32771;&#34385;)&#12290;<code class="literal">MCM</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383;<code class="literal">1900</code>&#12290;</dd><dt><a href="#re.roman.2.3">circled_3_delcric</a> </dt><dd><code class="literal">'MD'</code> &#21305;&#37197;&#19978;&#65292;&#22240;&#20026;&#31532;&#19968;&#20010;&#23383;&#31526; <code class="literal">M</code> &#21305;&#37197;&#19978;&#65292;&#31532;&#20108;&#31532;&#19977;&#20010; <code class="literal">M</code> &#23383;&#31526;&#24573;&#30053;&#65292;&#32780;&#27169;&#24335; <code class="literal">D?C?C?C?</code> &#21305;&#37197;&#19978; <code class="literal">D</code> (&#27169;&#24335;&#20013;&#30340;&#19977;&#20010;&#21487;&#36873;&#30340;&#23383;&#31526; <code class="literal">C</code> &#37117;&#34987;&#24573;&#30053;&#25481;&#20102;)&#12290;<code class="literal">MD</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">1500</code>&#12290;</dd><dt><a href="#re.roman.2.4">circled_4_delcric</a> </dt><dd><code class="literal">'MMMCCC'</code> &#21305;&#37197;&#19978;&#65292;&#22240;&#20026;&#19977;&#20010; <code class="literal">M</code> &#23383;&#31526;&#37117;&#21305;&#37197;&#19978;&#65292;&#32780;&#27169;&#24335; <code class="literal">D?C?C?C?</code> &#21305;&#37197;&#19978; <code class="literal">CCC</code> (&#23383;&#31526;<code class="literal">D</code>&#26159;&#21487;&#36873;&#30340;&#65292;&#27492;&#22788;&#24573;&#30053;)&#12290;<code class="literal">MMMCCC</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">3300</code>&#12290;</dd><dt><a href="#re.roman.2.5">circled_5_delcric</a> </dt><dd><code class="literal">'MCMC'</code> &#27809;&#26377;&#21305;&#37197;&#19978;&#12290;&#31532;&#19968;&#20010; <code class="literal">M</code> &#23383;&#31526;&#21305;&#37197;&#19978;&#65292;&#31532;&#20108;&#31532;&#19977;&#20010; <code class="literal">M</code> &#23383;&#31526;&#24573;&#30053;&#65292;&#25509;&#30528;&#26159; <code class="literal">CM</code> &#21305;&#37197;&#19978;&#65292;&#20294;&#26159;&#25509;&#30528;&#26159; <code class="literal">$</code> &#23383;&#31526;&#27809;&#26377;&#21305;&#37197;&#65292;&#22240;&#20026;&#23383;&#31526;&#20018;&#36824;&#27809;&#26377;&#32467;&#26463; (&#20320;&#20173;&#28982;&#36824;&#26377;&#19968;&#20010;&#27809;&#26377;&#21305;&#37197;&#30340;<code class="literal">C</code>&#23383;&#31526;)&#12290;<code class="literal">C</code> &#23383;&#31526;&#20063;<span class="emphasis"><em>&#19981;</em></span> &#21305;&#37197;&#27169;&#24335; <code class="literal">D?C?C?C?</code> &#30340;&#19968;&#37096;&#20998;&#65292;&#22240;&#20026;&#19982;&#20043;&#30456;&#20114;&#29420;&#31435;&#30340;&#27169;&#24335; <code class="literal">CM</code> &#24050;&#32463;&#21305;&#37197;&#19978;&#12290;</dd><dt><a href="#re.roman.2.6">circled_6_delcric</a> </dt><dd>&#26377;&#36259;&#30340;&#26159;&#65292;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#20063;&#21487;&#20197;&#21305;&#37197;&#36825;&#20010;&#27169;&#24335;&#65292;&#22240;&#20026;&#25152;&#26377;&#30340; <code class="literal">M</code> &#23383;&#31526;&#37117;&#26159;&#21487;&#36873;&#30340;&#65292;&#23427;&#20204;&#37117;&#34987;&#24573;&#30053;&#65292;&#24182;&#19988;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#21487;&#20197;&#21305;&#37197; <code class="literal">D?C?C?C?</code> &#27169;&#24335;&#65292;&#27492;&#22788;&#25152;&#26377;&#30340;&#23383;&#31526;&#20063;&#37117;&#26159;&#21487;&#36873;&#30340;&#65292;&#24182;&#19988;&#37117;&#34987;&#24573;&#30053;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21710;&#21568;&#65281;&#30475;&#30475;&#27491;&#21017;&#34920;&#36798;&#24335;&#33021;&#22815;&#22810;&#24555;&#21464;&#24471;&#38590;&#20197;&#29702;&#35299;&#65311;&#20320;&#20165;&#20165;&#34920;&#31034;&#20102;&#32599;&#39532;&#25968;&#23383;&#30340;&#21315;&#20301;&#21644;&#30334;&#20301;&#19978;&#30340;&#25968;&#23383;&#12290;&#22914;&#26524;&#20320;&#26681;&#25454;&#31867;&#20284;&#30340;&#26041;&#27861;&#65292;&#21313;&#20301;&#25968;&#21644;&#21508;&#20301;&#25968;&#23601;&#38750;&#24120;&#31616;&#21333;&#20102;&#65292;&#22240;&#20026;&#26159;&#23436;&#20840;&#30456;&#21516;&#30340;&#27169;&#24335;&#12290;&#35753;&#25105;&#20204;&#26469;&#30475;&#34920;&#36798;&#36825;&#20010;&#27169;&#24335;&#30340;&#21478;&#19968;&#31181;&#26041;&#24335;&#21543;&#12290;</p></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="re.nm"></a>7.4.&nbsp;&#20351;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;</h2></div></div></div><div class="abstract"><p>&#22312;<a class="link" href="#re.roman" title="7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;">&#21069;&#38754;&#30340;&#31456;&#33410;</a>&#65292;&#20320;&#22788;&#29702;&#20102;&#30456;&#21516;&#23383;&#31526;&#21487;&#20197;&#37325;&#22797;&#19977;&#27425;&#30340;&#24773;&#20917;&#12290;&#22312;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#65292;&#26377;&#21478;&#22806;&#19968;&#20010;&#26041;&#24335;&#26469;&#34920;&#36798;&#36825;&#31181;&#24773;&#20917;&#65292;&#24182;&#19988;&#33021;&#25552;&#39640;&#20195;&#30721;&#30340;&#21487;&#35835;&#24615;&#12290;&#39318;&#20808;&#30475;&#30475;&#25105;&#20204;&#22312;&#21069;&#38754;&#30340;&#20363;&#23376;&#20013;&#20351;&#29992;&#30340;&#26041;&#27861;&#12290;</p></div><div class="example"><a name="d0e18283"></a><p class="title"><b>&#20363;&nbsp;7.5.&nbsp;&#32769;&#26041;&#27861;&#65306;&#27599;&#19968;&#20010;&#23383;&#31526;&#37117;&#26159;&#21487;&#36873;&#30340;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import re</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?$'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'M')</span>    <a name="re.nm.1.1"></a>circled_1_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EE090&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?$'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MM')</span>   <a name="re.nm.1.2"></a>circled_2_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?$'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMM')</span>  <a name="re.nm.1.3"></a>circled_3_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EE090&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMMM')</span> <a name="re.nm.1.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.nm.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#31532;&#19968;&#20010;&#21487;&#36873;&#30340;&#23383;&#31526; <code class="literal">M</code>&#65292;&#31532;&#20108;&#31532;&#19977;&#20010; <code class="literal">M</code> &#23383;&#31526;&#21017;&#34987;&#24573;&#30053; (&#36825;&#26159;&#21487;&#34892;&#30340;&#65292;&#22240;&#20026;&#23427;&#20204;&#37117;&#26159;&#21487;&#36873;&#30340;)&#65292;&#26368;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.nm.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#31532;&#19968;&#21644;&#31532;&#20108;&#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">M</code>&#65292;&#32780;&#31532;&#19977;&#20010; <code class="literal">M</code> &#23383;&#31526;&#34987;&#24573;&#30053; (&#36825;&#26159;&#21487;&#34892;&#30340;&#65292;&#22240;&#20026;&#23427;&#20204;&#37117;&#26159;&#21487;&#36873;&#30340;)&#65292;&#26368;&#21518;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.nm.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#25152;&#26377;&#30340;&#19977;&#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">M</code>&#65292;&#26368;&#21518;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.nm.1.4">circled_4_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#25152;&#26377;&#30340;&#19977;&#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">M</code>&#65292;&#20294;&#26159;&#19981;&#33021;&#22815;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614; (&#22240;&#20026;&#36824;&#26377;&#19968;&#20010;&#26410;&#21305;&#37197;&#30340;&#23383;&#31526; <code class="literal">M</code>)&#65292;&#22240;&#27492;&#19981;&#33021;&#22815;&#21305;&#37197;&#32780;&#36820;&#22238;&#19968;&#20010; <code class="literal">None</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e18385"></a><p class="title"><b>&#20363;&nbsp;7.6.&nbsp;&#19968;&#20010;&#26032;&#30340;&#26041;&#27861;&#65306;&#20174; <code class="literal">n</code> &#21040; <code class="literal">m</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M{0,3}$'</span>       <a name="re.nm.2.0"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'M')</span>    <a name="re.nm.2.1"></a>circled_2_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MM')</span>   <a name="re.nm.2.2"></a>circled_3_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EE090&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMM')</span>  <a name="re.nm.2.3"></a>circled_4_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEDA8&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMMM')</span> <a name="re.nm.2.4"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.nm.2.0">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#24847;&#24605;&#26159;&#35828;&#65306;"<span class="quote">&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197; 0 &#21040; 3 &#20010; <code class="literal">M</code> &#23383;&#31526;&#65292;&#28982;&#21518;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</span>"&#36825;&#37324;&#30340; 0 &#21644; 3 &#21487;&#20197;&#25913;&#25104;&#20854;&#23427;&#20219;&#20309;&#25968;&#23383;&#65307;&#22914;&#26524;&#20320;&#24819;&#35201;&#21305;&#37197;&#33267;&#23569; 1 &#27425;&#65292;&#33267;&#22810; 3 &#27425;&#23383;&#31526; <code class="literal">M</code>&#65292;&#21017;&#21487;&#20197;&#20889;&#25104; <code class="literal">M{1,3}</code>&#12290;</dd><dt><a href="#re.nm.2.1">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">M</code> &#23383;&#31526;&#20013;&#30340;&#19968;&#20010;&#65292;&#26368;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.nm.2.2">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">M</code> &#23383;&#31526;&#20013;&#30340;&#20004;&#20010;&#65292;&#26368;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.nm.2.3">circled_4_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">M</code> &#23383;&#31526;&#20013;&#30340;&#19977;&#20010;&#65292;&#26368;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.nm.2.4">circled_5_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">M</code> &#23383;&#31526;&#20013;&#30340;&#19977;&#20010;&#65292;&#20294;&#26159;<span class="emphasis"><em>&#27809;&#26377;&#21305;&#37197;&#19978;</em></span> &#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#22312;&#23383;&#31526;&#20018;&#32467;&#23614;&#20043;&#21069;&#26368;&#22810;&#21482;&#20801;&#35768;&#21305;&#37197;&#19977;&#27425; <code class="literal">M</code> &#23383;&#31526;&#65292;&#20294;&#26159;&#23454;&#38469;&#19978;&#26377;&#22235;&#20010; <code class="literal">M</code> &#23383;&#31526;&#65292;&#22240;&#27492;&#27169;&#24335;&#27809;&#26377;&#21305;&#37197;&#19978;&#36825;&#20010;&#23383;&#31526;&#20018;&#65292;&#36820;&#22238;&#19968;&#20010; <code class="literal">None</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="d0e18494">&#27880;&#24847;: </a></b><br>&#27809;&#26377;&#19968;&#20010;&#36731;&#26494;&#30340;&#26041;&#27861;&#26469;&#30830;&#23450;&#20004;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#26159;&#21542;&#31561;&#20215;&#12290;&#20320;&#33021;&#37319;&#29992;&#30340;&#26368;&#22909;&#30340;&#21150;&#27861;&#23601;&#26159;&#21015;&#20986;&#24456;&#22810;&#30340;&#27979;&#35797;&#26679;&#20363;&#65292;&#30830;&#23450;&#36825;&#20004;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#23545;&#25152;&#26377;&#30340;&#30456;&#20851;&#36755;&#20837;&#37117;&#26377;&#30456;&#21516;&#30340;&#36755;&#20986;&#12290;&#22312;&#26412;&#20070;&#21518;&#38754;&#30340;&#31456;&#33410;&#65292;&#23558;&#26356;&#22810;&#22320;&#35752;&#35770;&#22914;&#20309;&#32534;&#20889;&#27979;&#35797;&#26679;&#20363;&#12290;</blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e18499"></a>7.4.1.&nbsp;&#26657;&#39564;&#21313;&#20301;&#25968;&#21644;&#20010;&#20301;&#25968;</h3></div></div></div><p>&#29616;&#22312;&#25105;&#20204;&#26469;&#25193;&#23637;&#19968;&#19979;&#20851;&#20110;&#32599;&#39532;&#25968;&#23383;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#20197;&#21305;&#37197;&#21313;&#20301;&#25968;&#21644;&#20010;&#20301;&#25968;&#65292;&#19979;&#38754;&#30340;&#20363;&#23376;&#23637;&#31034;&#21313;&#20301;&#25968;&#30340;&#26657;&#39564;&#26041;&#27861;&#12290;</p><div class="example"><a name="re.tens.example"></a><p class="title"><b>&#20363;&nbsp;7.7.&nbsp;&#26657;&#39564;&#21313;&#20301;&#25968;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)$'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCMXL')</span>    <a name="re.nm.3.3"></a>circled_1_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCML')</span>     <a name="re.nm.3.4"></a>circled_2_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCMLX')</span>    <a name="re.nm.3.5"></a>circled_3_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCMLXXX')</span>  <a name="re.nm.3.7"></a>circled_4_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCMLXXXX')</span> <a name="re.nm.3.8"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.nm.3.3">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#31532;&#19968;&#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">M</code>&#65292;&#25509;&#30528;&#26159; <code class="literal">CM</code>&#65292;&#25509;&#30528; <code class="literal">XL</code>&#65292;&#25509;&#30528;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;&#35831;&#35760;&#20303;&#65292;<code class="literal">(A|B|C)</code> &#36825;&#20010;&#35821;&#27861;&#30340;&#21547;&#20041;&#26159;"<span class="quote">&#31934;&#30830;&#21305;&#37197; A&#12289;B &#25110;&#32773; C &#20854;&#20013;&#30340;&#19968;&#20010;</span>"&#12290;&#27492;&#22788;&#21305;&#37197;&#20102; <code class="literal">XL</code>&#65292;&#22240;&#27492;&#19981;&#20877;&#21305;&#37197; <code class="literal">XC</code> &#21644; <code class="literal">L?X?X?X?</code>&#65292;&#25509;&#30528;&#23601;&#21305;&#37197;&#21040;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;<code class="literal">MCML</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">1940</code>&#12290;</dd><dt><a href="#re.nm.3.4">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#31532;&#19968;&#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">M</code>&#65292;&#25509;&#30528;&#26159; <code class="literal">CM</code>&#65292;&#25509;&#30528; <code class="literal">L?X?X?X?</code>&#12290;&#22312;&#27169;&#24335; <code class="literal">L?X?X?X?</code> &#20013;&#65292;&#23427;&#21305;&#37197; <code class="literal">L</code> &#23383;&#31526;&#24182;&#19988;&#36339;&#36807;&#25152;&#26377;&#21487;&#36873;&#30340; <code class="literal">X</code> &#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;<code class="literal">MCML</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">1950</code>&#12290;</dd><dt><a href="#re.nm.3.5">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#31532;&#19968;&#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">M</code>&#65292;&#25509;&#30528;&#26159; <code class="literal">CM</code>&#65292;&#25509;&#30528;&#26159;&#21487;&#36873;&#30340; <code class="literal">L</code> &#23383;&#31526;&#21644;&#21487;&#36873;&#30340;&#31532;&#19968;&#20010; <code class="literal">X</code> &#23383;&#31526;&#65292;&#24182;&#19988;&#36339;&#36807;&#31532;&#20108;&#31532;&#19977;&#20010;&#21487;&#36873;&#30340; <code class="literal">X</code> &#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;<code class="literal">MCMLX</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">1960</code>&#12290;</dd><dt><a href="#re.nm.3.7">circled_4_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#31532;&#19968;&#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">M</code>&#65292;&#25509;&#30528;&#26159; <code class="literal">CM</code>&#65292;&#25509;&#30528;&#26159;&#21487;&#36873;&#30340; <code class="literal">L</code> &#23383;&#31526;&#21644;&#25152;&#26377;&#30340;&#19977;&#20010;&#21487;&#36873;&#30340; <code class="literal">X</code> &#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;<code class="literal">MCMLXXX</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">1980</code>&#12290;</dd><dt><a href="#re.nm.3.8">circled_5_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#31532;&#19968;&#20010;&#21487;&#36873;&#23383;&#31526;<code class="literal">M</code>&#65292;&#25509;&#30528;&#26159;<code class="literal">CM</code>&#65292;&#25509;&#30528;&#26159;&#21487;&#36873;&#30340; <code class="literal">L</code>&#23383;&#31526;&#21644;&#25152;&#26377;&#30340;&#19977;&#20010;&#21487;&#36873;&#30340;<code class="literal">X</code>&#23383;&#31526;&#65292;&#25509;&#30528;&#23601;<span class="emphasis"><em>&#26410;&#33021;&#21305;&#37197;</em></span> &#23383;&#31526;&#20018;&#30340;&#32467;&#23614;ie&#65292;&#22240;&#20026;&#36824;&#26377;&#19968;&#20010;&#26410;&#21305;&#37197;&#30340;<code class="literal">X</code> &#23383;&#31526;&#12290;&#25152;&#20197;&#25972;&#20010;&#27169;&#24335;&#21305;&#37197;&#22833;&#36133;&#24182;&#36820;&#22238;&#19968;&#20010; <code class="literal">None</code>.  <code class="literal">MCMLXXXX</code> &#19981;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#23545;&#20110;&#20010;&#20301;&#25968;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#26377;&#31867;&#20284;&#30340;&#34920;&#36798;&#26041;&#24335;&#65292;&#25105;&#23558;&#30465;&#30053;&#32454;&#33410;&#65292;&#30452;&#25509;&#23637;&#31034;&#32467;&#26524;&#12290;</p><div class="informalexample"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$'</span>
</pre></div><p>&#29992;&#21478;&#19968;&#31181; <code class="literal">{n,m}</code> &#35821;&#27861;&#34920;&#36798;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20250;&#22914;&#20309;&#21602;&#65311;&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#26032;&#30340;&#35821;&#27861;&#12290;</p><div class="example"><a name="re.nm.example"></a><p class="title"><b>&#20363;&nbsp;7.8.&nbsp;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;&#30830;&#35748;&#32599;&#39532;&#25968;&#23383;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MDLV')</span>             <a name="re.nm.4.1"></a>circled_1_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMDCLXVI')</span>         <a name="re.nm.4.2"></a>circled_2_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMMDCCCLXXXVIII')</span>  <a name="re.nm.4.3"></a>circled_3_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'I')</span>                <a name="re.nm.4.4"></a>circled_4_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.nm.4.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873;&#30340; <code class="literal">M</code> &#23383;&#31526;&#30340;&#19968;&#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">D?C{0,3}</code>&#65292;&#27492;&#22788;&#65292;&#20165;&#20165;&#21305;&#37197;&#21487;&#36873;&#30340;&#23383;&#31526; <code class="literal">D</code> &#21644; 0 &#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">C</code>&#12290;&#32487;&#32493;&#21521;&#21069;&#21305;&#37197;&#65292;&#21305;&#37197; <code class="literal">L?X{0,3}</code>&#65292;&#27492;&#22788;&#65292;&#21305;&#37197;&#21487;&#36873;&#30340; <code class="literal">L</code> &#23383;&#31526;&#21644; 0 &#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">X</code>&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">V?I{0,3}</code>&#65292;&#27492;&#22788;&#65292;&#21305;&#37197;&#21487;&#36873;&#30340; V &#21644; 0 &#20010;&#21487;&#36873;&#23383;&#31526; <code class="literal">I</code>&#65292;&#26368;&#21518;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;<code class="literal">MDLV</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">1555</code>&#12290;</dd><dt><a href="#re.nm.4.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#19977;&#20010;&#21487;&#36873;&#30340; <code class="literal">M</code> &#23383;&#31526;&#30340;&#20004;&#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">D?C{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010;&#23383;&#31526; <code class="literal">D</code> &#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">C</code> &#23383;&#31526;&#20013;&#30340;&#19968;&#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">L?X{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010; <code class="literal">L</code> &#23383;&#31526;&#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">X</code> &#23383;&#31526;&#20013;&#30340;&#19968;&#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">V?I{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010;&#23383;&#31526; <code class="literal">V</code> &#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">I</code> &#23383;&#31526;&#20013;&#30340;&#19968;&#20010;&#65292;&#25509;&#30528;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;<code class="literal">MMDCLXVI</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383; <code class="literal">2666</code>&#12290;</dd><dt><a href="#re.nm.4.3">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#19977;&#20010;&#21487;&#36873;&#30340; <code class="literal">M</code> &#23383;&#31526;&#30340;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">D?C{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010;&#23383;&#31526; <code class="literal">D</code> &#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">C</code> &#23383;&#31526;&#20013;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">L?X{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010; <code class="literal">L</code> &#23383;&#31526;&#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">X</code> &#23383;&#31526;&#20013;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">V?I{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010;&#23383;&#31526; <code class="literal">V</code> &#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">I</code> &#23383;&#31526;&#20013;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;<code class="literal">MMMDCCCLXXXVIII</code> &#34920;&#31034;&#32599;&#39532;&#25968;&#23383;<code class="literal">3888</code>&#65292;&#36825;&#20010;&#25968;&#23383;&#26159;&#19981;&#29992;&#25193;&#23637;&#35821;&#27861;&#21487;&#20197;&#20889;&#20986;&#30340;&#26368;&#22823;&#30340;&#32599;&#39532;&#25968;&#23383;&#12290;</dd><dt><a href="#re.nm.4.4">circled_4_delcric</a> </dt><dd>&#20180;&#32454;&#30475;&#21738;&#65281;(&#25105;&#20687;&#19968;&#20010;&#39764;&#26415;&#24072;&#19968;&#26679;&#65292;"<span class="quote">&#30475;&#20180;&#32454;&#21949;&#65292;&#23401;&#23376;&#20204;&#65292;&#25105;&#23558;&#35201;&#20174;&#25105;&#30340;&#24125;&#23376;&#20013;&#25341;&#20986;&#19968;&#21482;&#20820;&#23376;&#26469;&#21862;&#65281;</span>") &#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197; 3 &#20010;&#21487;&#36873; <code class="literal">M</code> &#23383;&#31526;&#30340; 0 &#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">D?C{0,3}</code>&#65292;&#27492;&#22788;&#65292;&#36339;&#36807;&#21487;&#36873;&#23383;&#31526; <code class="literal">D</code> &#24182;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">C</code> &#23383;&#31526;&#30340; 0 &#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">L?X{0,3}</code>&#65292;&#27492;&#22788;&#65292;&#36339;&#36807;&#21487;&#36873;&#23383;&#31526; <code class="literal">L</code> &#24182;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">X</code> &#23383;&#31526;&#30340; 0 &#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">V?I{0,3}</code>&#65292;&#27492;&#22788;&#36339;&#36807;&#21487;&#36873;&#23383;&#31526; <code class="literal">V</code> &#24182;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">I</code> &#23383;&#31526;&#30340;&#19968;&#20010;&#65292;&#26368;&#21518;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;&#21703;&#36187;&#65281;</dd></dl></div></div></div><br class="example-break"><p>&#22914;&#26524;&#20320;&#22312;&#31532;&#19968;&#36941;&#23601;&#36319;&#19978;&#24182;&#29702;&#35299;&#20102;&#25152;&#35762;&#30340;&#36825;&#20123;&#65292;&#37027;&#20040;&#20320;&#20570;&#30340;&#27604;&#25105;&#36824;&#35201;&#22909;&#12290;&#29616;&#22312;&#65292;&#20320;&#21487;&#20197;&#23581;&#35797;&#30528;&#29702;&#35299;&#21035;&#20154;&#22823;&#35268;&#27169;&#31243;&#24207;&#37324;&#20851;&#38190;&#20989;&#25968;&#20013;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#20102;&#12290;&#25110;&#32773;&#24819;&#35937;&#30528;&#20960;&#20010;&#26376;&#21518;&#22238;&#22836;&#29702;&#35299;&#20320;&#33258;&#24049;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#25105;&#26366;&#32463;&#20570;&#36807;&#36825;&#26679;&#30340;&#20107;&#24773;&#65292;&#20294;&#26159;&#23427;&#24182;&#19981;&#26159;&#37027;&#20040;&#26377;&#36259;&#12290;</p><p>&#22312;&#19979;&#19968;&#33410;&#37324;&#65292;&#20320;&#23558;&#20250;&#30740;&#31350;&#21478;&#22806;&#19968;&#31181;&#27491;&#21017;&#34920;&#36798;&#24335;&#35821;&#27861;&#65292;&#23427;&#21487;&#20197;&#20351;&#20320;&#30340;&#34920;&#36798;&#24335;&#20855;&#26377;&#26356;&#22909;&#30340;&#21487;&#32500;&#25345;&#24615;&#12290;</p></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="re.verbose"></a>7.5.&nbsp;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;</h2></div></div></div><div class="abstract"><p>&#36804;&#20170;&#20026;&#27490;&#65292;&#20320;&#21482;&#26159;&#22788;&#29702;&#36807;&#34987;&#25105;&#31216;&#20043;&#20026;"<span class="quote">&#32039;&#20945;</span>"&#31867;&#22411;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#27491;&#22914;&#20320;&#26366;&#30475;&#21040;&#30340;&#65292;&#23427;&#20204;&#38590;&#20197;&#38405;&#35835;&#65292;&#21363;&#20351;&#20320;&#28165;&#26970;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#21547;&#20041;&#65292;&#20320;&#20063;&#19981;&#33021;&#20445;&#35777;&#20845;&#20010;&#26376;&#20197;&#21518;&#20320;&#36824;&#33021;&#29702;&#35299;&#23427;&#12290;&#20320;&#30495;&#27491;&#25152;&#38656;&#30340;&#23601;&#26159;&#21033;&#29992;&#20869;&#32852;&#25991;&#26723; (inline documentation)&#12290;</p></div><p><span class="application">Python</span> &#20801;&#35768;&#29992;&#25143;&#21033;&#29992;&#25152;&#35859;&#30340;<span class="emphasis"><em>&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;</em></span> &#26469;&#23436;&#25104;&#36825;&#20010;&#20219;&#21153;&#12290;&#19968;&#20010;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#19968;&#20010;&#32039;&#20945;&#27491;&#21017;&#34920;&#36798;&#24335;&#20027;&#35201;&#21306;&#21035;&#34920;&#29616;&#22312;&#20004;&#20010;&#26041;&#38754;&#65306;</p><div class="itemizedlist"><ul><li>&#24573;&#30053;&#31354;&#30333;&#31526;&#12290;&#31354;&#26684;&#31526;&#65292;&#21046;&#34920;&#31526;&#65292;&#22238;&#36710;&#31526;&#19981;&#21305;&#37197;&#23427;&#20204;&#33258;&#36523;&#65292;&#23427;&#20204;&#26681;&#26412;&#19981;&#21442;&#19982;&#21305;&#37197;&#12290;(&#22914;&#26524;&#20320;&#24819;&#22312;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#21305;&#37197;&#19968;&#20010;&#31354;&#26684;&#31526;&#65292;&#20320;&#24517;&#39035;&#22312;&#23427;&#21069;&#38754;&#28155;&#21152;&#19968;&#20010;&#21453;&#26012;&#32447;&#31526;&#21495;&#23545;&#23427;&#36827;&#34892;&#36716;&#20041;&#12290;)</li><li>&#24573;&#30053;&#27880;&#37322;&#12290;&#22312;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#30340;&#27880;&#37322;&#21644;&#22312;&#26222;&#36890; <span class="application">Python</span> &#20195;&#30721;&#20013;&#30340;&#19968;&#26679;&#65306;&#24320;&#22987;&#20110;&#19968;&#20010;<code class="literal">#</code>&#31526;&#21495;&#65292;&#32467;&#26463;&#20110;&#34892;&#23614;&#12290;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#37319;&#29992;&#22312;&#19968;&#20010;&#22810;&#34892;&#23383;&#31526;&#20018;&#20013;&#27880;&#37322;&#65292;&#32780;&#19981;&#26159;&#22312;&#28304;&#20195;&#30721;&#20013;&#27880;&#37322;&#65292;&#23427;&#20204;&#20197;&#30456;&#21516;&#30340;&#26041;&#24335;&#24037;&#20316;&#12290;</li></ul></div><p>&#29992;&#19968;&#20010;&#20363;&#23376;&#21487;&#20197;&#35299;&#37322;&#24471;&#26356;&#28165;&#26970;&#12290;&#35753;&#25105;&#20204;&#37325;&#26032;&#26469;&#30475;&#21069;&#38754;&#30340;&#32039;&#20945;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#21033;&#29992;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#37325;&#26032;&#34920;&#36798;&#12290;&#19979;&#38754;&#30340;&#20363;&#23376;&#26174;&#31034;&#23454;&#29616;&#26041;&#27861;&#12290;</p><div class="example"><a name="d0e18954"></a><p class="title"><b>&#20363;&nbsp;7.9.&nbsp;&#24102;&#26377;&#20869;&#32852;&#27880;&#37322; (Inline Comments) &#30340;&#27491;&#21017;&#34920;&#36798;&#24335;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = """
    ^                   # beginning of string
    M{0,3}              # thousands - 0 to 3 M's
    (CM|CD|D?C{0,3})    # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
                        #            or 500-800 (D, followed by 0 to 3 C's)
    (XC|XL|L?X{0,3})    # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
                        #        or 50-80 (L, followed by 0 to 3 X's)
    (IX|IV|V?I{0,3})    # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
                        #        or 5-8 (V, followed by 0 to 3 I's)
    $                   # end of string
    """</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'M', re.VERBOSE)</span>                <a name="re.verbose.1.1"></a>circled_1_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MCMLXXXIX', re.VERBOSE)</span>        <a name="re.verbose.1.2"></a>circled_2_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'MMMDCCCLXXXVIII', re.VERBOSE)</span>  <a name="re.verbose.1.3"></a>circled_3_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x008EEB48&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'M')</span>                            <a name="re.verbose.1.4"></a>circled_4_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#re.verbose.1.1">circled_1_delcric</a> </dt><dd>&#24403;&#20351;&#29992;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#26102;&#65292;&#26368;&#37325;&#35201;&#30340;&#19968;&#20214;&#20107;&#24773;&#23601;&#26159;&#65306;&#24517;&#39035;&#20256;&#36882;&#19968;&#20010;&#39069;&#22806;&#30340;&#21442;&#25968; <code class="literal">re.VERBOSE</code>&#65292;&#35813;&#21442;&#25968;&#26159;&#23450;&#20041;&#22312; <code class="filename">re</code> &#27169;&#22359;&#20013;&#30340;&#19968;&#20010;&#24120;&#37327;&#65292;&#26631;&#24535;&#30528;&#24453;&#21305;&#37197;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#26159;&#19968;&#20010;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#27491;&#22914;&#20320;&#30475;&#21040;&#30340;&#65292;&#36825;&#20010;&#27169;&#24335;&#20013;&#65292;&#26377;&#24456;&#22810;&#31354;&#26684; (&#25152;&#26377;&#30340;&#31354;&#26684;&#37117;&#34987;&#24573;&#30053;)&#65292;&#21644;&#20960;&#20010;&#27880;&#37322; (&#25152;&#26377;&#30340;&#27880;&#37322;&#20063;&#34987;&#24573;&#30053;)&#12290;&#22914;&#26524;&#24573;&#30053;&#25152;&#26377;&#30340;&#31354;&#26684;&#21644;&#27880;&#37322;&#65292;&#23427;&#23601;&#21644;<a class="link" href="#re.nm" title="7.4.&nbsp;&#20351;&#29992; {n,m} &#35821;&#27861;">&#21069;&#38754;&#31456;&#33410;</a>&#37324;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#23436;&#20840;&#30456;&#21516;&#65292;&#20294;&#26159;&#20855;&#26377;&#26356;&#22909;&#30340;&#21487;&#35835;&#24615;&#12290;</dd><dt><a href="#re.verbose.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#19977;&#20010;&#21487;&#36873; <code class="literal">M</code> &#23383;&#31526;&#20013;&#30340;&#19968;&#20010;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">CM</code>&#65292;&#25509;&#30528;&#26159;&#23383;&#31526; <code class="literal">L</code> &#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">X</code> &#23383;&#31526;&#30340;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159; <code class="literal">IX</code>&#65292;&#28982;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.verbose.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#19977;&#20010;&#21487;&#36873;&#30340; <code class="literal">M</code> &#23383;&#31526;&#30340;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">D?C{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010;&#23383;&#31526; <code class="literal">D</code> &#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">C</code> &#23383;&#31526;&#20013;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">L?X{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010; <code class="literal">L</code> &#23383;&#31526;&#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">X</code> &#23383;&#31526;&#20013;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">V?I{0,3}</code>&#65292;&#27492;&#22788;&#20026;&#19968;&#20010;&#23383;&#31526; <code class="literal">V</code> &#21644;&#19977;&#20010;&#21487;&#36873; <code class="literal">I</code> &#23383;&#31526;&#20013;&#25152;&#26377;&#23383;&#31526;&#65292;&#25509;&#30528;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.verbose.1.4">circled_4_delcric</a> </dt><dd>&#36825;&#20010;&#27809;&#26377;&#21305;&#37197;&#12290;&#20026;&#20160;&#20040;&#21602;&#65311;&#22240;&#20026;&#27809;&#26377; <code class="literal">re.VERBOSE</code> &#26631;&#35760;&#65292;&#25152;&#20197; <code class="function">re.search</code> &#20989;&#25968;&#25226;&#27169;&#24335;&#20316;&#20026;&#19968;&#20010;&#32039;&#20945;&#27491;&#21017;&#34920;&#36798;&#24335;&#36827;&#34892;&#21305;&#37197;&#12290;<span class="application">Python</span> &#19981;&#33021;&#33258;&#21160;&#26816;&#27979;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#26159;&#20026;&#26494;&#25955;&#31867;&#22411;&#36824;&#26159;&#32039;&#20945;&#31867;&#22411;&#12290;<span class="application">Python</span> &#40664;&#35748;&#27599;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#37117;&#26159;&#32039;&#20945;&#31867;&#22411;&#30340;&#65292;&#38500;&#38750;&#20320;&#26174;&#24335;&#22320;&#26631;&#26126;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20026;&#26494;&#25955;&#31867;&#22411;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="re.phone"></a>7.6.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;</h2></div></div></div><div class="abstract"><p>&#36804;&#20170;&#20026;&#27490;&#65292;&#20320;&#20027;&#35201;&#26159;&#21305;&#37197;&#25972;&#20010;&#27169;&#24335;&#65292;&#19981;&#35770;&#26159;&#21305;&#37197;&#19978;&#65292;&#36824;&#26159;&#27809;&#26377;&#21305;&#37197;&#19978;&#12290;&#20294;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#36824;&#26377;&#27604;&#36825;&#26356;&#20026;&#24378;&#22823;&#30340;&#21151;&#33021;&#12290;&#24403;&#19968;&#20010;&#27169;&#24335;<span class="emphasis"><em>&#30830;&#23454;</em></span> &#21305;&#37197;&#19978;&#26102;&#65292;&#20320;&#21487;&#20197;&#33719;&#21462;&#27169;&#24335;&#20013;&#29305;&#23450;&#30340;&#29255;&#26029;&#65292;&#20320;&#21487;&#20197;&#21457;&#29616;&#20855;&#20307;&#21305;&#37197;&#30340;&#20301;&#32622;&#12290;</p></div><p>&#36825;&#20010;&#20363;&#23376;&#26469;&#28304;&#20110;&#25105;&#36935;&#21040;&#30340;&#21478;&#19968;&#20010;&#29616;&#23454;&#19990;&#30028;&#30340;&#38382;&#39064;&#65292;&#20063;&#26159;&#22312;&#20197;&#21069;&#30340;&#24037;&#20316;&#20013;&#36935;&#21040;&#30340;&#12290;&#38382;&#39064;&#26159;&#65306;&#35299;&#26512;&#19968;&#20010;&#32654;&#22269;&#30005;&#35805;&#21495;&#30721;&#12290;&#23458;&#25143;&#35201;&#33021; (&#22312;&#19968;&#20010;&#21333;&#19968;&#30340;&#21306;&#22495;&#20013;) &#36755;&#20837;&#20219;&#20309;&#25968;&#23383;&#65292;&#28982;&#21518;&#23384;&#20648;&#21306;&#21495;&#12289;&#24178;&#32447;&#21495;&#12289;&#30005;&#35805;&#21495;&#21644;&#19968;&#20010;&#21487;&#36873;&#30340;&#29420;&#31435;&#30340;&#20998;&#26426;&#21495;&#21040;&#20844;&#21496;&#25968;&#25454;&#24211;&#37324;&#12290;&#20026;&#27492;&#65292;&#25105;&#36890;&#36807;&#32593;&#32476;&#25214;&#20102;&#24456;&#22810;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#20363;&#23376;&#65292;&#20294;&#26159;&#27809;&#26377;&#19968;&#20010;&#33021;&#22815;&#23436;&#20840;&#28385;&#36275;&#25105;&#30340;&#35201;&#27714;&#12290;</p><p>&#36825;&#37324;&#21015;&#20030;&#20102;&#25105;&#24517;&#39035;&#33021;&#22815;&#25509;&#21463;&#30340;&#30005;&#35805;&#21495;&#30721;&#65306;</p><div class="itemizedlist"><ul><li><code class="literal">800-555-1212</code></li><li><code class="literal">800 555 1212</code></li><li><code class="literal">800.555.1212</code></li><li><code class="literal">(800) 555-1212</code></li><li><code class="literal">1-800-555-1212</code></li><li><code class="literal">800-555-1212-1234</code></li><li><code class="literal">800-555-1212x1234</code></li><li><code class="literal">800-555-1212 ext. 1234</code></li><li><code class="literal">work 1-(800) 555.1212 #1234</code></li></ul></div><p>&#26684;&#24335;&#21487;&#30495;&#22815;&#22810;&#30340;&#65281;&#25105;&#38656;&#35201;&#30693;&#36947;&#21306;&#21495;&#26159; <code class="literal">800</code>&#65292;&#24178;&#32447;&#21495;&#26159; <code class="literal">555</code>&#65292;&#30005;&#35805;&#21495;&#30340;&#20854;&#20182;&#25968;&#23383;&#20026; <code class="literal">1212</code>&#12290;&#23545;&#20110;&#37027;&#20123;&#26377;&#20998;&#26426;&#21495;&#30340;&#65292;&#25105;&#38656;&#35201;&#30693;&#36947;&#20998;&#26426;&#21495;&#20026; <code class="literal">1234</code>&#12290;</p><p>&#35753;&#25105;&#20204;&#23436;&#25104;&#30005;&#35805;&#21495;&#30721;&#35299;&#26512;&#36825;&#20010;&#24037;&#20316;&#65292;&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#31532;&#19968;&#27493;&#12290;</p><div class="example"><a name="re.phone.example"></a><p class="title"><b>&#20363;&nbsp;7.10.&nbsp;&#21457;&#29616;&#25968;&#23383;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern = re.compile(r'^(\d{3})-(\d{3})-(\d{4})$')</span> <a name="re.phone.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212').groups()</span>            <a name="re.phone.1.2"></a>circled_2_delcric
<font color="teal">('800', '555', '1212')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212-1234')</span>                <a name="re.phone.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.phone.1.1">circled_1_delcric</a> </dt><dd>&#25105;&#20204;&#36890;&#24120;&#20174;&#24038;&#21040;&#21491;&#38405;&#35835;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197; <code class="literal">(\d{3})</code>&#12290;<code class="literal">\d{3}</code> &#26159;&#20160;&#20040;&#21602;&#65311;&#22909;&#21543;&#65292;<code class="literal">{3}</code> &#30340;&#21547;&#20041;&#26159;"<span class="quote">&#31934;&#30830;&#21305;&#37197;&#19977;&#20010;&#25968;&#23383;</span>"&#65307;&#36825;&#26159;&#26366;&#22312;&#21069;&#38754;&#35265;&#21040;&#36807;&#30340; <a class="link" href="#re.nm" title="7.4.&nbsp;&#20351;&#29992; {n,m} &#35821;&#27861;"><code class="literal">{n,m}</code></a> &#35821;&#27861;&#30340;&#19968;&#31181;&#21464;&#24418;&#12290;<code class="literal">\d</code> &#30340;&#21547;&#20041;&#26159; "<span class="quote">&#20219;&#20309;&#19968;&#20010;&#25968;&#23383;</span>" (<code class="literal">0</code> &#21040; <code class="literal">9</code>)&#12290;&#25226;&#23427;&#20204;&#25918;&#22823;&#25324;&#21495;&#20013;&#24847;&#21619;&#30528;&#35201;"<span class="quote">&#31934;&#30830;&#21305;&#37197;&#19977;&#20010;&#25968;&#23383;&#20301;&#65292;<span class="emphasis"><em>&#25509;&#30528;&#25226;&#23427;&#20204;&#20316;&#20026;&#19968;&#20010;&#32452;&#20445;&#23384;&#19979;&#26469;&#65292;&#20197;&#20415;&#21518;&#38754;&#30340;&#35843;&#29992;</em></span></span>"&#12290;&#25509;&#30528;&#21305;&#37197;&#19968;&#20010;&#36830;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#21478;&#22806;&#19968;&#20010;&#31934;&#30830;&#21305;&#37197;&#19977;&#20010;&#25968;&#23383;&#20301;&#30340;&#32452;&#65292;&#25509;&#30528;&#21478;&#22806;&#19968;&#20010;&#36830;&#23383;&#31526;&#65292;&#25509;&#30528;&#21478;&#22806;&#19968;&#20010;&#31934;&#30830;&#21305;&#37197;&#22235;&#20010;&#25968;&#23383;&#20026;&#30340;&#32452;&#65292;&#25509;&#30528;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.phone.1.2">circled_2_delcric</a> </dt><dd>&#20026;&#20102;&#35775;&#38382;&#27491;&#21017;&#34920;&#36798;&#24335;&#35299;&#26512;&#36807;&#31243;&#20013;&#35760;&#24518;&#19979;&#26469;&#30340;&#22810;&#20010;&#32452;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="function">search</code> &#20989;&#25968;&#36820;&#22238;&#23545;&#35937;&#30340; <code class="function">groups()</code> &#20989;&#25968;&#12290;&#36825;&#20010;&#20989;&#25968;&#23558;&#36820;&#22238;&#19968;&#20010;&#20803;&#32452;&#65292;&#20803;&#32452;&#20013;&#30340;&#20803;&#32032;&#23601;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#23450;&#20041;&#30340;&#32452;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#23450;&#20041;&#20102;&#19977;&#20010;&#32452;&#65292;&#31532;&#19968;&#20010;&#32452;&#26377;&#19977;&#20010;&#25968;&#23383;&#20301;&#65292;&#31532;&#20108;&#20010;&#32452;&#26377;&#19977;&#20010;&#25968;&#23383;&#20301;&#65292;&#31532;&#19977;&#20010;&#32452;&#26377;&#22235;&#20010;&#25968;&#23383;&#20301;&#12290;</dd><dt><a href="#re.phone.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#19981;&#26159;&#26368;&#32456;&#30340;&#31572;&#26696;&#65292;&#22240;&#20026;&#23427;&#19981;&#33021;&#22788;&#29702;&#22312;&#30005;&#35805;&#21495;&#30721;&#32467;&#23614;&#26377;&#20998;&#26426;&#21495;&#30340;&#24773;&#20917;&#65292;&#20026;&#27492;&#65292;&#25105;&#20204;&#38656;&#35201;&#25193;&#23637;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e19229"></a><p class="title"><b>&#20363;&nbsp;7.11.&nbsp;&#21457;&#29616;&#20998;&#26426;&#21495;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern = re.compile(r'^(\d{3})-(\d{3})-(\d{4})-(\d+)$')</span> <a name="re.phone.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212-1234').groups()</span>             <a name="re.phone.2.2"></a>circled_2_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800 555 1212 1234')</span>                      <a name="re.phone.2.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212')</span>                           <a name="re.phone.2.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.phone.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#19978;&#19968;&#20010;&#20960;&#20046;&#30456;&#21516;&#65292;&#27491;&#20687;&#21069;&#38754;&#30340;&#37027;&#26679;&#65292;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#21305;&#37197;&#19968;&#20010;&#26377;&#19977;&#20010;&#25968;&#23383;&#20301;&#30340;&#32452;&#24182;&#35760;&#24518;&#19979;&#26469;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#36830;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#19977;&#20010;&#25968;&#23383;&#20301;&#30340;&#32452;&#24182;&#35760;&#24518;&#19979;&#26469;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#36830;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#22235;&#20010;&#25968;&#23383;&#20301;&#30340;&#32452;&#24182;&#35760;&#24518;&#19979;&#26469;&#12290;&#19981;&#21516;&#30340;&#22320;&#26041;&#26159;&#20320;&#25509;&#30528;&#21448;&#21305;&#37197;&#20102;&#21478;&#19968;&#20010;&#36830;&#23383;&#31526;&#65292;&#28982;&#21518;&#26159;&#19968;&#20010;&#26377;&#19968;&#20010;&#25110;&#32773;&#22810;&#20010;&#25968;&#23383;&#20301;&#30340;&#32452;&#24182;&#35760;&#24518;&#19979;&#26469;&#65292;&#26368;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.phone.2.2">circled_2_delcric</a> </dt><dd>&#20989;&#25968; <code class="function">groups()</code> &#29616;&#22312;&#36820;&#22238;&#19968;&#20010;&#26377;&#22235;&#20010;&#20803;&#32032;&#30340;&#20803;&#32452;&#65292;&#30001;&#20110;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#23450;&#20041;&#20102;&#22235;&#20010;&#35760;&#24518;&#30340;&#32452;&#12290;</dd><dt><a href="#re.phone.2.3">circled_3_delcric</a> </dt><dd>&#19981;&#24184;&#30340;&#26159;&#65292;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20063;&#19981;&#26159;&#26368;&#32456;&#30340;&#31572;&#26696;&#65292;&#22240;&#20026;&#23427;&#20551;&#35774;&#30005;&#35805;&#21495;&#30721;&#30340;&#19981;&#21516;&#37096;&#20998;&#26159;&#30001;&#36830;&#23383;&#31526;&#20998;&#21106;&#30340;&#12290;&#22914;&#26524;&#19968;&#20010;&#30005;&#35805;&#21495;&#30721;&#26159;&#30001;&#31354;&#26684;&#31526;&#12289;&#36887;&#21495;&#25110;&#32773;&#28857;&#21495;&#20998;&#21106;&#21602;&#65311;&#20320;&#38656;&#35201;&#19968;&#20010;&#26356;&#19968;&#33324;&#30340;&#35299;&#20915;&#26041;&#26696;&#26469;&#21305;&#37197;&#20960;&#31181;&#19981;&#21516;&#30340;&#20998;&#21106;&#31867;&#22411;&#12290;</dd><dt><a href="#re.phone.2.4">circled_4_delcric</a> </dt><dd>&#21834;&#21568;&#65281;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#19981;&#20165;&#19981;&#33021;&#35299;&#20915;&#20320;&#24819;&#35201;&#30340;&#20219;&#20309;&#38382;&#39064;&#65292;&#21453;&#32780;&#24615;&#33021;&#26356;&#24369;&#20102;&#65292;&#22240;&#20026;&#29616;&#22312;&#20320;&#29978;&#33267;&#19981;&#33021;&#35299;&#26512;&#19968;&#20010;&#27809;&#26377;&#20998;&#26426;&#21495;&#30340;&#30005;&#35805;&#21495;&#30721;&#20102;&#12290;&#36825;&#26681;&#26412;&#19981;&#26159;&#20320;&#24819;&#35201;&#30340;&#65292;&#22914;&#26524;&#26377;&#20998;&#26426;&#21495;&#65292;&#20320;&#35201;&#30693;&#36947;&#20998;&#26426;&#21495;&#26159;&#20160;&#20040;&#65292;&#22914;&#26524;&#27809;&#26377;&#20998;&#26426;&#21495;&#65292;&#20320;&#20173;&#28982;&#24819;&#35201;&#30693;&#36947;&#20027;&#30005;&#35805;&#21495;&#30721;&#30340;&#20854;&#20182;&#37096;&#20998;&#26159;&#20160;&#20040;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#19979;&#19968;&#20010;&#20363;&#23376;&#23637;&#31034;&#27491;&#21017;&#34920;&#36798;&#24335;&#22788;&#29702;&#19968;&#20010;&#30005;&#35805;&#21495;&#30721;&#20869;&#37096;&#65292;&#37319;&#29992;&#19981;&#21516;&#20998;&#38548;&#31526;&#30340;&#24773;&#20917;&#12290;</p><div class="example"><a name="d0e19289"></a><p class="title"><b>&#20363;&nbsp;7.12.&nbsp;&#22788;&#29702;&#19981;&#21516;&#20998;&#38548;&#31526;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern = re.compile(r'^(\d{3})\D+(\d{3})\D+(\d{4})\D+(\d+)$')</span> <a name="re.phone.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800 555 1212 1234').groups()</span>                   <a name="re.phone.3.2"></a>circled_2_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212-1234').groups()</span>                   <a name="re.phone.3.3"></a>circled_3_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('80055512121234')</span>                               <a name="re.phone.3.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212')</span>                                 <a name="re.phone.3.5"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.phone.3.1">circled_1_delcric</a> </dt><dd>&#24403;&#24515;&#21862;&#65281;&#20320;&#39318;&#20808;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#19977;&#20010;&#25968;&#23383;&#20301;&#30340;&#32452;&#65292;&#25509;&#30528;&#26159; <code class="literal">\D+</code>&#65292;&#36825;&#26159;&#20010;&#20160;&#20040;&#19996;&#35199;&#65311;&#22909;&#21543;&#65292;<code class="literal">\D</code> &#21305;&#37197;&#20219;&#24847;&#23383;&#31526;&#65292;<span class="emphasis"><em>&#38500;&#20102;</em></span> &#25968;&#23383;&#20301;&#65292;<code class="literal">+</code> &#34920;&#31034;"<span class="quote">1 &#20010;&#25110;&#32773;&#22810;&#20010;</span>"&#65292;&#22240;&#27492; <code class="literal">\D+</code> &#21305;&#37197;&#19968;&#20010;&#25110;&#32773;&#22810;&#20010;&#19981;&#26159;&#25968;&#23383;&#20301;&#30340;&#23383;&#31526;&#12290;&#36825;&#23601;&#26159;&#20320;&#26367;&#25442;&#36830;&#23383;&#31526;&#20026;&#20102;&#21305;&#37197;&#19981;&#21516;&#20998;&#38548;&#31526;&#25152;&#29992;&#30340;&#26041;&#27861;&#12290;</dd><dt><a href="#re.phone.3.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992; <code class="literal">\D+</code> &#20195;&#26367; <code class="literal">-</code> &#24847;&#21619;&#30528;&#29616;&#22312;&#20320;&#21487;&#20197;&#21305;&#37197;&#20013;&#38388;&#26159;&#31354;&#26684;&#31526;&#20998;&#21106;&#30340;&#30005;&#35805;&#21495;&#30721;&#20102;&#12290;</dd><dt><a href="#re.phone.3.3">circled_3_delcric</a> </dt><dd>&#24403;&#28982;&#65292;&#29992;&#36830;&#23383;&#31526;&#20998;&#21106;&#30340;&#30005;&#35805;&#21495;&#30721;&#20063;&#33021;&#22815;&#34987;&#35782;&#21035;&#12290;</dd><dt><a href="#re.phone.3.4">circled_4_delcric</a> </dt><dd>&#19981;&#24184;&#30340;&#26159;&#65292;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20173;&#28982;&#19981;&#26159;&#26368;&#32456;&#31572;&#26696;&#65292;&#22240;&#20026;&#23427;&#20551;&#35774;&#30005;&#35805;&#21495;&#30721;&#19968;&#23450;&#26377;&#20998;&#38548;&#31526;&#12290;&#22914;&#26524;&#30005;&#35805;&#21495;&#30721;&#20013;&#38388;&#27809;&#26377;&#31354;&#26684;&#31526;&#25110;&#32773;&#36830;&#23383;&#31526;&#30340;&#24773;&#20917;&#20250;&#24590;&#26679;&#21738;&#65311;</dd><dt><a href="#re.phone.3.4">circled_4_delcric</a> </dt><dd>&#25105;&#30340;&#22825;&#65281;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20063;&#27809;&#26377;&#36798;&#21040;&#25105;&#20204;&#23545;&#20110;&#20998;&#26426;&#21495;&#35782;&#21035;&#30340;&#35201;&#27714;&#12290;&#29616;&#22312;&#20320;&#20849;&#26377;&#20004;&#20010;&#38382;&#39064;&#65292;&#20294;&#26159;&#20320;&#21487;&#20197;&#21033;&#29992;&#30456;&#21516;&#30340;&#25216;&#26415;&#26469;&#35299;&#20915;&#23427;&#20204;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#19979;&#19968;&#20010;&#20363;&#23376;&#23637;&#31034;&#27491;&#21017;&#34920;&#36798;&#24335;&#22788;&#29702;<span class="emphasis"><em>&#27809;&#26377;</em></span> &#20998;&#38548;&#31526;&#30340;&#30005;&#35805;&#21495;&#30721;&#30340;&#24773;&#20917;&#12290;</p><div class="example"><a name="d0e19386"></a><p class="title"><b>&#20363;&nbsp;7.13.&nbsp;&#22788;&#29702;&#27809;&#26377;&#20998;&#38548;&#31526;&#30340;&#25968;&#23383;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern = re.compile(r'^(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')</span> <a name="re.phone.4.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('80055512121234').groups()</span>                      <a name="re.phone.4.2"></a>circled_2_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800.555.1212 x1234').groups()</span>                  <a name="re.phone.4.3"></a>circled_3_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212').groups()</span>                        <a name="re.phone.4.4"></a>circled_4_delcric
<font color="teal">('800', '555', '1212', '')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('(800)5551212 x1234')</span>                           <a name="re.phone.4.5"></a>circled_5_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.phone.4.1">circled_1_delcric</a> </dt><dd>&#21644;&#19978;&#19968;&#27493;&#30456;&#27604;&#65292;&#20320;&#25152;&#20570;&#30340;&#21807;&#19968;&#21464;&#21270;&#23601;&#26159;&#25226;&#25152;&#26377;&#30340; <code class="literal">+</code> &#21464;&#25104; <code class="literal">*</code>&#12290;&#22312;&#30005;&#35805;&#21495;&#30721;&#30340;&#19981;&#21516;&#37096;&#20998;&#20043;&#38388;&#19981;&#20877;&#21305;&#37197; <code class="literal">\D+</code>&#65292;&#32780;&#26159;&#21305;&#37197; <code class="literal">\D*</code> &#20102;&#12290;&#36824;&#35760;&#24471; <code class="literal">+</code> &#30340;&#21547;&#20041;&#26159;"<span class="quote">1 &#25110;&#32773;&#22810;&#20010;</span>"&#21527;? &#22909;&#30340;&#65292;<code class="literal">*</code> &#30340;&#21547;&#20041;&#26159;"<span class="quote">0 &#25110;&#32773;&#22810;&#20010;</span>"&#12290;&#22240;&#27492;&#65292;&#29616;&#22312;&#20320;&#24212;&#35813;&#33021;&#22815;&#35299;&#26512;&#27809;&#26377;&#20998;&#38548;&#31526;&#30340;&#30005;&#35805;&#21495;&#30721;&#20102;&#12290;</dd><dt><a href="#re.phone.4.2">circled_2_delcric</a> </dt><dd>&#20320;&#30631;&#65292;&#23427;&#30495;&#30340;&#21487;&#20197;&#32988;&#20219;&#12290;&#20026;&#20160;&#20040;&#65311;&#39318;&#20808;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#19977;&#20010;&#25968;&#23383;&#20301; (<code class="literal">800</code>) &#30340;&#32452;&#65292;&#25509;&#30528;&#26159; 0 &#20010;&#38750;&#25968;&#23383;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#19977;&#20010;&#25968;&#23383;&#20301; (<code class="literal">555</code>) &#30340;&#32452;&#65292;&#25509;&#30528;&#26159; 0 &#20010;&#38750;&#25968;&#23383;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#22235;&#20010;&#25968;&#23383;&#20301; (<code class="literal">1212</code>) &#30340;&#32452;&#65292;&#25509;&#30528;&#26159; 0 &#20010;&#38750;&#25968;&#23383;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#20219;&#24847;&#25968;&#23383;&#20301; (<code class="literal">1234</code>) &#30340;&#32452;&#65292;&#26368;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.phone.4.3">circled_3_delcric</a> </dt><dd>&#23545;&#20110;&#20854;&#20182;&#30340;&#21464;&#21270;&#20063;&#33021;&#22815;&#21305;&#37197;&#65306;&#27604;&#22914;&#28857;&#21495;&#20998;&#38548;&#31526;&#65292;&#22312;&#20998;&#26426;&#21495;&#21069;&#38754;&#26082;&#26377;&#31354;&#26684;&#31526;&#21448;&#26377; <code class="literal">x</code> &#31526;&#21495;&#30340;&#24773;&#20917;&#20063;&#33021;&#22815;&#21305;&#37197;&#12290;</dd><dt><a href="#re.phone.4.4">circled_4_delcric</a> </dt><dd>&#26368;&#21518;&#65292;&#20320;&#24050;&#32463;&#35299;&#20915;&#20102;&#38271;&#26399;&#23384;&#22312;&#30340;&#19968;&#20010;&#38382;&#39064;&#65306;&#29616;&#22312;&#20998;&#26426;&#21495;&#26159;&#21487;&#36873;&#30340;&#20102;&#12290;&#22914;&#26524;&#27809;&#26377;&#21457;&#29616;&#20998;&#26426;&#21495;&#65292;<code class="function">groups()</code> &#20989;&#25968;&#20173;&#28982;&#36820;&#22238;&#19968;&#20010;&#26377;&#22235;&#20010;&#20803;&#32032;&#30340;&#20803;&#32452;&#65292;&#20294;&#26159;&#31532;&#22235;&#20010;&#20803;&#32032;&#21482;&#26159;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#12290;</dd><dt><a href="#re.phone.4.5">circled_5_delcric</a> </dt><dd>&#25105;&#19981;&#21916;&#27426;&#20570;&#19968;&#20010;&#22351;&#28040;&#24687;&#30340;&#20256;&#36882;&#20154;&#65292;&#27492;&#26102;&#20320;&#36824;&#27809;&#26377;&#23436;&#20840;&#32467;&#26463;&#36825;&#20010;&#38382;&#39064;&#12290;&#36824;&#26377;&#20160;&#20040;&#38382;&#39064;&#21602;&#65311;&#24403;&#22312;&#21306;&#21495;&#21069;&#38754;&#36824;&#26377;&#19968;&#20010;&#39069;&#22806;&#30340;&#23383;&#31526;&#26102;&#65292;&#32780;&#27491;&#21017;&#34920;&#36798;&#24335;&#20551;&#35774;&#21306;&#21495;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#22240;&#27492;&#19981;&#33021;&#21305;&#37197;&#12290;&#36825;&#20010;&#19981;&#26159;&#38382;&#39064;&#65292;&#20320;&#21487;&#20197;&#21033;&#29992;&#30456;&#21516;&#30340;&#25216;&#26415;"<span class="quote">0&#25110;&#32773;&#22810;&#20010;&#38750;&#25968;&#23383;&#23383;&#31526;</span>"&#26469;&#36339;&#36807;&#21306;&#21495;&#21069;&#38754;&#30340;&#23383;&#31526;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#19979;&#19968;&#20010;&#20363;&#23376;&#23637;&#31034;&#22914;&#20309;&#35299;&#20915;&#30005;&#35805;&#21495;&#30721;&#21069;&#38754;&#26377;&#20854;&#20182;&#23383;&#31526;&#30340;&#24773;&#20917;&#12290;</p><div class="example"><a name="d0e19501"></a><p class="title"><b>&#20363;&nbsp;7.14.&nbsp;&#22788;&#29702;&#24320;&#22987;&#23383;&#31526;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')</span> <a name="re.phone.5.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('(800)5551212 ext. 1234').groups()</span>                 <a name="re.phone.5.2"></a>circled_2_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212').groups()</span>                           <a name="re.phone.5.3"></a>circled_3_delcric
<font color="teal">('800', '555', '1212', '')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('work 1-(800) 555.1212 #1234')</span>                     <a name="re.phone.5.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.phone.5.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#21069;&#38754;&#30340;&#20960;&#20046;&#30456;&#21516;&#65292;&#20294;&#23427;&#22312;&#31532;&#19968;&#20010;&#35760;&#24518;&#32452; (&#21306;&#21495;) &#21069;&#38754;&#21305;&#37197; <code class="literal">\D*</code>&#65292;0 &#25110;&#32773;&#22810;&#20010;&#38750;&#25968;&#23383;&#23383;&#31526;&#12290;&#27880;&#24847;&#65292;&#27492;&#22788;&#20320;&#27809;&#26377;&#35760;&#24518;&#36825;&#20123;&#38750;&#25968;&#23383;&#23383;&#31526; (&#23427;&#20204;&#27809;&#26377;&#34987;&#25324;&#21495;&#25324;&#36215;&#26469;)&#12290;&#22914;&#26524;&#20320;&#21457;&#29616;&#23427;&#20204;&#65292;&#21482;&#26159;&#36339;&#36807;&#23427;&#20204;&#65292;&#25509;&#30528;&#21482;&#35201;&#21305;&#37197;&#19978;&#23601;&#24320;&#22987;&#35760;&#24518;&#21306;&#21495;&#12290;</dd><dt><a href="#re.phone.5.2">circled_2_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#25104;&#21151;&#22320;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;&#65292;&#21363;&#20351;&#22312;&#21306;&#21495;&#21069;&#38754;&#26377;&#19968;&#20010;&#24038;&#25324;&#21495;&#12290;(&#22312;&#21306;&#21495;&#21518;&#38754;&#30340;&#21491;&#25324;&#21495;&#20063;&#24050;&#32463;&#34987;&#22788;&#29702;&#65292;&#23427;&#34987;&#30475;&#25104;&#38750;&#25968;&#23383;&#23383;&#31526;&#20998;&#38548;&#31526;&#65292;&#30001;&#31532;&#19968;&#20010;&#35760;&#24518;&#32452;&#21518;&#38754;&#30340; <code class="literal">\D*</code> &#21305;&#37197;&#12290;)</dd><dt><a href="#re.phone.5.3">circled_3_delcric</a> </dt><dd>&#36827;&#34892;&#20180;&#32454;&#30340;&#26816;&#26597;&#65292;&#20445;&#35777;&#20320;&#27809;&#26377;&#30772;&#22351;&#21069;&#38754;&#33021;&#22815;&#21305;&#37197;&#30340;&#20219;&#20309;&#24773;&#20917;&#12290;&#30001;&#20110;&#39318;&#23383;&#31526;&#26159;&#23436;&#20840;&#21487;&#36873;&#30340;&#65292;&#36825;&#20010;&#27169;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#65292;&#25509;&#30528;&#26159; 0 &#20010;&#38750;&#25968;&#23383;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#19977;&#20010;&#25968;&#23383;&#23383;&#31526;&#30340;&#35760;&#24518;&#32452; (<code class="literal">800</code>)&#65292;&#25509;&#30528;&#26159; 1 &#20010;&#38750;&#25968;&#23383;&#23383;&#31526; (&#36830;&#23383;&#31526;)&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#19977;&#20010;&#25968;&#23383;&#23383;&#31526;&#30340;&#35760;&#24518;&#32452; (<code class="literal">555</code>)&#65292;&#25509;&#30528;&#26159; 1 &#20010;&#38750;&#25968;&#23383;&#23383;&#31526; (&#36830;&#23383;&#31526;)&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377;&#22235;&#20010;&#25968;&#23383;&#23383;&#31526;&#30340;&#35760;&#24518;&#32452; (<code class="literal">1212</code>)&#65292;&#25509;&#30528;&#26159; 0 &#20010;&#38750;&#25968;&#23383;&#23383;&#31526;&#65292;&#25509;&#30528;&#26159;&#19968;&#20010;&#26377; 0 &#20010;&#25968;&#23383;&#20301;&#30340;&#35760;&#24518;&#32452;&#65292;&#26368;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</dd><dt><a href="#re.phone.5.4">circled_4_delcric</a> </dt><dd>&#27492;&#22788;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#35753;&#25105;&#20135;&#29983;&#20102;&#25214;&#19968;&#20010;&#30828;&#19996;&#35199;&#25366;&#20986;&#33258;&#24049;&#30340;&#30524;&#30555;&#30340;&#20914;&#21160;&#12290;&#20026;&#20160;&#20040;&#36825;&#20010;&#30005;&#35805;&#21495;&#30721;&#27809;&#26377;&#21305;&#37197;&#19978;&#65311;&#22240;&#20026;&#22312;&#23427;&#30340;&#21306;&#21495;&#21069;&#38754;&#26377;&#19968;&#20010; <code class="literal">1</code>&#65292;&#20294;&#26159;&#20320;&#35748;&#20026;&#22312;&#21306;&#21495;&#21069;&#38754;&#30340;&#25152;&#26377;&#23383;&#31526;&#37117;&#26159;&#38750;&#25968;&#23383;&#23383;&#31526; (<code class="literal">\D*</code>)&#12290;&#21769;&#65281;</dd></dl></div></div></div><br class="example-break"><p>&#35753;&#25105;&#20204;&#24448;&#22238;&#30475;&#19968;&#19979;&#12290;&#36804;&#20170;&#20026;&#27490;&#65292;&#27491;&#21017;&#34920;&#36798;&#24335;&#24635;&#26159;&#20174;&#19968;&#20010;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#21305;&#37197;&#12290;&#20294;&#26159;&#29616;&#22312;&#20320;&#30475;&#21040;&#20102;&#65292;&#26377;&#24456;&#22810;&#19981;&#30830;&#23450;&#30340;&#24773;&#20917;&#38656;&#35201;&#20320;&#24573;&#30053;&#12290;&#19982;&#20854;&#23613;&#21147;&#20840;&#37096;&#21305;&#37197;&#23427;&#20204;&#65292;&#36824;&#19981;&#22914;&#20840;&#37096;&#36339;&#36807;&#23427;&#20204;&#65292;&#35753;&#25105;&#20204;&#37319;&#29992;&#19968;&#20010;&#19981;&#21516;&#30340;&#26041;&#27861;&#65306;&#26681;&#26412;&#19981;&#26174;&#24335;&#22320;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#12290;&#19979;&#38754;&#30340;&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#36825;&#20010;&#26041;&#27861;&#12290;</p><div class="example"><a name="d0e19579"></a><p class="title"><b>&#20363;&nbsp;7.15.&nbsp;&#30005;&#35805;&#21495;&#30721;&#65292;&#26080;&#35770;&#20309;&#26102;&#25105;&#37117;&#35201;&#25214;&#21040;&#23427;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')</span> <a name="re.phone.6.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('work 1-(800) 555.1212 #1234').groups()</span>        <a name="re.phone.6.2"></a>circled_2_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212')</span>                                <a name="re.phone.6.3"></a>circled_3_delcric
<font color="teal">('800', '555', '1212', '')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('80055512121234')</span>                              <a name="re.phone.6.4"></a>circled_4_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.phone.6.1">circled_1_delcric</a> </dt><dd>&#27880;&#24847;&#65292;&#22312;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#24320;&#22987;&#23569;&#20102;&#19968;&#20010; <code class="literal">^</code> &#23383;&#31526;&#12290;&#20320;&#19981;&#20877;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#20102;&#65292;&#20063;&#23601;&#26159;&#35828;&#65292;&#20320;&#38656;&#35201;&#29992;&#20320;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#21305;&#37197;&#25972;&#20010;&#36755;&#20837;&#23383;&#31526;&#20018;&#65292;&#38500;&#27492;&#20043;&#22806;&#27809;&#26377;&#21035;&#30340;&#24847;&#24605;&#20102;&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#24341;&#25806;&#23558;&#35201;&#21162;&#21147;&#35745;&#31639;&#20986;&#24320;&#22987;&#21305;&#37197;&#36755;&#20837;&#23383;&#31526;&#20018;&#30340;&#20301;&#32622;&#65292;&#24182;&#19988;&#20174;&#36825;&#20010;&#20301;&#32622;&#24320;&#22987;&#21305;&#37197;&#12290;</dd><dt><a href="#re.phone.6.2">circled_2_delcric</a> </dt><dd>&#29616;&#22312;&#20320;&#21487;&#20197;&#25104;&#21151;&#35299;&#26512;&#19968;&#20010;&#30005;&#35805;&#21495;&#30721;&#20102;&#65292;&#26080;&#35770;&#36825;&#20010;&#30005;&#35805;&#21495;&#30721;&#30340;&#39318;&#23383;&#31526;&#26159;&#19981;&#26159;&#25968;&#23383;&#65292;&#26080;&#35770;&#22312;&#30005;&#35805;&#21495;&#30721;&#21508;&#37096;&#20998;&#20043;&#38388;&#26377;&#22810;&#23569;&#20219;&#24847;&#31867;&#22411;&#30340;&#20998;&#38548;&#31526;&#12290;</dd><dt><a href="#re.phone.6.3">circled_3_delcric</a> </dt><dd>&#20180;&#32454;&#26816;&#26597;&#65292;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20173;&#28982;&#24037;&#20316;&#30340;&#24456;&#22909;&#12290;</dd><dt><a href="#re.phone.6.4">circled_4_delcric</a> </dt><dd>&#36824;&#26159;&#33021;&#22815;&#24037;&#20316;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#30475;&#30475;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#33021;&#22815;&#22833;&#25511;&#24471;&#22810;&#24555;&#65311;&#22238;&#22836;&#30475;&#30475;&#21069;&#38754;&#30340;&#20363;&#23376;&#65292;&#20320;&#36824;&#33021;&#21306;&#21035;&#23427;&#20204;&#20040;&#65311;</p><p>&#24403;&#20320;&#36824;&#33021;&#22815;&#29702;&#35299;&#36825;&#20010;&#26368;&#32456;&#31572;&#26696;&#30340;&#26102;&#20505; (&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#23601;&#26159;&#26368;&#32456;&#31572;&#26696;&#65292;&#21363;&#20351;&#20320;&#21457;&#29616;&#19968;&#31181;&#23427;&#19981;&#33021;&#22788;&#29702;&#30340;&#24773;&#20917;&#65292;&#25105;&#20063;&#30495;&#30340;&#19981;&#24819;&#30693;&#36947;&#23427;&#20102;)&#65292;&#22312;&#20320;&#24536;&#35760;&#20026;&#20160;&#20040;&#20320;&#36825;&#20040;&#36873;&#25321;&#20043;&#21069;&#65292;&#35753;&#25105;&#20204;&#25226;&#23427;&#20889;&#25104;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#24418;&#24335;&#12290;</p><div class="example"><a name="d0e19641"></a><p class="title"><b>&#20363;&nbsp;7.16.&nbsp;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721; (&#26368;&#32456;&#29256;&#26412;)</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern = re.compile(r'''
                # don't match beginning of string, number can start anywhere
    (\d{3})     # area code is 3 digits (e.g. '800')
    \D*         # optional separator is any number of non-digits
    (\d{3})     # trunk is 3 digits (e.g. '555')
    \D*         # optional separator
    (\d{4})     # rest of number is 4 digits (e.g. '1212')
    \D*         # optional separator
    (\d*)       # extension is optional and can be any number of digits
    $           # end of string
    ''', re.VERBOSE)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('work 1-(800) 555.1212 #1234').groups()</span>        <a name="re.phone.7.1"></a>circled_1_delcric
<font color="teal">('800', '555', '1212', '1234')</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">phonePattern.search('800-555-1212')</span>                                <a name="re.phone.7.2"></a>circled_2_delcric
<font color="teal">('800', '555', '1212', '')</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#re.phone.7.1">circled_1_delcric</a> </dt><dd>&#38500;&#20102;&#34987;&#20998;&#25104;&#22810;&#34892;&#65292;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#26368;&#21518;&#19968;&#27493;&#30340;&#37027;&#20010;&#23436;&#20840;&#30456;&#21516;&#65292;&#22240;&#27492;&#23427;&#33021;&#22815;&#35299;&#26512;&#30456;&#21516;&#30340;&#36755;&#20837;&#19968;&#28857;&#20063;&#19981;&#22855;&#24618;&#12290;</dd><dt><a href="#re.phone.7.2">circled_2_delcric</a> </dt><dd>&#36827;&#34892;&#26368;&#21518;&#30340;&#20180;&#32454;&#26816;&#26597;&#12290;&#24456;&#22909;&#65292;&#20173;&#28982;&#24037;&#20316;&#12290;&#20320;&#32456;&#20110;&#23436;&#25104;&#20102;&#36825;&#20214;&#20219;&#21153;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#20851;&#20110;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>Regular Expression HOWTO (<a href="http://py-howto.sourceforge.net/regex/regex.html">http://py-howto.sourceforge.net/regex/regex.html</a>) &#35762;&#35299;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#22914;&#20309;&#22312; <span class="application">Python</span> &#20013;&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#27010;&#36848;&#20102; <code class="filename">re</code> module (<a href="http://www.python.org/doc/current/lib/module-re.html">http://www.python.org/doc/current/lib/module-re.html</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="re.summary"></a>7.7.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#36825;&#21482;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#33021;&#22815;&#23436;&#25104;&#24037;&#20316;&#30340;&#24456;&#23569;&#19968;&#37096;&#20998;&#12290;&#25442;&#21477;&#35805;&#35828;&#65292;&#21363;&#20351;&#20320;&#29616;&#22312;&#22791;&#21463;&#25171;&#20987;&#65292;&#30456;&#20449;&#25105;&#65292;&#20320;&#20063;&#19981;&#26159;&#20160;&#20040;&#20063;&#27809;&#35265;&#36807;&#20102;&#12290;</p></div><p>&#29616;&#22312;&#65292;&#20320;&#24212;&#35813;&#29087;&#24713;&#19979;&#21015;&#25216;&#24039;&#65306;</p><div class="itemizedlist"><ul><li><code class="literal">^</code> &#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#12290;</li><li><code class="literal">$</code> &#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;</li><li><code class="literal">\b</code> &#21305;&#37197;&#19968;&#20010;&#21333;&#35789;&#30340;&#36793;&#30028;&#12290;</li><li><code class="literal">\d</code> &#21305;&#37197;&#20219;&#24847;&#25968;&#23383;&#12290;</li><li><code class="literal">\D</code> &#21305;&#37197;&#20219;&#24847;&#38750;&#25968;&#23383;&#23383;&#31526;&#12290;</li><li><code class="literal">x?</code> &#21305;&#37197;&#19968;&#20010;&#21487;&#36873;&#30340; <code class="literal">x</code> &#23383;&#31526; (&#25442;&#35328;&#20043;&#65292;&#23427;&#21305;&#37197; 1 &#27425;&#25110;&#32773; 0 &#27425; <code class="literal">x</code> &#23383;&#31526;)&#12290;</li><li><code class="literal">x*</code> &#21305;&#37197;0&#27425;&#25110;&#32773;&#22810;&#27425; <code class="literal">x</code> &#23383;&#31526;&#12290;</li><li><code class="literal">x+</code> &#21305;&#37197;1&#27425;&#25110;&#32773;&#22810;&#27425; <code class="literal">x</code> &#23383;&#31526;&#12290;</li><li><code class="literal">x{n,m}</code> &#21305;&#37197; <code class="literal">x</code> &#23383;&#31526;&#65292;&#33267;&#23569; <code class="literal">n</code> &#27425;&#65292;&#33267;&#22810; <code class="literal">m</code> &#27425;&#12290;</li><li><code class="literal">(a|b|c)</code> &#35201;&#20040;&#21305;&#37197; <code class="literal">a</code>&#65292;&#35201;&#20040;&#21305;&#37197; <code class="literal">b</code>&#65292;&#35201;&#20040;&#21305;&#37197; <code class="literal">c</code>&#12290;</li><li><code class="literal">(x)</code> &#19968;&#33324;&#24773;&#20917;&#19979;&#34920;&#31034;&#19968;&#20010;<span class="emphasis"><em>&#35760;&#24518;&#32452; (remembered group)</em></span>&#12290;&#20320;&#21487;&#20197;&#21033;&#29992; <code class="function">re.search</code> &#20989;&#25968;&#36820;&#22238;&#23545;&#35937;&#30340; <code class="function">groups()</code> &#20989;&#25968;&#33719;&#21462;&#23427;&#30340;&#20540;&#12290;</li></ul></div><p>&#27491;&#21017;&#34920;&#36798;&#24335;&#38750;&#24120;&#24378;&#22823;&#65292;&#20294;&#26159;&#23427;&#24182;&#19981;&#33021;&#20026;&#27599;&#19968;&#20010;&#38382;&#39064;&#25552;&#20379;&#27491;&#30830;&#30340;&#35299;&#20915;&#26041;&#26696;&#12290;&#20320;&#24212;&#35813;&#23398;&#20064;&#36275;&#22815;&#22810;&#30340;&#30693;&#35782;&#65292;&#20197;&#36776;&#21035;&#20160;&#20040;&#26102;&#20505;&#23427;&#20204;&#26159;&#21512;&#36866;&#30340;&#65292;&#20160;&#20040;&#26102;&#20505;&#23427;&#20204;&#20250;&#35299;&#20915;&#20320;&#30340;&#38382;&#39064;&#65292;&#20160;&#20040;&#26102;&#20505;&#23427;&#20204;&#20135;&#29983;&#30340;&#38382;&#39064;&#27604;&#35201;&#35299;&#20915;&#30340;&#38382;&#39064;&#36824;&#35201;&#22810;&#12290;</p><div class="blockquote"><table border="0" width="100%" cellspacing="0" cellpadding="0" class="blockquote" summary="Block quote"><tr><td width="10%" valign="top">&nbsp;</td><td width="80%" valign="top"><p>&#19968;&#20123;&#20154;&#65292;&#36935;&#21040;&#19968;&#20010;&#38382;&#39064;&#26102;&#23601;&#24819;&#65306;"<span class="quote">&#25105;&#30693;&#36947;&#65292;&#25105;&#23558;&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;</span>"&#29616;&#22312;&#20182;&#26377;&#20004;&#20010;&#38382;&#39064;&#20102;&#12290;</p></td><td width="10%" valign="top">&nbsp;</td></tr><tr><td width="10%" valign="top">&nbsp;</td><td colspan="2" align="right" valign="top">--<span class="attribution">Jamie Zawinski, in comp.emacs.xemacs (<a href="http://groups.google.com/groups?selm=33F0C496.370D7C45%40netscape.com">http://groups.google.com/groups?selm=33F0C496.370D7C45%40netscape.com</a>)</span></td></tr></table></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="dialect"></a>&#31532;&nbsp;8&nbsp;&#31456;&nbsp;<acronym class="acronym">HTML</acronym> &#22788;&#29702;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.divein"></a>8.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>
&#25105;&#32463;&#24120;&#22312; comp.lang.python (<a href="http://groups.google.com/groups?group=comp.lang.python">http://groups.google.com/groups?group=comp.lang.python</a>) &#19978;&#30475;&#21040;&#20851;&#20110;&#22914;&#19979;&#30340;&#38382;&#39064;&#65306; "<span class="quote"> &#24590;&#20040;&#25165;&#33021;&#20174;&#25105;&#30340; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#21015;&#20986;&#25152;&#26377;&#30340; [&#22836;|&#22270;&#20687;|&#38142;&#25509;] &#21602;&#65311;</span>" "<span class="quote">&#24590;&#20040;&#25165;&#33021; [&#20998;&#26512;|&#35299;&#37322;|munge] &#25105;&#30340; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#30340;&#25991;&#26412;&#65292;&#20294;&#26159;&#21448;&#35201;&#20445;&#30041;&#26631;&#35760;&#21602;&#65311;</span>"  "<span class="quote">&#24590;&#20040;&#25165;&#33021;&#19968;&#27425;&#32473;&#25105;&#25152;&#26377;&#30340; <acronym class="acronym">HTML</acronym> &#26631;&#35760; [&#22686;&#21152;|&#21024;&#38500;|&#21152;&#24341;&#21495;] &#23646;&#24615;&#21602;&#65311;</span>" &#26412;&#31456;&#23558;&#22238;&#31572;&#25152;&#26377;&#36825;&#20123;&#38382;&#39064;&#12290;</p></div><p>&#19979;&#38754;&#32473;&#20986;&#19968;&#20010;&#23436;&#25972;&#30340;&#65292;&#21487;&#24037;&#20316;&#30340; <span class="application">Python</span> &#31243;&#24207;&#65292;&#23427;&#20998;&#20026;&#20004;&#37096;&#20998;&#12290;&#31532;&#19968;&#37096;&#20998;&#65292;<code class="filename">BaseHTMLProcessor.py</code> &#26159;&#19968;&#20010;&#36890;&#29992;&#24037;&#20855;&#65292;&#23427;&#21487;&#20197;&#36890;&#36807;&#25195;&#25551;&#26631;&#35760;&#21644;&#25991;&#26412;&#22359;&#26469;&#24110;&#21161;&#24744;&#22788;&#29702; <acronym class="acronym">HTML</acronym> &#25991;&#20214;&#12290;&#31532;&#20108;&#37096;&#20998;&#65292;<code class="filename">dialect.py</code> &#26159;&#19968;&#20010;&#20363;&#23376;&#65292;&#28436;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992; <code class="filename">BaseHTMLProcessor.py</code> &#26469;&#36716;&#21270; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#65292;&#20445;&#30041;&#25991;&#26412;&#20294;&#26159;&#21435;&#25481;&#20102;&#26631;&#35760;&#12290;&#38405;&#35835;&#25991;&#26723;&#23383;&#31526;&#20018; (<code class="literal">doc string</code>) &#21644;&#27880;&#37322;&#26469;&#20102;&#35299;&#23558;&#35201;&#21457;&#29983;&#20107;&#24773;&#30340;&#27010;&#20917;&#12290;&#22823;&#37096;&#20998;&#20869;&#23481;&#30475;&#19978;&#21435;&#20687;&#24043;&#26415;&#65292;&#22240;&#20026;&#20219;&#19968;&#20010;&#36825;&#20123;&#31867;&#30340;&#26041;&#27861;&#26159;&#22914;&#20309;&#35843;&#29992;&#30340;&#19981;&#26159;&#24456;&#28165;&#26970;&#12290;&#19981;&#35201;&#32039;&#65292;&#25152;&#26377;&#20869;&#23481;&#37117;&#20250;&#25353;&#36827;&#24230;&#34987;&#36880;&#27493;&#22320;&#23637;&#31034;&#20986;&#26469;&#12290;</p><div class="example"><a name="dialect.basehtml.listing"></a><p class="title"><b>&#20363;&nbsp;8.1.&nbsp;<code class="filename">BaseHTMLProcessor.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
from sgmllib import SGMLParser
import htmlentitydefs

class BaseHTMLProcessor(SGMLParser):
    def reset(self):                       
        # extend (called by SGMLParser.__init__)
        self.pieces = []
        SGMLParser.reset(self)

    def unknown_starttag(self, tag, attrs):
        # called for each start tag
        # attrs is a list of (attr, value) tuples
        # e.g. for &lt;pre class="screen"&gt;, tag="pre", attrs=[("class", "screen")]
        # Ideally we would like to reconstruct original tag and attributes, but
        # we may end up quoting attribute values that weren't quoted in the source
        # document, or we may change the type of quotes around the attribute value
        # (single to double quotes).
        # Note that improperly embedded non-HTML code (like client-side Javascript)
        # may be parsed incorrectly by the ancestor, causing runtime script errors.
        # All non-HTML code must be enclosed in HTML comment tags (&lt;!-- code --&gt;)
        # to ensure that it will pass through this parser unaltered (in handle_comment).
        strattrs = "".join([' %s="%s"' % (key, value) for key, value in attrs])
        self.pieces.append("&lt;%(tag)s%(strattrs)s&gt;" % locals())

    def unknown_endtag(self, tag):         
        # called for each end tag, e.g. for &lt;/pre&gt;, tag will be "pre"
        # Reconstruct the original end tag.
        self.pieces.append("&lt;/%(tag)s&gt;" % locals())

    def handle_charref(self, ref):         
        # called for each character reference, e.g. for "&amp;#160;", ref will be "160"
        # Reconstruct the original character reference.
        self.pieces.append("&amp;#%(ref)s;" % locals())

    def handle_entityref(self, ref):       
        # called for each entity reference, e.g. for "&amp;copy;", ref will be "copy"
        # Reconstruct the original entity reference.
        self.pieces.append("&amp;%(ref)s" % locals())
        # standard HTML entities are closed with a semicolon; other entities are not
        if htmlentitydefs.entitydefs.has_key(ref):
            self.pieces.append(";")

    def handle_data(self, text):           
        # called for each block of plain text, i.e. outside of any tag and
        # not containing any character or entity references
        # Store the original text verbatim.
        self.pieces.append(text)

    def handle_comment(self, text):        
        # called for each HTML comment, e.g. &lt;!-- insert Javascript code here --&gt;
        # Reconstruct the original comment.
        # It is especially important that the source document enclose client-side
        # code (like Javascript) within comments so it can pass through this
        # processor undisturbed; see comments in unknown_starttag for details.
        self.pieces.append("&lt;!--%(text)s--&gt;" % locals())

    def handle_pi(self, text):             
        # called for each processing instruction, e.g. &lt;?instruction&gt;
        # Reconstruct original processing instruction.
        self.pieces.append("&lt;?%(text)s&gt;" % locals())

    def handle_decl(self, text):
        # called for the DOCTYPE, if present, e.g.
        # &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        #     "http://www.w3.org/TR/html4/loose.dtd"&gt;
        # Reconstruct original DOCTYPE
        self.pieces.append("&lt;!%(text)s&gt;" % locals())

    def output(self):              
        """Return processed HTML as a single string"""
        return "".join(self.pieces)</pre></div></div><br class="example-break"><div class="example"><a name="d0e19890"></a><p class="title"><b>&#20363;&nbsp;8.2.&nbsp;<code class="filename">dialect.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re
from BaseHTMLProcessor import BaseHTMLProcessor

class Dialectizer(BaseHTMLProcessor):
    subs = ()

    def reset(self):
        # extend (called from __init__ in ancestor)
        # Reset all data attributes
        self.verbatim = 0
        BaseHTMLProcessor.reset(self)

    def start_pre(self, attrs):            
        # called for every &lt;pre&gt; tag in HTML source
        # Increment verbatim mode count, then handle tag like normal
        self.verbatim += 1                 
        self.unknown_starttag("pre", attrs)

    def end_pre(self):                     
        # called for every &lt;/pre&gt; tag in HTML source
        # Decrement verbatim mode count
        self.unknown_endtag("pre")         
        self.verbatim -= 1                 

    def handle_data(self, text):                                        
        # override
        # called for every block of text in HTML source
        # If in verbatim mode, save text unaltered;
        # otherwise process the text with a series of substitutions
        self.pieces.append(self.verbatim and text or self.process(text))

    def process(self, text):
        # called from handle_data
        # Process text block by performing series of regular expression
        # substitutions (actual substitions are defined in descendant)
        for fromPattern, toPattern in self.subs:
            text = re.sub(fromPattern, toPattern, text)
        return text

class ChefDialectizer(Dialectizer):
    """convert HTML to Swedish Chef-speak
    
    based on the classic chef.x, copyright (c) 1992, 1993 John Hagerman
    """
    subs = ((r'a([nu])', r'u\1'),
            (r'A([nu])', r'U\1'),
            (r'a\B', r'e'),
            (r'A\B', r'E'),
            (r'en\b', r'ee'),
            (r'\Bew', r'oo'),
            (r'\Be\b', r'e-a'),
            (r'\be', r'i'),
            (r'\bE', r'I'),
            (r'\Bf', r'ff'),
            (r'\Bir', r'ur'),
            (r'(\w*?)i(\w*?)$', r'\1ee\2'),
            (r'\bow', r'oo'),
            (r'\bo', r'oo'),
            (r'\bO', r'Oo'),
            (r'the', r'zee'),
            (r'The', r'Zee'),
            (r'th\b', r't'),
            (r'\Btion', r'shun'),
            (r'\Bu', r'oo'),
            (r'\BU', r'Oo'),
            (r'v', r'f'),
            (r'V', r'F'),
            (r'w', r'w'),
            (r'W', r'W'),
            (r'([a-z])[.]', r'\1.  Bork Bork Bork!'))

class FuddDialectizer(Dialectizer):
    """convert HTML to Elmer Fudd-speak"""
    subs = ((r'[rl]', r'w'),
            (r'qu', r'qw'),
            (r'th\b', r'f'),
            (r'th', r'd'),
            (r'n[.]', r'n, uh-hah-hah-hah.'))

class OldeDialectizer(Dialectizer):
    """convert HTML to mock Middle English"""
    subs = ((r'i([bcdfghjklmnpqrstvwxyz])e\b', r'y\1'),
            (r'i([bcdfghjklmnpqrstvwxyz])e', r'y\1\1e'),
            (r'ick\b', r'yk'),
            (r'ia([bcdfghjklmnpqrstvwxyz])', r'e\1e'),
            (r'e[ea]([bcdfghjklmnpqrstvwxyz])', r'e\1e'),
            (r'([bcdfghjklmnpqrstvwxyz])y', r'\1ee'),
            (r'([bcdfghjklmnpqrstvwxyz])er', r'\1re'),
            (r'([aeiou])re\b', r'\1r'),
            (r'ia([bcdfghjklmnpqrstvwxyz])', r'i\1e'),
            (r'tion\b', r'cioun'),
            (r'ion\b', r'ioun'),
            (r'aid', r'ayde'),
            (r'ai', r'ey'),
            (r'ay\b', r'y'),
            (r'ay', r'ey'),
            (r'ant', r'aunt'),
            (r'ea', r'ee'),
            (r'oa', r'oo'),
            (r'ue', r'e'),
            (r'oe', r'o'),
            (r'ou', r'ow'),
            (r'ow', r'ou'),
            (r'\bhe', r'hi'),
            (r've\b', r'veth'),
            (r'se\b', r'e'),
            (r"'s\b", r'es'),
            (r'ic\b', r'ick'),
            (r'ics\b', r'icc'),
            (r'ical\b', r'ick'),
            (r'tle\b', r'til'),
            (r'll\b', r'l'),
            (r'ould\b', r'olde'),
            (r'own\b', r'oune'),
            (r'un\b', r'onne'),
            (r'rry\b', r'rye'),
            (r'est\b', r'este'),
            (r'pt\b', r'pte'),
            (r'th\b', r'the'),
            (r'ch\b', r'che'),
            (r'ss\b', r'sse'),
            (r'([wybdp])\b', r'\1e'),
            (r'([rnt])\b', r'\1\1e'),
            (r'from', r'fro'),
            (r'when', r'whan'))

def translate(url, dialectName="chef"):
    """fetch URL and translate using dialect
    
    dialect in ("chef", "fudd", "olde")"""
    import urllib                      
    sock = urllib.urlopen(url)         
    htmlSource = sock.read()           
    sock.close()                       
    parserName = "%sDialectizer" % dialectName.capitalize()
    parserClass = globals()[parserName]                    
    parser = parserClass()                                 
    parser.feed(htmlSource)
    parser.close()         
    return parser.output() 

def test(url):
    """test all dialects against URL"""
    for dialect in ("chef", "fudd", "olde"):
        outfile = "%s.html" % dialect
        fsock = open(outfile, "wb")
        fsock.write(translate(url, dialect))
        fsock.close()
        import webbrowser
        webbrowser.open_new(outfile)

if __name__ == "__main__":
    test("http://diveintopython.org/odbchelper_list.html")</pre></div></div><br class="example-break"><div class="example"><a name="d0e19896"></a><p class="title"><b>&#20363;&nbsp;8.3.&nbsp;<code class="filename">dialect.py</code> &#30340;&#36755;&#20986;&#32467;&#26524;</b></p><div class="example-contents"><p>&#36816;&#34892;&#36825;&#20010;&#33050;&#26412;&#20250;&#23558; <a class="xref" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">&#31532;&nbsp;3.2&nbsp;&#33410; &#8220;List &#20171;&#32461;&#8221;</a> &#36716;&#25442;&#25104;&#27169;&#20223;&#29790;&#20856;&#21416;&#24072;&#29992;&#35821; (mock Swedish Chef-speak) (<a href="../native_data_types/chef.html">../native_data_types/chef.html</a>) (&#26469;&#33258; The Muppets)&#12289;&#27169;&#20223;&#22467;&#23572;&#40664;&#21792;&#21480;&#32773;&#29992;&#35821; (mock Elmer Fudd-speak) (<a href="../native_data_types/fudd.html">../native_data_types/fudd.html</a>) (&#26469;&#33258; Bugs Bunny &#21345;&#36890;&#30011;) &#21644;&#27169;&#20223;&#20013;&#19990;&#32426;&#33521;&#35821; (mock Middle English) (<a href="../native_data_types/olde.html">../native_data_types/olde.html</a>) (&#38646;&#25955;&#22320;&#26469;&#28304;&#20110;&#20052;&#21471;&#30340;<em class="citetitle">&#12298;&#22350;&#29305;&#20271;&#38647;&#25925;&#20107;&#38598;&#12299;</em>)&#12290;&#22914;&#26524;&#24744;&#26597;&#30475;&#36755;&#20986;&#39029;&#38754;&#30340; <acronym class="acronym">HTML</acronym> &#28304;&#20195;&#30721;&#65292;&#24744;&#20250;&#21457;&#29616;&#25152;&#26377;&#30340; <acronym class="acronym">HTML</acronym> &#26631;&#35760;&#21644;&#23646;&#24615;&#27809;&#26377;&#25913;&#21160;&#65292;&#20294;&#26159;&#22312;&#26631;&#35760;&#20043;&#38388;&#30340;&#25991;&#26412;&#34987;&#36716;&#25442;&#25104;&#27169;&#20223;&#35821;&#35328;&#20102;&#12290;&#22914;&#26524;&#24744;&#35266;&#26597;&#24471;&#26356;&#20180;&#32454;&#20123;&#65292;&#24744;&#20250;&#21457;&#29616;&#65292;&#23454;&#38469;&#19978;&#65292;&#20165;&#26377;&#26631;&#39064;&#21644;&#27573;&#33853;&#34987;&#36716;&#25442;&#20102;&#65307;&#20195;&#30721;&#21015;&#34920;&#21644;&#23631;&#24149;&#20363;&#23376;&#27809;&#26377;&#25913;&#21160;&#12290;</p><pre class="programlisting">
&lt;div class="abstract"&gt;
&lt;p&gt;Lists awe &lt;span class="application"&gt;Pydon&lt;/span&gt;'s wowkhowse datatype.
If youw onwy expewience wif wists is awways in
&lt;span class="application"&gt;Visuaw Basic&lt;/span&gt; ow (God fowbid) de datastowe
in &lt;span class="application"&gt;Powewbuiwdew&lt;/span&gt;, bwace youwsewf fow
&lt;span class="application"&gt;Pydon&lt;/span&gt; wists.&lt;/p&gt;
&lt;/div&gt;
</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.sgmllib"></a>8.2.&nbsp;<code class="filename">sgmllib.py</code> &#20171;&#32461;</h2></div></div></div><div class="abstract"><p><acronym class="acronym">HTML</acronym> &#22788;&#29702;&#20998;&#25104;&#19977;&#27493;&#65306;&#23558; <acronym class="acronym">HTML</acronym> &#20998;&#35299;&#25104;&#23427;&#30340;&#32452;&#25104;&#29255;&#27573;&#65292;&#23545;&#29255;&#27573;&#36827;&#34892;&#21152;&#24037;&#65292;&#25509;&#30528;&#23558;&#29255;&#27573;&#20877;&#37325;&#26032;&#21512;&#25104; HTML&#12290;&#31532;&#19968;&#27493;&#26159;&#36890;&#36807; <code class="filename">sgmllib.py</code> &#26469;&#23436;&#25104;&#30340;&#65292;&#23427;&#26159;&#26631;&#20934; <span class="application">Python</span> &#24211;&#30340;&#19968;&#37096;&#20998;&#12290;</p></div><p>&#29702;&#35299;&#26412;&#31456;&#30340;&#20851;&#38190;&#26159;&#35201;&#30693;&#36947; <acronym class="acronym">HTML</acronym> &#19981;&#21482;&#26159;&#25991;&#26412;&#65292;&#26356;&#26159;&#32467;&#26500;&#21270;&#25991;&#26412;&#12290;&#36825;&#31181;&#32467;&#26500;&#26469;&#28304;&#20110;&#24320;&#22987;&#19982;&#32467;&#26463;&#26631;&#35760;&#30340;&#25110;&#22810;&#25110;&#23569;&#20998;&#32423;&#24207;&#21015;&#12290;&#36890;&#24120;&#24744;&#24182;&#19981;&#20197;&#36825;&#31181;&#26041;&#24335;&#22788;&#29702; <acronym class="acronym">HTML</acronym> &#65292;&#32780;&#26159;&#20197;<span class="emphasis"><em>&#25991;&#26412;&#26041;&#24335;</em></span> &#22312;&#19968;&#20010;&#25991;&#26412;&#32534;&#36753;&#20013;&#23545;&#20854;&#36827;&#34892;&#22788;&#29702;&#65292;&#25110;&#20197;<span class="emphasis"><em>&#21487;&#35270;&#30340;&#26041;&#24335;</em></span> &#22312;&#19968;&#20010;&#27983;&#35272;&#22120;&#20013;&#36827;&#34892;&#27983;&#35272;&#25110;&#39029;&#38754;&#32534;&#36753;&#24037;&#20855;&#20013;&#36827;&#34892;&#32534;&#36753;&#12290;<code class="filename">sgmllib.py</code> &#34920;&#29616;&#20986;&#20102; <acronym class="acronym">HTML</acronym> &#30340;<span class="emphasis"><em>&#32467;&#26500;</em></span>&#12290;</p><p><code class="filename">sgmllib.py</code> &#21253;&#21547;&#19968;&#20010;&#37325;&#35201;&#30340;&#31867;&#65306;<code class="classname">SGMLParser</code>&#12290;<code class="classname">SGMLParser</code>  &#23558; <acronym class="acronym">HTML</acronym> &#20998;&#35299;&#25104;&#26377;&#29992;&#30340;&#29255;&#27573;&#65292;&#27604;&#22914;&#24320;&#22987;&#26631;&#35760;&#21644;&#32467;&#26463;&#26631;&#35760;&#12290;&#22312;&#23427;&#25104;&#21151;&#22320;&#20998;&#35299;&#20986;&#26576;&#20010;&#25968;&#25454;&#20026;&#19968;&#20010;&#26377;&#29992;&#30340;&#29255;&#27573;&#21518;&#65292;&#23427;&#20250;&#26681;&#25454;&#25152;&#21457;&#29616;&#30340;&#25968;&#25454;&#65292;&#35843;&#29992;&#19968;&#20010;&#33258;&#36523;&#20869;&#37096;&#30340;&#26041;&#27861;&#12290;&#20026;&#20102;&#20351;&#29992;&#36825;&#20010;&#20998;&#26512;&#22120;&#65292;&#24744;&#38656;&#35201;&#23376;&#31867;&#21270; <code class="classname">SGMLParser</code>  &#31867;&#65292;&#24182;&#19988;&#35206;&#30422;&#36825;&#20123;&#26041;&#27861;&#12290;&#36825;&#23601;&#26159;&#24403;&#25105;&#35828;&#23427;&#34920;&#31034;&#20102; <acronym class="acronym">HTML</acronym> <span class="emphasis"><em>&#32467;&#26500;</em></span> &#30340;&#24847;&#24605;&#65306;<acronym class="acronym">HTML</acronym> &#30340;&#32467;&#26500;&#20915;&#23450;&#20102;&#26041;&#27861;&#35843;&#29992;&#30340;&#27425;&#24207;&#21644;&#20256;&#32473;&#27599;&#20010;&#26041;&#27861;&#30340;&#21442;&#25968;&#12290;</p><p><code class="classname">SGMLParser</code> &#23558; <acronym class="acronym">HTML</acronym> &#20998;&#26512;&#25104; 8 &#31867;&#25968;&#25454;&#65292;&#28982;&#21518;&#23545;&#27599;&#19968;&#31867;&#35843;&#29992;&#21333;&#29420;&#30340;&#26041;&#27861;&#65306;</p><div class="variablelist"><dl><dt><span class="term">&#24320;&#22987;&#26631;&#35760; (Start tag)</span></dt><dd>&#26159;&#24320;&#22987;&#19968;&#20010;&#22359;&#30340; <acronym class="acronym">HTML</acronym> &#26631;&#35760;&#65292;&#20687; <code class="sgmltag-element">&lt;html&gt;</code>&#12289;<code class="sgmltag-element">&lt;head&gt;</code>&#12289;<code class="sgmltag-element">&lt;body&gt;</code> &#25110; <code class="sgmltag-element">&lt;pre&gt;</code> &#31561;&#65292;&#25110;&#26159;&#19968;&#20010;&#29420;&#19968;&#30340;&#26631;&#35760;&#65292;&#20687; <code class="sgmltag-element">&lt;br&gt;</code> &#25110; <code class="sgmltag-element">&lt;img&gt;</code> &#31561;&#12290;&#24403;&#23427;&#25214;&#21040;&#19968;&#20010;&#24320;&#22987;&#26631;&#35760; <em class="replaceable"><code>tagname</code></em>&#65292;<code class="classname">SGMLParser</code>  &#23558;&#26597;&#25214;&#21517;&#20026; <code class="function">start_<em class="replaceable"><code>tagname</code></em></code> &#25110; <code class="function">do_<em class="replaceable"><code>tagname</code></em></code> &#30340;&#26041;&#27861;&#12290;&#20363;&#22914;&#65292;&#24403;&#23427;&#25214;&#21040;&#19968;&#20010; <code class="sgmltag-element">&lt;pre&gt;</code> &#26631;&#35760;&#65292;&#23427;&#23558;&#26597;&#25214;&#19968;&#20010; <code class="function">start_pre</code> &#25110; <code class="function">do_pre</code> &#30340;&#26041;&#27861;&#12290;&#22914;&#26524;&#25214;&#21040;&#20102;&#65292;<code class="classname">SGMLParser</code> &#20250;&#20351;&#29992;&#36825;&#20010;&#26631;&#35760;&#30340;&#23646;&#24615;&#21015;&#34920;&#26469;&#35843;&#29992;&#36825;&#20010;&#26041;&#27861;&#65307;&#21542;&#21017;&#65292;&#23427;&#29992;&#36825;&#20010;&#26631;&#35760;&#30340;&#21517;&#23383;&#21644;&#23646;&#24615;&#21015;&#34920;&#26469;&#35843;&#29992; <code class="function">unknown_starttag</code> &#26041;&#27861;&#12290;</dd><dt><span class="term">&#32467;&#26463;&#26631;&#35760; (End tag)</span></dt><dd>&#26159;&#32467;&#26463;&#19968;&#20010;&#22359;&#30340; <acronym class="acronym">HTML</acronym> &#26631;&#35760;&#65292;&#20687; <code class="sgmltag-element">&lt;/html&gt;</code>&#12289;<code class="sgmltag-element">&lt;/head&gt;</code>&#12289;<code class="sgmltag-element">&lt;/body&gt;</code> &#25110; <code class="sgmltag-element">&lt;/pre&gt;</code> &#31561;&#12290;&#24403;&#25214;&#21040;&#19968;&#20010;&#32467;&#26463;&#26631;&#35760;&#26102;&#65292;<code class="classname">SGMLParser</code> &#23558;&#26597;&#25214;&#21517;&#20026; <code class="function">end_<em class="replaceable"><code>tagname</code></em></code> &#30340;&#26041;&#27861;&#12290;&#22914;&#26524;&#25214;&#21040;&#65292;<code class="classname">SGMLParser</code>  &#35843;&#29992;&#36825;&#20010;&#26041;&#27861;&#65292;&#21542;&#21017;&#23427;&#20351;&#29992;&#26631;&#35760;&#30340;&#21517;&#23383;&#26469;&#35843;&#29992; <code class="function">unknown_endtag</code> &#12290;</dd><dt><span class="term">&#23383;&#31526;&#24341;&#29992; (Character reference)</span></dt><dd>&#29992;&#23383;&#31526;&#30340;&#21313;&#36827;&#21046;&#25110;&#31561;&#21516;&#30340;&#21313;&#20845;&#36827;&#21046;&#26469;&#34920;&#31034;&#30340;&#36716;&#20041;&#23383;&#31526;&#65292;&#20687; <code class="literal">&amp;#160;</code>&#12290;&#24403;&#25214;&#21040;&#65292;<code class="classname">SGMLParser</code> &#20351;&#29992;&#21313;&#36827;&#21046;&#25110;&#31561;&#21516;&#30340;&#21313;&#20845;&#36827;&#21046;&#23383;&#31526;&#25991;&#26412;&#26469;&#35843;&#29992; <code class="function">handle_charref</code> &#12290;</dd><dt><span class="term">&#23454;&#20307;&#24341;&#29992; (Entity reference)</span></dt><dd><acronym class="acronym">HTML</acronym> &#23454;&#20307;&#65292;&#20687; <code class="literal">&amp;copy;</code>&#12290;&#24403;&#25214;&#21040;&#65292;<code class="classname">SGMLParser</code> &#20351;&#29992; <acronym class="acronym">HTML</acronym> &#23454;&#20307;&#30340;&#21517;&#23383;&#26469;&#35843;&#29992; <code class="function">handle_entityref</code> &#12290;</dd><dt><span class="term">&#27880;&#37322; (Comment)</span></dt><dd><acronym class="acronym">HTML</acronym> &#27880;&#37322;&#65292;&#21253;&#25324;&#22312; <code class="literal">&lt;!-- ... --&gt;</code>&#20043;&#38388;&#12290;&#24403;&#25214;&#21040;&#65292;<code class="classname">SGMLParser</code> &#29992;&#27880;&#37322;&#20869;&#23481;&#26469;&#35843;&#29992; <code class="function">handle_comment</code>&#12290;</dd><dt><span class="term">&#22788;&#29702;&#25351;&#20196; (Processing instruction)</span></dt><dd><acronym class="acronym">HTML</acronym> &#22788;&#29702;&#25351;&#20196;&#65292;&#21253;&#25324;&#22312; <code class="literal">&lt;? ... &gt;</code> &#20043;&#38388;&#12290;&#24403;&#25214;&#21040;&#65292;<code class="classname">SGMLParser</code>  &#29992;&#22788;&#29702;&#25351;&#20196;&#20869;&#23481;&#26469;&#35843;&#29992; <code class="function">handle_pi</code>&#12290;</dd><dt><span class="term">&#22768;&#26126; (Declaration)</span></dt><dd><acronym class="acronym">HTML</acronym> &#22768;&#26126;&#65292;&#22914; <code class="sgmltag-element">DOCTYPE</code>&#65292;&#21253;&#25324;&#22312; <code class="literal">&lt;! ... &gt;</code>&#20043;&#38388;&#12290;&#24403;&#25214;&#21040;&#65292;<code class="classname">SGMLParser</code> &#29992;&#22768;&#26126;&#20869;&#23481;&#26469;&#35843;&#29992; <code class="function">handle_decl</code>&#12290;</dd><dt><span class="term">&#25991;&#26412;&#25968;&#25454; (Text data)</span></dt><dd>&#25991;&#26412;&#22359;&#12290;&#19981;&#28385;&#36275;&#20854;&#23427; 7 &#31181;&#31867;&#21035;&#30340;&#20219;&#20309;&#19996;&#35199;&#12290;&#24403;&#25214;&#21040;&#65292;<code class="classname">SGMLParser</code> &#29992;&#25991;&#26412;&#26469;&#35843;&#29992; <code class="function">handle_data</code>&#12290;</dd></dl></div><div class="important"><blockquote><b class="title"><a name="d0e20196">&#37325;&#35201;: &#35821;&#35328;&#28436;&#21464;&#65306;<code class="sgmltag-element">DOCTYPE</code></a></b><br><span class="application">Python</span> 2.0 &#23384;&#22312;&#19968;&#20010; bug&#65292;&#21363; <code class="classname">SGMLParser</code> &#23436;&#20840;&#19981;&#33021;&#35782;&#21035;&#22768;&#26126; (<code class="function">handle_decl</code> &#27704;&#36828;&#19981;&#20250;&#35843;&#29992;)&#65292;&#36825;&#23601;&#24847;&#21619;&#30528; <code class="sgmltag-element">DOCTYPE</code> &#34987;&#38745;&#38745;&#22320;&#24573;&#30053;&#25481;&#20102;&#12290;&#36825;&#20010;&#38169;&#35823;&#22312; <span class="application">Python</span> 2.1 &#20013;&#25913;&#27491;&#20102;&#12290;</blockquote></div><p><code class="filename">sgmllib.py</code> &#25152;&#38468;&#24102;&#30340;&#19968;&#20010;&#27979;&#35797;&#22871;&#20214;&#20030;&#20363;&#35828;&#26126;&#20102;&#36825;&#19968;&#28857;&#12290;&#24744;&#21487;&#20197;&#36816;&#34892;  <code class="filename">sgmllib.py</code>&#65292;&#22312;&#21629;&#20196;&#34892;&#19979;&#20256;&#20837;&#19968;&#20010; <acronym class="acronym">HTML</acronym> &#25991;&#20214;&#30340;&#21517;&#23383;&#65292;&#28982;&#21518;&#23427;&#20250;&#22312;&#20998;&#26512;&#26631;&#35760;&#21644;&#20854;&#23427;&#20803;&#32032;&#30340;&#21516;&#26102;&#23558;&#23427;&#20204;&#25171;&#21360;&#20986;&#26469;&#12290;&#23427;&#30340;&#23454;&#29616;&#26159;&#36890;&#36807;&#23376;&#31867;&#21270; <code class="classname">SGMLParser</code> &#31867;&#65292;&#28982;&#21518;&#23450;&#20041; <code class="function">unknown_starttag</code>&#65292;<code class="function">unknown_endtag</code>&#65292;<code class="function">handle_data</code> &#21644;&#20854;&#23427;&#26041;&#27861;&#26469;&#23454;&#29616;&#30340;&#12290;&#36825;&#20123;&#26041;&#27861;&#31616;&#21333;&#22320;&#25171;&#21360;&#20986;&#23427;&#20204;&#30340;&#21442;&#25968;&#12290;</p><div class="tip"><blockquote><b class="title"><a name="tip.commandline.windows">&#25552;&#31034;: &#22312; Windows &#19979;&#25351;&#23450;&#21629;&#20196;&#34892;&#21442;&#25968;</a></b><br>&#22312; Windows &#19979;&#30340; <span class="application">ActivePython</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#24744;&#21487;&#20197;&#22312; "<span class="quote">Run script</span>" &#23545;&#35805;&#26694;&#20013;&#25351;&#23450;&#21629;&#20196;&#34892;&#21442;&#25968;&#12290;&#29992;&#31354;&#26684;&#23558;&#22810;&#20010;&#21442;&#25968;&#20998;&#24320;&#12290;</blockquote></div><div class="example"><a name="d0e20253"></a><p class="title"><b>&#20363;&nbsp;8.4.&nbsp;<code class="filename">sgmllib.py</code> &#30340;&#26679;&#20363;&#27979;&#35797;</b></p><div class="example-contents"><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#29255;&#27573;&#65292;&#26469;&#33258;&#26412;&#20070;&#30340; <acronym class="acronym">HTML</acronym> &#29256;&#26412;&#30340;&#30446;&#24405;&#65292;toc.html&#12290;&#24403;&#28982;&#65292;&#24744;&#30340;&#23384;&#20648;&#36335;&#24452;&#21487;&#33021;&#19982;&#25105;&#30340;&#26377;&#25152;&#19981;&#21516;&#12290;
(&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#30340; <acronym class="acronym">HTML</acronym> &#29256;&#26412;&#65292;&#21487;&#20197;&#20174; <a href="http://diveintopython.org/">http://diveintopython.org/</a> &#19979;&#36733;&#12290;</p><pre class="screen">
<code class="prompt">c:\python23\lib&gt;</code> <span class="userinput">type "c:\downloads\diveintopython\html\toc\index.html"</span>
<code class="literal">
&lt;!DOCTYPE html
  PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html lang="en"&gt;
   &lt;head&gt;
      &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
   
      &lt;title&gt;Dive Into Python&lt;/title&gt;
      &lt;link rel="stylesheet" href="diveintopython.css" type="text/css"&gt;

... &#30053; ...
</code></pre><p>&#36890;&#36807; <code class="filename">sgmllib.py</code> &#30340;&#27979;&#35797;&#22871;&#20214;&#26469;&#36816;&#34892;&#23427;&#65292;&#20250;&#24471;&#21040;&#22914;&#19979;&#30340;&#36755;&#20986;&#32467;&#26524;:</p><pre class="screen">
<code class="prompt">c:\python23\lib&gt;</code> <span class="userinput">python sgmllib.py "c:\downloads\diveintopython\html\toc\index.html"</span>
<font color="teal">data: '\n\n'
start tag: &lt;html lang="en" &gt;
data: '\n   '
start tag: &lt;head&gt;
data: '\n      '
start tag: &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" &gt;
data: '\n   \n      '
start tag: &lt;title&gt;
data: 'Dive Into Python'
end tag: &lt;/title&gt;
data: '\n      '
start tag: &lt;link rel="stylesheet" href="diveintopython.css" type="text/css" &gt;
data: '\n      '

... &#30053; ...
</font></pre></div></div><br class="example-break"><p>&#19979;&#38754;&#26159;&#26412;&#31456;&#20854;&#23427;&#37096;&#20998;&#30340;&#36335;&#26631;&#65306;</p><div class="itemizedlist"><ul><li>&#23376;&#31867;&#21270; <code class="classname">SGMLParser</code> &#26469;&#21019;&#24314;&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25277;&#21462;&#24863;&#20852;&#36259;&#30340;&#25968;&#25454;&#30340;&#31867;&#12290;</li><li>&#23376;&#31867;&#21270; <code class="classname">SGMLParser</code> &#26469;&#21019;&#24314; <code class="classname">BaseHTMLProcessor</code>&#65292;&#23427;&#35206;&#30422;&#20102;&#25152;&#26377;8&#20010;&#22788;&#29702;&#26041;&#27861;&#65292;&#28982;&#21518;&#20351;&#29992;&#23427;&#20204;&#20174;&#29255;&#27573;&#20013;&#37325;&#24314;&#21407;&#22987;&#30340; <acronym class="acronym">HTML</acronym>&#12290;</li><li>&#23376;&#31867;&#21270; <code class="classname">BaseHTMLProcessor</code> &#26469;&#21019;&#24314; <code class="classname">Dialectizer</code>&#65292;&#23427;&#22686;&#21152;&#20102;&#19968;&#20123;&#26041;&#27861;&#65292;&#19987;&#38376;&#29992;&#26469;&#22788;&#29702;&#25351;&#23450;&#30340; <acronym class="acronym">HTML</acronym> &#26631;&#35760;&#65292;&#28982;&#21518;&#35206;&#30422;&#20102; <code class="function">handle_data</code> &#26041;&#27861;&#65292;&#25552;&#20379;&#20102;&#29992;&#26469;&#22788;&#29702; <acronym class="acronym">HTML</acronym> &#26631;&#35760;&#20043;&#38388;&#25991;&#26412;&#22359;&#30340;&#26694;&#26550;&#12290;</li><li>&#23376;&#31867;&#21270; <code class="classname">Dialectizer</code> &#26469;&#21019;&#24314;&#23450;&#20041;&#20102;&#25991;&#26412;&#22788;&#29702;&#35268;&#21017;&#30340;&#31867;&#12290;&#36825;&#20123;&#35268;&#21017;&#34987; <code class="function">Dialectizer.handle_data</code> &#20351;&#29992;&#12290;</li><li>&#32534;&#20889;&#19968;&#20010;&#27979;&#35797;&#22871;&#20214;&#65292;&#23427;&#21487;&#20197;&#20174; <code class="systemitem">http://diveintopython.org/</code> &#22788;&#25235;&#21462;&#19968;&#20010;&#30495;&#27491;&#30340; web &#39029;&#38754;&#65292;&#28982;&#21518;&#22788;&#29702;&#23427;&#12290;</li></ul></div><p>&#32487;&#32493;&#38405;&#35835;&#26412;&#31456;&#65292;&#24744;&#36824;&#21487;&#20197;&#23398;&#20064;&#21040;&#26377;&#20851; <code class="function">locals</code>&#12289;<code class="function">globals</code> &#21644;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#30340;&#20869;&#23481;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.extract"></a>8.3.&nbsp;&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;</h2></div></div></div><div class="abstract"><p>&#20026;&#20102;&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;&#65292;&#23558; <code class="classname">SGMLParser</code> &#31867;&#36827;&#34892;&#23376;&#31867;&#21270;&#65292;&#28982;&#21518;&#23545;&#24819;&#35201;&#25429;&#25417;&#30340;&#26631;&#35760;&#25110;&#23454;&#20307;&#23450;&#20041;&#26041;&#27861;&#12290;</p></div><p>&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;&#30340;&#31532;&#19968;&#27493;&#26159;&#24471;&#21040;&#26576;&#20010; <acronym class="acronym">HTML</acronym> &#25991;&#20214;&#12290;&#22914;&#26524;&#22312;&#24744;&#30340;&#30828;&#30424;&#37324;&#23384;&#25918;&#30528; <acronym class="acronym">HTML</acronym> &#25991;&#20214;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;<a class="link" href="#fileinfo.files" title="6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;">&#22788;&#29702;&#25991;&#20214;&#30340;&#20989;&#25968;</a>&#23558;&#23427;&#35835;&#20986;&#26469;&#65292;&#20294;&#26159;&#30495;&#27491;&#26377;&#24847;&#24605;&#30340;&#26159;&#20174;&#23454;&#38469;&#30340;&#32593;&#39029;&#24471;&#21040; <acronym class="acronym">HTML</acronym>&#12290;</p><div class="example"><a name="dialect.extract.urllib"></a><p class="title"><b>&#20363;&nbsp;8.5.&nbsp;<code class="filename">urllib</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib</span>                                       <a name="dialect.extract.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sock = urllib.urlopen("http://diveintopython.org/")</span> <a name="dialect.extract.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">htmlSource = sock.read()</span>                            <a name="dialect.extract.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sock.close()</span>                                        <a name="dialect.extract.1.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print htmlSource</span>                                    <a name="dialect.extract.1.5"></a>circled_5_delcric
<font color="teal">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;&lt;html&gt;&lt;head&gt;
      &lt;meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'&gt;
   &lt;title&gt;Dive Into Python&lt;/title&gt;
&lt;link rel='stylesheet' href='diveintopython.css' type='text/css'&gt;
&lt;link rev='made' href='mailto:mark@diveintopython.org'&gt;
&lt;meta name='keywords' content='Python, Dive Into Python, tutorial, object-oriented, programming, documentation, book, free'&gt;
&lt;meta name='description' content='a free Python tutorial for experienced programmers'&gt;
&lt;/head&gt;
&lt;body bgcolor='white' text='black' link='#0000FF' vlink='#840084' alink='#0000FF'&gt;
&lt;table cellpadding='0' cellspacing='0' border='0' width='100%'&gt;
&lt;tr&gt;&lt;td class='header' width='1%' valign='top'&gt;diveintopython.org&lt;/td&gt;
&lt;td width='99%' align='right'&gt;&lt;hr size='1' noshade&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='tagline' colspan='2'&gt;Python&amp;nbsp;for&amp;nbsp;experienced&amp;nbsp;programmers&lt;/td&gt;&lt;/tr&gt;</font>

[...&#30053;...]</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.extract.1.1">circled_1_delcric</a> </dt><dd><code class="filename">urllib</code> &#27169;&#22359;&#26159;&#26631;&#20934; <span class="application">Python</span> &#24211;&#30340;&#19968;&#37096;&#20998;&#12290;&#23427;&#21253;&#21547;&#20102;&#19968;&#20123;&#20989;&#25968;&#65292;&#21487;&#20197;&#20174;&#22522;&#20110;&#20114;&#32852;&#32593;&#30340; <acronym class="acronym">URL</acronym> (&#20027;&#35201;&#25351;&#32593;&#39029;) &#26469;&#33719;&#21462;&#20449;&#24687;&#24182;&#19988;&#30495;&#27491;&#21462;&#22238;&#25968;&#25454;&#12290;</dd><dt><a href="#dialect.extract.1.2">circled_2_delcric</a> </dt><dd><code class="filename">urllib</code> &#27169;&#22359;&#26368;&#31616;&#21333;&#30340;&#20351;&#29992;&#26159;&#25552;&#21462;&#29992; <code class="function">urlopen</code> &#20989;&#25968;&#21462;&#22238;&#30340;&#32593;&#39029;&#30340;&#25972;&#20010;&#25991;&#26412;&#12290;&#25171;&#24320;&#19968;&#20010; <acronym class="acronym">URL</acronym> &#21516;<a class="link" href="#fileinfo.files" title="6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;">&#25171;&#24320;&#19968;&#20010;&#25991;&#20214;</a>&#30456;&#20284;&#12290;<code class="function">urlopen</code> &#30340;&#36820;&#22238;&#20540;&#26159;&#20687;&#25991;&#20214;&#19968;&#26679;&#30340;&#23545;&#35937;&#65292;&#23427;&#20855;&#26377;&#19968;&#20010;&#25991;&#20214;&#23545;&#35937;&#19968;&#26679;&#30340;&#26041;&#27861;&#12290;</dd><dt><a href="#dialect.extract.1.3">circled_3_delcric</a> </dt><dd>&#20351;&#29992;&#30001; <code class="function">urlopen</code> &#25152;&#36820;&#22238;&#30340;&#31867;&#25991;&#20214;&#23545;&#35937;&#25152;&#33021;&#20570;&#30340;&#26368;&#31616;&#21333;&#30340;&#20107;&#24773;&#23601;&#26159; <code class="function">read</code>&#65292;&#23427;&#21487;&#20197;&#23558;&#32593;&#39029;&#30340;&#25972;&#20010; <acronym class="acronym">HTML</acronym> &#35835;&#21040;&#19968;&#20010;&#23383;&#31526;&#20018;&#20013;&#12290;&#36825;&#20010;&#23545;&#35937;&#20063;&#25903;&#25345; <code class="function">readlines</code> &#26041;&#27861;&#65292;&#36825;&#20010;&#26041;&#27861;&#21487;&#20197;&#23558;&#25991;&#26412;&#25353;&#34892;&#25918;&#20837;&#19968;&#20010;&#21015;&#34920;&#20013;&#12290;</dd><dt><a href="#dialect.extract.1.4">circled_4_delcric</a> </dt><dd>&#24403;&#29992;&#23436;&#36825;&#20010;&#23545;&#35937;&#65292;&#35201;&#30830;&#20445;&#23558;&#23427; <code class="function">close</code>&#65292;&#23601;&#22914;&#21516;&#19968;&#20010;&#26222;&#36890;&#30340;&#25991;&#20214;&#23545;&#35937;&#12290;</dd><dt><a href="#dialect.extract.1.5">circled_5_delcric</a> </dt><dd>&#29616;&#22312;&#25105;&#20204;&#23558; <code class="systemitem">http://diveintopython.org/</code> &#20027;&#39029;&#30340;&#23436;&#25972;&#30340; <acronym class="acronym">HTML</acronym> &#20445;&#23384;&#22312;&#19968;&#20010;&#23383;&#31526;&#20018;&#20013;&#20102;&#65292;&#25509;&#30528;&#25105;&#20204;&#23558;&#20998;&#26512;&#23427;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="dialect.extract.links"></a><p class="title"><b>&#20363;&nbsp;8.6.&nbsp;<code class="filename">urllister.py</code> &#20171;&#32461;</b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
from sgmllib import SGMLParser

class URLLister(SGMLParser):
    def reset(self):                              <a name="dialect.extract.2.1"></a>circled_1_delcric
        SGMLParser.reset(self)
        self.urls = []

    def start_a(self, attrs):                     <a name="dialect.extract.2.2"></a>circled_2_delcric
        href = [v for k, v in attrs if k=='href'] <a name="dialect.extract.2.3"></a>circled_3_delcric <a name="dialect.extract.2.4"></a>circled_4_delcric
        if href:
            self.urls.extend(href)</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.extract.2.1">circled_1_delcric</a> </dt><dd><code class="function">reset</code> &#30001; <code class="classname">SGMLParser</code> &#30340; <code class="function">__init__</code> &#26041;&#27861;&#26469;&#35843;&#29992;&#65292;&#20063;&#21487;&#20197;&#22312;&#21019;&#24314;&#19968;&#20010;&#20998;&#26512;&#22120;&#23454;&#20363;&#26102;&#25163;&#24037;&#26469;&#35843;&#29992;&#12290;&#25152;&#20197;&#22914;&#26524;&#24744;&#38656;&#35201;&#20570;&#21021;&#22987;&#21270;&#65292;&#22312; <code class="function">reset</code> &#20013;&#21435;&#20570;&#65292;&#32780;&#19981;&#35201;&#22312; <code class="function">__init__</code> &#20013;&#20570;&#12290;&#36825;&#26679;&#24403;&#26576;&#20154;&#37325;&#29992;&#19968;&#20010;&#20998;&#26512;&#22120;&#23454;&#20363;&#26102;&#65292;&#21487;&#20197;&#27491;&#30830;&#22320;&#37325;&#26032;&#21021;&#22987;&#21270;&#12290;</dd><dt><a href="#dialect.extract.2.2">circled_2_delcric</a> </dt><dd>&#21482;&#35201;&#25214;&#21040;&#19968;&#20010; <code class="sgmltag-element">&lt;a&gt;</code> &#26631;&#35760;&#65292;<code class="function">start_a</code> &#23601;&#20250;&#30001; <code class="classname">SGMLParser</code> &#36827;&#34892;&#35843;&#29992;&#12290;&#36825;&#20010;&#26631;&#35760;&#21487;&#20197;&#21253;&#21547;&#19968;&#20010; <code class="literal">href</code> &#23646;&#24615;&#65292;&#25110;&#32773;&#21253;&#21547;&#20854;&#23427;&#30340;&#23646;&#24615;&#65292;&#22914; <code class="literal">name</code> &#25110; <code class="literal">title</code>&#12290;<code class="varname">attrs</code> &#21442;&#25968;&#26159;&#19968;&#20010; tuple &#30340; list&#65292;<code class="literal">[(<em class="replaceable">attribute</em>, <em class="replaceable">value</em>), (<em class="replaceable">attribute</em>, <em class="replaceable">value</em>), ...]</code>&#12290;&#25110;&#32773;&#23427;&#21487;&#20197;&#21482;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340; <acronym class="acronym">HTML</acronym> &#26631;&#35760; <code class="sgmltag-element">&lt;a&gt;</code> (&#23613;&#31649;&#26080;&#29992;)&#65292;&#36825;&#26102; <code class="varname">attrs</code> &#23558;&#26159;&#20010;&#31354; list&#12290;</dd><dt><a href="#dialect.extract.2.3">circled_3_delcric</a> </dt><dd>&#25105;&#20204;&#21487;&#20197;&#36890;&#36807;&#19968;&#20010;&#31616;&#21333;&#30340;<a class="link" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#22810;&#21464;&#37327;</a> <a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">list &#26144;&#23556;</a>&#26469;&#26597;&#25214;&#36825;&#20010; <code class="sgmltag-element">&lt;a&gt;</code> &#26631;&#35760;&#26159;&#21542;&#25317;&#26377;&#19968;&#20010; <code class="literal">href</code> &#23646;&#24615;&#12290;</dd><dt><a href="#dialect.extract.2.4">circled_4_delcric</a> </dt><dd>&#20687; <code class="literal">k=='href'</code> &#30340;&#23383;&#31526;&#20018;&#27604;&#36739;&#26159;&#21306;&#20998;&#22823;&#23567;&#20889;&#30340;&#65292;&#20294;&#26159;&#36825;&#37324;&#26159;&#23433;&#20840;&#30340;&#12290;&#22240;&#20026; <code class="classname">SGMLParser</code> &#20250;&#22312;&#21019;&#24314; <code class="varname">attrs</code> &#26102;&#23558;&#23646;&#24615;&#21517;&#36716;&#21270;&#20026;&#23567;&#20889;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="dialect.feed.example"></a><p class="title"><b>&#20363;&nbsp;8.7.&nbsp;&#20351;&#29992; <code class="filename">urllister.py</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib, urllister</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">usock = urllib.urlopen("http://diveintopython.org/")</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">parser = urllister.URLLister()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">parser.feed(usock.read())</span>         <a name="dialect.extract.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">usock.close()</span>                     <a name="dialect.extract.3.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">parser.close()</span>                    <a name="dialect.extract.3.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for url in parser.urls: print url</span> <a name="dialect.extract.3.4"></a>circled_4_delcric
<font color="teal">toc/index.html
#download
#languages
toc/index.html
appendix/history.html
download/diveintopython-html-5.0.zip
download/diveintopython-pdf-5.0.zip
download/diveintopython-word-5.0.zip
download/diveintopython-text-5.0.zip
download/diveintopython-html-flat-5.0.zip
download/diveintopython-xml-5.0.zip
download/diveintopython-common-5.0.zip
</font>

...&#30053;...</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.extract.3.1">circled_1_delcric</a> </dt><dd>&#35843;&#29992;&#23450;&#20041;&#22312; <code class="classname">SGMLParser</code> &#20013;&#30340; <code class="function">feed</code> &#26041;&#27861;&#65292;&#23558; <acronym class="acronym">HTML</acronym> &#20869;&#23481;&#25918;&#20837;&#20998;&#26512;&#22120;&#20013;&#12290;
<sup>[<a name="d0e20675" href="#ftn.d0e20675" class="footnote">4</a>]</sup>
&#36825;&#20010;&#26041;&#27861;&#25509;&#25910;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#36825;&#20010;&#23383;&#31526;&#20018;&#23601;&#26159; <code class="function">usock.read()</code> &#25152;&#36820;&#22238;&#30340;&#12290;</dd><dt><a href="#dialect.extract.3.2">circled_2_delcric</a> </dt><dd>&#20687;&#22788;&#29702;&#25991;&#20214;&#19968;&#26679;&#65292;&#19968;&#26086;&#22788;&#29702;&#23436;&#27605;&#65292;&#24744;&#24212;&#35813; <code class="function">close</code> &#24744;&#30340; <acronym class="acronym">URL</acronym> &#23545;&#35937;&#12290;</dd><dt><a href="#dialect.extract.3.3">circled_3_delcric</a> </dt><dd>&#24744;&#20063;&#24212;&#35813; <code class="function">close</code> &#24744;&#30340;&#20998;&#26512;&#22120;&#23545;&#35937;&#65292;&#20294;&#20986;&#20110;&#19981;&#21516;&#30340;&#21407;&#22240;&#12290;<code class="function">feed</code> &#26041;&#27861;&#19981;&#20445;&#35777;&#23545;&#20256;&#32473;&#23427;&#30340;&#20840;&#37096; <acronym class="acronym">HTML</acronym> &#36827;&#34892;&#22788;&#29702;&#65292;&#23427;&#21487;&#33021;&#20250;&#23545;&#20854;&#36827;&#34892;&#32531;&#20914;&#22788;&#29702;&#65292;&#31561;&#24453;&#25509;&#25910;&#26356;&#22810;&#30340;&#20869;&#23481;&#12290;&#21482;&#35201;&#27809;&#26377;&#26356;&#22810;&#30340;&#20869;&#23481;&#65292;&#23601;&#24212;&#35843;&#29992; <code class="function">close</code> &#26469;&#21047;&#26032;&#32531;&#20914;&#21306;&#65292;&#24182;&#19988;&#24378;&#21046;&#25152;&#26377;&#20869;&#23481;&#34987;&#23436;&#20840;&#22788;&#29702;&#12290;</dd><dt><a href="#dialect.extract.3.4">circled_4_delcric</a> </dt><dd>&#19968;&#26086;&#20998;&#26512;&#22120;&#34987; <code class="function">close</code>&#65292;&#20998;&#26512;&#36807;&#31243;&#20063;&#23601;&#32467;&#26463;&#20102;&#12290;<code class="varname">parser.urls</code> &#20013;&#21253;&#21547;&#20102;&#22312; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25152;&#26377;&#30340;&#38142;&#25509; <acronym class="acronym">URL</acronym>&#12290;(&#22914;&#26524;&#24403;&#24744;&#35835;&#21040;&#27492;&#22788;&#21457;&#29616;&#36755;&#20986;&#32467;&#26524;&#19981;&#19968;&#26679;&#65292;&#37027;&#26159;&#22240;&#20026;&#19979;&#36733;&#20102;&#26412;&#20070;&#30340;&#26356;&#26032;&#29256;&#26412;&#12290;)</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.basehtml"></a>8.4.&nbsp;<code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;</h2></div></div></div><div class="abstract"><p><code class="classname">SGMLParser</code> &#33258;&#36523;&#19981;&#20250;&#20135;&#29983;&#20219;&#20309;&#32467;&#26524;&#12290;&#23427;&#21482;&#26159;&#20998;&#26512;&#65292;&#20998;&#26512;&#65292;&#20877;&#20998;&#26512;&#65292;&#23545;&#20110;&#23427;&#25214;&#21040;&#30340;&#26377;&#36259;&#30340;&#19996;&#35199;&#20250;&#35843;&#29992;&#30456;&#24212;&#30340;&#19968;&#20010;&#26041;&#27861;&#65292;&#20294;&#26159;&#36825;&#20123;&#26041;&#27861;&#20160;&#20040;&#37117;&#19981;&#20570;&#12290;<code class="classname">SGMLParser</code> &#26159;&#19968;&#20010; <acronym class="acronym">HTML</acronym> <span class="emphasis"><em>&#28040;&#36153;&#32773; (consumer)</em></span>&#65306;&#23427;&#25509;&#25910; <acronym class="acronym">HTML</acronym>&#65292;&#23558;&#20854;&#20998;&#35299;&#25104;&#23567;&#30340;&#12289;&#32467;&#26500;&#21270;&#30340;&#23567;&#22359;&#12290;&#27491;&#22914;&#24744;&#25152;&#30475;&#21040;&#30340;&#65292;&#22312;<a class="link" href="#dialect.extract" title="8.3.&nbsp;&#20174; HTML &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;">&#21069;&#19968;&#33410;</a>&#20013;&#65292;&#24744;&#21487;&#20197;&#23450;&#20041; <code class="classname">SGMLParser</code> &#30340;&#23376;&#31867;&#65292;&#23427;&#21487;&#20197;&#25429;&#25417;&#29305;&#21035;&#26631;&#35760;&#21644;&#29983;&#25104;&#26377;&#29992;&#30340;&#19996;&#35199;&#65292;&#22914;&#19968;&#20010;&#32593;&#39029;&#20013;&#25152;&#26377;&#38142;&#25509;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;&#29616;&#22312;&#25105;&#20204;&#23558;&#27839;&#30528;&#36825;&#26465;&#36335;&#26356;&#28145;&#19968;&#27493;&#12290;&#25105;&#20204;&#35201;&#23450;&#20041;&#19968;&#20010;&#21487;&#20197;&#25429;&#25417; <code class="classname">SGMLParser</code> &#25152;&#20002;&#20986;&#26469;&#30340;&#25152;&#26377;&#19996;&#35199;&#30340;&#19968;&#20010;&#31867;&#65292;&#25509;&#30528;&#37325;&#24314;&#25972;&#20010; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#12290;&#29992;&#25216;&#26415;&#26415;&#35821;&#26469;&#35828;&#65292;&#36825;&#20010;&#31867;&#23558;&#26159;&#19968;&#20010; <acronym class="acronym">HTML</acronym> <span class="emphasis"><em>&#29983;&#20135;&#32773; (producer)</em></span>&#12290;</p></div><p><code class="classname">BaseHTMLProcessor</code> &#23376;&#31867;&#21270; <code class="classname">SGMLParser</code>&#65292;&#24182;&#19988;&#25552;&#20379;&#20102;&#20840;&#37096;&#30340; 8 &#20010;&#22788;&#29702;&#26041;&#27861;&#65306;<code class="function">unknown_starttag</code>&#12289;<code class="function">unknown_endtag</code>&#12289;<code class="function">handle_charref</code>&#12289;<code class="function">handle_entityref</code>&#12289;<code class="function">handle_comment</code>&#12289;<code class="function">handle_pi</code>&#12289;<code class="function">handle_decl</code> &#21644; <code class="function">handle_data</code>&#12290;</p><div class="example"><a name="dialect.basehtml.intro"></a><p class="title"><b>&#20363;&nbsp;8.8.&nbsp;<code class="classname">BaseHTMLProcessor</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="programlisting">
class BaseHTMLProcessor(SGMLParser):
    def reset(self):                        <a name="dialect.basehtml.1.1"></a>circled_1_delcric
        self.pieces = []
        SGMLParser.reset(self)

    def unknown_starttag(self, tag, attrs): <a name="dialect.basehtml.1.2"></a>circled_2_delcric
        strattrs = "".join([' %s="%s"' % (key, value) for key, value in attrs])
        self.pieces.append("&lt;%(tag)s%(strattrs)s&gt;" % locals())

    def unknown_endtag(self, tag):          <a name="dialect.basehtml.1.3"></a>circled_3_delcric
        self.pieces.append("&lt;/%(tag)s&gt;" % locals())

    def handle_charref(self, ref):          <a name="dialect.basehtml.1.4"></a>circled_4_delcric
        self.pieces.append("&amp;#%(ref)s;" % locals())

    def handle_entityref(self, ref):        <a name="dialect.basehtml.1.5"></a>circled_5_delcric
        self.pieces.append("&amp;%(ref)s" % locals())
        if htmlentitydefs.entitydefs.has_key(ref):
            self.pieces.append(";")

    def handle_data(self, text):            <a name="dialect.basehtml.1.6"></a>circled_6_delcric
        self.pieces.append(text)

    def handle_comment(self, text):         <a name="dialect.basehtml.1.7"></a>circled_7_delcric
        self.pieces.append("&lt;!--%(text)s--&gt;" % locals())

    def handle_pi(self, text):              <a name="dialect.basehtml.1.8"></a>circled_8_delcric
        self.pieces.append("&lt;?%(text)s&gt;" % locals())

    def handle_decl(self, text):
        self.pieces.append("&lt;!%(text)s&gt;" % locals())</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.basehtml.1.1">circled_1_delcric</a> </dt><dd><code class="function">reset</code> &#30001; <code class="function">SGMLParser.__init__</code> &#26469;&#35843;&#29992;&#12290;&#22312;<a class="link" href="#fileinfo.init.code.example" title="&#20363;&nbsp;5.6.&nbsp;&#32534;&#20889; FileInfo &#31867;">&#35843;&#29992;&#29238;&#31867;&#26041;&#27861;</a>&#20043;&#21069;&#23558; <code class="varname">self.pieces</code> &#21021;&#22987;&#21270;&#20026;&#31354;&#21015;&#34920;&#12290;<code class="varname">self.pieces</code> &#26159;&#19968;&#20010;<a class="link" href="#fileinfo.userdict.init.example" title="&#20363;&nbsp;5.9.&nbsp;&#23450;&#20041; UserDict &#31867;">&#25968;&#25454;&#23646;&#24615;</a>&#65292;&#23558;&#29992;&#26469;&#20445;&#23384;&#23558;&#35201;&#26500;&#36896;&#30340; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#30340;&#29255;&#27573;&#12290;&#27599;&#20010;&#22788;&#29702;&#22120;&#26041;&#27861;&#37117;&#23558;&#37325;&#26500; <code class="classname">SGMLParser</code> &#25152;&#20998;&#26512;&#20986;&#26469;&#30340; <acronym class="acronym">HTML</acronym>&#65292;&#24182;&#19988;&#27599;&#20010;&#26041;&#27861;&#23558;&#29983;&#25104;&#30340;&#23383;&#31526;&#20018;&#36861;&#21152;&#21040; <code class="varname">self.pieces</code> &#20043;&#21518;&#12290;&#27880;&#24847;&#65292;<code class="varname">self.pieces</code> &#26159;&#19968;&#20010; list&#12290;&#20063;&#35768;&#24744;&#24819;&#23558;&#23427;&#23450;&#20041;&#20026;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#28982;&#21518;&#19981;&#20572;&#22320;&#23558;&#27599;&#20010;&#29255;&#27573;&#36861;&#21152;&#21040;&#23427;&#30340;&#21518;&#38754;&#12290;&#36825;&#26679;&#20570;&#26159;&#21487;&#20197;&#30340;&#65292;&#20294;&#26159; <span class="application">Python</span> &#22312;&#22788;&#29702; list &#26041;&#38754;&#25928;&#29575;&#26356;&#39640;&#19968;&#20123;&#12290;

<sup>[<a name="d0e20874" href="#ftn.d0e20874" class="footnote">5</a>]</sup></dd><dt><a href="#dialect.basehtml.1.2">circled_2_delcric</a> </dt><dd>&#22240;&#20026; <code class="classname">BaseHTMLProcessor</code> &#27809;&#26377;&#20026;&#29305;&#21035;&#26631;&#35760;&#23450;&#20041;&#26041;&#27861; (&#22914;&#22312; <a class="link" href="#dialect.extract.links" title="&#20363;&nbsp;8.6.&nbsp;urllister.py &#20171;&#32461;"><code class="classname">URLLister</code></a> &#20013;&#30340;<code class="function">start_a</code> &#26041;&#27861;)&#65292;
<code class="classname">SGMLParser</code> &#23558;&#23545;&#27599;&#19968;&#20010;&#24320;&#22987;&#26631;&#35760;&#35843;&#29992; <code class="function">unknown_starttag</code> &#26041;&#27861;&#12290;&#36825;&#20010;&#26041;&#27861;&#25509;&#25910;&#26631;&#35760; (<code class="varname">tag</code>) &#21644;&#23646;&#24615;&#30340;&#21517;&#23383;/&#20540;&#23545;&#30340; list(<code class="varname">attrs</code>) &#20004;&#21442;&#25968;&#65292;&#37325;&#26032;&#26500;&#36896;&#21021;&#22987;&#30340; <acronym class="acronym">HTML</acronym>&#65292;&#25509;&#30528;&#23558;&#32467;&#26524;&#36861;&#21152;&#21040; <code class="varname">self.pieces</code> &#21518;&#12290; &#36825;&#37324;&#30340;<a class="link" href="#odbchelper.stringformatting" title="3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;">&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a>&#26377;&#20123;&#38476;&#29983;&#65292;&#25105;&#20204;&#23558;&#30041;&#21040;&#19979;&#19968;&#33410;&#20877;&#35828;&#26126;&#12290;</dd><dt><a href="#dialect.basehtml.1.3">circled_3_delcric</a> </dt><dd>&#37325;&#26500;&#32467;&#26463;&#26631;&#35760;&#35201;&#31616;&#21333;&#24471;&#22810;&#65292;&#21482;&#26159;&#20351;&#29992;&#26631;&#35760;&#21517;&#23383;&#65292;&#25226;&#23427;&#21253;&#22312; <code class="literal">&lt;/...&gt;</code> &#25324;&#21495;&#20013;&#12290;</dd><dt><a href="#dialect.basehtml.1.4">circled_4_delcric</a> </dt><dd>&#24403; <code class="classname">SGMLParser</code> &#25214;&#21040;&#19968;&#20010;&#23383;&#31526;&#24341;&#29992;&#26102;&#65292;&#20250;&#29992;&#21407;&#22987;&#30340;&#24341;&#29992;&#26469;&#35843;&#29992; <code class="function">handle_charref</code>&#12290;&#22914;&#26524; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#21253;&#21547; <code class="literal">&amp;#160;</code> &#36825;&#20010;&#24341;&#29992;&#65292;<code class="varname">ref</code> &#23558;&#20026; <code class="literal">160</code>&#12290;&#37325;&#26500;&#21407;&#22987;&#30340;&#23436;&#25972;&#30340;&#23383;&#31526;&#24341;&#29992;&#21482;&#35201;&#23558; <code class="varname">ref</code> &#21253;&#35013;&#22312; <code class="literal">&amp;#...;</code> &#23383;&#31526;&#20013;&#38388;&#12290;</dd><dt><a href="#dialect.basehtml.1.5">circled_5_delcric</a> </dt><dd>&#23454;&#20307;&#24341;&#29992;&#21516;&#23383;&#31526;&#24341;&#29992;&#30456;&#20284;&#65292;&#20294;&#26159;&#27809;&#26377;#&#21495;&#12290;&#37325;&#24314;&#21407;&#22987;&#30340;&#23454;&#20307;&#24341;&#29992;&#21482;&#35201;&#23558; <code class="varname">ref</code> &#21253;&#35013;&#22312; <code class="literal">&amp;...;</code> &#23383;&#31526;&#20018;&#20013;&#38388;&#12290;(&#23454;&#38469;&#19978;&#65292;&#19968;&#20301;&#21338;&#23398;&#30340;&#35835;&#32773;&#26366;&#32463;&#21521;&#25105;&#25351;&#20986;&#65292;&#38500;&#20123;&#20043;&#22806;&#36824;&#31245;&#24494;&#26377;&#20123;&#22797;&#26434;&#12290;&#20165;&#26377;&#26576;&#31181;&#26631;&#20934;&#30340; <acronym class="acronym">HTML</acronym> &#23454;&#20307;&#20197;&#19968;&#20010;&#20998;&#21495;&#32467;&#26463;&#65307;&#20854;&#23427;&#30475;&#19978;&#21435;&#24046;&#19981;&#22810;&#30340;&#23454;&#20307;&#24182;&#19981;&#22914;&#27492;&#12290;&#24184;&#36816;&#30340;&#26159;&#65292;&#26631;&#20934; <acronym class="acronym">HTML</acronym> &#23454;&#20307;&#38598;&#24050;&#32463;&#23450;&#20041;&#22312; <span class="application">Python</span> &#30340;&#19968;&#20010;&#21483;&#20570; <code class="filename">htmlentitydefs</code> &#30340;&#27169;&#22359;&#20013;&#20102;&#12290;&#20174;&#32780;&#24341;&#20986;&#39069;&#22806;&#30340; <code class="literal">if</code> &#35821;&#21477;&#12290;) </dd><dt><a href="#dialect.basehtml.1.6">circled_6_delcric</a> </dt><dd>&#25991;&#26412;&#22359;&#21017;&#31616;&#21333;&#22320;&#19981;&#32463;&#20462;&#25913;&#22320;&#36861;&#21152;&#21040; <code class="varname">self.pieces</code> &#21518;&#12290;</dd><dt><a href="#dialect.basehtml.1.7">circled_7_delcric</a> </dt><dd><acronym class="acronym">HTML</acronym> &#27880;&#37322;&#21253;&#35013;&#22312; <code class="literal">&lt;!--...--&gt;</code> &#23383;&#31526;&#20013;&#12290;</dd><dt><a href="#dialect.basehtml.1.8">circled_8_delcric</a> </dt><dd>&#22788;&#29702;&#25351;&#20196;&#21253;&#35013;&#22312; <code class="literal">&lt;?...&gt;</code> &#23383;&#31526;&#20013;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="important"><blockquote><b class="title"><a name="d0e21013">&#37325;&#35201;: &#21253;&#21547;&#26893;&#20837;&#33050;&#26412;&#30340; <acronym class="acronym">HTML</acronym> &#22788;&#29702;</a></b><br><acronym class="acronym">HTML</acronym> &#35268;&#33539;&#35201;&#27714;&#25152;&#26377;&#38750; <acronym class="acronym">HTML</acronym> (&#20687;&#23458;&#25143;&#31471;&#30340; <span class="application">JavaScript</span>) &#24517;&#39035;&#21253;&#25324;&#22312; <acronym class="acronym">HTML</acronym> &#27880;&#37322;&#20013;&#65292;&#20294;&#19981;&#26159;&#25152;&#26377;&#30340;&#39029;&#38754;&#37117;&#26159;&#36825;&#20040;&#20570;&#30340; (&#32780;&#19988;&#25152;&#26377;&#30340;&#26368;&#26032;&#30340;&#27983;&#35272;&#22120;&#20063;&#37117;&#23481;&#35768;&#19981;&#36825;&#26679;&#20570;) &#12290;<code class="classname">BaseHTMLProcessor</code> &#19981;&#20801;&#35768;&#36825;&#26679;&#65292;&#22914;&#26524;&#33050;&#26412;&#23884;&#20837;&#24471;&#19981;&#27491;&#30830;&#65292;&#23427;&#23558;&#34987;&#24403;&#20316; <acronym class="acronym">HTML</acronym> &#19968;&#26679;&#36827;&#34892;&#20998;&#26512;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#33050;&#26412;&#21253;&#21547;&#20102;&#23567;&#20110;&#21644;&#31561;&#20110;&#21495;&#65292;<code class="classname">SGMLParser</code> &#21487;&#33021;&#20250;&#38169;&#35823;&#22320;&#35748;&#20026;&#25214;&#21040;&#20102;&#26631;&#35760;&#21644;&#23646;&#24615;&#12290;<code class="classname">SGMLParser</code> &#24635;&#26159;&#25226;&#26631;&#35760;&#21517;&#21644;&#23646;&#24615;&#21517;&#36716;&#25442;&#25104;&#23567;&#20889;&#65292;&#36825;&#26679;&#21487;&#33021;&#30772;&#22351;&#20102;&#33050;&#26412;&#65292;&#24182;&#19988; <code class="classname">BaseHTMLProcessor</code> &#24635;&#26159;&#29992;&#21452;&#24341;&#21495;&#26469;&#23558;&#23646;&#24615;&#23553;&#38381;&#36215;&#26469; (&#23613;&#31649;&#21407;&#22987;&#30340; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#21487;&#33021;&#20351;&#29992;&#21333;&#24341;&#21495;&#25110;&#27809;&#26377;&#24341;&#21495;) &#65292;&#36825;&#26679;&#24517;&#28982;&#20250;&#30772;&#22351;&#33050;&#26412;&#12290;&#24212;&#35813;&#24635;&#26159;&#23558;&#24744;&#30340;&#23458;&#25143;&#31471;&#33050;&#26412;&#25918;&#22312; <acronym class="acronym">HTML</acronym> &#27880;&#37322;&#20013;&#36827;&#34892;&#20445;&#25252;&#12290;</blockquote></div><div class="example"><a name="dialect.output.example"></a><p class="title"><b>&#20363;&nbsp;8.9.&nbsp;<code class="classname">BaseHTMLProcessor</code> &#36755;&#20986;&#32467;&#26524;</b></p><div class="example-contents"><pre class="programlisting">
    def output(self):               <a name="dialect.basehtml.2.1"></a>circled_1_delcric
        """Return processed HTML as a single string"""
        return "".join(self.pieces) <a name="dialect.basehtml.2.2"></a>circled_2_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.basehtml.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#22312; <code class="classname">BaseHTMLProcessor</code> &#20013;&#30340;&#19968;&#20010;&#26041;&#27861;&#65292;&#23427;&#27704;&#36828;&#19981;&#20250;&#34987;&#29238;&#31867; <code class="classname">SGMLParser</code> &#25152;&#35843;&#29992;&#12290;&#22240;&#20026;&#20854;&#23427;&#30340;&#22788;&#29702;&#22120;&#26041;&#27861;&#23558;&#23427;&#20204;&#37325;&#26500;&#30340; <acronym class="acronym">HTML</acronym> &#20445;&#23384;&#22312; <code class="varname">self.pieces</code> &#20013;&#65292;&#36825;&#20010;&#20989;&#25968;&#38656;&#35201;&#23558;&#25152;&#26377;&#36825;&#20123;&#29255;&#27573;&#36830;&#25509;&#25104;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;&#27491;&#22914;&#21069;&#38754;&#25552;&#21040;&#30340;&#65292;<span class="application">Python</span> &#22312;&#22788;&#29702;&#21015;&#34920;&#26041;&#38754;&#38750;&#24120;&#20986;&#33394;&#65292;&#20294;&#23545;&#20110;&#23383;&#31526;&#20018;&#22788;&#29702;&#23601;&#36874;&#33394;&#20102;&#12290;&#25152;&#20197;&#25105;&#20204;&#21482;&#26377;&#22312;&#26576;&#20154;&#30830;&#23454;&#38656;&#35201;&#23427;&#26102;&#25165;&#21019;&#24314;&#23436;&#25972;&#30340;&#23383;&#31526;&#20018;&#12290;</dd><dt><a href="#dialect.basehtml.2.2">circled_2_delcric</a> </dt><dd>&#22914;&#26524;&#24744;&#24895;&#24847;&#65292;&#20063;&#21487;&#20197;&#25442;&#25104;&#20351;&#29992; <code class="filename">string</code> &#27169;&#22359;&#30340; <code class="function">join</code> &#26041;&#27861;&#65306;<code class="literal">string.join(self.pieces, "")</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>W3C (<a href="http://www.w3.org/">http://www.w3.org/</a>) &#35752;&#35770;&#20102;&#23383;&#31526;&#21644;&#23454;&#20307;&#24341;&#29992; (<a href="http://www.w3.org/TR/REC-html40/charset.html#entities">http://www.w3.org/TR/REC-html40/charset.html#entities</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#35299;&#31572;&#20102;&#24744;&#30340;&#24576;&#30097;&#65292;&#21363; <code class="filename">htmlentitydefs</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-htmlentitydefs.html">http://www.python.org/doc/current/lib/module-htmlentitydefs.html</a>)&#30340;&#30830;&#21517;&#31526;&#20854;&#23454;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.locals"></a>8.5.&nbsp;<code class="function">locals</code> &#21644; <code class="function">globals</code></h2></div></div></div><div class="abstract"><p>&#25105;&#20204;&#20808;&#20559;&#31163;&#19968;&#19979; <acronym class="acronym">HTML</acronym> &#22788;&#29702;&#30340;&#20027;&#39064;&#65292;&#35752;&#35770;&#19968;&#19979; <span class="application">Python</span> &#22914;&#20309;&#22788;&#29702;&#21464;&#37327;&#12290;<span class="application">Python</span> &#26377;&#20004;&#20010;&#20869;&#32622;&#30340;&#20989;&#25968;&#65292;<code class="function">locals</code> &#21644; <code class="function">globals</code>&#65292;&#23427;&#20204;&#25552;&#20379;&#20102;&#22522;&#20110; dictionary &#30340;&#35775;&#38382;&#23616;&#37096;&#21644;&#20840;&#23616;&#21464;&#37327;&#30340;&#26041;&#24335;&#12290;</p></div><p>&#36824;&#35760;&#24471; <code class="function">locals</code> &#21527;&#65311;&#24744;&#31532;&#19968;&#27425;&#26159;&#22312;&#36825;&#37324;&#30475;&#21040;&#30340;&#65306;</p><div class="informalexample"><pre class="programlisting">
    def unknown_starttag(self, tag, attrs):
        strattrs = "".join([' %s="%s"' % (key, value) for key, value in attrs])
        self.pieces.append("&lt;%(tag)s%(strattrs)s&gt;" % locals())
</pre></div><p>&#19981;&#65292;&#31561;&#31561;&#65292;&#27492;&#26102;&#24744;&#36824;&#19981;&#33021;&#29702;&#35299; <code class="function">locals</code> &#12290;&#39318;&#20808;&#65292;&#24744;&#38656;&#35201;&#23398;&#20064;&#20851;&#20110;&#21629;&#21517;&#31354;&#38388;&#30340;&#30693;&#35782;&#12290;&#36825;&#24456;&#26543;&#29157;&#65292;&#20294;&#26159;&#24456;&#37325;&#35201;&#65292;&#22240;&#27492;&#35201;&#35201;&#32784;&#24515;&#20123;&#12290;</p><p><span class="application">Python</span> &#20351;&#29992;&#21483;&#20570;&#21517;&#23383;&#31354;&#38388;&#30340;&#19996;&#35199;&#26469;&#35760;&#24405;&#21464;&#37327;&#30340;&#36712;&#36857;&#12290;&#21517;&#23383;&#31354;&#38388;&#21482;&#26159;&#19968;&#20010; dictionary &#65292;&#23427;&#30340;&#38190;&#23383;&#23601;&#26159;&#21464;&#37327;&#21517;&#65292;&#23427;&#30340;&#20540;&#23601;&#26159;&#37027;&#20123;&#21464;&#37327;&#30340;&#20540;&#12290;&#23454;&#38469;&#19978;&#65292;&#21517;&#23383;&#31354;&#38388;&#21487;&#20197;&#20687; <span class="application">Python</span> &#30340; dictionary &#19968;&#26679;&#36827;&#34892;&#35775;&#38382;&#65292;&#19968;&#20250;&#20799;&#25105;&#20204;&#23601;&#20250;&#30475;&#21040;&#12290;</p><p>&#22312;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;&#20013;&#30340;&#20219;&#20309;&#19968;&#20010;&#22320;&#26041;&#65292;&#37117;&#23384;&#22312;&#20960;&#20010;&#21487;&#29992;&#30340;&#21517;&#23383;&#31354;&#38388;&#12290;&#27599;&#20010;&#20989;&#25968;&#37117;&#26377;&#30528;&#33258;&#24050;&#30340;&#21517;&#23383;&#31354;&#38388;&#65292;&#21483;&#20570;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#65292;&#23427;&#35760;&#24405;&#20102;&#20989;&#25968;&#30340;&#21464;&#37327;&#65292;&#21253;&#25324;&#20989;&#25968;&#30340;&#21442;&#25968;&#21644;&#23616;&#37096;&#23450;&#20041;&#30340;&#21464;&#37327;&#12290;&#27599;&#20010;&#27169;&#22359;&#25317;&#26377;&#23427;&#33258;&#24050;&#30340;&#21517;&#23383;&#31354;&#38388;&#65292;&#21483;&#20570;&#20840;&#23616;&#21517;&#23383;&#31354;&#38388;&#65292;&#23427;&#35760;&#24405;&#20102;&#27169;&#22359;&#30340;&#21464;&#37327;&#65292;&#21253;&#25324;&#20989;&#25968;&#12289;&#31867;&#12289;&#20854;&#23427;&#23548;&#20837;&#30340;&#27169;&#22359;&#12289;&#27169;&#22359;&#32423;&#30340;&#21464;&#37327;&#21644;&#24120;&#37327;&#12290;&#36824;&#26377;&#23601;&#26159;&#20869;&#32622;&#21517;&#23383;&#31354;&#38388;&#65292;&#20219;&#20309;&#27169;&#22359;&#22343;&#21487;&#35775;&#38382;&#23427;&#65292;&#23427;&#23384;&#25918;&#30528;&#20869;&#32622;&#30340;&#20989;&#25968;&#21644;&#24322;&#24120;&#12290;</p><p>&#24403;&#19968;&#34892;&#20195;&#30721;&#35201;&#20351;&#29992;&#21464;&#37327; <code class="varname">x</code> &#30340;&#20540;&#26102;&#65292;<span class="application">Python</span> &#20250;&#21040;&#25152;&#26377;&#21487;&#29992;&#30340;&#21517;&#23383;&#31354;&#38388;&#21435;&#26597;&#25214;&#21464;&#37327;&#65292;&#25353;&#29031;&#22914;&#19979;&#39034;&#24207;&#65306;</p><div class="orderedlist"><ol type="1"><li>&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#8213;&#8213;&#29305;&#25351;&#24403;&#21069;&#20989;&#25968;&#25110;&#31867;&#30340;&#26041;&#27861;&#12290;&#22914;&#26524;&#20989;&#25968;&#23450;&#20041;&#20102;&#19968;&#20010;&#23616;&#37096;&#21464;&#37327; <code class="varname">x</code>&#65292;&#25110;&#19968;&#20010;&#21442;&#25968; <code class="varname">x</code>&#65292;<span class="application">Python</span> &#23558;&#20351;&#29992;&#23427;&#65292;&#28982;&#21518;&#20572;&#27490;&#25628;&#32034;&#12290;</li><li>&#20840;&#23616;&#21517;&#23383;&#31354;&#38388;&#8213;&#8213;&#29305;&#25351;&#24403;&#21069;&#30340;&#27169;&#22359;&#12290;&#22914;&#26524;&#27169;&#22359;&#23450;&#20041;&#20102;&#19968;&#20010;&#21517;&#20026; <code class="varname">x</code> &#30340;&#21464;&#37327;&#65292;&#20989;&#25968;&#25110;&#31867;&#65292;<span class="application">Python</span> &#23558;&#20351;&#29992;&#23427;&#28982;&#21518;&#20572;&#27490;&#25628;&#32034;&#12290;</li><li>&#20869;&#32622;&#21517;&#23383;&#31354;&#38388;&#8213;&#8213;&#23545;&#27599;&#20010;&#27169;&#22359;&#37117;&#26159;&#20840;&#23616;&#30340;&#12290;&#20316;&#20026;&#26368;&#21518;&#30340;&#23581;&#35797;&#65292;<span class="application">Python</span> &#23558;&#20551;&#35774; <code class="varname">x</code> &#26159;&#20869;&#32622;&#20989;&#25968;&#25110;&#21464;&#37327;&#12290;</li></ol></div><p>&#22914;&#26524; <span class="application">Python</span> &#22312;&#36825;&#20123;&#21517;&#23383;&#31354;&#38388;&#25214;&#19981;&#21040; <code class="varname">x</code>&#65292;&#23427;&#23558;&#25918;&#24323;&#26597;&#25214;&#24182;&#24341;&#21457;&#19968;&#20010; <code class="errorcode">NameError</code> &#24322;&#24120;&#65292;&#21516;&#26102;&#20256;&#36882; <code class="errorname">There is no variable named 'x'</code> &#36825;&#26679;&#19968;&#26465;&#20449;&#24687;&#65292;&#22238;&#21040; <a class="xref" href="#odbchelper.unboundvariable" title="&#20363;&nbsp;3.18.&nbsp;&#24341;&#29992;&#26410;&#36171;&#20540;&#30340;&#21464;&#37327;">&#20363;&nbsp;3.18 &#8220;&#24341;&#29992;&#26410;&#36171;&#20540;&#30340;&#21464;&#37327;&#8221;</a>&#65292;&#24744;&#20250;&#30475;&#21040;&#19968;&#36335;&#19978;&#37117;&#26377;&#36825;&#26679;&#30340;&#20449;&#24687;&#12290;&#20294;&#26159;&#24744;&#24182;&#27809;&#26377;&#20307;&#20250;&#21040; <span class="application">Python</span> &#22312;&#32473;&#20986;&#36825;&#26679;&#30340;&#38169;&#35823;&#20043;&#21069;&#20570;&#20102;&#22810;&#23569;&#30340;&#21162;&#21147;&#12290;</p><div class="important"><blockquote><b class="title"><a name="d0e21228">&#37325;&#35201;: &#35821;&#35328;&#28436;&#21464;&#65306;&#23884;&#22871;&#30340;&#20316;&#29992;&#22495;</a></b><br><span class="application">Python</span> 2.2 &#24341;&#20837;&#20102;&#19968;&#31181;&#30053;&#26377;&#19981;&#21516;&#20294;&#37325;&#35201;&#30340;&#25913;&#21464;&#65292;&#23427;&#20250;&#24433;&#21709;&#21517;&#23383;&#31354;&#38388;&#30340;&#25628;&#32034;&#39034;&#24207;&#65306;&#23884;&#22871;&#30340;&#20316;&#29992;&#22495;&#12290;

&#22312; <span class="application">Python</span> 2.2 &#29256;&#26412;&#20043;&#21069;&#65292;&#24403;&#24744;&#22312;&#19968;&#20010;<a class="link" href="#fileinfo.nested" title="&#20363;&nbsp;6.21.&nbsp;listDirectory">&#23884;&#22871;&#20989;&#25968;</a>&#25110; <a class="link" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;"><code class="literal">lambda</code> &#20989;&#25968;</a>&#20013;&#24341;&#29992;&#19968;&#20010;&#21464;&#37327;&#26102;&#65292;<span class="application">Python</span> &#20250;&#22312;&#24403;&#21069; (&#23884;&#22871;&#30340;&#25110; <code class="literal">lambda</code>) &#20989;&#25968;&#30340;&#21517;&#23383;&#31354;&#38388;&#20013;&#25628;&#32034;&#65292;&#28982;&#21518;&#22312;&#27169;&#22359;&#30340;&#21517;&#23383;&#31354;&#38388;&#12290;<span class="application">Python</span> 2.2 &#23558;&#21482;&#22312;&#24403;&#21069; (&#23884;&#22871;&#30340;&#25110; <code class="literal">lambda</code>) &#20989;&#25968;&#30340;&#21517;&#23383;&#31354;&#38388;&#20013;&#25628;&#32034;&#65292;<span class="emphasis"><em>&#28982;&#21518;&#26159;&#22312;&#29238;&#20989;&#25968;&#30340;&#21517;&#23383;&#31354;&#38388;</em></span> &#20013;&#25628;&#32034;&#65292;&#25509;&#30528;&#26159;&#27169;&#22359;&#30340;&#21517;&#23383;&#31354;&#38388;&#20013;&#25628;&#32034;&#12290;<span class="application">Python</span> 2.1 &#21487; &#20197;&#20004;&#31181;&#26041;&#24335;&#24037;&#20316;&#65292;&#32570;&#30465;&#22320;&#65292;&#25353; <span class="application">Python</span> 2.0 &#30340;&#26041;&#24335;&#24037;&#20316;&#12290;&#20294;&#26159;&#24744;&#21487;&#20197;&#25226;&#19979;&#38754;&#19968;&#34892;&#20195;&#30721;&#22686;&#21152;&#21040;&#24744;&#30340;&#27169;&#22359;&#22836;&#37096;&#65292;&#20351;&#24744;&#30340;&#27169;&#22359;&#24037;&#20316;&#36215;&#26469;&#20687; <span class="application">Python</span> 2.2 &#30340;&#26041;&#24335;&#65306;<pre class="programlisting">
from __future__ import nested_scopes</pre></blockquote></div><p>&#24744;&#26159;&#21542;&#20026;&#27492;&#32780;&#24863;&#21040;&#22256;&#24785;&#65311;&#19981;&#35201;&#28784;&#24515;&#65281;&#25105;&#25954;&#35828;&#36825;&#19968;&#28857;&#38750;&#24120;&#37239;&#12290;&#20687; <span class="application">Python</span> &#20013;&#30340;&#35768;&#22810;&#20107;&#24773;&#19968;&#26679;&#65292;&#21517;&#23383;&#31354;&#38388;<span class="emphasis"><em>&#22312;&#36816;&#34892;&#26102;&#30452;&#25509;&#21487;&#20197;&#35775;&#38382;</em></span>&#12290;&#24590;&#20040;&#26679;&#65311;&#19981;&#38169;&#21543;&#65292;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#21487;&#20197;&#36890;&#36807;&#20869;&#32622;&#30340; <code class="function">locals</code> &#20989;&#25968;&#26469;&#35775;&#38382;&#12290;&#20840;&#23616; (&#27169;&#22359;&#32423;&#21035;) &#21517;&#23383;&#31354;&#38388;&#21487;&#20197;&#36890;&#36807;&#20869;&#32622;&#30340; <code class="function">globals</code> &#20989;&#25968;&#26469;&#35775;&#38382;&#12290;</p><div class="example"><a name="d0e21286"></a><p class="title"><b>&#20363;&nbsp;8.10.&nbsp;<code class="function">locals</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def foo(arg):</span> <a name="dialect.locals.1.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">x = 1</span>
<code class="prompt">...     </code><span class="userinput">print locals()</span>
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">foocircled_7_delcric</span>        <a name="dialect.locals.1.2"></a>circled_2_delcric
<font color="teal">{'arg': 7, 'x': 1}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">foo('bar')</span>    <a name="dialect.locals.1.3"></a>circled_3_delcric
<font color="teal">{'arg': 'bar', 'x': 1}</font></pre><div class="calloutlist"><dl compact><dt><a href="#dialect.locals.1.1">circled_1_delcric</a> </dt><dd>&#20989;&#25968; <code class="function">foo</code> &#22312;&#23427;&#30340;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#20013;&#26377;&#20004;&#20010;&#21464;&#37327;&#65306;<code class="varname">arg</code> (&#23427;&#30340;&#20540;&#26159;&#34987;&#20256;&#20837;&#20989;&#25968;&#30340;) &#21644; <code class="varname">x</code> (&#23427;&#26159;&#22312;&#20989;&#25968;&#37324;&#23450;&#20041;&#30340;)&#12290;</dd><dt><a href="#dialect.locals.1.2">circled_2_delcric</a> </dt><dd><code class="function">locals</code> &#36820;&#22238;&#19968;&#20010;&#21517;&#23383;/&#20540;&#23545;&#30340; dictionary&#12290;&#36825;&#20010; dictionary &#30340;&#38190;&#23383;&#26159;&#23383;&#31526;&#20018;&#24418;&#24335;&#30340;&#21464;&#37327;&#21517;&#23383;&#65292;dictionary &#30340;&#20540;&#26159;&#21464;&#37327;&#30340;&#23454;&#38469;&#20540;&#12290;&#25152;&#20197;&#29992; <code class="literal">7</code> &#26469;&#35843;&#29992; <code class="function">foo</code>&#65292;&#20250;&#25171;&#21360;&#20986;&#21253;&#21547;&#20989;&#25968;&#20004;&#20010;&#23616;&#37096;&#21464;&#37327;&#30340; dictionary&#65306;<code class="varname">arg</code> (<code class="literal">7</code>) &#21644; <code class="varname">x</code> (<code class="constant">1</code>)&#12290;</dd><dt><a href="#dialect.locals.1.3">circled_3_delcric</a> </dt><dd>&#22238;&#24819;&#19968;&#19979;&#65292;<span class="application">Python</span> &#26377;&#21160;&#24577;&#25968;&#25454;&#31867;&#22411;&#65292;&#25152;&#20197;&#24744;&#21487;&#20197;&#38750;&#24120;&#23481;&#26131;&#22320;&#20256;&#36882;&#32473; <code class="varname">arg</code> &#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#36825;&#20010;&#20989;&#25968; (&#21644;&#23545; <code class="function">locals</code> &#30340;&#35843;&#29992;) &#23558;&#20173;&#28982;&#24456;&#22909;&#30340;&#24037;&#20316;&#12290;<code class="function">locals</code> &#21487;&#20197;&#29992;&#20110;&#25152;&#26377;&#31867;&#22411;&#30340;&#21464;&#37327;&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="function">locals</code> &#23545;&#23616;&#37096; (&#20989;&#25968;) &#21517;&#23383;&#31354;&#38388;&#20570;&#20102;&#20123;&#20160;&#20040;&#65292;<code class="function">globals</code> &#23601;&#23545;&#20840;&#23616; (&#27169;&#22359;) &#21517;&#23383;&#31354;&#38388;&#20570;&#20102;&#20160;&#20040;&#12290;&#28982;&#32780; <code class="function">globals</code> &#26356;&#20196;&#20154;&#20852;&#22859;&#65292;&#22240;&#20026;&#19968;&#20010;&#27169;&#22359;&#30340;&#21517;&#23383;&#31354;&#38388;&#26159;&#26356;&#20196;&#20154;&#20852;&#22859;&#30340;&#12290;<sup>[<a name="d0e21392" href="#ftn.d0e21392" class="footnote">6</a>]</sup> &#27169;&#22359;&#30340;&#21517;&#23383;&#31354;&#38388;&#19981;&#20165;&#20165;&#21253;&#21547;&#20102;&#27169;&#22359;&#32423;&#30340;&#21464;&#37327;&#21644;&#24120;&#37327;&#65292;&#36824;&#21253;&#25324;&#20102;&#25152;&#26377;&#22312;&#27169;&#22359;&#20013;&#23450;&#20041;&#30340;&#20989;&#25968;&#21644;&#31867;&#12290;&#38500;&#27492;&#20197;&#22806;&#65292;&#23427;&#36824;&#21253;&#25324;&#20102;&#20219;&#20309;&#34987;&#23548;&#20837;&#21040;&#27169;&#22359;&#20013;&#30340;&#19996;&#35199;&#12290;</p><p>&#22238;&#24819;&#19968;&#19979; <a class="link" href="#fileinfo.fromimport" title="5.2.&nbsp;&#20351;&#29992; from module import &#23548;&#20837;&#27169;&#22359;"><code class="literal">from <em class="replaceable">module</em> import</code></a> &#21644; <a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string"><code class="literal">import <em class="replaceable">module</em></code></a> &#20043;&#38388;&#30340;&#19981;&#21516;&#12290;&#20351;&#29992; <code class="literal">import <em class="replaceable">module</em></code>&#65292;&#27169;&#22359;&#33258;&#36523;&#34987;&#23548;&#20837;&#65292;&#20294;&#26159;&#23427;&#20445;&#25345;&#30528;&#33258;&#24050;&#30340;&#21517;&#23383;&#31354;&#38388;&#65292;&#36825;&#23601;&#26159;&#20026;&#20160;&#20040;&#24744;&#38656;&#35201;&#20351;&#29992;&#27169;&#22359;&#21517;&#26469;&#35775;&#38382;&#23427;&#30340;&#20989;&#25968;&#25110;&#23646;&#24615;&#65306;<code class="literal"><em class="replaceable">module</em>.<em class="replaceable">function</em></code> &#30340;&#21407;&#22240;&#12290;&#20294;&#26159;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code>&#65292;&#23454;&#38469;&#19978;&#26159;&#20174;&#21478;&#19968;&#20010;&#27169;&#22359;&#20013;&#23558;&#25351;&#23450;&#30340;&#20989;&#25968;&#21644;&#23646;&#24615;&#23548;&#20837;&#21040;&#24744;&#33258;&#24049;&#30340;&#21517;&#23383;&#31354;&#38388;&#65292;&#36825;&#23601;&#26159;&#20026;&#20160;&#20040;&#24744;&#21487;&#20197;&#30452;&#25509;&#35775;&#38382;&#23427;&#20204;&#21364;&#19981;&#38656;&#35201;&#24341;&#29992;&#23427;&#20204;&#25152;&#26469;&#28304;&#30340;&#27169;&#22359;&#12290;&#20351;&#29992; <code class="function">globals</code> &#20989;&#25968;&#65292;&#24744;&#20250;&#30495;&#20999;&#22320;&#30475;&#21040;&#36825;&#19968;&#20999;&#30340;&#21457;&#29983;&#12290;</p><div class="example"><a name="dialect.globals.example"></a><p class="title"><b>&#20363;&nbsp;8.11.&nbsp;<code class="function">globals</code> &#20171;&#32461;</b></p><div class="example-contents"><p>&#30475;&#30475;&#19979;&#38754;&#21015;&#20986;&#30340;&#22312;&#25991;&#20214; <code class="filename">BaseHTMLProcessor.py</code> &#23614;&#37096;&#30340;&#20195;&#30721;&#22359;&#65306;</p><pre class="programlisting">
if __name__ == "__main__":
    for k, v in globals().items():             <a name="dialect.locals.2.1"></a>circled_1_delcric
        print k, "=", v</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.locals.2.1">circled_1_delcric</a> </dt><dd>&#19981;&#35201;&#34987;&#21523;&#22351;&#20102;&#65292;&#24819;&#24819;&#20197;&#21069;&#24744;&#24050;&#32463;&#20840;&#37096;&#37117;&#30475;&#21040;&#36807;&#20102;&#12290;<code class="function">globals</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010; dictionary&#65292;&#25105;&#20204;&#20351;&#29992; <code class="function">items</code> &#26041;&#27861;&#21644;<a class="link" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#22810;&#21464;&#37327;&#36171;&#20540;</a>&#26469;<a class="link" href="#dictionaryiter.example" title="&#20363;&nbsp;6.10.&nbsp;&#36941;&#21382; dictionary">&#36941;&#21382; dictionary</a>&#12290;&#22312;&#36825;&#37324;&#21807;&#19968;&#30340;&#26032;&#19996;&#35199;&#23601;&#26159; <code class="function">globals</code>  &#20989;&#25968;&#12290;</dd></dl></div><p>&#29616;&#22312;&#20174;&#21629;&#20196;&#34892;&#36816;&#34892;&#36825;&#20010;&#33050;&#26412;&#65292;&#20250;&#24471;&#21040;&#19979;&#38754;&#30340;&#36755;&#20986; (&#27880;&#24847;&#24744;&#30340;&#36755;&#20986;&#21487;&#33021;&#26377;&#30053;&#24494;&#30340;&#19981;&#21516;&#65292;&#36825;&#20381;&#36182;&#20110;&#24744;&#30340;&#31995;&#32479;&#24179;&#21488;&#21644;&#25152;&#23433;&#35013;&#30340; <span class="application">Python</span> &#29256;&#26412;)&#65306;</p><pre class="screen"><code class="prompt">c:\docbook\dip\py&gt;</code> <span class="userinput">python BaseHTMLProcessor.py</span></pre><pre class="programlisting">
SGMLParser = sgmllib.SGMLParser                <a name="dialect.locals.3.1"></a>circled_1_delcric
htmlentitydefs = &lt;module 'htmlentitydefs' from 'C:\Python23\lib\htmlentitydefs.py'&gt; <a name="dialect.locals.3.2"></a>circled_2_delcric
BaseHTMLProcessor = __main__.BaseHTMLProcessor <a name="dialect.locals.3.3"></a>circled_3_delcric
__name__ = __main__                            <a name="dialect.locals.3.4"></a>circled_4_delcric
... rest of output omitted for brevity...</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.locals.3.1">circled_1_delcric</a> </dt><dd>&#25105;&#20204;&#20351;&#29992;&#20102; <code class="literal">from <em class="replaceable">module</em> import</code> &#25226; <code class="classname">SGMLParser</code> &#20174; <code class="filename">sgmllib</code> &#20013;&#23548;&#20837;&#12290;&#20063;&#23601;&#26159;&#35828;&#23427;&#34987;&#30452;&#25509;&#23548;&#20837;&#21040;&#25105;&#20204;&#30340;&#27169;&#22359;&#21517;&#23383;&#31354;&#38388;&#20102;&#65292;&#23601;&#26159;&#36825;&#26679;&#12290;</dd><dt><a href="#dialect.locals.3.2">circled_2_delcric</a> </dt><dd>&#25226;&#19978;&#38754;&#30340;&#20363;&#23376;&#21644; <code class="filename">htmlentitydefs</code> &#23545;&#27604;&#19968;&#19979;&#65292;&#23427;&#26159;&#29992; <code class="literal">import</code> &#34987;&#23548;&#20837;&#30340;&#12290;&#20063;&#23601;&#26159;&#35828; <code class="filename">htmlentitydefs</code> &#27169;&#22359;&#26412;&#36523;&#34987;&#23548;&#20837;&#20102;&#21517;&#23383;&#31354;&#38388;&#65292;&#20294;&#26159;&#23450;&#20041;&#22312; <code class="filename">htmlentitydefs</code> &#20043;&#20013;&#30340; <code class="varname">entitydefs</code> &#21464;&#37327;&#21364;&#27809;&#26377;&#12290;</dd><dt><a href="#dialect.locals.3.3">circled_3_delcric</a> </dt><dd>&#36825;&#20010;&#27169;&#22359;&#21482;&#23450;&#20041;&#19968;&#20010;&#31867;&#65292;<code class="classname">BaseHTMLProcessor</code>&#65292;&#19981;&#38169;&#12290;&#27880;&#24847;&#36825;&#20799;&#30340;&#20540;&#23601;&#26159;<a class="link" href="#fileinfo.classattributes.intro" title="&#20363;&nbsp;5.17.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;">&#31867;&#26412;&#36523;</a>&#65292;&#19981;&#26159;&#19968;&#20010;&#29305;&#21035;&#30340;&#31867;&#23454;&#20363;&#12290;</dd><dt><a href="#dialect.locals.3.4">circled_4_delcric</a> </dt><dd>&#35760;&#24471; <a class="link" href="#odbchelper.ifnametrick"><code class="literal">if <span class="literal">__name__</span></code> &#25216;&#24039;</a>&#21527;&#65311;&#24403;&#36816;&#34892;&#19968;&#20010;&#27169;&#22359;&#26102; (&#30456;&#23545;&#20110;&#20174;&#21478;&#22806;&#19968;&#20010;&#27169;&#22359;&#20013;&#23548;&#20837;&#32780;&#35328;)&#65292;&#20869;&#32622;&#30340; <code class="literal">__name__</code> &#26159;&#19968;&#20010;&#29305;&#27530;&#20540; <code class="literal">__main__</code>&#12290;&#22240;&#20026;&#25105;&#20204;&#26159;&#25226;&#36825;&#20010;&#27169;&#22359;&#24403;&#20316;&#33050;&#26412;&#20174;&#21629;&#20196;&#26469;&#36816;&#34892;&#30340;&#65292;&#25925; <code class="literal">__name__</code> &#20540;&#20026; <code class="literal">__main__</code>&#65292;&#36825;&#23601;&#26159;&#20026;&#20160;&#20040;&#25105;&#20204;&#36825;&#27573;&#31616;&#21333;&#22320;&#25171;&#21360; <code class="function">globals</code> &#30340;&#20195;&#30721;&#21487;&#20197;&#25191;&#34892;&#30340;&#21407;&#22240;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="tip.localsbyname">&#27880;&#24847;: &#21464;&#37327;&#30340;&#21160;&#24577;&#35775;&#38382;</a></b><br>&#20351;&#29992; <code class="function">locals</code> &#21644; <code class="function">globals</code> &#20989;&#25968;&#65292;&#36890;&#36807;&#25552;&#20379;&#21464;&#37327;&#30340;&#23383;&#31526;&#20018;&#21517;&#23383;&#24744;&#21487;&#20197;&#21160;&#24577;&#22320;&#24471;&#21040;&#20219;&#20309;&#21464;&#37327;&#30340;&#20540;&#12290;&#36825;&#31181;&#26041;&#27861;&#25552;&#20379;&#20102;&#36825;&#26679;&#30340;&#21151;&#33021;&#65306;<a class="link" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;"><code class="function">getattr</code></a> &#20989;&#25968;&#20801;&#35768;&#24744;&#36890;&#36807;&#25552;&#20379;&#20989;&#25968;&#30340;&#23383;&#31526;&#20018;&#21517;&#26469;&#21160;&#24577;&#22320;&#35775;&#38382;&#20219;&#24847;&#30340;&#20989;&#25968;&#12290;</blockquote></div><p>&#22312; <code class="function">locals</code> &#19982; <code class="function">globals</code> &#20043;&#38388;&#26377;&#21478;&#22806;&#19968;&#20010;&#37325;&#35201;&#30340;&#21306;&#21035;&#65292;&#24744;&#24212;&#35813;&#22312;&#23427;&#22256;&#25200;&#24744;&#20043;&#21069;&#23601;&#20102;&#35299;&#23427;&#12290;&#23427;&#26080;&#35770;&#22914;&#20309;&#37117;&#20250;&#22256;&#25200;&#24744;&#30340;&#65292;&#20294;&#33267;&#23569;&#24744;&#36824;&#20250;&#35760;&#24471;&#26366;&#32463;&#23398;&#20064;&#36807;&#23427;&#12290;</p><div class="example"><a name="dialect.locals.readonly.example"></a><p class="title"><b>&#20363;&nbsp;8.12.&nbsp;<code class="function">locals</code> &#26159;&#21482;&#35835;&#30340;&#65292;<code class="function">globals</code> &#19981;&#26159;</b></p><div class="example-contents"><pre class="programlisting">
def foo(arg):
    x = 1
    print locals()    <a name="dialect.locals.4.1"></a>circled_1_delcric
    locals()["x"] = 2 <a name="dialect.locals.4.2"></a>circled_2_delcric
    print "x=",x      <a name="dialect.locals.4.3"></a>circled_3_delcric

z = 7
print "z=",z
foocircled_3_delcric
globals()["z"] = 8    <a name="dialect.locals.4.4"></a>circled_4_delcric
print "z=",z          <a name="dialect.locals.4.5"></a>circled_5_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.locals.4.1">circled_1_delcric</a> </dt><dd>&#22240;&#20026;&#20351;&#29992; <code class="literal">3</code> &#26469;&#35843;&#29992; <code class="function">foo</code>&#65292;&#20250;&#25171;&#21360;&#20986; <code class="literal">{'arg': 3, 'x': 1}</code>&#12290;&#36825;&#20010;&#24212;&#35813;&#27809;&#20160;&#20040;&#22855;&#24618;&#30340;&#12290;</dd><dt><a href="#dialect.locals.4.2">circled_2_delcric</a> </dt><dd><code class="function">locals</code> &#26159;&#19968;&#20010;&#36820;&#22238; dictionary &#30340;&#20989;&#25968;&#65292;&#36825;&#37324;&#24744;&#22312; dictionary &#20013;&#35774;&#32622;&#20102;&#19968;&#20010;&#20540;&#12290;&#24744;&#21487;&#33021;&#35748;&#20026;&#36825;&#26679;&#20250;&#25913;&#21464;&#23616;&#37096;&#21464;&#37327; <code class="varname">x</code> &#30340;&#20540;&#20026; <code class="literal">2</code>&#65292;&#20294;&#24182;&#19981;&#20250;&#12290;<code class="function">locals</code> &#23454;&#38469;&#19978;&#27809;&#26377;&#36820;&#22238;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#65292;&#23427;&#36820;&#22238;&#30340;&#26159;&#19968;&#20010;&#25335;&#36125;&#12290;&#25152;&#20197;&#23545;&#23427;&#36827;&#34892;&#25913;&#21464;&#23545;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#20013;&#30340;&#21464;&#37327;&#20540;&#24182;&#26080;&#24433;&#21709;&#12290;</dd><dt><a href="#dialect.locals.4.3">circled_3_delcric</a> </dt><dd>&#36825;&#26679;&#20250;&#25171;&#21360;&#20986; <code class="literal">x= 1</code>&#65292;&#32780;&#19981;&#26159; <code class="literal">x= 2</code>&#12290;</dd><dt><a href="#dialect.locals.4.4">circled_4_delcric</a> </dt><dd>&#22312;&#26377;&#20102;&#23545; <code class="function">locals</code> &#30340;&#32463;&#39564;&#20043;&#21518;&#65292;&#24744;&#21487;&#33021;&#35748;&#20026;&#36825;&#26679;<span class="emphasis"><em>&#19981;&#20250;</em></span> &#25913;&#21464; <code class="varname">z</code> &#30340;&#20540;&#65292;&#20294;&#26159;&#21487;&#20197;&#12290;&#30001;&#20110; <span class="application">Python</span> &#22312;&#23454;&#29616;&#36807;&#31243;&#20013;&#20869;&#37096;&#26377;&#25152;&#21306;&#21035; (&#20851;&#20110;&#36825;&#20123;&#21306;&#21035;&#25105;&#23425;&#21487;&#19981;&#21435;&#30740;&#31350;&#65292;&#22240;&#20026;&#25105;&#33258;&#24050;&#36824;&#27809;&#26377;&#23436;&#20840;&#29702;&#35299;) &#65292;<code class="function">globals</code> &#36820;&#22238;&#23454;&#38469;&#30340;&#20840;&#23616;&#21517;&#23383;&#31354;&#38388;&#65292;&#32780;&#19981;&#26159;&#19968;&#20010;&#25335;&#36125;&#65306;&#19982; <code class="function">locals</code> &#30340;&#34892;&#20026;&#23436;&#20840;&#30456;&#21453;&#12290;&#25152;&#20197;&#23545; <code class="function">globals</code> &#25152;&#36820;&#22238;&#30340; dictionary &#30340;&#20219;&#20309;&#30340;&#25913;&#21160;&#37117;&#20250;&#30452;&#25509;&#24433;&#21709;&#21040;&#20840;&#23616;&#21464;&#37327;&#12290;</dd><dt><a href="#dialect.locals.4.5">circled_5_delcric</a> </dt><dd>&#36825;&#26679;&#20250;&#25171;&#21360;&#20986; <code class="literal">z= 8</code>&#65292;&#32780;&#19981;&#26159; <code class="literal">z= 7</code>&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.dictsub"></a>8.6.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</h2></div></div></div><p>&#20026;&#20160;&#20040;&#23398;&#20064; <code class="function">locals</code> &#21644; <code class="function">globals</code>&#65311;&#22240;&#20026;&#25509;&#19979;&#26469;&#23601;&#21487;&#20197;&#23398;&#20064;&#20851;&#20110;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#12290;&#25110;&#35768;&#24744;&#36824;&#33021;&#35760;&#36215;&#65292;<a class="link" href="#odbchelper.stringformatting" title="3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;">&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a>&#25552;&#20379;&#20102;&#19968;&#31181;&#23558;&#20540;&#25554;&#20837;&#23383;&#31526;&#20018;&#20013;&#30340;&#19968;&#31181;&#20415;&#25463;&#30340;&#26041;&#27861;&#12290;&#20540;&#34987;&#21015;&#22312;&#19968;&#20010; tuple &#20013;&#65292;&#25353;&#29031;&#39034;&#24207;&#25554;&#20837;&#21040;&#23383;&#31526;&#20018;&#20013;&#27599;&#20010;&#26684;&#24335;&#21270;&#26631;&#35760;&#25152;&#22312;&#30340;&#20301;&#32622;&#19978;&#12290;&#23613;&#31649;&#36825;&#31181;&#20570;&#27861;&#25928;&#29575;&#39640;&#65292;&#20294;&#36824;&#19981;&#26159;&#26368;&#23481;&#26131;&#38405;&#35835;&#30340;&#20195;&#30721;&#65292;&#29305;&#21035;&#26159;&#24403;&#25554;&#20837;&#22810;&#20010;&#20540;&#30340;&#26102;&#20505;&#12290;&#20165;&#29992;&#30524;&#30475;&#19968;&#36941;&#23383;&#31526;&#20018;&#65292;&#24744;&#19981;&#33021;&#39532;&#19978;&#23601;&#26126;&#30333;&#32467;&#26524;&#26159;&#20160;&#20040;&#65307;&#24744;&#38656;&#35201;&#32463;&#24120;&#22320;&#22312;&#23383;&#31526;&#20018;&#21644;&#20540;&#30340; tuple &#20043;&#38388;&#36827;&#34892;&#21453;&#22797;&#26597;&#30475;&#12290;</p><div class="abstract"><p>&#26377;&#21478;&#22806;&#19968;&#31181;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#30340;&#24418;&#24335;&#65292;&#23427;&#20351;&#29992; dictionary &#32780;&#19981;&#26159;&#20540;&#30340; tuple&#12290;</p></div><div class="example"><a name="d0e21685"></a><p class="title"><b>&#20363;&nbsp;8.13.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">"%(pwd)s" % params</span>                                    <a name="dialect.dictsub.1.1"></a>circled_1_delcric
<font color="teal">'secret'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">"%(pwd)s is not a good password for %(uid)s" % params</span> <a name="dialect.dictsub.1.2"></a>circled_2_delcric
<font color="teal">'secret is not a good password for sa'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">"%(database)s of mind, %(database)s of body" % params</span> <a name="dialect.dictsub.1.3"></a>circled_3_delcric
<font color="teal">'master of mind, master of body'</font></pre><div class="calloutlist"><dl compact><dt><a href="#dialect.dictsub.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#31181;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#24418;&#24335;&#19981;&#29992;&#26174;&#24335;&#30340;&#20540;&#30340; tuple&#65292;&#32780;&#26159;&#20351;&#29992;&#19968;&#20010; dictionary&#65292;<code class="varname">params</code>&#12290;&#24182;&#19988;&#26631;&#35760;&#20063;&#19981;&#26159;&#22312;&#23383;&#31526;&#20018;&#20013;&#30340;&#19968;&#20010;&#31616;&#21333; <code class="literal">%s</code>&#65292;&#32780;&#26159;&#21253;&#21547;&#20102;&#19968;&#20010;&#29992;&#25324;&#21495;&#21253;&#22260;&#36215;&#26469;&#30340;&#21517;&#23383;&#12290;&#36825;&#20010;&#21517;&#23383;&#26159; <code class="varname">params</code> dictionary &#20013;&#30340;&#19968;&#20010;&#38190;&#23383;&#65292;&#25152;&#20197; <code class="literal">%(pwd)s</code> &#26631;&#35760;&#34987;&#26367;&#25442;&#25104;&#30456;&#24212;&#30340;&#20540; <code class="literal">secret</code>&#12290;</dd><dt><a href="#dialect.dictsub.1.2">circled_2_delcric</a> </dt><dd>&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#21487;&#29992;&#20110;&#20219;&#24847;&#25968;&#37327;&#30340;&#26377;&#21517;&#30340;&#38190;&#23383;&#12290;&#27599;&#20010;&#38190;&#23383;&#24517;&#39035;&#22312;&#19968;&#20010;&#32473;&#23450;&#30340; dictionary &#20013;&#23384;&#22312;&#65292;&#21542;&#21017;&#36825;&#20010;&#26684;&#24335;&#21270;&#25805;&#20316;&#23558;&#22833;&#36133;&#24182;&#24341;&#21457;&#19968;&#20010; <code class="errorcode">KeyError</code> &#30340;&#24322;&#24120;&#12290;</dd><dt><a href="#dialect.dictsub.1.3">circled_3_delcric</a> </dt><dd>&#24744;&#29978;&#33267;&#21487;&#20197;&#20004;&#27425;&#25351;&#23450;&#21516;&#19968;&#38190;&#23383;&#65292;&#27599;&#20010;&#38190;&#23383;&#20986;&#29616;&#20043;&#22788;&#23558;&#34987;&#21516;&#19968;&#20010;&#20540;&#25152;&#26367;&#25442;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#20026;&#20160;&#20040;&#24744;&#20559;&#35201;&#20351;&#29992;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#21602;&#65311;&#30340;&#30830;&#65292;&#20165;&#20026;&#20102;&#36827;&#34892;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#65292;&#23601;&#20107;&#20808;&#21019;&#24314;&#19968;&#20010;&#26377;&#38190;&#23383;&#21644;&#20540;&#30340; dictionary &#30475;&#19978;&#21435;&#30340;&#30830;&#26377;&#20123;&#23567;&#39064;&#22823;&#20316;&#12290;&#23427;&#30340;&#30495;&#27491;&#26368;&#22823;&#29992;&#22788;&#26159;&#24403;&#24744;&#30896;&#24039;&#24050;&#32463;&#26377;&#20102;&#20687; <a class="link" href="#dialect.locals" title="8.5.&nbsp;locals &#21644; globals"><code class="function">locals</code></a> &#19968;&#26679;&#30340;&#26377;&#24847;&#20041;&#30340;&#38190;&#23383;&#21644;&#20540;&#30340; dictionary &#30340;&#26102;&#20505;&#12290;</p><div class="example"><a name="dialect.unknownstarttag"></a><p class="title"><b>&#20363;&nbsp;8.14.&nbsp;<code class="filename">BaseHTMLProcessor.py</code> &#20013;&#30340;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</b></p><div class="example-contents"><pre class="programlisting">
    def handle_comment(self, text):        
        self.pieces.append("&lt;!--%(text)s--&gt;" % locals()) <a name="dialect.dictsub.2.1"></a>circled_1_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.dictsub.2.1">circled_1_delcric</a> </dt><dd>&#20351;&#29992;&#20869;&#32622;&#30340; <code class="function">locals</code> &#20989;&#25968;&#26159;&#26368;&#26222;&#36890;&#30340;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#30340;&#24212;&#29992;&#12290;&#36825;&#23601;&#26159;&#35828;&#24744;&#21487;&#20197;&#22312;&#24744;&#30340;&#23383;&#31526;&#20018; (&#26412;&#20363;&#20013;&#26159; <code class="varname">text</code>&#65292;&#23427;&#20316;&#20026;&#19968;&#20010;&#21442;&#25968;&#20256;&#36882;&#32473;&#31867;&#26041;&#27861;) &#20013;&#20351;&#29992;&#23616;&#37096;&#21464;&#37327;&#30340;&#21517;&#23383;&#65292;&#24182;&#19988;&#27599;&#20010;&#21629;&#21517;&#30340;&#21464;&#37327;&#23558;&#20250;&#34987;&#23427;&#30340;&#20540;&#26367;&#25442;&#12290;&#22914;&#26524; <code class="varname">text</code> &#26159; <code class="literal">'Begin page footer'</code>&#65292;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270; <code class="literal">"&lt;!--%(text)s--&gt;" % locals()</code> &#23558;&#24471;&#21040;&#23383;&#31526;&#20018; <code class="literal">'&lt;!--Begin page footer--&gt;'</code>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e21789"></a><p class="title"><b>&#20363;&nbsp;8.15.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#30340;&#26356;&#22810;&#20869;&#23481;</b></p><div class="example-contents"><pre class="programlisting">
    def unknown_starttag(self, tag, attrs):
        strattrs = "".join([' %s="%s"' % (key, value) for key, value in attrs]) <a name="dialect.dictsub.3.1"></a>circled_1_delcric
        self.pieces.append("&lt;%(tag)s%(strattrs)s&gt;" % locals())                       <a name="dialect.dictsub.3.2"></a>circled_2_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.dictsub.3.1">circled_1_delcric</a> </dt><dd>&#24403;&#36825;&#20010;&#27169;&#22359;&#34987;&#35843;&#29992;&#26102;&#65292;<code class="varname">attrs</code> &#26159;&#19968;&#20010;&#38190;/&#20540; tuple &#30340; list&#65292;&#23601;&#20687;&#19968;&#20010; <a class="link" href="#odbchelper.items" title="&#20363;&nbsp;3.25.&nbsp;keys, values &#21644; items &#20989;&#25968;">dictionary &#30340; <code class="function">items</code></a>&#12290;&#36825;&#23601;&#24847;&#21619;&#30528;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;<a class="link" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#22810;&#21464;&#37327;&#36171;&#20540;</a>&#26469;&#36941;&#21382;&#23427;&#12290;&#21040;&#29616;&#22312;&#36825;&#23558;&#26159;&#19968;&#31181;&#29087;&#24713;&#30340;&#27169;&#24335;&#65292;&#20294;&#26159;&#36825;&#37324;&#26377;&#24456;&#22810;&#19996;&#35199;&#65292;&#35753;&#25105;&#20204;&#20998;&#24320;&#26469;&#30475;&#65306;<div class="orderedlist"><ol type="a"><li>&#20551;&#35774; <code class="varname">attrs</code> &#26159; <code class="literal">[('href', 'index.html'), ('title', 'Go to home page')]</code>&#12290;</li><li>&#22312;&#36825;&#20010;&#21015;&#34920;&#35299;&#26512;&#30340;&#31532;&#19968;&#36718;&#24490;&#29615;&#20013;&#65292;<code class="varname">key</code> &#23558;&#20026; <code class="literal">'href'</code>&#65292;<code class="varname">value</code> &#23558;&#20026; <code class="literal">'index.html'</code>&#12290;</li><li>&#23383;&#31526;&#20018;&#26684;&#24335;&#21270; <code class="literal">'&nbsp;%s="%s"' % (key, value)</code> &#23558;&#29983;&#25104; <code class="literal">'&nbsp;href="index.html"'</code>&#12290;&#36825;&#20010;&#23383;&#31526;&#20018;&#23601;&#20316;&#20026;&#36825;&#20010;&#21015;&#34920;&#35299;&#26512;&#36820;&#22238;&#20540;&#30340;&#31532;&#19968;&#20010;&#20803;&#32032;&#12290;</li><li>&#22312;&#31532;&#20108;&#36718;&#20013;&#65292;<code class="varname">key</code> &#23558;&#20026; <code class="literal">'title'</code>&#65292;<code class="varname">value</code> &#23558;&#20026; <code class="literal">'Go to home page'</code>&#12290;</li><li>&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#23558;&#29983;&#25104; <code class="literal">' title="Go to home page"'</code>&#12290;</li><li>&#36825;&#20010; list &#29702;&#35299;&#36820;&#22238;&#20004;&#20010;&#29983;&#25104;&#30340;&#23383;&#31526;&#20018; list&#65292;&#24182;&#19988; <code class="varname">strattrs</code> &#23558;&#25226;&#36825;&#20010; list &#30340;&#20004;&#20010;&#20803;&#32032;&#36830;&#25509;&#22312;&#19968;&#36215;&#24418;&#25104; <code class="literal">'&nbsp;href="index.html" title="Go to home page"'</code>&#12290;</li></ol></div></dd><dt><a href="#dialect.dictsub.3.2">circled_2_delcric</a> </dt><dd>&#29616;&#22312;&#65292;&#20351;&#29992;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#65292;&#25105;&#20204;&#23558; <code class="varname">tag</code> &#21644; <code class="varname">strattrs</code> &#30340;&#20540;&#25554;&#20837;&#21040;&#19968;&#20010;&#23383;&#31526;&#20018;&#20013;&#12290;&#25152;&#20197;&#65292;&#22914;&#26524; <code class="varname">tag</code> &#26159; <code class="literal">'a'</code>&#65292;&#26368;&#32456;&#30340;&#32467;&#26524;&#20250;&#26159; <code class="literal">'&lt;a href="index.html" title="Go to home page"&gt;'</code>&#65292;&#24182;&#19988;&#36825;&#23601;&#26159;&#36861;&#21152;&#21040; <code class="varname">self.pieces</code> &#21518;&#38754;&#30340;&#19996;&#35199;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="important"><blockquote><b class="title"><a name="d0e21898">&#37325;&#35201;: &#20351;&#29992; <code class="function">locals</code> &#30340;&#24615;&#33021;&#38382;&#39064;</a></b><br>&#20351;&#29992; <code class="function">locals</code> &#26469;&#24212;&#29992;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#26159;&#19968;&#31181;&#26041;&#20415;&#30340;&#20316;&#27861;&#65292;&#23427;&#21487;&#20197;&#20351;&#22797;&#26434;&#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#34920;&#36798;&#24335;&#26356;&#26131;&#35835;&#12290;&#20294;&#23427;&#38656;&#35201;&#33457;&#36153;&#19968;&#23450;&#30340;&#20195;&#20215;&#12290;&#22312;&#35843;&#29992; <code class="function">locals</code> &#26041;&#38754;&#26377;&#19968;&#28857;&#24615;&#33021;&#19978;&#30340;&#38382;&#39064;&#65292;&#36825;&#26159;&#30001;&#20110; <a class="link" href="#dialect.locals.readonly.example" title="&#20363;&nbsp;8.12.&nbsp;locals &#26159;&#21482;&#35835;&#30340;&#65292;globals &#19981;&#26159;"> <code class="function">locals</code> &#21019;&#24314;&#20102;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#30340;&#19968;&#20010;&#25335;&#36125;</a>&#24341;&#36215;&#30340;&#12290;</blockquote></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.quoting"></a>8.7.&nbsp;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;</h2></div></div></div><div class="abstract"><p>&#22312; comp.lang.python (<a href="http://groups.google.com/groups?group=comp.lang.python">http://groups.google.com/groups?group=comp.lang.python</a>) &#19978;&#30340;&#19968;&#20010;&#24120;&#35265;&#38382;&#39064;&#26159; "<span class="quote">&#25105;&#26377;&#19968;&#20123; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#65292;&#23646;&#24615;&#20540;&#27809;&#26377;&#29992;&#24341;&#21495;&#25324;&#36215;&#26469;&#65292;&#24182;&#19988;&#25105;&#24819;&#23558;&#23427;&#20204;&#20840;&#37096;&#25324;&#36215;&#26469;&#65292;&#25105;&#24590;&#20040;&#25165;&#33021;&#23454;&#29616;&#23427;&#21602;&#65311;</span>"
<sup>[<a name="d0e21934" href="#ftn.d0e21934" class="footnote">7</a>]</sup>  (&#19968;&#33324;&#36825;&#31181;&#20107;&#24773;&#30340;&#20986;&#29616;&#26159;&#30001;&#20110;&#19968;&#20010;&#39033;&#30446;&#32463;&#29702;&#21152;&#20837;&#21040;&#19968;&#20010;&#22823;&#30340;&#39033;&#30446;&#20013;&#26469;&#65292;&#32780;&#20182;&#21448;&#25265;&#30528; <acronym class="acronym">HTML</acronym> &#26159;&#19968;&#31181;&#26631;&#35760;&#35821;&#35328;&#30340;&#25945;&#26465;&#65292;&#35201;&#27714;&#25152;&#26377;&#30340;&#39029;&#38754;&#24517;&#39035;&#33021;&#22815;&#36890;&#36807; <acronym class="acronym">HTML</acronym> &#26657;&#39564;&#22120;&#30340;&#39564;&#35777;&#12290;&#32780;&#23646;&#24615;&#20540;&#27809;&#26377;&#34987;&#24341;&#21495;&#25324;&#36215;&#26469;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#23545; <acronym class="acronym">HTML</acronym> &#35268;&#33539;&#30340;&#36829;&#21453;&#12290;) &#19981;&#31649;&#20160;&#20040;&#21407;&#22240;&#65292;&#26410;&#25324;&#36215;&#26469;&#30340;&#23646;&#24615;&#20540;&#36890;&#36807;&#23558; <acronym class="acronym">HTML</acronym> &#36865;&#36827; <code class="classname">BaseHTMLProcessor</code> &#21487;&#20197;&#23481;&#26131;&#22320;&#20462;&#22797;&#12290;
</p></div><p><code class="classname">BaseHTMLProcessor</code> &#28040;&#36153; (consume) <acronym class="acronym">HTML</acronym>  (&#22240;&#20026;&#23427;&#26159;&#20174; <code class="classname">SGMLParser</code> &#27966;&#29983;&#26469;&#30340;) &#24182;&#29983;&#25104;&#31561;&#20215;&#30340; <acronym class="acronym">HTML</acronym>&#12290;&#20294;&#26159;&#36825;&#20010; <acronym class="acronym">HTML</acronym> &#36755;&#20986;&#19982;&#36755;&#20837;&#30340;&#24182;&#19981;&#19968;&#26679;&#12290;&#26631;&#35760;&#21644;&#23646;&#24615;&#21517;&#26368;&#32456;&#20250;&#36716;&#21270;&#20026;&#23567;&#20889;&#23383;&#27597;&#65292;&#21363;&#20351;&#23427;&#20204;&#21487;&#33021;&#20197;&#22823;&#20889;&#23383;&#27597;&#24320;&#22987;&#25110;&#26159;&#22823;&#23567;&#20889;&#30340;&#28151;&#21512;&#24418;&#24335;&#12290;&#23646;&#24615;&#20540;&#23558;&#34987;&#21452;&#24341;&#21495;&#24341;&#36215;&#26469;&#65292;&#21363;&#20351;&#23427;&#20204;&#21407;&#26469;&#21487;&#33021;&#26159;&#29992;&#21333;&#24341;&#21495;&#25324;&#36215;&#26469;&#30340;&#25110;&#26681;&#26412;&#27809;&#26377;&#25324;&#36215;&#26469;&#12290;&#36825;&#23601;&#26159;&#26368;&#21518;&#25105;&#20204;&#21487;&#20197;&#21463;&#30410;&#30340;&#36793;&#38469;&#25928;&#24212;&#12290;</p><div class="example"><a name="dialect.quoting.example"></a><p class="title"><b>&#20363;&nbsp;8.16.&nbsp;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">htmlSource = """</span>        <a name="dialect.basehtml.3.1"></a>circled_1_delcric
<code class="prompt">...     </code>&lt;html&gt;
<code class="prompt">...     </code>&lt;head&gt;
<code class="prompt">...     </code>&lt;title&gt;Test page&lt;/title&gt;
<code class="prompt">...     </code>&lt;/head&gt;
<code class="prompt">...     </code>&lt;body&gt;
<code class="prompt">...     </code>&lt;ul&gt;
<code class="prompt">...     </code>&lt;li&gt;&lt;a href=index.html&gt;Home&lt;/a&gt;&lt;/li&gt;
<code class="prompt">...     </code>&lt;li&gt;&lt;a href=toc.html&gt;Table of contents&lt;/a&gt;&lt;/li&gt;
<code class="prompt">...     </code>&lt;li&gt;&lt;a href=history.html&gt;Revision history&lt;/a&gt;&lt;/li&gt;
<code class="prompt">...     </code>&lt;/body&gt;
<code class="prompt">...     </code>&lt;/html&gt;
<code class="prompt">...     </code><span class="userinput">"""</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from BaseHTMLProcessor import BaseHTMLProcessor</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">parser = BaseHTMLProcessor()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">parser.feed(htmlSource)</span> <a name="dialect.basehtml.3.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print parser.output()</span>   <a name="dialect.basehtml.3.3"></a>circled_3_delcric
<font color="teal">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Test page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="index.html"&gt;Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="toc.html"&gt;Table of contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="history.html"&gt;Revision history&lt;/a&gt;&lt;/li&gt;
&lt;/body&gt;
&lt;/html&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#dialect.basehtml.3.1">circled_1_delcric</a> </dt><dd>&#35831;&#27880;&#24847;&#65292;&#22312; <code class="sgmltag-element">&lt;a&gt;</code> &#26631;&#35760;&#20013;&#30340; <code class="literal">href</code> &#23646;&#24615;&#20540;&#27809;&#26377;&#34987;&#36866;&#24403;&#22320;&#25324;&#36215;&#26469; (&#36824;&#35201;&#27880;&#24847;&#65292;&#38500;&#20102;&#25991;&#26723;&#23383;&#31526;&#20018;&#20043;&#22806;&#65292;&#25105;&#20204;&#36824;&#23558;<a class="link" href="#odbchelper.triplequotes" title="&#20363;&nbsp;2.2.&nbsp;&#23450;&#20041; buildConnectionString &#20989;&#25968;&#30340; doc string">&#19977;&#37325;&#24341;&#21495;</a>&#29992;&#21040;&#20102; <code class="literal">doc string</code> &#20043;&#22806;&#30340;&#20854;&#23427;&#22320;&#26041;&#65292;&#24182;&#19988;&#26159;&#19981;&#20250;&#23569;&#20110;&#30452;&#25509;&#22312; <acronym class="acronym">IDE</acronym> &#20013;&#30340;&#20351;&#29992;&#12290;&#23427;&#20204;&#38750;&#24120;&#26377;&#29992;&#12290;) </dd><dt><a href="#dialect.basehtml.3.2">circled_2_delcric</a> </dt><dd>&#35013;&#22635;&#20998;&#26512;&#22120;&#12290;</dd><dt><a href="#dialect.basehtml.3.3">circled_3_delcric</a> </dt><dd>&#20351;&#29992;&#23450;&#20041;&#22312; <code class="classname">BaseHTMLProcessor</code> &#20013;&#30340; <code class="function">output</code> &#20989;&#25968;&#65292;&#25105;&#20204;&#24471;&#21040;&#21333;&#20010;&#23383;&#31526;&#20018;&#30340;&#36755;&#20986;&#65292;&#24182;&#19988;&#23646;&#24615;&#20540;&#34987;&#23436;&#20840;&#25324;&#36215;&#26469;&#20102;&#12290;&#35753;&#25105;&#20204;&#24819;&#19968;&#19979;&#36825;&#37324;&#23454;&#38469;&#19978;&#21457;&#29983;&#20102;&#22810;&#23569;&#20107;&#65306;<code class="classname">SGMLParser</code> &#20998;&#26512;&#25972;&#20010; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#65292;&#23558;&#20854;&#20998;&#35299;&#20026;&#19968;&#29255;&#29255;&#30340;&#26631;&#35760;&#12289;&#24341;&#29992;&#12289;&#25968;&#25454;&#31561;&#31561;&#12290;<code class="classname">BaseHTMLProcessor</code> &#20351;&#29992;&#36825;&#20123;&#20803;&#32032;&#26469;&#37325;&#26032;&#26500;&#36896; <acronym class="acronym">HTML</acronym> &#30340;&#29255;&#27573; (&#22914;&#26524;&#24744;&#24819;&#26597;&#30475;&#30340;&#35805;&#23427;&#20204;&#20173;&#28982;&#20445;&#23384;&#22312; <code class="varname">parser.pieces</code> &#20013;) &#12290;&#26368;&#21518;&#65292;&#25105;&#20204;&#35843;&#29992; <code class="function">parser.output</code>&#65292;&#23427;&#23558;&#25152;&#26377;&#30340; <acronym class="acronym">HTML</acronym> &#29255;&#27573;&#36830;&#25509;&#25104;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.dialectizer"></a>8.8.&nbsp;<code class="filename">dialect.py</code> &#20171;&#32461;</h2></div></div></div><div class="abstract"><p><code class="classname">Dialectizer</code> &#26159; <code class="classname">BaseHTMLProcessor</code> &#30340;&#31616;&#21333; (&#21644;&#25305;&#21155;) &#30340;&#27966;&#29983;&#31867;&#12290;&#23427;&#36890;&#36807;&#19968;&#31995;&#21015;&#30340;&#26367;&#25442;&#23545;&#25991;&#26412;&#22359;&#36827;&#34892;&#20102;&#22788;&#29702;&#65292;&#20294;&#26159;&#23427;&#30830;&#20445;&#22312; <code class="literal"><code class="sgmltag-element">&lt;pre&gt;</code>...<code class="sgmltag-element">&lt;/pre&gt;</code></code> &#22359;&#20043;&#38388;&#30340;&#20219;&#20309;&#19996;&#35199;&#19981;&#34987;&#20462;&#25913;&#22320;&#36890;&#36807;&#12290;</p></div><p>&#20026;&#20102;&#22788;&#29702; <code class="sgmltag-element">&lt;pre&gt;</code> &#22359;&#65292;&#25105;&#20204;&#22312; <code class="classname">Dialectizer</code> &#20013;&#23450;&#20041;&#20102;&#20004;&#20010;&#26041;&#27861;&#65306;<code class="function">start_pre</code> &#21644; <code class="function">end_pre</code>&#12290;</p><div class="example"><a name="dialect.specifictags.example"></a><p class="title"><b>&#20363;&nbsp;8.17.&nbsp;&#22788;&#29702;&#29305;&#21035;&#26631;&#35760;</b></p><div class="example-contents"><pre class="programlisting">
    def start_pre(self, attrs):             <a name="dialect.dialectizer.1.1"></a>circled_1_delcric
        self.verbatim += 1                  <a name="dialect.dialectizer.1.2"></a>circled_2_delcric
        self.unknown_starttag("pre", attrs) <a name="dialect.dialectizer.1.3"></a>circled_3_delcric

    def end_pre(self):                      <a name="dialect.dialectizer.1.4"></a>circled_4_delcric
        self.unknown_endtag("pre")          <a name="dialect.dialectizer.1.5"></a>circled_5_delcric
        self.verbatim -= 1                  <a name="dialect.dialectizer.1.6"></a>circled_6_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.dialectizer.1.1">circled_1_delcric</a> </dt><dd>&#27599;&#24403; <code class="classname">SGMLParser</code> &#22312; <acronym class="acronym">HTML</acronym> &#28304;&#20195;&#30721;&#20013;&#21457;&#29616;&#19968;&#20010; <code class="sgmltag-element">&lt;pre&gt;</code> &#26102;&#65292;&#37117;&#20250;&#35843;&#29992; <code class="function">start_pre</code>&#12290;(&#39532;&#19978;&#25105;&#20204;&#23601;&#20250;&#30830;&#20999;&#22320;&#30475;&#21040;&#23427;&#26159;&#22914;&#20309;&#21457;&#29983;&#30340;&#12290;) &#36825;&#20010;&#26041;&#27861;&#20351;&#29992;&#21333;&#20010;&#21442;&#25968;&#65306;<code class="varname">attrs</code>&#65292;&#36825;&#20010;&#21442;&#25968;&#20250;&#21253;&#21547;&#26631;&#35760;&#30340;&#23646;&#24615; (&#22914;&#26524;&#23384;&#22312;&#30340;&#35805;) &#12290;<code class="varname">attrs</code> &#26159;&#19968;&#20010;&#38190;/&#20540; tuple &#30340; list&#65292;&#23601;&#20687; <a class="link" href="#dialect.unknownstarttag" title="&#20363;&nbsp;8.14.&nbsp;BaseHTMLProcessor.py &#20013;&#30340;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;"><code class="function">unknown_starttag</code></a> &#20013;&#25152;&#20351;&#29992;&#30340;&#12290;</dd><dt><a href="#dialect.dialectizer.1.2">circled_2_delcric</a> </dt><dd>&#22312; <code class="function">reset</code> &#26041;&#27861;&#20013;&#65292;&#25105;&#20204;&#21021;&#22987;&#21270;&#20102;&#19968;&#20010;&#25968;&#25454;&#23646;&#24615;&#65292;&#23427;&#20316;&#20026; <code class="sgmltag-element">&lt;pre&gt;</code> &#26631;&#35760;&#30340;&#19968;&#20010;&#35745;&#25968;&#22120;&#12290;&#27599;&#24403;&#25105;&#20204;&#25214;&#21040;&#19968;&#20010; <code class="sgmltag-element">&lt;pre&gt;</code> &#26631;&#35760;&#65292;&#25105;&#20204;&#22686;&#21152;&#35745;&#25968;&#22120;&#30340;&#20540;&#65307;&#27599;&#24403;&#25105;&#20204;&#25214;&#21040;&#19968;&#20010; <code class="sgmltag-element">&lt;/pre&gt;</code> &#26631;&#35760;&#65292;&#25105;&#20204;&#23558;&#20943;&#23569;&#35745;&#25968;&#22120;&#30340;&#20540;&#12290;(&#25105;&#20204;&#26412;&#21487;&#20197;&#25226;&#23427;&#23454;&#29616;&#20026;&#19968;&#20010;&#26631;&#24535;&#65292;&#21363;&#25110;&#25226;&#23427;&#35774;&#20026; <code class="constant">1</code>&#65292;&#25110;&#37325;&#32622;&#20026; <code class="constant">0</code>&#65292;&#20294;&#36825;&#26679;&#20570;&#21482;&#26159;&#20026;&#20102;&#26041;&#20415;&#65292;&#24182;&#19988;&#36825;&#26679;&#20570;&#21487;&#20197;&#22788;&#29702;&#21476;&#24618; (&#20294;&#26377;&#21487;&#33021;) &#30340; <code class="sgmltag-element">&lt;pre&gt;</code> &#26631;&#35760;&#23884;&#22871;&#30340;&#24773;&#20917;&#12290;) &#39532;&#19978;&#25105;&#20204;&#23558;&#20250;&#30475;&#21040;&#36825;&#20010;&#35745;&#25968;&#22120;&#26159;&#22810;&#20040;&#30340;&#22909;&#29992;&#12290;</dd><dt><a href="#dialect.dialectizer.1.3">circled_3_delcric</a> </dt><dd>&#19981;&#38169;&#65292;&#36825;&#23601;&#26159;&#25105;&#20204;&#23545; <code class="sgmltag-element">&lt;pre&gt;</code> &#26631;&#35760;&#25152;&#20570;&#30340;&#21807;&#19968;&#30340;&#29305;&#27530;&#22788;&#29702;&#12290;&#29616;&#22312;&#25105;&#20204;&#23558;&#23646;&#24615;&#21015;&#34920;&#20256;&#32473; <code class="function">unknown_starttag</code>&#65292;&#30001;&#23427;&#26469;&#36827;&#34892;&#32570;&#30465;&#30340;&#22788;&#29702;&#12290;</dd><dt><a href="#dialect.dialectizer.1.4">circled_4_delcric</a> </dt><dd>&#27599;&#24403; <code class="classname">SGMLParser</code> &#25214;&#21040;&#19968;&#20010; <code class="sgmltag-element">&lt;/pre&gt;</code> &#26631;&#35760;&#26102;&#65292;&#20250;&#35843;&#29992; <code class="function">end_pre</code>&#12290;&#22240;&#20026;&#32467;&#26463;&#26631;&#35760;&#19981;&#33021;&#21253;&#21547;&#23646;&#24615;&#65292;&#22240;&#27492;&#36825;&#20010;&#26041;&#27861;&#27809;&#26377;&#21442;&#25968;&#12290;</dd><dt><a href="#dialect.dialectizer.1.5">circled_5_delcric</a> </dt><dd>&#39318;&#20808;&#25105;&#20204;&#35201;&#36827;&#34892;&#32570;&#30465;&#22788;&#29702;&#65292;&#23601;&#20687;&#20854;&#23427;&#32467;&#26463;&#26631;&#35760;&#20570;&#30340;&#19968;&#26679;&#12290;</dd><dt><a href="#dialect.dialectizer.1.6">circled_6_delcric</a> </dt><dd>&#20854;&#27425;&#25105;&#20204;&#23558;&#35745;&#25968;&#22120;&#20943;&#23569;&#65292;&#26631;&#35760;&#36825;&#20010; <code class="sgmltag-element">&lt;pre&gt;</code> &#22359;&#24050;&#32463;&#34987;&#20851;&#38381;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21040;&#20102;&#36825;&#20010;&#22320;&#26041;&#65292;&#26377;&#24517;&#35201;&#23545; <code class="classname">SGMLParser</code> &#26356;&#28145;&#20837;&#19968;&#23618;&#12290;&#25105;&#24050;&#32463;&#22810;&#27425;&#22768;&#26126; (&#21040;&#30446;&#21069;&#20026;&#27490;&#24744;&#24212;&#24050;&#32463;&#25226;&#23427;&#20570;&#20026;&#20449;&#26465;&#20102;) &#65292;&#23601;&#26159; <code class="classname">SGMLParser</code> &#26597;&#25214;&#27599;&#19968;&#20010;&#26631;&#35760;&#24182;&#19988;&#22914;&#26524;&#23384;&#22312;&#29305;&#23450;&#30340;&#26041;&#27861;&#23601;&#35843;&#29992;&#23427;&#20204;&#12290;&#20363;&#22914;&#65306;&#25105;&#20204;&#21018;&#21018;&#30475;&#21040;&#22788;&#29702; <code class="sgmltag-element">&lt;pre&gt;</code> &#21644; <code class="sgmltag-element">&lt;/pre&gt;</code> &#30340; <code class="function">start_pre</code> &#21644; <code class="function">end_pre</code> &#30340;&#23450;&#20041;&#12290;&#20294;&#36825;&#26159;&#22914;&#20309;&#21457;&#29983;&#30340;&#21602;&#65311;&#21999;&#65292;&#20063;&#27809;&#20160;&#20040;&#31070;&#22855;&#30340;&#65292;&#21482;&#19981;&#36807;&#26159;&#20986;&#33394;&#30340; <span class="application">Python</span> &#32534;&#30721;&#12290;</p><div class="example"><a name="dialect.dialectizer.example"></a><p class="title"><b>&#20363;&nbsp;8.18.&nbsp;<code class="classname">SGMLParser</code></b></p><div class="example-contents"><pre class="programlisting">
    def finish_starttag(self, tag, attrs):               <a name="dialect.dialectizer.2.1"></a>circled_1_delcric
        try:                                            
            method = getattr(self, 'start_' + tag)       <a name="dialect.dialectizer.2.2"></a>circled_2_delcric
        except AttributeError:                           <a name="dialect.dialectizer.2.3"></a>circled_3_delcric
            try:                                        
                method = getattr(self, 'do_' + tag)      <a name="dialect.dialectizer.2.4"></a>circled_4_delcric
            except AttributeError:                      
                self.unknown_starttag(tag, attrs)        <a name="dialect.dialectizer.2.5"></a>circled_5_delcric
                return -1                               
            else:                                       
                self.handle_starttag(tag, method, attrs) <a name="dialect.dialectizer.2.6"></a>circled_6_delcric
                return 0                                
        else:                                           
            self.stack.append(tag)                      
            self.handle_starttag(tag, method, attrs)    
            return 1                                     <a name="dialect.dialectizer.2.7"></a>circled_7_delcric

    def handle_starttag(self, tag, method, attrs):      
        method(attrs)                                    <a name="dialect.dialectizer.2.8"></a>circled_8_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.dialectizer.2.1">circled_1_delcric</a> </dt><dd>&#27492;&#22788;&#65292;<code class="classname">SGMLParser</code> &#24050;&#32463;&#25214;&#21040;&#20102;&#19968;&#20010;&#24320;&#22987;&#26631;&#35760;&#65292;&#24182;&#19988;&#20998;&#26512;&#20986;&#23646;&#24615;&#21015;&#34920;&#12290;&#21807;&#19968;&#35201;&#20570;&#30340;&#20107;&#24773;&#23601;&#26159;&#26816;&#26597;&#23545;&#20110;&#36825;&#20010;&#26631;&#35760;&#26159;&#21542;&#23384;&#22312;&#19968;&#20010;&#29305;&#21035;&#30340;&#22788;&#29702;&#26041;&#27861;&#65292;&#21542;&#21017;&#25105;&#20204;&#23601;&#24212;&#35813;&#27714;&#21161;&#20110;&#32570;&#30465;&#26041;&#27861; (<code class="function">unknown_starttag</code>) &#12290;</dd><dt><a href="#dialect.dialectizer.2.2">circled_2_delcric</a> </dt><dd><code class="classname">SGMLParser</code> &#30340; "<span class="quote">&#31070;&#22855;</span>" &#20043;&#22788;&#38500;&#20102;&#25105;&#20204;&#30340;&#32769;&#26379;&#21451; <a class="link" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;"><code class="function">getattr</code></a> &#20043;&#22806;&#23601;&#27809;&#26377;&#20160;&#20040;&#20102;&#12290;&#24744;&#20197;&#21069;&#21487;&#33021;&#27809;&#27880;&#24847;&#21040;&#65292;<code class="function">getattr</code> &#23558;&#26597;&#25214;&#23450;&#20041;&#22312;&#19968;&#20010;&#23545;&#35937;&#30340;&#32487;&#25215;&#32773;&#20013;&#25110;&#23545;&#35937;&#33258;&#36523;&#30340;&#26041;&#27861;&#12290;&#36825;&#37324;&#23545;&#35937;&#26159; <code class="literal">self</code>&#65292;&#21363;&#24403;&#21069;&#23454;&#20363;&#12290;&#25152;&#20197;&#65292;&#22914;&#26524; <code class="varname">tag</code> &#26159; <code class="literal">'pre'</code>&#65292;&#36825;&#37324;&#23545; <code class="function">getattr</code> &#30340;&#35843;&#29992;&#23558;&#20250;&#22312;&#24403;&#21069;&#23454;&#20363; (&#23427;&#26159; <code class="classname">Dialectizer</code> &#31867;&#30340;&#19968;&#20010;&#23454;&#20363;) &#20013;&#26597;&#25214;&#19968;&#20010;&#21517;&#20026; <code class="function">start_pre</code> &#30340;&#26041;&#27861;&#12290;</dd><dt><a href="#dialect.dialectizer.2.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524; <code class="function">getattr</code> &#25152;&#26597;&#25214;&#30340;&#26041;&#27861;&#22312;&#23545;&#35937;&#25110;&#23427;&#30340;&#20219;&#20309;&#32487;&#25215;&#32773;&#20013;&#19981;&#23384;&#22312;&#30340;&#35805;&#65292;&#23427;&#20250;&#24341;&#21457;&#19968;&#20010; <code class="errorcode">AttributeError</code> &#30340;&#24322;&#24120;&#12290;&#20294;&#27809;&#26377;&#20851;&#31995;&#65292;&#22240;&#20026;&#25105;&#20204;&#25226;&#23545; <code class="function">getattr</code> &#30340;&#35843;&#29992;&#21253;&#35013;&#21040;&#19968;&#20010; <a class="link" href="#fileinfo.exception" title="6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;"><code class="literal">try...except</code></a> &#22359;&#20013;&#20102;&#65292;&#24182;&#19988;&#26174;&#24335;&#22320;&#25429;&#25417; <code class="errorcode">AttributeError</code> &#24322;&#24120;&#12290;</dd><dt><a href="#dialect.dialectizer.2.4">circled_4_delcric</a> </dt><dd>&#22240;&#20026;&#25105;&#20204;&#27809;&#26377;&#25214;&#21040;&#19968;&#20010; <code class="function">start_xxx</code> &#26041;&#27861;&#65292;&#22312;&#25918;&#24323;&#20043;&#21069;&#65292;&#25105;&#20204;&#23558;&#36824;&#35201;&#26597;&#25214;&#19968;&#20010; <code class="function">do_xxx</code> &#26041;&#27861;&#12290;&#36825;&#20010;&#21487;&#26367;&#25442;&#30340;&#21629;&#21517;&#27169;&#24335;&#19968;&#33324;&#29992;&#20110;&#21333;&#29420;&#30340;&#26631;&#35760;&#65292;&#22914; <code class="sgmltag-element">&lt;br&gt;</code>&#65292;&#36825;&#20123;&#26631;&#35760;&#27809;&#26377;&#30456;&#24212;&#30340;&#32467;&#26463;&#26631;&#35760;&#12290;&#20294;&#26159;&#24744;&#21487;&#20197;&#20351;&#29992;&#20219;&#20309;&#19968;&#31181;&#27169;&#24335;&#65292;&#27491;&#22914;&#24744;&#30475;&#21040;&#30340;&#65292;<code class="classname">SGMLParser</code> &#23545;&#27599;&#20010;&#26631;&#35760;&#23581;&#35797;&#20004;&#27425;&#12290;(&#24744;&#19981;&#24212;&#35813;&#23545;&#30456;&#21516;&#30340;&#26631;&#35760;&#21516;&#26102;&#23450;&#20041; <code class="function">start_xxx</code> &#21644; <code class="function">do_xxx</code> &#22788;&#29702;&#26041;&#27861;&#65292;&#22240;&#20026;&#36825;&#26679;&#30340;&#35805;&#21482;&#26377; <code class="function">start_xxx</code> &#26041;&#27861;&#20250;&#34987;&#35843;&#29992;&#12290;) </dd><dt><a href="#dialect.dialectizer.2.5">circled_5_delcric</a> </dt><dd>&#21478;&#19968;&#20010; <code class="errorcode">AttributeError</code> &#24322;&#24120;&#65292;&#23427;&#26159;&#35828;&#29992; <code class="function">do_xxx</code> &#26469;&#35843;&#29992; <code class="function">getattr</code> &#22833;&#36133;&#20102;&#12290;&#22240;&#20026;&#23545;&#21516;&#19968;&#20010;&#26631;&#35760;&#25105;&#20204;&#26082;&#27809;&#26377;&#25214;&#21040; <code class="function">start_xxx</code> &#20063;&#27809;&#26377;&#25214;&#21040; <code class="function">do_xxx</code> &#22788;&#29702;&#26041;&#27861;&#65292;&#36825;&#26679;&#25105;&#20204;&#25429;&#25417;&#21040;&#20102;&#24322;&#24120;&#24182;&#19988;&#27714;&#21161;&#20110;&#32570;&#30465;&#26041;&#27861;&#65306;<code class="function">unknown_starttag</code>&#12290;</dd><dt><a href="#dialect.dialectizer.2.6">circled_6_delcric</a> </dt><dd>&#35760;&#24471;&#21527;&#65311;<code class="literal">try...except</code> &#22359;&#21487;&#20197;&#26377;&#19968;&#20010; <code class="literal">else</code> &#23376;&#21477;&#65292;&#24403;&#22312; <code class="literal">try...except</code> &#22359;&#20013;<a class="link" href="#crossplatform.example" title="&#20363;&nbsp;6.2.&nbsp;&#25903;&#25345;&#29305;&#23450;&#24179;&#21488;&#21151;&#33021;">&#27809;&#26377;&#24322;&#24120;&#34987;&#24341;&#21457;</a>&#26102;&#65292;&#23427;&#23558;&#34987;&#35843;&#29992;&#12290;&#36923;&#36753;&#19978;&#65292;&#24847;&#21619;&#30528;&#25105;&#20204;<span class="emphasis"><em>&#30830;&#23454;</em></span> &#25214;&#21040;&#20102;&#36825;&#20010;&#26631;&#35760;&#30340; <code class="function">do_xxx</code> &#26041;&#27861;&#65292;&#25152;&#20197;&#25105;&#20204;&#23558;&#35201;&#35843;&#29992;&#23427;&#12290;</dd><dt><a href="#dialect.dialectizer.2.7">circled_7_delcric</a> </dt><dd>&#39034;&#20415;&#35828;&#65292;&#19981;&#35201;&#20026;&#36825;&#20123;&#19981;&#21516;&#30340;&#36820;&#22238;&#20540;&#32780;&#25285;&#24515;&#65307;&#29702;&#35770;&#19978;&#20182;&#20204;&#26377;&#24847;&#20041;&#65292;&#20294;&#23454;&#38469;&#19978;&#23427;&#20204;&#27809;&#26377;&#20219;&#20309;&#29992;&#22788;&#12290;&#20063;&#19981;&#35201;&#25285;&#24515;   <code class="literal">self.stack.append(tag)</code> ; <code class="classname">SGMLParser</code> &#20869;&#37096;&#20250;&#30693;&#26195;&#24744;&#30340;&#24320;&#22987;&#26631;&#35760;&#26159;&#21542;&#26377;&#21512;&#36866;&#30340;&#32467;&#26463;&#26631;&#35760;&#19982;&#20043;&#21305;&#37197;&#65292;&#20294;&#26159;&#23427;&#19981;&#20250;&#23545;&#36825;&#20123;&#20449;&#24687;&#20570;&#20219;&#20309;&#25805;&#20316;&#12290;&#29702;&#35770;&#19978;&#65292;&#24744;&#33021;&#20351;&#29992;&#36825;&#20010;&#27169;&#22359;&#26657;&#39564;&#24744;&#30340;&#26631;&#35760;&#26159;&#21542;&#23436;&#20840;&#21305;&#37197;&#65292;&#20294;&#26159;&#36825;&#25110;&#35768;&#27809;&#26377;&#22810;&#22823;&#20215;&#20540;&#65292;&#24182;&#19988;&#36825;&#26679;&#30340;&#20869;&#23481;&#24050;&#32463;&#36229;&#20986;&#20102;&#26412;&#31456;&#25152;&#35201;&#35752;&#35770;&#30340;&#33539;&#30068;&#12290;&#29616;&#22312;&#26377;&#24744;&#26356;&#38656;&#35201;&#25285;&#24515;&#30340;&#38382;&#39064;&#12290;</dd><dt><a href="#dialect.dialectizer.2.8">circled_8_delcric</a> </dt><dd><code class="function">start_xxx</code> &#21644; <code class="function">do_xxx</code> &#26041;&#27861;&#24182;&#19981;&#34987;&#30452;&#25509;&#35843;&#29992;&#65307;&#26631;&#35760;&#21517;&#12289;&#26041;&#27861;&#21644;&#23646;&#24615;&#34987;&#20256;&#32473; <code class="function">handle_starttag</code> &#36825;&#20010;&#26041;&#27861;&#65292;&#20197;&#20415;&#32487;&#25215;&#32773;&#21487;&#20197;&#35206;&#30422;&#23427;&#65292;&#24182;&#25913;&#21464;<span class="emphasis"><em>&#20840;&#37096;</em></span> &#24320;&#22987;&#26631;&#35760;&#20998;&#21457;&#30340;&#26041;&#24335;&#12290;&#25105;&#20204;&#19981;&#38656;&#35201;&#25511;&#21046;&#36825;&#20010;&#23618;&#38754;&#65292;&#25152;&#20197;&#25105;&#20204;&#21482;&#35753;&#36825;&#20010;&#26041;&#27861;&#20570;&#23427;&#33258;&#24050;&#30340;&#20107;&#65292;&#23601;&#26159;&#29992;&#23646;&#24615; list &#26469;&#35843;&#29992;&#26041;&#27861; (<code class="function">start_xxx</code> &#25110; <code class="function">do_xxx</code>) &#12290;&#35760;&#20303; <code class="varname">method</code> &#26159;&#19968;&#20010;&#20174; <code class="function">getattr</code> &#36820;&#22238;&#30340;&#20989;&#25968;&#65292;&#32780;&#20989;&#25968;&#26159;&#23545;&#35937;&#12290;(&#25105;&#30693;&#36947;&#24744;&#24050;&#32463;&#21548;&#33147;&#20102;&#65292;&#25105;&#21457;&#35475;&#65292;&#19968;&#26086;&#25105;&#20204;&#20572;&#27490;&#23547;&#25214;&#26032;&#30340;&#20351;&#29992;&#26041;&#27861;&#26469;&#20026;&#25105;&#20204;&#26381;&#21153;&#26102;&#65292;&#25105;&#23601;&#20915;&#19981;&#20877;&#25552;&#23427;&#20102;&#12290;) &#36825;&#26102;&#65292;&#20989;&#25968;&#23545;&#35937;&#20316;&#20026;&#19968;&#20010;&#21442;&#25968;&#20256;&#20837;&#36825;&#20010;&#20998;&#21457;&#26041;&#27861;&#65292;&#36825;&#20010;&#26041;&#27861;&#21453;&#36807;&#26469;&#20877;&#35843;&#29992;&#36825;&#20010;&#20989;&#25968;&#12290;&#22312;&#36825;&#37324;&#65292;&#25105;&#20204;&#19981;&#38656;&#35201;&#30693;&#36947;&#20989;&#25968;&#26159;&#20160;&#20040;&#65292;&#21483;&#20160;&#20040;&#21517;&#23383;&#65292;&#25110;&#26159;&#22312;&#21738;&#26102;&#23450;&#20041;&#30340;&#65307;&#25105;&#20204;&#21482;&#38656;&#35201;&#30693;&#36947;&#29992;&#19968;&#20010;&#21442;&#25968; <code class="varname">attrs</code> &#35843;&#29992;&#23427;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#22238;&#21040;&#25105;&#20204;&#24050;&#32463;&#35745;&#21010;&#22909;&#30340;&#31243;&#24207;&#65306;<code class="classname">Dialectizer</code>&#12290;&#24403;&#25105;&#20204;&#36305;&#39064;&#26102;&#65292;&#25105;&#20204;&#23450;&#20041;&#20102;&#29305;&#21035;&#30340;&#22788;&#29702;&#26041;&#27861;&#26469;&#22788;&#29702; <code class="sgmltag-element">&lt;pre&gt;</code> &#21644; <code class="sgmltag-element">&lt;/pre&gt;</code> &#26631;&#35760;&#12290;&#36824;&#26377;&#19968;&#20214;&#20107;&#27809;&#26377;&#20570;&#65292;&#37027;&#23601;&#26159;&#29992;&#25105;&#20204;&#39044;&#23450;&#20041;&#30340;&#26367;&#25442;&#22788;&#29702;&#26469;&#22788;&#29702;&#25991;&#26412;&#22359;&#12290;&#20026;&#20102;&#23454;&#29616;&#23427;&#65292;&#25105;&#20204;&#38656;&#35201;&#35206;&#30422; <code class="function">handle_data</code> &#26041;&#27861;&#12290;</p><div class="example"><a name="d0e22481"></a><p class="title"><b>&#20363;&nbsp;8.19.&nbsp;&#35206;&#30422; <code class="function">handle_data</code> &#26041;&#27861;</b></p><div class="example-contents"><pre class="programlisting">
    def handle_data(self, text):                                         <a name="dialect.dialectizer.3.1"></a>circled_1_delcric
        self.pieces.append(self.verbatim and text or self.process(text)) <a name="dialect.dialectizer.3.2"></a>circled_2_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.dialectizer.3.1">circled_1_delcric</a> </dt><dd><code class="function">handle_data</code> &#22312;&#35843;&#29992;&#26102;&#21482;&#20351;&#29992;&#19968;&#20010;&#21442;&#25968;&#65306;&#35201;&#22788;&#29702;&#30340;&#25991;&#26412;&#12290;</dd><dt><a href="#dialect.dialectizer.3.2">circled_2_delcric</a> </dt><dd>&#22312;&#31062;&#20808;&#31867; <a class="link" href="#dialect.basehtml.intro" title="&#20363;&nbsp;8.8.&nbsp;BaseHTMLProcessor &#20171;&#32461;"><code class="classname">BaseHTMLProcessor</code></a> &#20013;&#65292;<code class="function">handle_data</code> &#26041;&#27861;&#21482;&#26159;&#23558;&#25991;&#26412;&#36861;&#21152;&#21040;&#36755;&#20986;&#32531;&#20914;&#21306; <code class="varname">self.pieces</code> &#20043;&#21518;&#12290;&#36825;&#37324;&#30340;&#36923;&#36753;&#31245;&#24494;&#26377;&#28857;&#22797;&#26434;&#12290;&#22914;&#26524;&#25105;&#20204;&#22788;&#20110; <code class="literal"><code class="sgmltag-element">&lt;pre&gt;</code>...<code class="sgmltag-element">&lt;/pre&gt;</code></code> &#22359;&#30340;&#20013;&#38388;&#65292;<code class="varname">self.verbatim</code> &#23558;&#26159;&#22823;&#20110; <code class="constant">0</code> &#30340;&#26576;&#20010;&#20540;&#65292;&#25509;&#30528;&#25105;&#20204;&#24819;&#35201;&#23558;&#25991;&#26412;&#19981;&#20316;&#25913;&#21160;&#22320;&#20256;&#20837;&#36755;&#20986;&#32531;&#20914;&#21306;&#12290;&#21542;&#21017;&#65292;&#25105;&#20204;&#23558;&#35843;&#29992;&#21478;&#19968;&#20010;&#21333;&#29420;&#30340;&#26041;&#27861;&#26469;&#36827;&#34892;&#26367;&#25442;&#22788;&#29702;&#65292;&#28982;&#21518;&#23558;&#22788;&#29702;&#32467;&#26524;&#25918;&#20837;&#36755;&#20986;&#32531;&#20914;&#21306;&#20013;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#36825;&#26159;&#19968;&#20010;&#19968;&#34892;&#20195;&#30721;&#65292;&#23427;&#20351;&#29992;&#20102;<a class="link" href="#apihelper.andortrick.intro" title="&#20363;&nbsp;4.17.&nbsp;and-or &#25216;&#24039;&#20171;&#32461;"><code class="literal">and-or</code> &#25216;&#24039;</a>&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#25105;&#20204;&#24050;&#32463;&#25509;&#36817;&#20102;&#23545; <code class="classname">Dialectizer</code> &#30340;&#20840;&#38754;&#29702;&#35299;&#12290;&#21807;&#19968;&#32570;&#23569;&#30340;&#19968;&#20010;&#29615;&#33410;&#26159;&#25991;&#26412;&#26367;&#25442;&#30340;&#29305;&#24615;&#12290;&#22914;&#26524;&#24744;&#30693;&#36947;&#28857; <span class="application">Perl</span>&#65292;&#24744;&#23601;&#20250;&#30693;&#36947;&#24403;&#38656;&#35201;&#22797;&#26434;&#30340;&#25991;&#26412;&#26367;&#25442;&#26102;&#65292;&#21807;&#19968;&#26377;&#25928;&#30340;&#35299;&#20915;&#26041;&#27861;&#23601;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#22312; <code class="filename">dialect.py</code> &#25991;&#20214;&#21518;&#38754;&#30340;&#20960;&#20010;&#31867;&#20013;&#23450;&#20041;&#20102;&#19968;&#36830;&#20018;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#26469;&#25805;&#20316; <acronym class="acronym">HTML</acronym> &#26631;&#35760;&#20013;&#30340;&#25991;&#26412;&#12290;&#25105;&#20204;&#24050;&#32463;&#23398;&#20064;&#36807;&#20102;<a class="link" href="#re" title="&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;">&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#30340;&#25152;&#26377;&#23383;&#31526;</a>&#12290;&#25105;&#20204;&#19981;&#24517;&#37325;&#22797;&#23398;&#20064;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#33392;&#38590;&#21382;&#31243;&#20102;&#65292;&#19981;&#26159;&#21527;&#65311;&#19978;&#24093;&#30693;&#36947;&#25105;&#21453;&#27491;&#19981;&#38656;&#35201;&#12290;&#25105;&#24819;&#29616;&#22312;&#36825;&#31456;&#24744;&#24050;&#32463;&#23398;&#24471;&#24046;&#19981;&#22810;&#20102;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.alltogether"></a>8.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</h2></div></div></div><div class="abstract"><p>&#21040;&#20102;&#23558;&#36804;&#20170;&#20026;&#27490;&#25105;&#20204;&#24050;&#32463;&#23398;&#36807;&#24182;&#29992;&#24471;&#19981;&#38169;&#30340;&#19996;&#35199;&#25918;&#22312;&#19968;&#36215;&#30340;&#26102;&#20505;&#20102;&#12290;&#25105;&#24076;&#26395;&#24744;&#19987;&#24515;&#20123;&#12290;</p></div><div class="example"><a name="d0e22557"></a><p class="title"><b>&#20363;&nbsp;8.20.&nbsp;<code class="function">translate</code> &#20989;&#25968;&#65292;&#31532; 1 &#37096;&#20998;</b></p><div class="example-contents"><pre class="programlisting">
def translate(url, dialectName="chef"): <a name="dialect.alltogether.1.1"></a>circled_1_delcric
    import urllib                       <a name="dialect.alltogether.1.2"></a>circled_2_delcric
    sock = urllib.urlopen(url)          <a name="dialect.alltogether.1.3"></a>circled_3_delcric
    htmlSource = sock.read()           
    sock.close()                       
</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.alltogether.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010; <code class="function">translate</code> &#20989;&#25968;&#26377;&#19968;&#20010;<a class="link" href="#apihelper.optional" title="4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;">&#21487;&#36873;&#21442;&#25968;</a> <code class="varname">dialectName</code>&#65292;&#23427;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#25351;&#20986;&#25105;&#20204;&#23558;&#20351;&#29992;&#30340;&#26041;&#35328;&#12290;&#19968;&#20250;&#25105;&#20204;&#23601;&#20250;&#30475;&#21040;&#23427;&#26159;&#22914;&#20309;&#20351;&#29992;&#30340;&#12290;</dd><dt><a href="#dialect.alltogether.1.2">circled_2_delcric</a> </dt><dd>&#22079;&#65292;&#31561;&#19968;&#19979;&#65292;&#22312;&#36825;&#20010;&#20989;&#25968;&#20013;&#26377;&#19968;&#20010; <a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string"><code class="literal">import</code></a> &#35821;&#21477;&#65281;&#23427;&#22312; <span class="application">Python</span> &#20013;&#23436;&#20840;&#21512;&#27861;&#12290;&#24744;&#24050;&#32463;&#20064;&#24815;&#20102;&#22312;&#19968;&#20010;&#31243;&#24207;&#30340;&#21069;&#38754;&#30475;&#21040; <code class="literal">import</code> &#35821;&#21477;&#65292;&#23427;&#24847;&#21619;&#30528;&#23548;&#20837;&#30340;&#27169;&#22359;&#22312;&#31243;&#24207;&#30340;&#20219;&#20309;&#22320;&#26041;&#37117;&#26159;&#21487;&#29992;&#30340;&#12290;&#20294;&#24744;&#20063;&#21487;&#20197;&#22312;&#19968;&#20010;&#20989;&#25968;&#20013;&#23548;&#20837;&#27169;&#22359;&#65292;&#36825;&#24847;&#21619;&#30528;&#23548;&#20837;&#30340;&#27169;&#22359;&#21482;&#33021;&#22312;&#20989;&#25968;&#20013;&#20351;&#29992;&#12290;&#22914;&#26524;&#24744;&#26377;&#19968;&#20010;&#21482;&#33021;&#29992;&#22312;&#19968;&#20010;&#20989;&#25968;&#20013;&#30340;&#27169;&#22359;&#65292;&#36825;&#26159;&#19968;&#20010;&#31616;&#20415;&#30340;&#26041;&#27861;&#65292;&#20351;&#24744;&#30340;&#20195;&#30721;&#26356;&#27169;&#22359;&#21270;&#12290;(&#24403;&#21457;&#29616;&#24744;&#21608;&#26411;&#30340;&#21152;&#29677;&#24050;&#32463;&#21464;&#25104;&#20102;&#19968;&#20010; 800 &#34892;&#30340;&#33402;&#26415;&#20316;&#21697;&#65292;&#24182;&#19988;&#20915;&#23450;&#23558;&#20854;&#20998;&#21106;&#25104;&#19968;&#25171;&#21487;&#37325;&#29992;&#30340;&#27169;&#22359;&#26102;&#65292;&#24744;&#20250;&#24863;&#35874;&#23427;&#30340;&#12290;) </dd><dt><a href="#dialect.alltogether.1.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#25105;&#20204;<a class="link" href="#dialect.extract.urllib" title="&#20363;&nbsp;8.5.&nbsp;urllib &#20171;&#32461;">&#24471;&#21040;&#20102;&#32473;&#23450;&#30340; URL &#28304;&#25991;&#20214;</a>&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e22602"></a><p class="title"><b>&#20363;&nbsp;8.21.&nbsp;<code class="function">translate</code> &#20989;&#25968;&#65292;&#31532; 2 &#37096;&#20998;&#65306;&#22855;&#22937;&#32780;&#21448;&#22855;&#22937;</b></p><div class="example-contents"><pre class="programlisting">
    parserName = "%sDialectizer" % dialectName.capitalize() <a name="dialect.alltogether.2.1"></a>circled_1_delcric
    parserClass = globals()[parserName]                     <a name="dialect.alltogether.2.2"></a>circled_2_delcric
    parser = parserClass()                                  <a name="dialect.alltogether.2.3"></a>circled_3_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.alltogether.2.1">circled_1_delcric</a> </dt><dd><code class="function">capitalize</code> &#26159;&#19968;&#20010;&#25105;&#20204;&#20197;&#21069;&#26410;&#26366;&#35265;&#36807;&#30340;&#23383;&#31526;&#20018;&#26041;&#27861;&#65307;&#23427;&#21482;&#26159;&#23558;&#19968;&#20010;&#23383;&#31526;&#20018;&#30340;&#31532;&#19968;&#20010;&#23383;&#27597;&#21464;&#25104;&#22823;&#20889;&#65292;&#23558;&#20854;&#23427;&#30340;&#23383;&#27597;&#24378;&#21046;&#21464;&#25104;&#23567;&#20889;&#12290;&#20877;&#20351;&#29992;<a class="link" href="#odbchelper.stringformatting" title="3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;">&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a>&#65292;&#25105;&#20204;&#23601;&#24471;&#21040;&#20102;&#19968;&#31181;&#26041;&#35328;&#30340;&#21517;&#23383;&#65292;&#24182;&#23558;&#23427;&#36716;&#21270;&#20026;&#20102;&#30456;&#24212;&#30340;&#26041;&#35328;&#21464;&#25442;&#22120;&#31867;&#30340;&#21517;&#23383;&#12290;&#22914;&#26524; <code class="varname">dialectName</code> &#26159;&#23383;&#31526;&#20018; <code class="literal">'chef'</code>&#65292;<code class="varname">parserName</code> &#23558;&#26159;&#23383;&#31526;&#20018; <code class="literal">'ChefDialectizer'</code>&#12290;</dd><dt><a href="#dialect.alltogether.2.2">circled_2_delcric</a> </dt><dd>&#25105;&#20204;&#26377;&#20102;&#19968;&#20010;&#23383;&#31526;&#20018;&#24418;&#24335; (<code class="varname">parserName</code>) &#30340;&#31867;&#21517;&#31216;&#65292;&#36824;&#26377;&#19968;&#20010; dictionary (<code class="function">globals</code>()) &#24418;&#24335;&#30340;&#20840;&#23616;&#21517;&#23383;&#31354;&#38388;&#12290;&#21512;&#36215;&#26469;&#21518;&#65292;&#25105;&#20204;&#21487;&#20197;&#24471;&#21040;&#20197;&#21069;&#32773;&#21629;&#21517;&#30340;&#31867;&#30340;&#24341;&#29992;&#12290;(&#22238;&#24819;&#19968;&#19979;&#65292;<a class="link" href="#fileinfo.classattributes" title="5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;">&#31867;&#26159;&#23545;&#35937;</a>&#65292;&#24182;&#19988;&#23427;&#20204;&#21487;&#20197;&#20687;&#20854;&#23427;&#23545;&#35937;&#19968;&#26679;&#36171;&#20540;&#32473;&#19968;&#20010;&#21464;&#37327;&#12290;) &#22914;&#26524; <code class="varname">parserName</code> &#26159;&#23383;&#31526;&#20018; <code class="literal">'ChefDialectizer'</code>&#65292;<code class="varname">parserClass</code> &#23558;&#26159;&#31867; <code class="literal">ChefDialectizer</code>&#12290;</dd><dt><a href="#dialect.alltogether.2.3">circled_3_delcric</a> </dt><dd>&#26368;&#21518;&#65292;&#25105;&#20204;&#25317;&#26377;&#20102;&#19968;&#20010;&#31867;&#23545;&#35937; (<code class="varname">parserClass</code>)&#65292;&#25509;&#30528;&#25105;&#20204;&#24819;&#35201;&#29983;&#25104;&#36825;&#20010;&#31867;&#30340;&#19968;&#20010;&#23454;&#20363;&#12290;&#22909;&#65292;&#25105;&#20204;&#24050;&#32463;&#30693;&#36947;&#22914;&#20309;&#21435;&#20570;&#20102;&#65306;<a class="link" href="#fileinfo.create" title="5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;">&#20687;&#20989;&#25968;&#19968;&#26679;&#35843;&#29992;&#31867;</a>&#12290;&#36825;&#20010;&#31867;&#20445;&#23384;&#22312;&#19968;&#20010;&#23616;&#37096;&#21464;&#37327;&#20013;&#65292;&#20294;&#36825;&#20010;&#20107;&#23454;&#23436;&#20840;&#19981;&#20250;&#26377;&#20160;&#20040;&#24433;&#21709;&#65307;&#25105;&#20204;&#21482;&#26159;&#20687;&#20989;&#25968;&#19968;&#26679;&#35843;&#29992;&#36825;&#20010;&#23616;&#37096;&#21464;&#37327;&#65292;&#21462;&#20986;&#36825;&#20010;&#31867;&#30340;&#19968;&#20010;&#23454;&#20363;&#12290;&#22914;&#26524; <code class="varname">parserClass</code> &#26159;&#31867; <code class="literal">ChefDialectizer</code>&#65292;<code class="varname">parser</code> &#23558;&#26159;&#31867; <code class="literal">ChefDialectizer</code> &#30340;&#19968;&#20010;&#23454;&#20363;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#20309;&#24517;&#36825;&#20040;&#40635;&#28902;&#65311;&#27605;&#31455;&#21482;&#26377;&#19977;&#20010; <code class="classname">Dialectizer</code> &#31867;&#65307;&#20026;&#20160;&#20040;&#19981;&#21482;&#20351;&#29992;&#19968;&#20010; <code class="function">case</code> &#35821;&#21477;&#65311; (&#22114;&#65292;&#22312; <span class="application">Python</span> &#20013;&#19981;&#23384;&#22312; <code class="function">case</code> &#35821;&#21477;&#65292;&#20294;&#20026;&#20160;&#20040;&#19981;&#21482;&#20351;&#29992;&#19968;&#32452; <code class="literal">if</code> &#35821;&#21477;&#21602;&#65311;) &#29702;&#30001;&#20043;&#19968;&#26159;&#65306;&#21487;&#25193;&#23637;&#24615;&#12290;&#36825;&#20010; <code class="function">translate</code> &#20989;&#25968;&#23436;&#20840;&#19981;&#29992;&#20851;&#24515;&#25105;&#20204;&#23450;&#20041;&#20102;&#22810;&#23569;&#20010;&#26041;&#35328;&#21464;&#25442;&#22120;&#31867;&#12290;&#35774;&#24819;&#19968;&#19979;&#65292;&#22914;&#26524;&#25105;&#20204;&#26126;&#22825;&#23450;&#20041;&#20102;&#19968;&#20010;&#26032;&#30340; <code class="classname">FooDialectizer</code> &#31867;&#65292;&#25226; <code class="literal">'foo'</code> &#20316;&#20026; <code class="varname">dialectName</code> &#20256;&#32473; <code class="function">translate</code> &#65292;<code class="function">translate</code> &#20063;&#33021;&#24037;&#20316;&#12290;</p><p>&#29978;&#33267;&#20250;&#26356;&#22909;&#12290;&#35774;&#24819;&#23558; <code class="classname">FooDialectizer</code> &#25918;&#36827;&#19968;&#20010;&#29420;&#31435;&#30340;&#27169;&#22359;&#20013;&#65292;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23558;&#20854;&#23548;&#20837;&#12290;&#25105;&#20204;&#24050;&#32463;&#30693;&#36947;&#20102;&#65292;&#36825;&#26679;&#20250;&#23558;&#23427;<a class="link" href="#dialect.globals.example" title="&#20363;&nbsp;8.11.&nbsp;globals &#20171;&#32461;">&#21253;&#21547;&#22312; <code class="function">globals</code>()</a> &#20013; &#65292;&#25152;&#20197;&#19981;&#29992;&#20462;&#25913; <code class="function">translate</code> &#65292;&#23427;&#20173;&#28982;&#21487;&#20197;&#27491;&#30830;&#36816;&#34892;&#65292;&#23613;&#31649; <code class="classname">FooDialectizer</code> &#20301;&#20110;&#19968;&#20010;&#29420;&#31435;&#30340;&#25991;&#20214;&#20013;&#12290;</p><p>&#29616;&#22312;&#35774;&#24819;&#19968;&#19979;&#26041;&#35328;&#30340;&#21517;&#23383;&#26159;&#20174;&#31243;&#24207;&#22806;&#38754;&#30340;&#26576;&#20010;&#22320;&#26041;&#26469;&#30340;&#65292;&#20063;&#35768;&#26159;&#20174;&#19968;&#20010;&#25968;&#25454;&#24211;&#20013;&#65292;&#25110;&#20174;&#19968;&#20010;&#34920;&#26684;&#20013;&#30340;&#29992;&#25143;&#36755;&#20837;&#30340;&#20540;&#20013;&#12290;&#24744;&#21487;&#20197;&#20351;&#29992;&#20219;&#24847;&#22810;&#30340;&#26381;&#21153;&#31471; <span class="application">Python</span> &#33050;&#26412;&#26550;&#26500;&#26469;&#21160;&#24577;&#22320;&#29983;&#25104;&#32593;&#39029;&#65307;&#36825;&#20010;&#20989;&#25968;&#23558;&#25509;&#25910;&#22312;&#39029;&#38754;&#35831;&#27714;&#30340;&#26597;&#35810;&#23383;&#31526;&#20018;&#20013;&#30340;&#19968;&#20010; <acronym class="acronym">URL</acronym> &#21644;&#19968;&#20010;&#26041;&#35328;&#21517;&#23383; (&#20004;&#20010;&#37117;&#26159;&#23383;&#31526;&#20018;) &#65292;&#25509;&#30528;&#36755;&#20986; "<span class="quote">&#32763;&#35793;</span>" &#21518;&#30340;&#32593;&#39029;&#12290;</p><p>&#26368;&#21518;&#65292;&#35774;&#24819;&#19968;&#19979;&#65292;&#20351;&#29992;&#20102;&#19968;&#31181;&#25554;&#20214;&#26550;&#26500;&#30340; <code class="classname">Dialectizer</code> &#26694;&#26550;&#12290;&#24744;&#21487;&#20197;&#23558;&#27599;&#20010; <code class="classname">Dialectizer</code> &#31867;&#25918;&#22312;&#20998;&#21035;&#25918;&#22312;&#29420;&#31435;&#30340;&#25991;&#20214;&#20013;&#65292;&#22312; <code class="filename">dialect.py</code> &#20013;&#21482;&#30041;&#19979; <code class="function">translate</code> &#20989;&#25968;&#12290;&#20551;&#23450;&#19968;&#31181;&#32479;&#19968;&#30340;&#21629;&#21517;&#27169;&#24335;&#65292;&#36825;&#20010; <code class="function">translate</code> &#20989;&#25968;&#33021;&#22815;&#21160;&#24577;&#22320;&#20174;&#21512;&#36866;&#30340;&#25991;&#20214;&#20013;&#23548;&#20837;&#21512;&#36866;&#30340;&#31867;&#65292;&#38500;&#20102;&#26041;&#35328;&#21517;&#23383;&#22806;&#20160;&#20040;&#37117;&#19981;&#29992;&#32473;&#20986;&#12290;(&#34429;&#28982;&#24744;&#36824;&#27809;&#26377;&#30475;&#36807;&#21160;&#24577;&#23548;&#20837;&#65292;&#20294;&#25105;&#20445;&#35777;&#22312;&#21518;&#38754;&#30340;&#19968;&#31456;&#20013;&#20250;&#28041;&#21450;&#21040;&#23427;&#12290;) &#22914;&#26524;&#35201;&#21152;&#20837;&#19968;&#31181;&#26032;&#30340;&#26041;&#35328;&#65292;&#24744;&#21482;&#35201;&#22312;&#25554;&#20214;&#30446;&#24405;&#19979;&#21152;&#20837;&#19968;&#20010;&#20197;&#21512;&#36866;&#30340;&#21517;&#23383;&#21629;&#21517;&#30340;&#25991;&#20214; (&#20687; <code class="filename">foodialect.py</code>&#65292;&#23427;&#21253;&#21547;&#20102; <code class="classname">FooDialectizer</code> &#31867;) &#12290;&#20351;&#29992;&#26041;&#35328;&#21517; <code class="literal">'foo'</code> &#26469;&#35843;&#29992;&#36825;&#20010; <code class="function">translate</code> &#20989;&#25968;&#65292;&#23558;&#20250;&#26597;&#25214; <code class="filename">foodialect.py</code> &#27169;&#22359;&#65292;&#23548;&#20837; <code class="classname">FooDialectizer</code> &#31867;&#65292;&#36825;&#26679;&#23601;&#34892;&#20102;&#12290;</p><div class="example"><a name="d0e22785"></a><p class="title"><b>&#20363;&nbsp;8.22.&nbsp;<code class="function">translate</code> &#20989;&#25968;&#65292;&#31532; 3 &#37096;&#20998;</b></p><div class="example-contents"><pre class="programlisting">
    parser.feed(htmlSource) <a name="dialect.alltogether.3.1"></a>circled_1_delcric
    parser.close()          <a name="dialect.alltogether.3.2"></a>circled_2_delcric
    return parser.output()  <a name="dialect.alltogether.3.3"></a>circled_3_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#dialect.alltogether.3.1">circled_1_delcric</a> </dt><dd>&#21097;&#19979;&#30340;&#24037;&#20316;&#20284;&#20046;&#20250;&#38750;&#24120;&#26080;&#32842;&#65292;&#20294;&#23454;&#38469;&#19978;&#65292;<code class="function">feed</code> &#20989;&#25968;<a class="link" href="#dialect.feed.example" title="&#20363;&nbsp;8.7.&nbsp;&#20351;&#29992; urllister.py">&#25191;&#34892;&#20102;&#20840;&#37096;&#30340;&#36716;&#25442;&#24037;&#20316;</a>&#12290;&#25105;&#20204;&#25317;&#26377;&#23384;&#22312;&#20110;&#21333;&#20010;&#23383;&#31526;&#20018;&#20013;&#30340;&#20840;&#37096; <acronym class="acronym">HTML</acronym> &#28304;&#20195;&#30721;&#65292;&#25152;&#20197;&#25105;&#20204;&#21482;&#38656;&#35201;&#35843;&#29992; <code class="function">feed</code> &#19968;&#27425;&#12290;&#28982;&#32780;&#65292;&#24744;&#21487;&#20197;&#25353;&#24744;&#30340;&#38656;&#35201;&#32463;&#24120;&#35843;&#29992; <code class="function">feed</code>&#65292;&#20998;&#26512;&#22120;&#23558;&#19981;&#20572;&#22320;&#36827;&#34892;&#20998;&#26512;&#12290;&#25152;&#20197;&#22914;&#26524;&#25105;&#20204;&#25285;&#24515;&#20869;&#23384;&#30340;&#20351;&#29992; (&#25110;&#32773;&#25105;&#20204;&#24050;&#32463;&#30693;&#36947;&#20102;&#23558;&#35201;&#22788;&#29702;&#38750;&#24120;&#24040;&#22823;&#30340; <acronym class="acronym">HTML</acronym> &#39029;&#38754;) &#65292;&#25105;&#20204;&#21487;&#20197;&#22312;&#19968;&#20010;&#24490;&#29615;&#20013;&#35843;&#29992;&#23427;&#65292;&#21363;&#25105;&#20204;&#35835;&#20986;&#19968;&#28857; <acronym class="acronym">HTML</acronym> &#23383;&#33410;&#65292;&#23601;&#23558;&#20854;&#36865;&#36827;&#20998;&#26512;&#22120;&#12290;&#32467;&#26524;&#20250;&#26159;&#19968;&#26679;&#30340;&#12290;</dd><dt><a href="#dialect.alltogether.3.2">circled_2_delcric</a> </dt><dd>&#22240;&#20026; <code class="function">feed</code> &#32500;&#25252;&#30528;&#19968;&#20010;&#20869;&#37096;&#32531;&#20914;&#21306;&#65292;&#24403;&#24744;&#23436;&#25104;&#26102;&#65292;&#24212;&#35813;&#24635;&#26159;&#35843;&#29992;&#20998;&#26512;&#22120;&#30340; <code class="function">close</code> &#26041;&#27861; (&#37027;&#24597;&#24744;&#20687;&#25105;&#20204;&#20570;&#30340;&#19968;&#26679;&#65292;&#19968;&#27425;&#23601;&#20840;&#37096;&#36865;&#20986;) &#12290;&#21542;&#21017;&#24744;&#21487;&#33021;&#20250;&#21457;&#29616;&#65292;&#36755;&#20986;&#20002;&#25481;&#20102;&#26368;&#21518;&#20960;&#20010;&#23383;&#33410;&#12290;</dd><dt><a href="#dialect.alltogether.3.3">circled_3_delcric</a> </dt><dd>&#22238;&#24819;&#19968;&#19979;&#65292;<code class="function">output</code> &#26159;&#25105;&#20204;&#22312; <code class="classname">BaseHTMLProcessor</code> &#19978;&#23450;&#20041;&#30340;&#20989;&#25968;&#65292;&#29992;&#26469;<a class="link" href="#dialect.output.example" title="&#20363;&nbsp;8.9.&nbsp;BaseHTMLProcessor &#36755;&#20986;&#32467;&#26524;">&#23558;&#25152;&#26377;&#32531;&#20914;&#30340;&#36755;&#20986;&#29255;&#27573;&#36830;&#25509;&#36215;&#26469;</a>&#24182;&#19988;&#20197;&#21333;&#20010;&#23383;&#31526;&#20018;&#36820;&#22238;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#20687;&#36825;&#26679;&#65292;&#25105;&#20204;&#24050;&#32463; "<span class="quote">&#32763;&#35793;</span>" &#20102;&#19968;&#20010;&#32593;&#39029;&#65292;&#38500;&#20102;&#32473;&#20986;&#19968;&#20010; <acronym class="acronym">URL</acronym> &#21644;&#19968;&#31181;&#26041;&#35328;&#30340;&#21517;&#23383;&#22806;&#65292;&#20160;&#20040;&#37117;&#27809;&#26377;&#32473;&#20986;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>&#24744;&#21487;&#33021;&#20250;&#35748;&#20026;&#25105;&#30340;&#26381;&#21153;&#31471;&#33050;&#26412;&#32534;&#31243;&#30340;&#24819;&#27861;&#26159;&#24320;&#29609;&#31505;&#12290;&#22312;&#25105;&#21457;&#29616;&#36825;&#20010;&#22522;&#20110; web &#30340;&#26041;&#35328;&#36716;&#25442;&#22120; (<a href="http://rinkworks.com/dialect/">http://rinkworks.com/dialect/</a>)&#20043;&#21069;&#65292;&#30340;&#30830;&#26159;&#36825;&#26679;&#24819;&#30340;&#12290;&#19981;&#24184;&#30340;&#26159;&#65292;&#30475;&#19981;&#21040;&#23427;&#30340;&#28304;&#20195;&#30721;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dialect.summary"></a>8.10.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#21521;&#24744;&#25552;&#20379;&#20102;&#19968;&#20010;&#24378;&#22823;&#24037;&#20855;&#65292;<code class="filename">sgmllib.py</code>&#65292;&#21487;&#20197;&#36890;&#36807;&#23558; <acronym class="acronym">HTML</acronym> &#32467;&#26500;&#36716;&#21464;&#20026;&#19968;&#31181;&#23545;&#35937;&#27169;&#22411;&#26469;&#36827;&#34892;&#22788;&#29702;&#12290;&#21487;&#20197;&#20197;&#35768;&#22810;&#19981;&#21516;&#30340;&#26041;&#24335;&#26469;&#20351;&#29992;&#36825;&#20010;&#24037;&#20855;&#12290;</p></div><div class="itemizedlist"><ul><li>&#23545; <acronym class="acronym">HTML</acronym> &#36827;&#34892;&#20998;&#26512;&#65292;&#25628;&#32034;&#29305;&#21035;&#30340;&#19996;&#35199;</li><li>&#25688;&#24405;&#32467;&#26524;&#65292;&#22914; <a class="link" href="#dialect.extract.links" title="&#20363;&nbsp;8.6.&nbsp;urllister.py &#20171;&#32461;"><acronym class="acronym">URL</acronym> lister</a></li><li>&#22312;&#22788;&#29702;&#36807;&#31243;&#20013;&#39034;&#20415;&#35843;&#25972;&#32467;&#26500;&#65292;&#22914;<a class="link" href="#dialect.quoting.example" title="&#20363;&nbsp;8.16.&nbsp;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;">&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;</a></li><li>&#23558; <acronym class="acronym">HTML</acronym> &#36716;&#25442;&#20026;&#20854;&#23427;&#30340;&#19996;&#35199;&#65292;&#36890;&#36807;&#23545;&#25991;&#26412;&#36827;&#34892;&#22788;&#29702;&#65292;&#21516;&#26102;&#20445;&#30041;&#26631;&#35760;&#65292;&#22914; <a class="link" href="#dialect.dialectizer" title="8.8.&nbsp;dialect.py &#20171;&#32461;"><code class="classname">Dialectizer</code></a></li></ul></div><p>&#23398;&#36807;&#20102;&#36825;&#20123;&#20363;&#23376;&#20043;&#21518;&#65292;&#24744;&#24212;&#35813;&#26080;&#38556;&#30861;&#22320;&#23436;&#25104;&#19979;&#38754;&#30340;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#20351;&#29992; <a class="link" href="#dialect.locals" title="8.5.&nbsp;locals &#21644; globals"><code class="function">locals</code>() &#21644; <code class="function">globals</code>()</a> &#26469;&#35775;&#38382;&#21517;&#23383;&#31354;&#38388;</li><li>&#20351;&#29992;&#22522;&#20110; dictionary &#26367;&#25442;&#30340;<a class="link" href="#dialect.dictsub" title="8.6.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;">&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a></li></ul></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e20675" href="#d0e20675" class="para">4</a>] </sup>&#20687; <code class="classname">SGMLParser</code> &#36825;&#26679;&#30340;&#20998;&#26512;&#22120;&#65292;&#25216;&#26415;&#26415;&#35821;&#21483;&#20570;<span class="emphasis"><em>&#28040;&#36153;&#32773; (consumer)</em></span>&#12290;&#23427;&#28040;&#36153; <acronym class="acronym">HTML</acronym>&#65292;&#24182;&#19988;&#25286;&#20998;&#23427;&#12290;&#20063;&#35768;&#22240;&#27492;&#23601;&#36873;&#25321;&#20102; <code class="function">feed</code> &#36825;&#20010;&#21517;&#23383;&#65292;&#20197;&#20415;&#21516;<span class="emphasis"><em>&#28040;&#36153;&#32773; </em></span> &#36825;&#20010;&#20027;&#39064;&#30456;&#36866;&#24212;&#12290;&#23601;&#20010;&#20154;&#26469;&#35828;&#65292;&#23427;&#35753;&#25105;&#24819;&#35937;&#22312;&#21160;&#29289;&#22253;&#30475;&#23637;&#35272;&#12290;&#37324;&#38754;&#26377;&#19968;&#20010;&#40657;&#28422;&#28422;&#30340;&#20861;&#31348;&#65292;&#27809;&#26377;&#26641;&#65292;&#27809;&#26377;&#26893;&#29289;&#65292;&#27809;&#26377;&#20219;&#20309;&#29983;&#21629;&#30340;&#36857;&#35937;&#12290;&#20294;&#21482;&#35201;&#24744;&#38750;&#24120;&#23433;&#38745;&#22320;&#31449;&#30528;&#65292;&#23613;&#21487;&#33021;&#38752;&#36817;&#30528;&#30631;&#65292;&#24744;&#20250;&#30475;&#21040;&#22312;&#36828;&#22788;&#30340;&#35282;&#33853;&#37324;&#26377;&#20004;&#21482;&#26126;&#30520;&#22312;&#30447;&#30528;&#24744;&#12290;&#20294;&#26159;&#24744;&#20250;&#23433;&#24944;&#33258;&#24050;&#37027;&#19981;&#36807;&#26159;&#24515;&#29702;&#20316;&#29992;&#12290;&#21807;&#19968;&#30693;&#36947;&#20861;&#31348;&#37324;&#24182;&#19981;&#26159;&#31354;&#26080;&#19968;&#29289;&#30340;&#26041;&#27861;&#65292;&#23601;&#26159;&#22312;&#26629;&#26639;&#19978;&#26377;&#19968;&#20010;&#19981;&#26126;&#26174;&#30340;&#26631;&#35760;&#65292;&#19978;&#38754;&#20889;&#30528; "<span class="quote">&#31105;&#27490;&#32473;&#20998;&#26512;&#22120;&#21890;&#39135;</span>"&#12290;&#20294;&#20063;&#35768;&#21482;&#26377;&#25105;&#36825;&#20040;&#24819;&#65292;&#19981;&#31649;&#24590;&#20040;&#26679;&#65292;&#36825;&#31181;&#24515;&#29702;&#24819;&#35937;&#24456;&#26377;&#24847;&#24605;&#12290;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e20874" href="#d0e20874" class="para">5</a>] </sup><span class="application">Python</span> &#22788;&#29702; list &#27604;&#23383;&#31526;&#20018;&#24555;&#30340;&#21407;&#22240;&#26159;&#65306;list &#26159;&#21487;&#21464;&#30340;&#65292;&#20294;&#23383;&#31526;&#20018;&#26159;&#19981;&#21487;&#21464;&#30340;&#12290;&#36825;&#23601;&#26159;&#35828;&#21521; list &#36827;&#34892;&#36861;&#21152;&#21482;&#26159;&#22686;&#21152;&#20803;&#32032;&#21644;&#20462;&#25913;&#32034;&#24341;&#12290;&#22240;&#20026;&#23383;&#31526;&#20018;&#22312;&#21019;&#24314;&#20043;&#21518;&#19981;&#33021;&#34987;&#20462;&#25913;&#65292;&#20687; <code class="literal">s = s + newpiece</code> &#36825;&#26679;&#30340;&#20195;&#30721;&#23558;&#20250;&#20174;&#21407;&#20540;&#21644;&#26032;&#29255;&#27573;&#30340;&#36830;&#25509;&#32467;&#26524;&#20013;&#21019;&#24314;&#19968;&#20010;&#20840;&#26032;&#30340;&#23383;&#31526;&#20018;&#65292;&#28982;&#21518;&#20002;&#24323;&#21407;&#26469;&#30340;&#23383;&#31526;&#20018;&#12290;&#36825;&#26679;&#23601;&#38656;&#35201;&#22823;&#37327;&#26114;&#36149;&#30340;&#20869;&#23384;&#31649;&#29702;&#65292;&#24182;&#19988;&#38543;&#30528;&#23383;&#31526;&#20018;&#21464;&#38271;&#65292;&#25152;&#38656;&#35201;&#30340;&#24320;&#38144;&#20063;&#22312;&#22686;&#38271;&#12290;&#25152;&#20197;&#22312;&#19968;&#20010;&#24490;&#29615;&#20013;&#25191;&#34892; <code class="literal">s = s + newpiece</code> &#38750;&#24120;&#19981;&#22909;&#12290;&#29992;&#25216;&#26415;&#26415;&#35821;&#26469;&#35828;&#65292;&#21521;&#19968;&#20010; list &#36861;&#21152; <code class="varname">n</code> &#20010;&#39033;&#30340;&#20195;&#20215;&#20026; <code class="literal">O(n)</code>&#65292;&#32780;&#21521;&#19968;&#20010;&#23383;&#31526;&#20018;&#36861;&#21152; <code class="varname">n</code> &#20010;&#39033;&#30340;&#20195;&#20215;&#26159; <code class="literal">O(n<sup>2</sup>)</code>&#12290;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e21392" href="#d0e21392" class="para">6</a>] </sup>&#25105;&#27809;&#26377;&#35828;&#24471;&#22826;&#22810;&#21543;&#12290;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e21934" href="#d0e21934" class="para">7</a>] </sup>&#22909;&#21543;&#65292;&#20854;&#23454;&#24182;&#19981;&#26159;&#37027;&#20040;&#26222;&#36890;&#30340;&#19968;&#20010;&#38382;&#39064;&#12290;&#22312;&#37027;&#19981;&#37117;&#26159;&#38382; "<span class="quote">&#25105;&#24212;&#35813;&#29992;&#20309;&#31181;&#32534;&#36753;&#22120;&#26469;&#20889; <span class="application">Python</span> &#20195;&#30721;&#65311;</span>" (&#22238;&#31572;&#65306;<span class="application">Emacs</span>) &#25110; "<span class="quote"><span class="application">Python</span> &#27604; <span class="application">Perl</span> &#26159;&#22909;&#36824;&#26159;&#22351;&#65311;</span>" (&#22238;&#31572;&#65306;"<span class="quote"><span class="application">Perl</span> &#27604; <span class="application">Python</span> &#24046;&#65292;&#22240;&#20026;&#20154;&#20204;&#24819;&#35753;&#23427;&#24046;&#30340;&#12290;</span>" &#8213;&#8213;Larry Wall&#65292;1998 &#24180; 10 &#26376; 14 &#26085;) &#20294;&#26159;&#20851;&#20110; <acronym class="acronym">HTML</acronym>  &#22788;&#29702;&#30340;&#38382;&#39064;&#65292;&#25110;&#32773;&#36825;&#31181;&#25552;&#27861;&#25110;&#32773;&#21478;&#19968;&#31181;&#25552;&#27861;&#65292;&#22823;&#32422;&#19968;&#20010;&#26376;&#23601;&#35201;&#20986;&#29616;&#19968;&#27425;&#65292;&#22312;&#36825;&#20123;&#38382;&#39064;&#20043;&#20013;&#65292;&#36825;&#20010;&#38382;&#39064;&#26159;&#26368;&#24120;&#35265;&#30340;&#19968;&#20010;&#12290;</p></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="kgp"></a>&#31532;&nbsp;9&nbsp;&#31456;&nbsp;<acronym class="acronym">XML</acronym> &#22788;&#29702;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.divein"></a>9.1.&nbsp;&#27010;&#35272;</h2></div></div></div><p>&#19979;&#38754;&#20004;&#31456;&#26159;&#20851;&#20110; <span class="application">Python</span> &#20013; <acronym class="acronym">XML</acronym> &#22788;&#29702;&#30340;&#12290;&#22914;&#26524;&#20320;&#24050;&#32463;&#23545; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26377;&#20102;&#19968;&#20010;&#22823;&#27010;&#30340;&#20102;&#35299;&#65292;&#27604;&#22914;&#23427;&#26159;&#30001;&#32467;&#26500;&#21270;&#26631;&#35760;&#26500;&#25104;&#30340;&#65292;&#36825;&#20123;&#26631;&#35760;&#24418;&#25104;&#20102;&#23618;&#27425;&#27169;&#22411;&#30340;&#20803;&#32032;&#65292;&#31561;&#31561;&#36825;&#20123;&#30693;&#35782;&#37117;&#26159;&#26377;&#24110;&#21161;&#30340;&#12290;&#22914;&#26524;&#20320;&#19981;&#26126;&#30333;&#36825;&#20123;&#65292;&#36825;&#37324;&#26377;&#24456;&#22810; <acronym class="acronym">XML</acronym> &#25945;&#31243; (<a href="http://directory.google.com/Top/Computers/Data_Formats/Markup_Languages/XML/Resources/FAQs,_Help,_and_Tutorials/">http://directory.google.com/Top/Computers/Data_Formats/Markup_Languages/XML/Resources/FAQs,_Help,_and_Tutorials/</a>)&#33021;&#22815;&#35299;&#37322;&#36825;&#20123;&#22522;&#30784;&#30693;&#35782;&#12290;</p><p>&#22914;&#26524;&#20320;&#23545; XML &#19981;&#26159;&#24456;&#24863;&#20852;&#36259;&#65292;&#20320;&#36824;&#26159;&#24212;&#35813;&#35835;&#19968;&#19979;&#36825;&#20123;&#31456;&#33410;&#65292;&#23427;&#20204;&#28085;&#30422;&#20102;&#19981;&#23569;&#37325;&#35201;&#30340;&#20027;&#39064;&#65292;&#27604;&#22914; <span class="application">Python</span> &#21253;&#12289;Unicode&#12289;&#21629;&#20196;&#34892;&#21442;&#25968;&#20197;&#21450;&#22914;&#20309;&#20351;&#29992; <code class="function">getattr</code> &#36827;&#34892;&#26041;&#27861;&#20998;&#21457;&#12290;</p><p>&#22914;&#26524;&#20320;&#22312;&#22823;&#23398;&#37324;&#20027;&#20462;&#21746;&#23398; (&#32780;&#19981;&#26159;&#20687;&#35745;&#31639;&#26426;&#31185;&#23398;&#36825;&#26679;&#30340;&#23454;&#29992;&#19987;&#19994;)&#65292;&#24182;&#19988;&#26366;&#19981;&#24184;&#22320;&#34987;&#20234;&#26364;&#21162;&#23572;&middot;&#24247;&#24503;&#30340;&#33879;&#20316;&#25240;&#30952;&#22320;&#22815;&#21595;&#65292;&#37027;&#20040;&#20320;&#20250;&#38750;&#24120;&#27427;&#36175;&#26412;&#31456;&#30340;&#26679;&#20363;&#31243;&#24207;&#12290;(&#36825;&#24403;&#28982;&#19981;&#24847;&#21619;&#30528;&#20320;&#24517;&#39035;&#20462;&#36807;&#21746;&#23398;&#12290;)</p><div class="abstract"><p>&#22788;&#29702; <acronym class="acronym">XML</acronym> &#26377;&#20004;&#31181;&#22522;&#26412;&#30340;&#26041;&#24335;&#12290;&#19968;&#31181;&#21483;&#20570; <acronym class="acronym">SAX</acronym> ("<span class="quote">Simple <acronym class="acronym">API</acronym> for <acronym class="acronym">XML</acronym></span>")&#65292;&#23427;&#30340;&#24037;&#20316;&#26041;&#24335;&#26159;&#65292;&#19968;&#27425;&#35835;&#20986;&#19968;&#28857; <acronym class="acronym">XML</acronym> &#20869;&#23481;&#65292;&#28982;&#21518;&#23545;&#21457;&#29616;&#30340;&#27599;&#19968;&#20010;&#20803;&#32032;&#35843;&#29992;&#19968;&#20010;&#26041;&#27861;&#12290;(&#22914;&#26524;&#20320;&#35835;&#20102; <a class="xref" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">&#31532;&nbsp;8&nbsp;&#31456; <i><acronym class="acronym">HTML</acronym> &#22788;&#29702;</i></a>&#65292;&#36825;&#24212;&#35813;&#21548;&#36215;&#26469;&#24456;&#29087;&#24713;&#65292;&#22240;&#20026;&#36825;&#26159; <code class="filename">sgmllib</code> &#24037;&#20316;&#30340;&#26041;&#24335;&#12290;) &#21478;&#19968;&#31181;&#26041;&#24335;&#21483;&#20570; <acronym class="acronym">DOM</acronym> ("<span class="quote">Document Object Model</span>")&#65292;&#23427;&#30340;&#24037;&#20316;&#26041;&#24335;&#26159;&#65292;&#19968;&#27425;&#24615;&#35835;&#20837;&#25972;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#65292;&#28982;&#21518;&#20351;&#29992; <span class="application">Python</span> &#31867;&#21019;&#24314;&#19968;&#20010;&#20869;&#37096;&#34920;&#31034;&#24418;&#24335; (&#20197;&#26641;&#32467;&#26500;&#36827;&#34892;&#36830;&#25509;)&#12290;<span class="application">Python</span> &#25317;&#26377;&#36825;&#20004;&#31181;&#35299;&#26512;&#26041;&#24335;&#30340;&#26631;&#20934;&#27169;&#22359;&#65292;&#20294;&#26159;&#26412;&#31456;&#21482;&#28041;&#21450; <acronym class="acronym">DOM</acronym>&#12290;</p></div><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340; <span class="application">Python</span> &#31243;&#24207;&#65292;&#23427;&#26681;&#25454; <acronym class="acronym">XML</acronym> &#26684;&#24335;&#23450;&#20041;&#30340;&#19978;&#19979;&#25991;&#26080;&#20851;&#35821;&#27861;&#29983;&#25104;&#20266;&#38543;&#26426;&#36755;&#20986;&#12290;&#22914;&#26524;&#20320;&#19981;&#26126;&#30333;&#26159;&#20160;&#20040;&#24847;&#24605;&#65292;&#19981;&#29992;&#25285;&#24515;&#65292;&#19979;&#38754;&#20004;&#31456;&#20013;&#23558;&#20250;&#28145;&#20837;&#26816;&#35270;&#36825;&#20010;&#31243;&#24207;&#30340;&#36755;&#20837;&#21644;&#36755;&#20986;&#12290;</p><div class="example"><a name="d0e23015"></a><p class="title"><b>&#20363;&nbsp;9.1.&nbsp;<code class="filename">kgp.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Kant Generator for Python

Generates mock philosophy based on a context-free grammar

Usage: python kgp.py [options] [source]

Options:
  -g ..., --grammar=...   use specified grammar file or URL
  -h, --help              show this help
  -d                      show debugging information while parsing

Examples:
  kgp.py                  generates several paragraphs of Kantian philosophy
  kgp.py -g husserl.xml   generates several paragraphs of Husserl
  kpg.py "&lt;xref id='paragraph'/&gt;"  generates a paragraph of Kant
  kgp.py template.xml     reads from template.xml to decide what to generate
"""
from xml.dom import minidom
import random
import toolbox
import sys
import getopt

_debug = 0

class NoSourceError(Exception): pass

class KantGenerator:
    """generates mock philosophy based on a context-free grammar"""

    def __init__(self, grammar, source=None):
        self.loadGrammar(grammar)
        self.loadSource(source and source or self.getDefaultSource())
        self.refresh()

    def _load(self, source):
        """load XML input source, return parsed XML document

        - a URL of a remote XML file ("http://diveintopython.org/kant.xml")
        - a filename of a local XML file ("~/diveintopython/common/py/kant.xml")
        - standard input ("-")
        - the actual XML document, as a string
        """
        sock = toolbox.openAnything(source)
        xmldoc = minidom.parse(sock).documentElement
        sock.close()
        return xmldoc

    def loadGrammar(self, grammar):                         
        """load context-free grammar"""                     
        self.grammar = self._load(grammar)                  
        self.refs = {}                                      
        for ref in self.grammar.getElementsByTagName("ref"):
            self.refs[ref.attributes["id"].value] = ref     

    def loadSource(self, source):
        """load source"""
        self.source = self._load(source)

    def getDefaultSource(self):
        """guess default source of the current grammar
        
        The default source will be one of the &lt;ref&gt;s that is not
        cross-referenced.  This sounds complicated but it's not.
        Example: The default source for kant.xml is
        "&lt;xref id='section'/&gt;", because 'section' is the one &lt;ref&gt;
        that is not &lt;xref&gt;'d anywhere in the grammar.
        In most grammars, the default source will produce the
        longest (and most interesting) output.
        """
        xrefs = {}
        for xref in self.grammar.getElementsByTagName("xref"):
            xrefs[xref.attributes["id"].value] = 1
        xrefs = xrefs.keys()
        standaloneXrefs = [e for e in self.refs.keys() if e not in xrefs]
        if not standaloneXrefs:
            raise NoSourceError, "can't guess source, and no source specified"
        return '&lt;xref id="%s"/&gt;' % random.choice(standaloneXrefs)
        
    def reset(self):
        """reset parser"""
        self.pieces = []
        self.capitalizeNextWord = 0

    def refresh(self):
        """reset output buffer, re-parse entire source file, and return output
        
        Since parsing involves a good deal of randomness, this is an
        easy way to get new output without having to reload a grammar file
        each time.
        """
        self.reset()
        self.parse(self.source)
        return self.output()

    def output(self):
        """output generated text"""
        return "".join(self.pieces)

    def randomChildElement(self, node):
        """choose a random child element of a node
        
        This is a utility method used by do_xref and do_choice.
        """
        choices = [e for e in node.childNodes
                   if e.nodeType == e.ELEMENT_NODE]
        chosen = random.choice(choices)            
        if _debug:                                 
            sys.stderr.write('%s available choices: %s\n' % \
                (len(choices), [e.toxml() for e in choices]))
            sys.stderr.write('Chosen: %s\n' % chosen.toxml())
        return chosen                              

    def parse(self, node):         
        """parse a single XML node
        
        A parsed XML document (from minidom.parse) is a tree of nodes
        of various types.  Each node is represented by an instance of the
        corresponding Python class (Element for a tag, Text for
        text data, Document for the top-level document).  The following
        statement constructs the name of a class method based on the type
        of node we're parsing ("parse_Element" for an Element node,
        "parse_Text" for a Text node, etc.) and then calls the method.
        """
        parseMethod = getattr(self, "parse_%s" % node.__class__.__name__)
        parseMethod(node)

    def parse_Document(self, node):
        """parse the document node
        
        The document node by itself isn't interesting (to us), but
        its only child, node.documentElement, is: it's the root node
        of the grammar.
        """
        self.parse(node.documentElement)

    def parse_Text(self, node):    
        """parse a text node
        
        The text of a text node is usually added to the output buffer
        verbatim.  The one exception is that &lt;p class='sentence'&gt; sets
        a flag to capitalize the first letter of the next word.  If
        that flag is set, we capitalize the text and reset the flag.
        """
        text = node.data
        if self.capitalizeNextWord:
            self.pieces.append(text[0].upper())
            self.pieces.append(text[1:])
            self.capitalizeNextWord = 0
        else:
            self.pieces.append(text)

    def parse_Element(self, node): 
        """parse an element
        
        An XML element corresponds to an actual tag in the source:
        &lt;xref id='...'&gt;, &lt;p chance='...'&gt;, &lt;choice&gt;, etc.
        Each element type is handled in its own method.  Like we did in
        parse(), we construct a method name based on the name of the
        element ("do_xref" for an &lt;xref&gt; tag, etc.) and
        call the method.
        """
        handlerMethod = getattr(self, "do_%s" % node.tagName)
        handlerMethod(node)

    def parse_Comment(self, node):
        """parse a comment
        
        The grammar can contain XML comments, but we ignore them
        """
        pass
    
    def do_xref(self, node):
        """handle &lt;xref id='...'&gt; tag
        
        An &lt;xref id='...'&gt; tag is a cross-reference to a &lt;ref id='...'&gt;
        tag.  &lt;xref id='sentence'/&gt; evaluates to a randomly chosen child of
        &lt;ref id='sentence'&gt;.
        """
        id = node.attributes["id"].value
        self.parse(self.randomChildElement(self.refs[id]))

    def do_p(self, node):
        """handle &lt;p&gt; tag
        
        The &lt;p&gt; tag is the core of the grammar.  It can contain almost
        anything: freeform text, &lt;choice&gt; tags, &lt;xref&gt; tags, even other
        &lt;p&gt; tags.  If a "class='sentence'" attribute is found, a flag
        is set and the next word will be capitalized.  If a "chance='X'"
        attribute is found, there is an X% chance that the tag will be
        evaluated (and therefore a (100-X)% chance that it will be
        completely ignored)
        """
        keys = node.attributes.keys()
        if "class" in keys:
            if node.attributes["class"].value == "sentence":
                self.capitalizeNextWord = 1
        if "chance" in keys:
            chance = int(node.attributes["chance"].value)
            doit = (chance &gt; random.randrange(100))
        else:
            doit = 1
        if doit:
            for child in node.childNodes: self.parse(child)

    def do_choice(self, node):
        """handle &lt;choice&gt; tag
        
        A &lt;choice&gt; tag contains one or more &lt;p&gt; tags.  One &lt;p&gt; tag
        is chosen at random and evaluated; the rest are ignored.
        """
        self.parse(self.randomChildElement(node))

def usage():
    print __doc__

def main(argv):                         
    grammar = "kant.xml"                
    try:                                
        opts, args = getopt.getopt(argv, "hg:d", ["help", "grammar="])
    except getopt.GetoptError:          
        usage()                         
        sys.exitcircled_2_delcric                     
    for opt, arg in opts:               
        if opt in ("-h", "--help"):     
            usage()                     
            sys.exit()                  
        elif opt == '-d':               
            global _debug               
            _debug = 1                  
        elif opt in ("-g", "--grammar"):
            grammar = arg               
    
    source = "".join(args)              

    k = KantGenerator(grammar, source)
    print k.output()

if __name__ == "__main__":
    main(sys.argv[1:])
</pre></div></div><br class="example-break"><div class="example"><a name="d0e23026"></a><p class="title"><b>&#20363;&nbsp;9.2.&nbsp;<code class="filename">toolbox.py</code></b></p><div class="example-contents"><pre class="programlisting">
"""Miscellaneous utility functions"""

def openAnything(source):            
    """URI, filename, or string --&gt; stream

    This function lets you define parsers that take any input source
    (URL, pathname to local or network file, or actual data as a string)
    and deal with it in a uniform manner.  Returned object is guaranteed
    to have all the basic stdio read methods (read, readline, readlines).
    Just .close() the object when you're done with it.
    
    Examples:
    &gt;&gt;&gt; from xml.dom import minidom
    &gt;&gt;&gt; sock = openAnything("http://localhost/kant.xml")
    &gt;&gt;&gt; doc = minidom.parse(sock)
    &gt;&gt;&gt; sock.close()
    &gt;&gt;&gt; sock = openAnything("c:\\inetpub\\wwwroot\\kant.xml")
    &gt;&gt;&gt; doc = minidom.parse(sock)
    &gt;&gt;&gt; sock.close()
    &gt;&gt;&gt; sock = openAnything("&lt;ref id='conjunction'&gt;&lt;text&gt;and&lt;/text&gt;&lt;text&gt;or&lt;/text&gt;&lt;/ref&gt;")
    &gt;&gt;&gt; doc = minidom.parse(sock)
    &gt;&gt;&gt; sock.close()
    """
    if hasattr(source, "read"):
        return source

    if source == '-':
        import sys
        return sys.stdin

    # try to open with urllib (if source is http, ftp, or file URL)
    import urllib                         
    try:                                  
        return urllib.urlopen(source)     
    except (IOError, OSError):            
        pass                              
    
    # try to open with native open function (if source is pathname)
    try:                                  
        return open(source)               
    except (IOError, OSError):            
        pass                              
    
    # treat source as string
    import StringIO                       
    return StringIO.StringIO(str(source)) 
</pre></div></div><br class="example-break"><p>&#29420;&#31435;&#36816;&#34892;&#31243;&#24207; <code class="filename">kgp.py</code>&#65292;&#23427;&#20250;&#35299;&#26512; <code class="filename">kant.xml</code> &#20013;&#40664;&#35748;&#30340;&#22522;&#20110; <acronym class="acronym">XML</acronym> &#30340;&#35821;&#27861;&#65292;&#24182;&#20197;&#24247;&#24503;&#30340;&#39118;&#26684;&#25171;&#21360;&#20986;&#20960;&#27573;&#26377;&#21746;&#23398;&#20215;&#20540;&#30340;&#27573;&#33853;&#26469;&#12290;</p><div class="example"><a name="d0e23043"></a><p class="title"><b>&#20363;&nbsp;9.3.&nbsp;<code class="filename">kgp.py</code> &#30340;&#26679;&#20363;&#36755;&#20986;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">[you@localhost kgp]$ python kgp.py</code>
<font color="teal">     As is shown in the writings of Hume, our a priori concepts, in
reference to ends, abstract from all content of knowledge; in the study
of space, the discipline of human reason, in accordance with the
principles of philosophy, is the clue to the discovery of the
Transcendental Deduction.  The transcendental aesthetic, in all
theoretical sciences, occupies part of the sphere of human reason
concerning the existence of our ideas in general; still, the
never-ending regress in the series of empirical conditions constitutes
the whole content for the transcendental unity of apperception.  What
we have alone been able to show is that, even as this relates to the
architectonic of human reason, the Ideal may not contradict itself, but
it is still possible that it may be in contradictions with the
employment of the pure employment of our hypothetical judgements, but
natural causes (and I assert that this is the case) prove the validity
of the discipline of pure reason.  As we have already seen, time (and
it is obvious that this is true) proves the validity of time, and the
architectonic of human reason, in the full sense of these terms,
abstracts from all content of knowledge.  I assert, in the case of the
discipline of practical reason, that the Antinomies are just as
necessary as natural causes, since knowledge of the phenomena is a
posteriori.
    The discipline of human reason, as I have elsewhere shown, is by
its very nature contradictory, but our ideas exclude the possibility of
the Antinomies.  We can deduce that, on the contrary, the pure
employment of philosophy, on the contrary, is by its very nature
contradictory, but our sense perceptions are a representation of, in
the case of space, metaphysics.  The thing in itself is a
representation of philosophy.  Applied logic is the clue to the
discovery of natural causes.  However, what we have alone been able to
show is that our ideas, in other words, should only be used as a canon
for the Ideal, because of our necessary ignorance of the conditions.

[...snip...]</font></pre></div></div><br class="example-break"><p>&#36825;&#24403;&#28982;&#26159;&#32993;&#35328;&#20081;&#35821;&#12290;&#22114;&#65292;&#19981;&#23436;&#20840;&#26159;&#32993;&#35328;&#20081;&#35821;&#12290;&#23427;&#22312;&#21477;&#27861;&#21644;&#35821;&#27861;&#19978;&#37117;&#26159;&#27491;&#30830;&#30340; (&#23613;&#31649;&#38750;&#24120;&#32599;&#21990;&#8213;&#8213;&#24247;&#24503;&#21487;&#19981;&#26159;&#20320;&#20204;&#25152;&#35828;&#30340;&#36393;&#24471;&#21040;&#28857;&#19978;&#30340;&#37027;&#31181;&#20154;)&#12290;&#20854;&#20013;&#19968;&#20123;&#23454;&#38469;&#19978;&#26159;&#27491;&#30830;&#30340; (&#25110;&#32773;&#33267;&#23569;&#24247;&#24503;&#21487;&#33021;&#20250;&#35748;&#21516;&#30340;&#20107;&#24773;)&#65292;&#20854;&#20013;&#19968;&#20123;&#21017;&#26126;&#26174;&#26159;&#38169;&#35823;&#30340;&#65292;&#22823;&#37096;&#20998;&#21482;&#26159;&#35821;&#26080;&#20262;&#27425;&#12290;&#20294;&#25152;&#26377;&#20869;&#23481;&#37117;&#31526;&#21512;&#24247;&#24503;&#30340;&#39118;&#26684;&#12290;
</p><p>&#35753;&#25105;&#37325;&#22797;&#19968;&#36941;&#65292;&#22914;&#26524;&#20320;&#29616;&#22312;&#25110;&#26366;&#32463;&#20027;&#20462;&#21746;&#23398;&#19987;&#19994;&#65292;&#36825;&#20250;&#38750;&#24120;&#12289;&#38750;&#24120;&#26377;&#36259;&#12290;</p><p>&#26377;&#36259;&#20043;&#22788;&#22312;&#20110;&#65292;&#36825;&#20010;&#31243;&#24207;&#20013;&#27809;&#26377;&#19968;&#28857;&#20869;&#23481;&#26159;&#23646;&#20110;&#24247;&#24503;&#30340;&#12290;&#25152;&#26377;&#30340;&#20869;&#23481;&#37117;&#26469;&#33258;&#20110;&#19978;&#19979;&#25991;&#26080;&#20851;&#35821;&#27861;&#25991;&#20214; <code class="filename">kant.xml</code>&#12290;&#22914;&#26524;&#20320;&#35201;&#31243;&#24207;&#20351;&#29992;&#19981;&#21516;&#30340;&#35821;&#27861;&#25991;&#20214; (&#21487;&#20197;&#22312;&#21629;&#20196;&#34892;&#20013;&#25351;&#23450;)&#65292;&#36755;&#20986;&#20449;&#24687;&#23558;&#23436;&#20840;&#19981;&#21516;&#12290;</p><div class="example"><a name="d0e23063"></a><p class="title"><b>&#20363;&nbsp;9.4.&nbsp;<code class="filename">kgp.py</code> &#30340;&#31616;&#21333;&#36755;&#20986;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">[you@localhost kgp]$ python kgp.py -g binary.xml</code>
<font color="teal">00101001</font>
<code class="prompt">[you@localhost kgp]$ python kgp.py -g binary.xml</code>
<font color="teal">10110100</font></pre></div></div><br class="example-break"><p>&#22312;&#26412;&#31456;&#21518;&#38754;&#30340;&#20869;&#23481;&#20013;&#65292;&#20320;&#23558;&#36817;&#36317;&#31163;&#22320;&#35266;&#23519;&#35821;&#27861;&#25991;&#20214;&#30340;&#32467;&#26500;&#12290;&#29616;&#22312;&#65292;&#20320;&#21482;&#35201;&#30693;&#36947;&#35821;&#27861;&#25991;&#20214;&#23450;&#20041;&#20102;&#36755;&#20986;&#20449;&#24687;&#30340;&#32467;&#26500;&#65292;&#32780; <code class="filename">kgp.py</code> &#31243;&#24207;&#35835;&#21462;&#35821;&#27861;&#35268;&#21017;&#24182;&#38543;&#26426;&#30830;&#23450;&#21738;&#20123;&#21333;&#35789;&#25554;&#20837;&#21738;&#37324;&#12290;
</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.packages"></a>9.2.&nbsp;&#21253;</h2></div></div></div><div class="abstract"><p>&#23454;&#38469;&#19978;&#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26159;&#24456;&#31616;&#21333;&#30340;&#65306;&#21482;&#35201;&#19968;&#34892;&#20195;&#30721;&#12290;&#20294;&#26159;&#65292;&#22312;&#20320;&#25509;&#35302;&#37027;&#34892;&#20195;&#30721;&#21069;&#65292;&#38656;&#35201;&#26242;&#26102;&#23700;&#24320;&#19968;&#19979;&#65292;&#35752;&#35770;&#19968;&#19979;&#21253;&#12290;</p></div><div class="example"><a name="d0e23095"></a><p class="title"><b>&#20363;&nbsp;9.5.&nbsp;&#36733;&#20837;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723; (&#20599;&#30629;&#19968;&#19979;)</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom import minidom</span> <a name="kgp.packages.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse('~/diveintopython/common/py/kgp/binary.xml')</span></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.packages.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#35821;&#27861;&#20320;&#20043;&#21069;&#27809;&#26377;&#35265;&#36807;&#12290;&#23427;&#30475;&#19978;&#21435;&#24456;&#20687;&#25105;&#20204;&#29087;&#30693;&#30340; <code class="literal">from <em class="replaceable">module</em> import</code>&#65292;&#20294;&#26159;<code class="literal">"."</code> &#20351;&#24471;&#23427;&#22909;&#20687;&#19981;&#21482;&#26159;&#26222;&#36890;&#30340; import &#37027;&#20040;&#31616;&#21333;&#12290;&#20107;&#23454;&#19978;&#65292;<code class="filename">xml</code> &#31216;&#20026;&#21253;&#65292;<code class="filename">dom</code> &#26159; <code class="filename">xml</code> &#20013;&#23884;&#22871;&#30340;&#21253;&#65292;&#32780; <code class="filename">minidom</code> &#26159; <code class="filename">xml.dom</code> &#20013;&#30340;&#27169;&#22359;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21548;&#36215;&#26469;&#25402;&#22797;&#26434;&#30340;&#65292;&#20854;&#23454;&#19981;&#26159;&#12290;&#30475;&#19968;&#19979;&#30830;&#20999;&#30340;&#23454;&#29616;&#21487;&#33021;&#20250;&#26377;&#24110;&#21161;&#12290;&#21253;&#19981;&#36807;&#26159;&#27169;&#22359;&#30340;&#30446;&#24405;&#65307;&#23884;&#22871;&#21253;&#26159;&#23376;&#30446;&#24405;&#12290;&#19968;&#20010;&#21253; (&#25110;&#19968;&#20010;&#23884;&#22871;&#21253;) &#20013;&#30340;&#27169;&#22359;&#20063;&#21482;&#26159; <code class="filename">.py</code> &#25991;&#20214;&#32610;&#20102;&#65292;&#27704;&#36828;&#37117;&#26159;&#65292;&#21482;&#26159;&#23427;&#20204;&#26159;&#22312;&#19968;&#20010;&#23376;&#30446;&#24405;&#20013;&#65292;&#32780;&#19981;&#26159;&#22312;&#20320;&#30340; <span class="application">Python</span> &#23433;&#35013;&#29615;&#22659;&#30340;&#20027; <code class="filename">lib/</code> &#30446;&#24405;&#19979;&#12290;</p><div class="example"><a name="d0e23153"></a><p class="title"><b>&#20363;&nbsp;9.6.&nbsp;&#21253;&#30340;&#25991;&#20214;&#24067;&#23616;</b></p><div class="example-contents"><pre class="screen"><font color="teal"><span class="application">Python</span>21/           <span class="application">Python</span> &#23433;&#35013;&#26681;&#30446;&#24405; (&#21487;&#25191;&#34892;&#25991;&#20214;&#30340;&#25152;&#22312;&#22320;)
|
+--lib/             &#24211;&#30446;&#24405; (&#26631;&#20934;&#24211;&#27169;&#22359;&#30340;&#25152;&#22312;&#22320;)
   |
   +-- xml/         xml&#21253; (&#23454;&#38469;&#19978;&#30446;&#24405;&#20013;&#36824;&#26377;&#20854;&#23427;&#19996;&#35199;)
       |
       +--sax/      xml.sax&#21253; (&#20063;&#21482;&#26159;&#19968;&#20010;&#30446;&#24405;)
       |
       +--dom/      xml.dom&#21253; (&#21253;&#21547; minidom.py)
       |
       +--parsers/  xml.parsers&#21253; (&#20869;&#37096;&#20351;&#29992;)</font></pre></div></div><br class="example-break"><p>&#25152;&#20197;&#20320;&#35828; <code class="literal">from xml.dom import minidom</code>&#65292;<span class="application">Python</span> &#35748;&#20026;&#23427;&#30340;&#24847;&#24605;&#26159;"<span class="quote">&#22312; <code class="filename">xml</code> &#30446;&#24405;&#20013;&#26597;&#25214; <code class="filename">dom</code> &#30446;&#24405;&#65292;&#28982;&#21518;&#22312;<span class="emphasis"><em>&#36825;&#20010;&#30446;&#24405;</em></span> &#20013;&#26597;&#25214; <code class="filename">minidom</code> &#27169;&#22359;&#65292;&#25509;&#30528;&#23548;&#20837;&#23427;&#24182;&#20197; <code class="filename">minidom</code> &#21629;&#21517; </span>"&#12290;&#20294;&#26159; <span class="application">Python</span> &#26356;&#32874;&#26126;&#65307;&#20320;&#19981;&#20165;&#21487;&#20197;&#23548;&#20837;&#21253;&#21547;&#22312;&#19968;&#20010;&#21253;&#20013;&#30340;&#25152;&#26377;&#27169;&#22359;&#65292;&#36824;&#21487;&#20197;&#20174;&#21253;&#30340;&#27169;&#22359;&#20013;&#26377;&#36873;&#25321;&#22320;&#23548;&#20837;&#25351;&#23450;&#30340;&#31867;&#25110;&#32773;&#20989;&#25968;&#12290;&#35821;&#27861;&#37117;&#26159;&#19968;&#26679;&#30340;&#65307; <span class="application">Python</span> &#20250;&#26681;&#25454;&#21253;&#30340;&#24067;&#23616;&#29702;&#35299;&#20320;&#30340;&#24847;&#24605;&#65292;&#28982;&#21518;&#33258;&#21160;&#36827;&#34892;&#27491;&#30830;&#30340;&#23548;&#20837;&#12290;
</p><div class="example"><a name="d0e23196"></a><p class="title"><b>&#20363;&nbsp;9.7.&nbsp;&#21253;&#20063;&#26159;&#27169;&#22359;</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom import minidom</span>         <a name="kgp.packages.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">minidom</span>
<font color="teal">&lt;module 'xml.dom.minidom' from 'C:\Python21\lib\xml\dom\minidom.pyc'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">minidom.Element</span>
<font color="teal">&lt;class xml.dom.minidom.Element at 01095744&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom.minidom import Element</span> <a name="kgp.packages.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">Element</span>
<font color="teal">&lt;class xml.dom.minidom.Element at 01095744&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">minidom.Element</span>
<font color="teal">&lt;class xml.dom.minidom.Element at 01095744&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml import dom</span>                 <a name="kgp.packages.2.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">dom</span>
<font color="teal">&lt;module 'xml.dom' from 'C:\Python21\lib\xml\dom\__init__.pyc'&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import xml</span>                          <a name="kgp.packages.2.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xml</span>
<font color="teal">&lt;module 'xml' from 'C:\Python21\lib\xml\__init__.pyc'&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.packages.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#27491;&#20174;&#19968;&#20010;&#23884;&#22871;&#21253; (<code class="filename">xml.dom</code>)&#20013;&#23548;&#20837;&#19968;&#20010;&#27169;&#22359; (<code class="filename">minidom</code>)&#12290;&#32467;&#26524;&#23601;&#26159; <code class="filename">minidom</code> &#34987;&#23548;&#20837;&#21040;&#20102;&#20320; (&#31243;&#24207;) &#30340;<a class="link" href="#dialect.locals" title="8.5.&nbsp;locals &#21644; globals">&#21629;&#21517;&#31354;&#38388;</a>&#20013;&#20102;&#12290;&#35201;&#24341;&#29992; <code class="filename">minidom</code> &#27169;&#22359;&#20013;&#30340;&#31867; (&#27604;&#22914; <code class="classname">Element</code>)&#65292;&#20320;&#24517;&#39035;&#22312;&#23427;&#20204;&#30340;&#31867;&#21517;&#21069;&#38754;&#21152;&#19978;&#27169;&#22359;&#21517;&#12290;</dd><dt><a href="#kgp.packages.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#27491;&#20174;&#19968;&#20010;&#26469;&#33258;&#23884;&#22871;&#21253; (<code class="filename">xml.dom</code>) &#30340;&#27169;&#22359; (<code class="filename">minidom</code>) &#20013;&#23548;&#20837;&#19968;&#20010;&#31867; (<code class="classname">Element</code>)&#12290;&#32467;&#26524;&#23601;&#26159; <code class="classname">Element</code> &#30452;&#25509;&#23548;&#20837;&#21040;&#20102;&#20320; (&#31243;&#24207;) &#30340;&#21629;&#21517;&#31354;&#38388;&#20013;&#12290;&#27880;&#24847;&#65292;&#36825;&#26679;&#20570;&#24182;&#19981;&#20250;&#24178;&#25200;&#20197;&#21069;&#30340;&#23548;&#20837;&#65307;&#29616;&#22312; <code class="classname">Element</code> &#31867;&#21487;&#20197;&#29992;&#20004;&#31181;&#26041;&#24335;&#24341;&#29992;&#20102; (&#20294;&#20854;&#23454;&#26159;&#21516;&#19968;&#20010;&#31867;)&#12290;</dd><dt><a href="#kgp.packages.2.3">circled_3_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#27491;&#22312;&#23548;&#20837; <code class="filename">dom</code> &#21253; (<code class="filename">xml</code> &#30340;&#19968;&#20010;&#23884;&#22871;&#21253;)&#65292;&#24182;&#23558;&#20854;&#20316;&#20026;&#19968;&#20010;&#27169;&#22359;&#12290;&#19968;&#20010;&#21253;&#30340;&#20219;&#20309;&#23618;&#27425;&#37117;&#21487;&#20197;&#35270;&#20026;&#19968;&#20010;&#27169;&#22359;&#65292;&#19968;&#20250;&#20799;&#23601;&#20250;&#30475;&#21040;&#12290;&#23427;&#29978;&#33267;&#21487;&#20197;&#25317;&#26377;&#33258;&#24049;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#65292;&#23601;&#20687;&#20320;&#22312;&#21069;&#38754;&#30475;&#21040;&#36807;&#30340;&#27169;&#22359;&#12290;</dd><dt><a href="#kgp.packages.2.4">circled_4_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#27491;&#22312;&#23558;&#26681;&#23618;&#27425;&#30340; <code class="filename">xml</code> &#21253;&#20316;&#20026;&#19968;&#20010;&#27169;&#22359;&#23548;&#20837;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#22914;&#20309;&#25165;&#33021;&#23548;&#20837;&#19968;&#20010;&#21253; (&#23427;&#19981;&#36807;&#26159;&#30913;&#30424;&#19978;&#30340;&#19968;&#20010;&#30446;&#24405;) &#24182;&#20351;&#20854;&#25104;&#20026;&#19968;&#20010;&#27169;&#22359; (&#23427;&#24635;&#26159;&#22312;&#30913;&#30424;&#19978;&#30340;&#19968;&#20010;&#25991;&#20214;) &#21602;&#65311;&#31572;&#26696;&#23601;&#26159;&#31070;&#22855;&#30340; <code class="filename">__init__.py</code> &#25991;&#20214;&#12290;&#20320;&#26126;&#30333;&#20102;&#21543;&#65292;&#21253;&#19981;&#21482;&#26159;&#30446;&#24405;&#65292;&#23427;&#20204;&#26159;&#21253;&#21547;&#19968;&#20010;&#29305;&#27530;&#25991;&#20214; <code class="filename">__init__.py</code> &#30340;&#30446;&#24405;&#12290;&#36825;&#20010;&#25991;&#20214;&#23450;&#20041;&#20102;&#21253;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#12290;&#20363;&#22914;&#65292;<code class="filename">xml.dom</code> &#21253;&#21547;&#20102; <code class="classname">Node</code> &#31867;&#65292;&#23427;&#22312;<code class="filename">xml/dom/__init__.py</code>&#20013;&#26377;&#25152;&#23450;&#20041;&#12290;&#24403;&#20320;&#23558;&#19968;&#20010;&#21253;&#20316;&#20026;&#27169;&#22359;&#23548;&#20837; (&#27604;&#22914;&#20174; <code class="filename">xml</code> &#23548;&#20837; <code class="filename">dom</code>) &#30340;&#26102;&#20505;&#65292;&#23454;&#38469;&#19978;&#23548;&#20837;&#20102;&#23427;&#30340; <code class="filename">__init__.py</code> &#25991;&#20214;&#12290;</p><div class="note"><blockquote><b class="title"><a name="d0e23356">&#27880;&#24847;: What makes a package</a></b><br>&#19968;&#20010;&#21253;&#26159;&#19968;&#20010;&#20854;&#20013;&#24102;&#26377;&#29305;&#27530;&#25991;&#20214; <code class="filename">__init__.py</code> &#30340;&#30446;&#24405;&#12290;<code class="filename">__init__.py</code> &#25991;&#20214;&#23450;&#20041;&#20102;&#21253;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#12290;&#20854;&#23454;&#23427;&#21487;&#20197;&#20160;&#20040;&#20063;&#19981;&#23450;&#20041;&#65307;&#21487;&#20197;&#21482;&#26159;&#19968;&#20010;&#31354;&#25991;&#20214;&#65292;&#20294;&#26159;&#24517;&#39035;&#35201;&#23384;&#22312;&#12290;&#22914;&#26524; <code class="filename">__init__.py</code> &#19981;&#23384;&#22312;&#65292;&#36825;&#20010;&#30446;&#24405;&#23601;&#20165;&#20165;&#26159;&#19968;&#20010;&#30446;&#24405;&#65292;&#32780;&#19981;&#26159;&#19968;&#20010;&#21253;&#65292;&#23427;&#23601;&#19981;&#33021;&#34987;&#23548;&#20837;&#25110;&#32773;&#21253;&#21547;&#20854;&#23427;&#30340;&#27169;&#22359;&#21644;&#23884;&#22871;&#21253;&#12290;</blockquote></div><p>&#37027;&#20026;&#20160;&#20040;&#38750;&#24471;&#29992;&#21253;&#21602;&#65311;&#21999;&#65292;&#23427;&#20204;&#25552;&#20379;&#20102;&#22312;&#36923;&#36753;&#19978;&#23558;&#30456;&#20851;&#27169;&#22359;&#24402;&#20026;&#19968;&#32452;&#30340;&#26041;&#27861;&#12290;&#19981;&#20351;&#29992;&#20854;&#20013;&#24102;&#26377; <code class="filename">sax</code> &#21644; <code class="filename">dom</code> &#30340; <code class="filename">xml</code> &#21253;&#65292;&#20316;&#32773;&#20063;&#21487;&#20197;&#36873;&#25321;&#23558;&#25152;&#26377;&#30340; <code class="filename">sax</code> &#21151;&#33021;&#25918;&#20837; <code class="filename">xmlsax.py</code>&#20013;&#65292;&#24182;&#23558;&#25152;&#26377;&#30340; <code class="filename">dom</code> &#21151;&#33021;&#25918;&#20837; <code class="filename">xmldom.py</code>&#20013;&#65292;&#25110;&#32773;&#24178;&#33030;&#23558;&#25152;&#26377;&#19996;&#35199;&#25918;&#20837;&#21333;&#20010;&#27169;&#22359;&#20013;&#12290;&#20294;&#26159;&#36825;&#26679;&#21487;&#33021;&#19981;&#23454;&#29992; (&#20889;&#21040;&#36825;&#20799;&#26102;&#65292;<acronym class="acronym">XML</acronym> &#21253;&#24050;&#32463;&#36229;&#36807;&#20102; 3000 &#34892;&#20195;&#30721;) &#24182;&#19988;&#24456;&#38590;&#31649;&#29702; (&#29420;&#31435;&#30340;&#28304;&#25991;&#20214;&#24847;&#21619;&#30528;&#22810;&#20010;&#20154;&#21487;&#20197;&#21516;&#26102;&#22312;&#19981;&#21516;&#30340;&#22320;&#26041;&#36827;&#34892;&#24320;&#21457;)&#12290;</p><p>&#22914;&#26524;&#20320;&#21457;&#29616;&#33258;&#24049;&#27491;&#22312;&#29992; <span class="application">Python</span> &#32534;&#20889;&#19968;&#20010;&#22823;&#22411;&#30340;&#23376;&#31995;&#32479; (&#25110;&#32773;&#65292;&#24456;&#26377;&#21487;&#33021;&#65292;&#24403;&#20320;&#24847;&#35782;&#21040;&#20320;&#30340;&#23567;&#22411;&#23376;&#31995;&#32479;&#24050;&#32463;&#25104;&#38271;&#20026;&#19968;&#20010;&#22823;&#22411;&#23376;&#31995;&#32479;&#26102;)&#65292;&#20320;&#24212;&#35813;&#33457;&#36153;&#20123;&#26102;&#38388;&#35774;&#35745;&#19968;&#20010;&#22909;&#30340;&#21253;&#26550;&#26500;&#12290;&#23427;&#26159; <span class="application">Python</span> &#25152;&#25797;&#38271;&#30340;&#20107;&#24773;&#20043;&#19968;&#65292;&#25152;&#20197;&#24212;&#35813;&#22909;&#22909;&#21033;&#29992;&#23427;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.parse"></a>9.3.&nbsp;<acronym class="acronym">XML</acronym> &#35299;&#26512;</h2></div></div></div><div class="abstract"><p>&#27491;&#22914;&#25105;&#35828;&#30340;&#65292;&#23454;&#38469;&#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26159;&#38750;&#24120;&#31616;&#21333;&#30340;&#65306;&#21482;&#35201;&#19968;&#34892;&#20195;&#30721;&#12290;&#20174;&#36825;&#37324;&#20986;&#21457;&#21040;&#21738;&#20799;&#21435;&#23601;&#26159;&#20320;&#33258;&#24049;&#30340;&#20107;&#20102;&#12290;</p></div><div class="example"><a name="d0e23416"></a><p class="title"><b>&#20363;&nbsp;9.8.&nbsp;&#36733;&#20837;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723; (&#36825;&#27425;&#26159;&#30495;&#30340;)</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom import minidom</span>                                          <a name="kgp.parse.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse('~/diveintopython/common/py/kgp/binary.xml')</span>  <a name="kgp.parse.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc</span>                                                               <a name="kgp.parse.1.3"></a>circled_3_delcric
<font color="teal">&lt;xml.dom.minidom.Document instance at 010BE87C&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print xmldoc.toxml()</span>                                                 <a name="kgp.parse.1.4"></a>circled_4_delcric
<font color="teal">&lt;?xml version="1.0" ?&gt;
&lt;grammar&gt;
&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;
&lt;ref id="byte"&gt;
  &lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;
&lt;/ref&gt;
&lt;/grammar&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.parse.1.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#22312;<a class="link" href="#kgp.packages" title="9.2.&nbsp;&#21253;">&#19978;&#19968;&#33410;</a>&#30475;&#21040;&#30340;&#65292;&#35813;&#35821;&#21477;&#20174; <code class="filename">xml.dom</code> &#21253;&#20013;&#23548;&#20837; <code class="filename">minidom</code> &#27169;&#22359;&#12290;</dd><dt><a href="#kgp.parse.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#23601;&#26159;&#36827;&#34892;&#25152;&#26377;&#24037;&#20316;&#30340;&#19968;&#34892;&#20195;&#30721;&#65306;<code class="function">minidom.parse</code> &#25509;&#25910;&#19968;&#20010;&#21442;&#25968;&#24182;&#36820;&#22238; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#35299;&#26512;&#21518;&#30340;&#34920;&#31034;&#24418;&#24335;&#12290;&#36825;&#20010;&#21442;&#25968;&#21487;&#20197;&#26159;&#24456;&#22810;&#19996;&#35199;&#65307;&#22312;&#26412;&#20363;&#20013;&#65292;&#23427;&#21482;&#26159;&#25105;&#26412;&#22320;&#30913;&#30424;&#19978;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#30340;&#25991;&#20214;&#21517;&#12290;(&#20320;&#38656;&#35201;&#23558;&#36335;&#24452;&#25913;&#20026;&#25351;&#21521;&#19979;&#36733;&#30340;&#20363;&#23376;&#25152;&#22312;&#30340;&#30446;&#24405;&#12290;) &#20294;&#26159;&#20320;&#20063;&#21487;&#20197;&#20256;&#20837;&#19968;&#20010;<a class="link" href="#fileinfo.files" title="6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;">&#25991;&#20214;&#23545;&#35937;</a>&#65292;&#25110;&#29978;&#33267;&#26159;&#19968;&#20010;<a class="link" href="#dialect.extract.urllib" title="&#20363;&nbsp;8.5.&nbsp;urllib &#20171;&#32461;">&#31867;&#25991;&#20214;&#23545;&#35937;</a>&#12290;&#36825;&#26679;&#20320;&#23601;&#21487;&#20197;&#22312;&#26412;&#31456;&#21518;&#38754;&#22909;&#22909;&#21033;&#29992;&#36825;&#19968;&#28789;&#27963;&#24615;&#20102;&#12290;</dd><dt><a href="#kgp.parse.1.3">circled_3_delcric</a> </dt><dd>&#20174; <code class="function">minidom.parse</code> &#36820;&#22238;&#30340;&#23545;&#35937;&#26159;&#19968;&#20010; <code class="classname">Document</code> &#23545;&#35937;&#65292;&#23427;&#26159; <code class="classname">Node</code> &#31867;&#30340;&#19968;&#20010;&#23376;&#23545;&#35937;&#12290;&#36825;&#20010; <code class="classname">Document</code> &#23545;&#35937;&#26159;&#32852;&#38145;&#30340; <span class="application">Python</span> &#23545;&#35937;&#30340;&#19968;&#20010;&#22797;&#26434;&#26641;&#29366;&#32467;&#26500;&#30340;&#26681;&#23618;&#27425;&#65292;&#36825;&#20123; <span class="application">Python</span> &#23545;&#35937;&#23436;&#25972;&#34920;&#31034;&#20102;&#20256;&#32473; <code class="function">minidom.parse</code> &#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#12290;</dd><dt><a href="#kgp.parse.1.4">circled_4_delcric</a> </dt><dd><code class="function">toxml</code> &#26159; <code class="classname">Node</code> &#31867;&#30340;&#19968;&#20010;&#26041;&#27861; (&#22240;&#27492;&#21487;&#20197;&#22312;&#20174; <code class="function">minidom.parse</code> &#20013;&#24471;&#21040;&#30340; <code class="classname">Document</code> &#23545;&#35937;&#19978;&#20351;&#29992;)&#12290;<code class="function">toxml</code> &#25171;&#21360;&#20986;&#20102; <code class="classname">Node</code> &#34920;&#31034;&#30340; <acronym class="acronym">XML</acronym>&#12290;&#23545;&#20110; <code class="classname">Document</code> &#33410;&#28857;&#65292;&#36825;&#26679;&#23601;&#20250;&#25171;&#21360;&#20986;&#25972;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#20869;&#23384;&#20013;&#24050;&#32463;&#26377;&#20102;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20102;&#65292;&#20320;&#21487;&#20197;&#24320;&#22987;&#36941;&#21382;&#23427;&#20102;&#12290;</p><div class="example"><a name="kgp.parse.gettingchildnodes.example"></a><p class="title"><b>&#20363;&nbsp;9.9.&nbsp;&#33719;&#21462;&#23376;&#33410;&#28857;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc.childNodes</span>    <a name="kgp.parse.2.1"></a>circled_1_delcric
<font color="teal">[&lt;DOM Element: grammar at 17538908&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc.childNodes[0]</span> <a name="kgp.parse.2.2"></a>circled_2_delcric
<font color="teal">&lt;DOM Element: grammar at 17538908&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc.firstChild</span>    <a name="kgp.parse.2.3"></a>circled_3_delcric
<font color="teal">&lt;DOM Element: grammar at 17538908&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.parse.2.1">circled_1_delcric</a> </dt><dd>&#27599;&#20010; <code class="classname">Node</code> &#37117;&#26377;&#19968;&#20010; <code class="function">childNodes</code> &#23646;&#24615;&#65292;&#23427;&#26159;&#19968;&#20010; <code class="classname">Node</code> &#23545;&#35937;&#30340;&#21015;&#34920;&#12290;&#19968;&#20010; <code class="classname">Document</code> &#21482;&#26377;&#19968;&#20010;&#23376;&#33410;&#28857;&#65292;&#21363; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#30340;&#26681;&#20803;&#32032; (&#22312;&#26412;&#20363;&#20013;&#65292;&#26159; <code class="sgmltag-element">grammar</code> &#20803;&#32032;)&#12290;</dd><dt><a href="#kgp.parse.2.2">circled_2_delcric</a> </dt><dd>&#20026;&#20102;&#24471;&#21040;&#31532;&#19968;&#20010; (&#22312;&#26412;&#20363;&#20013;&#65292;&#21482;&#26377;&#19968;&#20010;) &#23376;&#33410;&#28857;&#65292;&#21482;&#35201;&#20351;&#29992;&#27491;&#35268;&#30340;&#21015;&#34920;&#35821;&#27861;&#12290;&#22238;&#24819;&#19968;&#19979;&#65292;&#20854;&#23454;&#36825;&#37324;&#27809;&#26377;&#21457;&#29983;&#20160;&#20040;&#29305;&#21035;&#30340;&#65307;&#36825;&#21482;&#26159;&#19968;&#20010;&#30001;&#27491;&#35268; <span class="application">Python</span> &#23545;&#35937;&#26500;&#25104;&#30340;&#27491;&#35268; <span class="application">Python</span> &#21015;&#34920;&#12290;</dd><dt><a href="#kgp.parse.2.3">circled_3_delcric</a> </dt><dd>&#37492;&#20110;&#33719;&#21462;&#26576;&#20010;&#33410;&#28857;&#30340;&#31532;&#19968;&#20010;&#23376;&#33410;&#28857;&#26159;&#26377;&#29992;&#32780;&#19988;&#24120;&#35265;&#30340;&#34892;&#20026;&#65292;&#25152;&#20197; <code class="classname">Node</code> &#31867;&#26377;&#19968;&#20010; <code class="function">firstChild</code> &#23646;&#24615;&#65292;&#23427;&#21644;<code class="literal">childNodes[0]</code>&#20855;&#26377;&#30456;&#21516;&#30340;&#35821;&#20041;&#12290;(&#36824;&#26377;&#19968;&#20010; <code class="function">lastChild</code> &#23646;&#24615;&#65292;&#23427;&#21644;<code class="literal">childNodes[-1]</code>&#20855;&#26377;&#30456;&#21516;&#30340;&#35821;&#20041;&#12290;)</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e23632"></a><p class="title"><b>&#20363;&nbsp;9.10.&nbsp;<code class="function">toxml</code> &#29992;&#20110;&#20219;&#20309;&#33410;&#28857;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">grammarNode = xmldoc.firstChild</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print grammarNode.toxml()</span> <a name="kgp.parse.3.1"></a>circled_1_delcric
<font color="teal">&lt;grammar&gt;
&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;
&lt;ref id="byte"&gt;
  &lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;
&lt;/ref&gt;
&lt;/grammar&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.parse.3.1">circled_1_delcric</a> </dt><dd>&#30001;&#20110; <code class="function">toxml</code> &#26041;&#27861;&#26159;&#23450;&#20041;&#22312; <code class="classname">Node</code> &#31867;&#20013;&#30340;&#65292;&#25152;&#20197;&#23545;&#20219;&#20309; <acronym class="acronym">XML</acronym> &#33410;&#28857;&#37117;&#26159;&#21487;&#29992;&#30340;&#65292;&#19981;&#20165;&#20165;&#26159; <code class="classname">Document</code> &#20803;&#32032;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="kgp.parse.childnodescanbetext.example"></a><p class="title"><b>&#20363;&nbsp;9.11.&nbsp;&#23376;&#33410;&#28857;&#21487;&#20197;&#26159;&#25991;&#26412;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">grammarNode.childNodes</span>                  <a name="kgp.parse.4.1"></a>circled_1_delcric
<font color="teal">[&lt;DOM Text node "\n"&gt;, &lt;DOM Element: ref at 17533332&gt;, \
&lt;DOM Text node "\n"&gt;, &lt;DOM Element: ref at 17549660&gt;, &lt;DOM Text node "\n"&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print grammarNode.firstChild.toxml()</span>    <a name="kgp.parse.4.2"></a>circled_2_delcric
<font color="teal">

</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print grammarNode.childNodes[1].toxml()</span> <a name="kgp.parse.4.3"></a>circled_3_delcric
<font color="teal">&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print grammarNode.childNodes[3].toxml()</span> <a name="kgp.parse.4.4"></a>circled_4_delcric
<font color="teal">&lt;ref id="byte"&gt;
  &lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;
&lt;/ref&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print grammarNode.lastChild.toxml()</span>     <a name="kgp.parse.4.5"></a>circled_5_delcric
<font color="teal">

</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.parse.4.1">circled_1_delcric</a> </dt><dd>&#26597;&#30475; <code class="filename">binary.xml</code> &#20013;&#30340; <acronym class="acronym">XML</acronym> &#65292;&#20320;&#21487;&#33021;&#20250;&#35748;&#20026; <code class="sgmltag-element">grammar</code> &#21482;&#26377;&#20004;&#20010;&#23376;&#33410;&#28857;&#65292;&#21363;&#20004;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#12290;&#20294;&#26159;&#20320;&#24536;&#35760;&#20102;&#19968;&#20123;&#19996;&#35199;&#65306;&#30828;&#22238;&#36710;&#65281;&#22312;<code class="literal">'&lt;grammar&gt;'</code>&#20043;&#21518;&#65292;&#31532;&#19968;&#20010;<code class="literal">'&lt;ref&gt;'</code>&#20043;&#21069;&#26159;&#19968;&#20010;&#30828;&#22238;&#36710;&#65292;&#24182;&#19988;&#36825;&#20010;&#25991;&#26412;&#31639;&#20316; <code class="sgmltag-element">grammar</code> &#20803;&#32032;&#30340;&#19968;&#20010;&#23376;&#33410;&#28857;&#12290;&#31867;&#20284;&#22320;&#65292;&#22312;&#27599;&#20010;<code class="literal">'&lt;/ref&gt;'</code>&#20043;&#21518;&#37117;&#26377;&#19968;&#20010;&#30828;&#22238;&#36710;&#65307;&#23427;&#20204;&#37117;&#34987;&#24403;&#20316;&#23376;&#33410;&#28857;&#12290;&#25152;&#20197;<code class="literal">grammar.childNodes</code>&#23454;&#38469;&#19978;&#26159;&#19968;&#20010;&#26377;5&#20010;&#23545;&#35937;&#30340;&#21015;&#34920;&#65306;3&#20010; <code class="classname">Text</code> &#23545;&#35937;&#21644;&#20004;&#20010; <code class="classname">Element</code> &#23545;&#35937;&#12290;</dd><dt><a href="#kgp.parse.4.2">circled_2_delcric</a> </dt><dd>&#31532;&#19968;&#20010;&#23376;&#33410;&#28857;&#26159;&#19968;&#20010; <code class="classname">Text</code> &#23545;&#35937;&#65292;&#23427;&#34920;&#31034;&#22312;<code class="literal">'&lt;grammar&gt;'</code>&#26631;&#35760;&#20043;&#21518;&#12289;&#31532;&#19968;&#20010;<code class="literal">'&lt;ref&gt;'</code>&#26631;&#35760;&#20043;&#21518;&#30340;&#30828;&#22238;&#36710;&#12290;</dd><dt><a href="#kgp.parse.4.3">circled_3_delcric</a> </dt><dd>&#31532;&#20108;&#20010;&#23376;&#33410;&#28857;&#26159;&#19968;&#20010; <code class="classname">Element</code> &#23545;&#35937;&#65292;&#34920;&#31034;&#20102;&#31532;&#19968;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#12290;</dd><dt><a href="#kgp.parse.4.4">circled_4_delcric</a> </dt><dd>&#31532;&#22235;&#20010;&#23376;&#33410;&#28857;&#26159;&#19968;&#20010; <code class="classname">Element</code> &#23545;&#35937;&#65292;&#34920;&#31034;&#20102;&#31532;&#20108;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#12290;</dd><dt><a href="#kgp.parse.4.5">circled_5_delcric</a> </dt><dd>&#26368;&#21518;&#19968;&#20010;&#23376;&#33410;&#28857;&#26159;&#19968;&#20010; <code class="classname">Text</code> &#23545;&#35937;&#65292;&#34920;&#31034;&#20102;&#22312;<code class="literal">'&lt;/ref&gt;'</code>&#32467;&#26463;&#26631;&#35760;&#20043;&#21518;&#12289;<code class="literal">'&lt;/grammar&gt;'</code> &#32467;&#26463;&#26631;&#35760;&#20043;&#21069;&#30340;&#30828;&#22238;&#36710;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e23802"></a><p class="title"><b>&#20363;&nbsp;9.12.&nbsp;&#25226;&#25991;&#26412;&#25366;&#20986;&#26469;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">grammarNode</span>
<font color="teal">&lt;DOM Element: grammar at 19167148&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">refNode = grammarNode.childNodes[1]</span> <a name="kgp.parse.5.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">refNode</span>
<font color="teal">&lt;DOM Element: ref at 17987740&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">refNode.childNodes</span>                  <a name="kgp.parse.5.2"></a>circled_2_delcric
<font color="teal">[&lt;DOM Text node "\n"&gt;, &lt;DOM Text node "  "&gt;, &lt;DOM Element: p at 19315844&gt;, \
&lt;DOM Text node "\n"&gt;, &lt;DOM Text node "  "&gt;, \
&lt;DOM Element: p at 19462036&gt;, &lt;DOM Text node "\n"&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pNode = refNode.childNodes[2]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pNode</span>
<font color="teal">&lt;DOM Element: p at 19315844&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print pNode.toxml()</span>                 <a name="kgp.parse.5.3"></a>circled_3_delcric
<font color="teal">&lt;p&gt;0&lt;/p&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pNode.firstChild</span>                    <a name="kgp.parse.5.4"></a>circled_4_delcric
<font color="teal">&lt;DOM Text node "0"&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pNode.firstChild.data</span>               <a name="kgp.parse.5.5"></a>circled_5_delcric
<font color="teal">u'0'</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.parse.5.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312;&#21069;&#38754;&#30340;&#20363;&#23376;&#20013;&#30475;&#21040;&#30340;&#65292;&#31532;&#19968;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#26159; <code class="literal">grammarNode.childNodes[1]</code>&#65292;&#22240;&#20026; childNodes[0] &#26159;&#19968;&#20010;&#20195;&#34920;&#30828;&#22238;&#36710;&#30340; <code class="classname">Text</code> &#33410;&#28857;&#12290;</dd><dt><a href="#kgp.parse.5.2">circled_2_delcric</a> </dt><dd><code class="sgmltag-element">ref</code> &#20803;&#32032;&#26377;&#23427;&#33258;&#24049;&#30340;&#23376;&#33410;&#28857;&#38598;&#21512;&#65292;&#19968;&#20010;&#34920;&#31034;&#30828;&#22238;&#36710;&#65292;&#21478;&#19968;&#20010;&#34920;&#31034;&#31354;&#26684;&#65292;&#19968;&#20010;&#34920;&#31034; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#35832;&#22914;&#27492;&#31867;&#12290;</dd><dt><a href="#kgp.parse.5.3">circled_3_delcric</a> </dt><dd>&#20320;&#29978;&#33267;&#21487;&#20197;&#22312;&#36825;&#37324;&#20351;&#29992; <code class="function">toxml</code> &#26041;&#27861;&#65292;&#23613;&#31649;&#23427;&#28145;&#28145;&#23884;&#22871;&#22312;&#25991;&#26723;&#20013;&#12290;</dd><dt><a href="#kgp.parse.5.4">circled_4_delcric</a> </dt><dd><code class="sgmltag-element">p</code> &#20803;&#32032;&#21482;&#26377;&#19968;&#20010;&#23376;&#33410;&#28857; (&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#26080;&#27861;&#30475;&#20986;&#65292;&#20294;&#26159;&#22914;&#26524;&#20320;&#19981;&#20449;&#65292;&#21487;&#20197;&#30475;&#30475;<code class="literal">pNode.childNodes</code>)&#65292;&#32780;&#19988;&#23427;&#26159;&#34920;&#31034;&#21333;&#23383;&#31526;<code class="literal">'0'</code>&#30340;&#19968;&#20010; <code class="classname">Text</code> &#33410;&#28857;&#12290;</dd><dt><a href="#kgp.parse.5.5">circled_5_delcric</a> </dt><dd><code class="classname">Text</code> &#33410;&#28857;&#30340; <code class="literal">.data</code> &#23646;&#24615;&#21487;&#20197;&#21521;&#20320;&#25552;&#20379;&#25991;&#26412;&#33410;&#28857;&#30495;&#27491;&#20195;&#34920;&#30340;&#23383;&#31526;&#20018;&#12290;&#20294;&#26159;&#23383;&#31526;&#20018;&#21069;&#38754;&#30340;<code class="literal">'u'</code>&#26159;&#20160;&#20040;&#24847;&#24605;&#21602;&#65311;&#31572;&#26696;&#23558;&#33258;&#24049;&#19987;&#38376;&#26377;&#19968;&#37096;&#20998;&#26469;&#35770;&#36848;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.unicode"></a>9.4.&nbsp;Unicode</h2></div></div></div><div class="abstract"><p>Unicode &#26159;&#19968;&#20010;&#31995;&#32479;&#65292;&#29992;&#26469;&#34920;&#31034;&#19990;&#30028;&#19978;&#25152;&#26377;&#19981;&#21516;&#35821;&#35328;&#30340;&#23383;&#31526;&#12290;&#24403; <span class="application">Python</span> &#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#25152;&#26377;&#30340;&#25968;&#25454;&#37117;&#26159;&#20197;unicode&#30340;&#24418;&#24335;&#20445;&#23384;&#22312;&#20869;&#23384;&#20013;&#30340;&#12290;</p></div><p>&#19968;&#20250;&#20799;&#20320;&#23601;&#20250;&#20102;&#35299;&#65292;&#20294;&#39318;&#20808;&#65292;&#20808;&#30475;&#19968;&#20123;&#32972;&#26223;&#30693;&#35782;&#12290;</p><p><b>&#21382;&#21490;&#27880;&#35299;.&nbsp;</b>&#22312; unicode &#20043;&#21069;&#65292;&#23545;&#20110;&#27599;&#19968;&#31181;&#35821;&#35328;&#37117;&#23384;&#22312;&#29420;&#31435;&#30340;&#23383;&#31526;&#32534;&#30721;&#31995;&#32479;&#65292;&#27599;&#20010;&#31995;&#32479;&#37117;&#20351;&#29992;&#30456;&#21516;&#30340;&#25968;&#23383;(0-255)&#26469;&#34920;&#31034;&#36825;&#31181;&#35821;&#35328;&#30340;&#23383;&#31526;&#12290;&#19968;&#20123;&#35821;&#35328; (&#20687;&#20420;&#35821;) &#23545;&#20110;&#22914;&#20309;&#34920;&#31034;&#30456;&#21516;&#30340;&#23383;&#31526;&#36824;&#26377;&#20960;&#31181;&#26377;&#20914;&#31361;&#30340;&#26631;&#20934;&#65307;&#21478;&#19968;&#20123;&#35821;&#35328; (&#20687;&#26085;&#35821;) &#25317;&#26377;&#22826;&#22810;&#30340;&#23383;&#31526;&#65292;&#38656;&#35201;&#22810;&#20010;&#23383;&#31526;&#38598;&#12290;&#22312;&#31995;&#32479;&#20043;&#38388;&#36827;&#34892;&#25991;&#26723;&#20132;&#27969;&#26159;&#22256;&#38590;&#30340;&#65292;&#22240;&#20026;&#23545;&#20110;&#19968;&#21488;&#35745;&#31639;&#26426;&#26469;&#35828;&#65292;&#27809;&#26377;&#26041;&#27861;&#21487;&#20197;&#35782;&#21035;&#20986;&#25991;&#26723;&#30340;&#20316;&#32773;&#20351;&#29992;&#20102;&#21738;&#31181;&#32534;&#30721;&#27169;&#24335;&#65307;&#35745;&#31639;&#26426;&#30475;&#21040;&#30340;&#21482;&#26159;&#25968;&#23383;&#65292;&#24182;&#19988;&#36825;&#20123;&#25968;&#23383;&#21487;&#20197;&#34920;&#31034;&#19981;&#21516;&#30340;&#19996;&#35199;&#12290;&#25509;&#30528;&#32771;&#34385;&#21040;&#35797;&#22270;&#23558;&#36825;&#20123; (&#37319;&#29992;&#19981;&#21516;&#32534;&#30721;&#30340;) &#25991;&#26723;&#23384;&#25918;&#21040;&#21516;&#19968;&#20010;&#22320;&#26041; (&#27604;&#22914;&#22312;&#21516;&#19968;&#20010;&#25968;&#25454;&#24211;&#34920;&#20013;)&#65307;&#20320;&#38656;&#35201;&#22312;&#27599;&#27573;&#25991;&#26412;&#30340;&#26049;&#36793;&#20445;&#23384;&#23383;&#31526;&#30340;&#32534;&#30721;&#65292;&#24182;&#19988;&#30830;&#20445;&#22312;&#20256;&#36882;&#25991;&#26412;&#30340;&#21516;&#26102;&#23558;&#32534;&#30721;&#20063;&#36827;&#34892;&#20256;&#36882;&#12290;&#25509;&#30528;&#32771;&#34385;&#22810;&#35821;&#35328;&#25991;&#26723;&#65292;&#21363;&#22312;&#21516;&#19968;&#25991;&#26723;&#20013;&#20351;&#29992;&#20102;&#19981;&#21516;&#35821;&#35328;&#30340;&#23383;&#31526;&#12290;(&#27604;&#36739;&#26377;&#20195;&#34920;&#24615;&#30340;&#26159;&#20351;&#29992;&#36716;&#20041;&#31526;&#26469;&#36827;&#34892;&#27169;&#24335;&#20999;&#25442;&#65307;&#22103;&#65292;&#25105;&#20204;&#22788;&#20110;&#20420;&#35821; koi8-r &#27169;&#24335;&#65292;&#25152;&#20197;&#23383;&#31526; 241 &#34920;&#31034;&#36825;&#20010;&#65307;&#22103;&#65292;&#29616;&#22312;&#25105;&#20204;&#22788;&#20110; Mac &#24076;&#33098;&#35821;&#27169;&#24335;&#65292;&#25152;&#20197;&#23383;&#31526; 241 &#34920;&#31034;&#20854;&#23427;&#20160;&#20040;&#12290;&#31561;&#31561;&#12290;) &#36825;&#20123;&#23601;&#26159; unicode &#34987;&#35774;&#35745;&#20986;&#26469;&#35201;&#35299;&#20915;&#30340;&#38382;&#39064;&#12290;
</p><p>&#20026;&#20102;&#35299;&#20915;&#36825;&#20123;&#38382;&#39064;&#65292;unicode &#29992;&#19968;&#20010; 2 &#23383;&#33410;&#25968;&#23383;&#34920;&#31034;&#27599;&#20010;&#23383;&#31526;&#65292;&#20174; 0 &#21040; 65535&#12290;<sup>[<a name="d0e23957" href="#ftn.d0e23957" class="footnote">8</a>]</sup> &#27599;&#20010; 2 &#23383;&#33410;&#25968;&#23383;&#34920;&#31034;&#33267;&#23569;&#22312;&#19968;&#31181;&#19990;&#30028;&#35821;&#35328;&#20013;&#20351;&#29992;&#30340;&#19968;&#20010;&#21807;&#19968;&#23383;&#31526;&#12290;(&#22312;&#22810;&#31181;&#35821;&#35328;&#20013;&#37117;&#20351;&#29992;&#30340;&#23383;&#31526;&#20855;&#26377;&#30456;&#21516;&#30340;&#25968;&#23383;&#30721;&#12290;) &#36825;&#26679;&#23601;&#30830;&#20445;&#27599;&#20010;&#23383;&#31526;&#19968;&#20010;&#25968;&#23383;&#65292;&#24182;&#19988;&#27599;&#20010;&#25968;&#23383;&#19968;&#20010;&#23383;&#31526;&#12290;Unicode &#25968;&#25454;&#27704;&#36828;&#19981;&#20250;&#27169;&#26865;&#20004;&#21487;&#12290;</p><p>&#24403;&#28982;&#65292;&#20173;&#28982;&#36824;&#23384;&#22312;&#30528;&#25152;&#26377;&#37027;&#20123;&#36951;&#30041;&#30340;&#32534;&#30721;&#31995;&#32479;&#30340;&#24773;&#20917;&#12290;&#20363;&#22914;&#65292;7 &#20301; <acronym class="acronym">ASCII</acronym>&#65292;&#23427;&#21487;&#20197;&#23558;&#33521;&#25991;&#23383;&#31526;&#23384;&#35832;&#20026;&#20174; 0 &#21040; 127 &#30340;&#25968;&#20540;&#12290;(65 &#26159;&#22823;&#20889;&#23383;&#27597; "<span class="quote"><code class="literal">A</code></span>"&#65292;97 &#26159;&#23567;&#20889;&#23383;&#27597; "<span class="quote"><code class="literal">a</code></span>"&#65292;&#31561;&#31561;&#12290;) &#33521;&#35821;&#26377;&#30528;&#38750;&#24120;&#31616;&#21333;&#30340;&#23383;&#27597;&#34920;&#65292;&#25152;&#20197;&#23427;&#21487;&#20197;&#23436;&#20840;&#29992; 7 &#20301; <acronym class="acronym">ASCII</acronym> &#26469;&#34920;&#31034;&#12290;&#20687;&#27861;&#35821;&#12289;&#35199;&#29677;&#29273;&#35821;&#21644;&#24503;&#35821;&#20043;&#31867;&#30340;&#35199;&#27431;&#35821;&#35328;&#37117;&#20351;&#29992;&#21483;&#20570; ISO-8859-1 &#30340;&#32534;&#30721;&#31995;&#32479; (&#20063;&#21483;&#20570;"<span class="quote">latin-1</span>")&#65292;&#23427;&#20351;&#29992; 7 &#20301; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#34920;&#31034;&#20174; 0 &#21040; 127 &#30340;&#25968;&#23383;&#65292;&#20294;&#25509;&#30528;&#25193;&#23637;&#21040;&#20102; 128-255 &#30340;&#33539;&#22260;&#26469;&#34920;&#31034;&#20687; n &#19978;&#24102;&#26377;&#19968;&#20010;&#27874;&#28010;&#32447;(241)&#65292;&#21644; u &#19978;&#24102;&#26377;&#20004;&#20010;&#28857;(252)&#30340;&#23383;&#31526;&#12290;Unicode &#22312; 0 &#21040; 127 &#19978;&#20351;&#29992;&#20102;&#21516; 7 &#20301; <acronym class="acronym">ASCII</acronym> &#30721;&#19968;&#26679;&#30340;&#23383;&#31526;&#34920;&#65292;&#22312; 128 &#21040; 255&#19978;&#21516; ISO-8859-1 &#19968;&#26679;&#65292;&#25509;&#30528;&#20351;&#29992;&#21097;&#20313;&#30340;&#25968;&#23383;&#65292;256 &#21040; 65535&#65292;&#25193;&#23637;&#21040;&#34920;&#31034;&#20854;&#23427;&#35821;&#35328;&#30340;&#23383;&#31526;&#12290;</p><p>&#22312;&#22788;&#29702; unicode &#25968;&#25454;&#26102;&#65292;&#22312;&#26576;&#20123;&#22320;&#26041;&#20320;&#21487;&#33021;&#38656;&#35201;&#23558;&#25968;&#25454;&#36716;&#25442;&#22238;&#36825;&#20123;&#36951;&#30041;&#32534;&#30721;&#31995;&#32479;&#20043;&#19968;&#12290;&#20363;&#22914;&#65292;&#20026;&#20102;&#21516;&#20854;&#23427;&#19968;&#20123;&#35745;&#31639;&#26426;&#31995;&#32479;&#38598;&#25104;&#65292;&#36825;&#20123;&#31995;&#32479;&#26399;&#26395;&#23427;&#30340;&#25968;&#25454;&#20351;&#29992;&#19968;&#31181;&#29305;&#23450;&#30340;&#21333;&#23383;&#33410;&#32534;&#30721;&#27169;&#24335;&#65292;&#25110;&#23558;&#25968;&#25454;&#25171;&#21360;&#36755;&#20986;&#21040;&#19968;&#20010;&#19981;&#35782;&#21035; unicode &#30340;&#32456;&#31471;&#25110;&#25171;&#21360;&#26426;&#12290;&#25110;&#23558;&#25968;&#25454;&#20445;&#23384;&#21040;&#19968;&#20010;&#26126;&#30830;&#25351;&#23450;&#32534;&#30721;&#27169;&#24335;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#12290;</p><p>&#22312;&#20102;&#35299;&#36825;&#20010;&#27880;&#35299;&#20043;&#21518;&#65292;&#35753;&#25105;&#20204;&#22238;&#21040; <span class="application">Python</span>&#19978;&#26469;&#12290;</p><p>&#20174; 2.0 &#29256;&#24320;&#22987;&#65292;<span class="application">Python</span> &#25972;&#20010;&#35821;&#35328;&#37117;&#24050;&#32463;&#25903;&#25345; unicode&#12290;<acronym class="acronym">XML</acronym> &#21253;&#20351;&#29992; unicode &#26469;&#20445;&#23384;&#25152;&#26377;&#35299;&#26512;&#20102;&#30340; <acronym class="acronym">XML</acronym> &#25968;&#25454;&#65292;&#32780;&#19988;&#20320;&#21487;&#20197;&#22312;&#20219;&#20309;&#22320;&#26041;&#20351;&#29992; unicode&#12290;</p><div class="example"><a name="d0e24013"></a><p class="title"><b>&#20363;&nbsp;9.13.&nbsp;unicode &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = u'Dive in'</span>            <a name="kgp.unicode.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s</span>
<font color="teal">u'Dive in'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print s</span>                   <a name="kgp.unicode.1.2"></a>circled_2_delcric
<font color="teal">Dive in</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.unicode.1.1">circled_1_delcric</a> </dt><dd>&#20026;&#20102;&#21019;&#24314;&#19968;&#20010; unicode &#23383;&#31526;&#20018;&#32780;&#19981;&#26159;&#36890;&#24120;&#30340; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#20018;&#65292;&#35201;&#22312;&#23383;&#31526;&#20018;&#21069;&#38754;&#21152;&#19978;&#23383;&#27597; "<span class="quote"><code class="literal">u</code></span>"&#12290;&#27880;&#24847;&#36825;&#20010;&#29305;&#27530;&#30340;&#23383;&#31526;&#20018;&#27809;&#26377;&#20219;&#20309;&#38750; <acronym class="acronym">ASCII</acronym> &#30340;&#23383;&#31526;&#12290;&#36825;&#26679;&#24456;&#22909;&#65307;unicode &#26159; <acronym class="acronym">ASCII</acronym> &#30340;&#19968;&#20010;&#36229;&#38598; (&#19968;&#20010;&#38750;&#24120;&#22823;&#30340;&#36229;&#38598;)&#65292;&#25152;&#20197;&#20219;&#20309;&#27491;&#24120;&#30340; <acronym class="acronym">ASCII</acronym> &#37117;&#21487;&#20197;&#20197; unicode &#24418;&#24335;&#20445;&#23384;&#36215;&#26469;&#12290;</dd><dt><a href="#kgp.unicode.1.2">circled_2_delcric</a> </dt><dd>&#22312;&#25171;&#21360;&#23383;&#31526;&#20018;&#26102;&#65292;<span class="application">Python</span> &#35797;&#22270;&#23558;&#23383;&#31526;&#20018;&#36716;&#25442;&#20026;&#20320;&#30340;&#40664;&#35748;&#32534;&#30721;&#65292;&#36890;&#24120;&#26159; <acronym class="acronym">ASCII</acronym> &#12290;(&#36807;&#20250;&#20799;&#26377;&#26356;&#35814;&#32454;&#30340;&#35828;&#26126;&#12290;) &#22240;&#20026;&#32452;&#25104;&#36825;&#20010; unicode &#23383;&#31526;&#20018;&#30340;&#23383;&#31526;&#37117;&#26159; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#65292;&#25171;&#21360;&#32467;&#26524;&#19982;&#25171;&#21360;&#27491;&#24120;&#30340; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#20018;&#26159;&#19968;&#26679;&#30340;&#65307;&#36716;&#25442;&#26159;&#26080;&#32541;&#30340;&#65292;&#32780;&#19988;&#22914;&#26524;&#20320;&#27809;&#26377;&#27880;&#24847;&#21040; <code class="varname">s</code> &#26159;&#19968;&#20010; unicode &#23383;&#31526;&#20018;&#30340;&#35805;&#65292;&#20320;&#27704;&#36828;&#20063;&#19981;&#20250;&#27880;&#24847;&#21040;&#20004;&#32773;&#20043;&#38388;&#30340;&#24046;&#21035;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e24080"></a><p class="title"><b>&#20363;&nbsp;9.14.&nbsp;&#23384;&#20648;&#38750; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = u'La Pe\xf1a'</span>         <a name="kgp.unicode.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print s</span>                   <a name="kgp.unicode.2.2"></a>circled_2_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print s.encode('latin-1')</span> <a name="kgp.unicode.2.3"></a>circled_3_delcric
<font color="teal">La Pe&ntilde;a</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.unicode.2.1">circled_1_delcric</a> </dt><dd>unicode &#30495;&#27491;&#30340;&#20248;&#21183;&#65292;&#29702;&#25152;&#24403;&#28982;&#30340;&#26159;&#23427;&#20445;&#23384;&#38750; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#30340;&#33021;&#21147;&#65292;&#20363;&#22914;&#35199;&#29677;&#29273;&#35821;&#30340; "<span class="quote"><code class="literal">&ntilde;</code></span>"(<code class="literal">n</code> &#19978;&#24102;&#26377;&#19968;&#20010;&#27874;&#28010;&#32447;)&#12290;&#29992;&#26469;&#34920;&#31034;&#27874;&#28010;&#32447; n &#30340; unicode &#23383;&#31526;&#32534;&#30721;&#26159;&#21313;&#20845;&#36827;&#21046;&#30340; <code class="literal">0xf1</code> (&#21313;&#36827;&#21046;&#30340;241)&#65292;&#20320;&#21487;&#20197;&#20687;&#36825;&#26679;&#36755;&#20837;&#65306;<code class="literal">\xf1</code>&#12290;</dd><dt><a href="#kgp.unicode.2.2">circled_2_delcric</a> </dt><dd>&#36824;&#35760;&#24471;&#25105;&#35828;&#36807; <code class="function">print</code> &#20989;&#25968;&#20250;&#23581;&#35797;&#23558; unicode &#23383;&#31526;&#20018;&#36716;&#25442;&#20026; <acronym class="acronym">ASCII</acronym> &#20174;&#32780;&#25171;&#21360;&#23427;&#21527;&#65311;&#21999;&#65292;&#22312;&#36825;&#37324;&#23558;&#19981;&#20250;&#36215;&#20316;&#29992;&#65292;&#22240;&#20026;&#20320;&#30340; unicode &#23383;&#31526;&#20018;&#21253;&#21547;&#38750; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#65292;&#25152;&#20197; <span class="application">Python</span> &#20250;&#24341;&#21457; <code class="errorname">UnicodeError</code> &#24322;&#24120;&#12290;</dd><dt><a href="#kgp.unicode.2.3">circled_3_delcric</a> </dt><dd>&#36825;&#20799;&#23601;&#26159;&#23558; unicode &#36716;&#25442;&#20026;&#20854;&#23427;&#32534;&#30721;&#27169;&#24335;&#36215;&#20316;&#29992;&#30340;&#22320;&#26041;&#12290;<code class="varname">s</code> &#26159;&#19968;&#20010; unicode &#23383;&#31526;&#20018;&#65292;&#20294; <code class="function">print</code> &#21482;&#33021;&#25171;&#21360;&#27491;&#24120;&#30340;&#23383;&#31526;&#20018;&#12290;&#20026;&#20102;&#35299;&#20915;&#36825;&#20010;&#38382;&#39064;&#65292;&#25105;&#20204;&#35843;&#29992; <code class="function">encode</code> &#26041;&#27861; (&#23427;&#21487;&#20197;&#29992;&#20110;&#27599;&#20010; unicode &#23383;&#31526;&#20018;) &#23558; unicode &#23383;&#31526;&#20018;&#36716;&#25442;&#20026;&#25351;&#23450;&#32534;&#30721;&#27169;&#24335;&#30340;&#27491;&#24120;&#23383;&#31526;&#20018;&#12290;&#25105;&#20204;&#21521;&#27492;&#20989;&#25968;&#20256;&#20837;&#19968;&#20010;&#21442;&#25968;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#25105;&#20204;&#20351;&#29992; <code class="literal">latin-1</code> (&#20063;&#21483; <code class="literal">iso-8859-1</code>)&#65292;&#23427;&#21253;&#25324;&#24102;&#27874;&#28010;&#32447;&#30340; n (&#28982;&#32780;&#32570;&#30465;&#30340; <acronym class="acronym">ASCII</acronym> &#32534;&#30721;&#27169;&#24335;&#19981;&#21253;&#25324;&#65292;&#22240;&#20026;&#23427;&#21482;&#21253;&#21547;&#25968;&#20540;&#20174; 0 &#21040; 127 &#30340;&#23383;&#31526;)&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36824;&#35760;&#24471;&#25105;&#35828;&#36807;&#65306;&#38656;&#35201;&#20174;&#19968;&#20010; unicode &#24471;&#21040;&#19968;&#20010;&#27491;&#24120;&#23383;&#31526;&#20018;&#26102;&#65292;<span class="application">Python</span> &#36890;&#24120;&#40664;&#35748;&#23558; unicode &#36716;&#25442;&#25104; <acronym class="acronym">ASCII</acronym> &#21527;&#65311;&#21999;&#65292;&#36825;&#20010;&#40664;&#35748;&#32534;&#30721;&#27169;&#24335;&#26159;&#19968;&#20010;&#21487;&#20197;&#23450;&#21046;&#30340;&#36873;&#39033;&#12290;</p><div class="example"><a name="d0e24181"></a><p class="title"><b>&#20363;&nbsp;9.15.&nbsp;<code class="filename">sitecustomize.py</code></b></p><div class="example-contents"><pre class="programlisting">
# sitecustomize.py                   <a name="kgp.unicode.3.1"></a>circled_1_delcric
# this file can be anywhere in your Python path,
# but it usually goes in ${pythondir}/lib/site-packages/
import sys
sys.setdefaultencoding('iso-8859-1') <a name="kgp.unicode.3.2"></a>circled_2_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.unicode.3.1">circled_1_delcric</a> </dt><dd><code class="filename">sitecustomize.py</code> &#26159;&#19968;&#20010;&#29305;&#27530;&#30340;&#33050;&#26412;&#65307;<span class="application">Python</span> &#20250;&#22312;&#21551;&#21160;&#30340;&#26102;&#20505;&#23548;&#20837;&#23427;&#65292;&#25152;&#20197;&#22312;&#20854;&#20013;&#30340;&#20219;&#20309;&#20195;&#30721;&#37117;&#23558;&#33258;&#21160;&#36816;&#34892;&#12290;&#23601;&#20687;&#27880;&#35299;&#20013;&#25552;&#21040;&#30340;&#37027;&#26679;&#65292;&#23427;&#21487;&#20197;&#25918;&#22312;&#20219;&#20309;&#22320;&#26041; (&#21482;&#35201; <code class="literal">import</code> &#33021;&#22815;&#25214;&#21040;&#23427;)&#65292;&#20294;&#26159;&#36890;&#24120;&#23427;&#20301;&#20110; <span class="application">Python</span> &#30340;<code class="filename">lib</code> &#30446;&#24405;&#30340; <code class="filename">site-packages</code> &#30446;&#24405;&#20013;&#12290;</dd><dt><a href="#kgp.unicode.3.2">circled_2_delcric</a> </dt><dd>&#21999;&#65292;<code class="function">setdefaultencoding</code> &#20989;&#25968;&#35774;&#32622;&#40664;&#35748;&#32534;&#30721;&#12290;<span class="application">Python</span> &#20250;&#22312;&#20219;&#20309;&#38656;&#35201;&#23558; unicode &#23383;&#31526;&#20018;&#33258;&#21160;&#36716;&#25442;&#20026;&#27491;&#35268;&#23383;&#31526;&#20018;&#30340;&#22320;&#26041;&#65292;&#20351;&#29992;&#36825;&#20010;&#32534;&#30721;&#27169;&#24335;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e24221"></a><p class="title"><b>&#20363;&nbsp;9.16.&nbsp;&#35774;&#32622;&#40664;&#35748;&#32534;&#30721;&#30340;&#25928;&#26524;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import sys</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys.getdefaultencoding()</span> <a name="kgp.unicode.4.1"></a>circled_1_delcric
<font color="teal">'iso-8859-1'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">s = u'La Pe\xf1a'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print s</span>                  <a name="kgp.unicode.4.2"></a>circled_2_delcric
<font color="teal">La Pe&ntilde;a</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.unicode.4.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#20363;&#23376;&#20551;&#35774;&#20320;&#24050;&#32463;&#25353;&#21069;&#19968;&#20010;&#20363;&#23376;&#20013;&#30340;&#25913;&#21160;&#23545; <code class="filename">sitecustomize.py</code> &#25991;&#20214;&#20570;&#20102;&#20462;&#25913;&#65292;&#24182;&#19988;&#24050;&#32463;&#37325;&#21551;&#20102; <span class="application">Python</span>&#12290;&#22914;&#26524;&#20320;&#30340;&#40664;&#35748;&#32534;&#30721;&#36824;&#26159; <code class="literal">'ascii'</code>&#65292;&#21487;&#33021;&#20320;&#23601;&#27809;&#26377;&#27491;&#30830;&#35774;&#32622; <code class="filename">sitecustomize.py</code> &#25991;&#20214;&#65292;&#25110;&#32773;&#26159;&#27809;&#26377;&#37325;&#26032;&#21551;&#21160; <span class="application">Python</span>&#12290;&#40664;&#35748;&#30340;&#32534;&#30721;&#21482;&#33021;&#22312; <span class="application">Python</span> &#21551;&#21160;&#30340;&#26102;&#20505;&#25913;&#21464;&#65307;&#20043;&#21518;&#23601;&#19981;&#33021;&#25913;&#21464;&#20102;&#12290;(&#30001;&#20110;&#19968;&#20123;&#25105;&#20204;&#29616;&#22312;&#19981;&#20250;&#20180;&#32454;&#30740;&#31350;&#30340;&#21476;&#24618;&#30340;&#32534;&#31243;&#25216;&#24039;&#65292;&#20320;&#29978;&#33267;&#19981;&#33021;&#22312; <span class="application">Python</span> &#21551;&#21160;&#20043;&#21518;&#35843;&#29992; <code class="function">sys.setdefaultencoding</code> &#20989;&#25968;&#12290;&#20180;&#32454;&#30740;&#31350; <code class="filename">site.py</code>&#65292;&#24182;&#25628;&#32034; "<span class="quote"><code class="literal">setdefaultencoding</code></span>" &#21435;&#21457;&#29616;&#20026;&#20160;&#20040;&#21543;&#12290;)</dd><dt><a href="#kgp.unicode.4.2">circled_2_delcric</a> </dt><dd>&#29616;&#22312;&#40664;&#35748;&#30340;&#32534;&#30721;&#27169;&#24335;&#24050;&#32463;&#21253;&#21547;&#20102;&#20320;&#22312;&#23383;&#31526;&#20018;&#20013;&#20351;&#29992;&#30340;&#25152;&#26377;&#23383;&#31526;&#65292;<span class="application">Python</span> &#23545;&#23383;&#31526;&#20018;&#30340;&#33258;&#21160;&#24378;&#21046;&#36716;&#25442;&#21644;&#25171;&#21360;&#23601;&#19981;&#23384;&#22312;&#38382;&#39064;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e24296"></a><p class="title"><b>&#20363;&nbsp;9.17.&nbsp;&#25351;&#23450;<code class="filename">.py</code>&#25991;&#20214;&#30340;&#32534;&#30721;</b></p><div class="example-contents"><p>&#22914;&#26524;&#20320;&#25171;&#31639;&#22312;&#20320;&#30340; <span class="application">Python</span> &#20195;&#30721;&#20013;&#20445;&#23384;&#38750; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#20018;&#65292;&#20320;&#38656;&#35201;&#22312;&#27599;&#20010;&#25991;&#20214;&#30340;&#39030;&#31471;&#21152;&#20837;&#32534;&#30721;&#22768;&#26126;&#26469;&#25351;&#23450;&#27599;&#20010; <code class="filename">.py</code> &#25991;&#20214;&#30340;&#32534;&#30721;&#12290;&#36825;&#20010;&#22768;&#26126;&#23450;&#20041;&#20102; <code class="filename">.py</code> &#25991;&#20214;&#30340;&#32534;&#30721;&#20026; UTF-8&#65306;</p><pre class="programlisting">
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
</pre></div></div><br class="example-break"><p>&#29616;&#22312;&#65292;&#24819;&#24819; <acronym class="acronym">XML</acronym> &#20013;&#30340;&#32534;&#30721;&#24212;&#35813;&#26159;&#24590;&#26679;&#30340;&#21602;&#65311;&#19981;&#38169;&#65292;&#27599;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#37117;&#26377;&#25351;&#23450;&#30340;&#32534;&#30721;&#12290;&#37325;&#22797;&#19968;&#19979;&#65292;ISO-8859-1 &#26159;&#35199;&#27431;&#35821;&#35328;&#23384;&#25918;&#25968;&#25454;&#30340;&#27969;&#34892;&#32534;&#30721;&#26041;&#24335;&#12290;KOI8-R &#26159;&#20420;&#35821;&#27969;&#34892;&#30340;&#32534;&#30721;&#26041;&#24335;&#12290;&#32534;&#30721;&#8213;&#8213;&#22914;&#26524;&#25351;&#23450;&#20102;&#30340;&#35805;&#8213;&#8213;&#37117;&#22312; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#30340;&#39318;&#37096;&#12290;</p><div class="example"><a name="d0e24329"></a><p class="title"><b>&#20363;&nbsp;9.18.&nbsp;<code class="filename">russiansample.xml</code></b></p><div class="example-contents"><pre class="screen"><font color="teal">
&lt;?xml version="1.0" encoding="koi8-r"?&gt;       </font><a name="kgp.unicode.5.1"></a>circled_1_delcric<font color="teal">
&lt;preface&gt;
&lt;title&gt;&#1055;&#1088;&#1077;&#1076;&#1080;&#1089;&#1083;&#1086;&#1074;&#1080;&#1077;&lt;/title&gt;                    </font><a name="kgp.unicode.5.2"></a>circled_2_delcric<font color="teal">
&lt;/preface&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.unicode.5.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#20174;&#19968;&#20010;&#30495;&#23454;&#30340;&#20420;&#35821; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#20986;&#26469;&#30340;&#31034;&#20363;&#65307;&#23427;&#23601;&#26159;&#36825;&#26412;&#20070;&#20420;&#35821;&#32763;&#35793;&#29256;&#30340;&#19968;&#37096;&#20998;&#12290;&#27880;&#24847;&#65292;&#32534;&#30721; <code class="literal">koi8-r</code> &#26159;&#22312;&#39318;&#37096;&#25351;&#23450;&#30340;&#12290;</dd><dt><a href="#kgp.unicode.5.2">circled_2_delcric</a> </dt><dd>&#36825;&#20123;&#26159;&#21476;&#20195;&#26031;&#25289;&#22827;&#35821;&#30340;&#23383;&#31526;&#65292;&#23601;&#25105;&#25152;&#30693;&#65292;&#23427;&#20204;&#29992;&#26469;&#25340;&#20889;&#20420;&#35821;&#21333;&#35789;"<span class="quote">Preface</span>"&#12290;&#22914;&#26524;&#20320;&#22312;&#19968;&#20010;&#27491;&#24120;&#25991;&#26412;&#32534;&#36753;&#22120;&#20013;&#25171;&#24320;&#36825;&#20010;&#25991;&#20214;&#65292;&#36825;&#20123;&#23383;&#31526;&#38750;&#24120;&#20687;&#20081;&#30721;&#65292;&#22240;&#20026;&#23427;&#20204;&#20351;&#29992;&#20102; <code class="literal">koi8-r</code> &#32534;&#30721;&#27169;&#24335;&#36827;&#34892;&#32534;&#30721;&#65292;&#20294;&#26159;&#21364;&#20197; <code class="literal">iso-8859-1</code> &#32534;&#30721;&#27169;&#24335;&#36827;&#34892;&#26174;&#31034;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e24364"></a><p class="title"><b>&#20363;&nbsp;9.19.&nbsp;&#35299;&#26512; <code class="filename">russiansample.xml</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom import minidom</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse('russiansample.xml')</span> <a name="kgp.unicode.6.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">title = xmldoc.getElementsByTagName('title')[0].firstChild.data</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">title</span>                                       <a name="kgp.unicode.6.2"></a>circled_2_delcric
<font color="teal">u'\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print title</span>                                 <a name="kgp.unicode.6.3"></a>circled_3_delcric
<font color="red">Traceback (innermost last):
  File "&lt;interactive input&gt;", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">convertedtitle = title.encode('koi8-r')</span>     <a name="kgp.unicode.6.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">convertedtitle</span>
<font color="teal">'\xf0\xd2\xc5\xc4\xc9\xd3\xcc\xcf\xd7\xc9\xc5'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print convertedtitle</span>                        <a name="kgp.unicode.6.5"></a>circled_5_delcric
<font color="teal">&#1055;&#1088;&#1077;&#1076;&#1080;&#1089;&#1083;&#1086;&#1074;&#1080;&#1077;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.unicode.6.1">circled_1_delcric</a> </dt><dd>&#25105;&#20551;&#35774;&#22312;&#36825;&#37324;&#20320;&#23558;&#21069;&#19968;&#20010;&#20363;&#23376;&#20197; <code class="filename">russiansample.xml</code> &#20026;&#21517;&#20445;&#23384;&#22312;&#24403;&#21069;&#30446;&#24405;&#20013;&#12290;&#20063;&#20986;&#20110;&#23436;&#25972;&#24615;&#30340;&#32771;&#34385;&#65292;&#25105;&#20551;&#35774;&#20320;&#24050;&#32463;&#21024;&#38500;&#20102; <code class="filename">sitecustomize.py</code> &#25991;&#20214;&#65292;&#23558;&#32570;&#30465;&#32534;&#30721;&#25913;&#22238;&#21040; <code class="literal">'ascii'</code>&#65292;&#25110;&#33267;&#23569;&#23558; <code class="function">setdefaultencoding</code> &#19968;&#34892;&#27880;&#37322;&#36215;&#26469;&#20102;&#12290;</dd><dt><a href="#kgp.unicode.6.2">circled_2_delcric</a> </dt><dd>&#27880;&#24847; <code class="sgmltag-element">title</code> &#26631;&#35760; (&#29616;&#22312;&#22312; <code class="varname">title</code> &#21464;&#37327;&#20013;&#65292;&#19978;&#38754;&#37027;&#19968;&#38271;&#20018; <span class="application">Python</span> &#20989;&#25968;&#25105;&#20204;&#26242;&#19988;&#36339;&#36807;&#65292;&#19979;&#19968;&#33410;&#20877;&#35299;&#37322;)&#8213;&#8213;&#22312; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#30340; <code class="sgmltag-element">title</code> &#20803;&#32032;&#20013;&#30340;&#25991;&#26412;&#25968;&#25454;&#26159;&#20197; unicode &#20445;&#23384;&#30340;&#12290;</dd><dt><a href="#kgp.unicode.6.3">circled_3_delcric</a> </dt><dd>&#30452;&#25509;&#25171;&#21360; title &#26159;&#19981;&#21487;&#33021;&#30340;&#65292;&#22240;&#20026;&#36825;&#20010; unicode &#23383;&#31526;&#20018;&#21253;&#21547;&#20102;&#38750; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;&#65292;&#25152;&#20197; <span class="application">Python</span> &#19981;&#33021;&#25226;&#23427;&#36716;&#25442;&#20026; <acronym class="acronym">ASCII</acronym>&#65292;&#22240;&#20026;&#23427;&#26080;&#27861;&#29702;&#35299;&#12290;</dd><dt><a href="#kgp.unicode.6.4">circled_4_delcric</a> </dt><dd>&#20294;&#26159;&#65292;&#20320;&#33021;&#22815;&#26174;&#24335;&#22320;&#23558;&#23427;&#36716;&#25442;&#20026; <code class="literal">koi8-r</code>&#65292;&#22312;&#26412;&#20363;&#20013;&#65292;&#25105;&#20204;&#24471;&#21040;&#19968;&#20010; (&#27491;&#24120;&#65292;&#38750; unicode) &#21333;&#23383;&#33410;&#23383;&#31526;&#30340;&#23383;&#31526;&#20018; (<code class="literal">f0</code>, <code class="literal">d2</code>, <code class="literal">c5</code>&#65292;&#31561;&#31561;)&#65292;&#23427;&#26159;&#21021;&#22987;unicode&#23383;&#31526;&#20018;&#20013;&#23383;&#31526; <code class="literal">koi8-r</code> &#32534;&#30721;&#30340;&#29256;&#26412;&#12290;</dd><dt><a href="#kgp.unicode.6.5">circled_5_delcric</a> </dt><dd>&#25171;&#21360; <code class="literal">koi8-r</code> &#32534;&#30721;&#30340;&#23383;&#31526;&#20018;&#26377;&#21487;&#33021;&#20250;&#22312;&#20320;&#30340;&#23631;&#24149;&#19978;&#26174;&#31034;&#20026;&#20081;&#30721;&#65292;&#22240;&#20026;&#20320;&#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#23558;&#36825;&#20123;&#23383;&#31526;&#20316;&#20026; <code class="literal">iso-8859-1</code> &#30340;&#32534;&#30721;&#36827;&#34892;&#35299;&#26512;&#65292;&#32780;&#19981;&#26159; <code class="literal">koi8-r</code> &#32534;&#30721;&#12290;&#20294;&#26159;&#65292;&#33267;&#23569;&#23427;&#20204;&#33021;&#25171;&#21360;&#12290; (&#24182;&#19988;&#65292;&#22914;&#26524;&#20320;&#20180;&#32454;&#30475;&#65292;&#24403;&#22312;&#19968;&#20010;&#19981;&#25903;&#25345; unicode &#30340;&#25991;&#26412;&#32534;&#36753;&#22120;&#20013;&#25171;&#24320;&#26368;&#21021;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#20250;&#30475;&#21040;&#30456;&#21516;&#30340;&#20081;&#30721;&#12290;<span class="application">Python</span> &#22312;&#35299;&#26512; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#23558;&#23427;&#20174; <code class="literal">koi8-r</code> &#36716;&#25442;&#21040;&#20102;unicode&#65292;&#20320;&#21482;&#19981;&#36807;&#26159;&#23558;&#23427;&#36716;&#25442;&#22238;&#26469;&#12290;)</dd></dl></div></div></div><br class="example-break"><p>&#24635;&#32467;&#19968;&#19979;&#65292;&#22914;&#26524;&#20320;&#20197;&#21069;&#20174;&#27809;&#26377;&#30475;&#21040;&#36807; unicode&#65292;&#20498;&#26159;&#26377;&#20123;&#21804;&#20154;&#65292;&#20294;&#26159;&#22312; <span class="application">Python</span> &#22788;&#29702; unicode &#25968;&#25454;&#30495;&#26159;&#38750;&#24120;&#23481;&#26131;&#12290;&#22914;&#26524;&#20320;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#37117;&#26159; 7 &#20301;&#30340; <acronym class="acronym">ASCII</acronym> (&#20687;&#26412;&#31456;&#20013;&#30340;&#20363;&#23376;)&#65292;&#20320;&#24046;&#19981;&#22810;&#27704;&#36828;&#37117;&#19981;&#29992;&#32771;&#34385; unicode&#12290;<span class="application">Python</span> &#22312;&#36827;&#34892;&#35299;&#26512;&#26102;&#20250;&#23558; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#30340; <acronym class="acronym">ASCII</acronym> &#25968;&#25454;&#36716;&#25442;&#20026; unicode&#65292;&#22312;&#20219;&#20309;&#38656;&#35201;&#30340;&#26102;&#20505;&#24378;&#21046;&#36716;&#25442;&#22238;&#20026; <acronym class="acronym">ASCII</acronym>&#65292;&#20320;&#29978;&#33267;&#27704;&#36828;&#37117;&#19981;&#29992;&#27880;&#24847;&#12290;&#20294;&#26159;&#22914;&#26524;&#20320;&#35201;&#22788;&#29702;&#20854;&#23427;&#35821;&#35328;&#30340;&#25968;&#25454;&#65292;<span class="application">Python</span> &#24050;&#32463;&#20934;&#22791;&#22909;&#20102;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>Unicode.org (<a href="http://www.unicode.org/">http://www.unicode.org/</a>) &#26159; unicode &#26631;&#20934;&#30340;&#20027;&#39029;&#65292;&#21253;&#21547;&#20102;&#19968;&#20010;&#31616;&#35201;&#30340;&#25216;&#26415;&#31616;&#20171; (<a href="http://www.unicode.org/standard/principles.html">http://www.unicode.org/standard/principles.html</a>)&#12290;</li><li>Unicode &#25945;&#31243; (<a href="http://www.reportlab.com/i18n/python_unicode_tutorial.html">http://www.reportlab.com/i18n/python_unicode_tutorial.html</a>)&#26377;&#26356;&#22810;&#20851;&#20110;&#22914;&#20309;&#20351;&#29992; <span class="application">Python</span> unicode &#20989;&#25968;&#30340;&#20363;&#23376;&#65292;&#21253;&#25324;&#29978;&#33267;&#22312;&#24182;&#19981;&#30495;&#30340;&#38656;&#35201;&#26102;&#22914;&#20309;&#23558; unicode &#24378;&#21046;&#36716;&#25442;&#20026; <acronym class="acronym">ASCII</acronym>&#12290;</li><li>PEP 263 (<a href="http://www.python.org/peps/pep-0263.html">http://www.python.org/peps/pep-0263.html</a>) &#28041;&#21450;&#20102;&#20309;&#26102;&#12289;&#22914;&#20309;&#22312;&#20320;&#30340;<code class="filename">.py</code>&#25991;&#20214;&#20013;&#23450;&#20041;&#23383;&#31526;&#32534;&#30721;&#30340;&#26356;&#22810;&#32454;&#33410;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.search"></a>9.5.&nbsp;&#25628;&#32034;&#20803;&#32032;</h2></div></div></div><div class="abstract"><p>&#36890;&#36807;&#19968;&#27493;&#27493;&#35775;&#38382;&#27599;&#19968;&#20010;&#33410;&#28857;&#30340;&#26041;&#24335;&#36941;&#21382; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#21487;&#33021;&#24456;&#20047;&#21619;&#12290;&#22914;&#26524;&#20320;&#27491;&#22312;&#23547;&#25214;&#20123;&#29305;&#21035;&#30340;&#19996;&#35199;&#65292;&#21448;&#24688;&#24688;&#23427;&#20204;&#28145;&#28145;&#22475;&#20837;&#20102;&#20320;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#65292;&#26377;&#20010;&#25463;&#24452;&#35753;&#20320;&#21487;&#20197;&#24555;&#36895;&#25214;&#21040;&#23427;&#65306;<code class="function">getElementsByTagName</code> &#12290;</p></div><p>&#22312;&#36825;&#37096;&#20998;&#65292;&#23558;&#20351;&#29992; <code class="filename">binary.xml</code> &#35821;&#27861;&#25991;&#20214;&#65292;&#23427;&#30340;&#20869;&#23481;&#22914;&#19979;&#65306;</p><div class="example"><a name="d0e24604"></a><p class="title"><b>&#20363;&nbsp;9.20.&nbsp;<code class="filename">binary.xml</code></b></p><div class="example-contents"><pre class="screen"><font color="teal">&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE grammar PUBLIC "-//diveintopython.org//DTD Kant Generator Pro v1.0//EN" "kgp.dtd"&gt;
&lt;grammar&gt;
&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;
&lt;ref id="byte"&gt;
  &lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;
&lt;/ref&gt;
&lt;/grammar&gt;</font></pre></div></div><br class="example-break"><p>&#23427;&#26377;&#20004;&#20010; <code class="sgmltag-element">ref</code>&#65292;<code class="literal">'bit'</code> (&#20301;) &#21644; <code class="literal">'byte'</code> (&#23383;&#33410;)&#12290;&#19968;&#20010; <code class="literal">bit</code> &#26159; <code class="literal">'0'</code> &#25110;&#32773; <code class="literal">'1'</code>&#65292;&#32780;&#19968;&#20010; <code class="literal">byte</code> &#26159; 8 &#20010; <code class="literal">bit</code>&#12290;</p><div class="example"><a name="d0e24637"></a><p class="title"><b>&#20363;&nbsp;9.21.&nbsp;<code class="function">getElementsByTagName</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom import minidom</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse('binary.xml')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">reflist = xmldoc.getElementsByTagName('ref')</span> <a name="kgp.search.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">reflist</span>
<font color="teal">[&lt;DOM Element: ref at 136138108&gt;, &lt;DOM Element: ref at 136144292&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print reflist[0].toxml()</span>
<font color="teal">&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print reflist[1].toxml()</span>
<font color="teal">&lt;ref id="byte"&gt;
  &lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;
&lt;/ref&gt;
</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.search.1.1">circled_1_delcric</a> </dt><dd><code class="function">getElementsByTagName</code> &#25509;&#25910;&#19968;&#20010;&#21442;&#25968;&#65292;&#21363;&#35201;&#25214;&#30340;&#20803;&#32032;&#30340;&#21517;&#31216;&#12290;&#23427;&#36820;&#22238;&#19968;&#20010; <code class="classname">Element</code> &#23545;&#35937;&#30340;&#21015;&#34920;&#65292;&#21015;&#34920;&#20013;&#30340;&#23545;&#35937;&#37117;&#26159;&#26377;&#25351;&#23450;&#21517;&#31216;&#30340; <acronym class="acronym">XML</acronym> &#20803;&#32032;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#20320;&#33021;&#25214;&#21040;&#20004;&#20010; <code class="literal">ref</code> &#20803;&#32032;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e24699"></a><p class="title"><b>&#20363;&nbsp;9.22.&nbsp;&#27599;&#20010;&#20803;&#32032;&#37117;&#26159;&#21487;&#25628;&#32034;&#30340;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">firstref = reflist[0]</span>                      <a name="kgp.search.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print firstref.toxml()</span>
<font color="teal">&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">plist = firstref.getElementsByTagName("p")</span> <a name="kgp.search.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">plist</span>
<font color="teal">[&lt;DOM Element: p at 136140116&gt;, &lt;DOM Element: p at 136142172&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print plist[0].toxml()</span>                     <a name="kgp.search.2.3"></a>circled_3_delcric
<font color="teal">&lt;p&gt;0&lt;/p&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print plist[1].toxml()</span>
<font color="teal">&lt;p&gt;1&lt;/p&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.search.2.1">circled_1_delcric</a> </dt><dd>&#32487;&#32493;&#21069;&#38754;&#30340;&#20363;&#23376;&#65292;&#22312; <code class="varname">reflist</code> &#20013;&#30340;&#31532;&#19968;&#20010;&#23545;&#35937;&#26159; <code class="literal">'bit'</code> <code class="sgmltag-element">ref</code>&#20803;&#32032;&#12290;</dd><dt><a href="#kgp.search.2.2">circled_2_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#22312;&#36825;&#20010; <code class="classname">Element</code> &#19978;&#20351;&#29992;&#30456;&#21516;&#30340; <code class="function">getElementsByTagName</code> &#26041;&#27861;&#26469;&#23547;&#25214;&#25152;&#26377;&#22312;<code class="literal">'bit'</code> <code class="sgmltag-element">ref</code> &#20803;&#32032;&#20013;&#30340;<code class="sgmltag-element">&lt;p&gt;</code>&#20803;&#32032;&#12290;</dd><dt><a href="#kgp.search.2.3">circled_3_delcric</a> </dt><dd>&#21644;&#21069;&#38754;&#19968;&#26679;&#65292;<code class="function">getElementsByTagName</code> &#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#25214;&#21040;&#20803;&#32032;&#30340;&#21015;&#34920;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#20320;&#26377;&#20004;&#20010;&#20803;&#32032;&#65292;&#27599;&#8220;&#20301;&#8221;&#21508;&#21344;&#19968;&#20010;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e24788"></a><p class="title"><b>&#20363;&nbsp;9.23.&nbsp;&#25628;&#32034;&#23454;&#38469;&#19978;&#26159;&#36882;&#24402;&#30340;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">plist = xmldoc.getElementsByTagName("p")</span> <a name="kgp.search.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">plist</span>
<font color="teal">[&lt;DOM Element: p at 136140116&gt;, &lt;DOM Element: p at 136142172&gt;, &lt;DOM Element: p at 136146124&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">plist[0].toxml()</span>                         <a name="kgp.search.3.2"></a>circled_2_delcric
<font color="teal">'&lt;p&gt;0&lt;/p&gt;'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">plist[1].toxml()</span>
<font color="teal">'&lt;p&gt;1&lt;/p&gt;'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">plist[2].toxml()</span>                         <a name="kgp.search.3.3"></a>circled_3_delcric
<font color="teal">'&lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;'</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.search.3.1">circled_1_delcric</a> </dt><dd>&#20180;&#32454;&#27880;&#24847;&#36825;&#20010;&#20363;&#23376;&#21644;&#21069;&#38754;&#20363;&#23376;&#20043;&#38388;&#30340;&#19981;&#21516;&#12290;&#21069;&#38754;&#65292;&#20320;&#26159;&#22312; <code class="varname">firstref</code> &#20013;&#25628;&#32034; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#20294;&#26159;&#36825;&#37324;&#20320;&#26159;&#22312; <code class="varname">xmldoc</code> &#20013;&#25628;&#32034; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;<code class="varname">xmldoc</code> &#26159;&#20195;&#34920;&#20102;&#25972;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#30340;&#26681;&#23618;&#23545;&#35937;&#12290;&#36825;&#26679;<span class="emphasis"><em>&#23601;&#20250;</em></span> &#25214;&#21040;&#23884;&#22871;&#22312; <code class="sgmltag-element">ref</code> &#20803;&#32032; (&#23427;&#23884;&#22871;&#22312;&#26681; <code class="sgmltag-element">grammar</code> &#20803;&#32032;&#20013;) &#20013;&#30340; <code class="sgmltag-element">p</code> &#20803;&#32032;&#12290;</dd><dt><a href="#kgp.search.3.2">circled_2_delcric</a> </dt><dd>&#21069;&#20004;&#20010; <code class="sgmltag-element">p</code> &#20803;&#32032;&#22312;&#31532;&#19968;&#20010; <code class="sgmltag-element">ref</code> &#20869; (<code class="literal">'bit'</code> <code class="sgmltag-element">ref</code>)&#12290;</dd><dt><a href="#kgp.search.3.3">circled_3_delcric</a> </dt><dd>&#21518;&#19968;&#20010; <code class="sgmltag-element">p</code> &#20803;&#32032;&#22312;&#31532;&#20108;&#20010; <code class="sgmltag-element">ref</code> &#20013; (<code class="literal">'byte'</code> <code class="sgmltag-element">ref</code>)&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.attributes"></a>9.6.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;</h2></div></div></div><div class="abstract"><p><acronym class="acronym">XML</acronym> &#20803;&#32032;&#21487;&#20197;&#26377;&#19968;&#20010;&#25110;&#32773;&#22810;&#20010;&#23646;&#24615;&#65292;&#21482;&#35201;&#24050;&#32463;&#35299;&#26512;&#20102;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#65292;&#35775;&#38382;&#23427;&#20204;&#23601;&#22826;&#31616;&#21333;&#20102;&#12290;</p></div><p>&#22312;&#36825;&#37096;&#20998;&#20013;&#65292;&#23558;&#20351;&#29992; <code class="filename">binary.xml</code> &#35821;&#27861;&#25991;&#20214;&#65292;&#20320;&#22312;<a class="link" href="#kgp.search" title="9.5.&nbsp;&#25628;&#32034;&#20803;&#32032;">&#19978;&#19968;&#33410;</a>&#20013;&#24050;&#32463;&#30475;&#21040;&#36807;&#20102;&#12290;</p><div class="note"><blockquote><b class="title"><a name="d0e24920">&#27880;&#24847;: <acronym class="acronym">XML</acronym> &#23646;&#24615;&#21644;<span class="application">Python</span> &#23646;&#24615;</a></b><br>&#36825;&#37096;&#20998;&#30001;&#20110;&#26576;&#20010;&#21547;&#20041;&#37325;&#21472;&#30340;&#26415;&#35821;&#21487;&#33021;&#35753;&#20154;&#26377;&#28857;&#31946;&#28034;&#12290;&#22312;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#65292;&#20803;&#32032;&#21487;&#20197;&#26377;&#23646;&#24615;&#65292;&#32780; <span class="application">Python</span> &#23545;&#35937;&#20063;&#26377;&#23646;&#24615;&#12290;&#24403;&#20320;&#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#20320;&#24471;&#21040;&#20102;&#19968;&#32452; <span class="application">Python</span> &#23545;&#35937;&#65292;&#23427;&#20204;&#20195;&#34920; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#30340;&#25152;&#26377;&#29255;&#27573;&#65292;&#21516;&#26102;&#26377;&#20123; <span class="application">Python</span> &#23545;&#35937;&#20195;&#34920; <acronym class="acronym">XML</acronym> &#20803;&#32032;&#30340;&#23646;&#24615;&#12290;&#20294;&#26159;&#34920;&#31034; (<acronym class="acronym">XML</acronym>) &#23646;&#24615;&#30340; (<span class="application">Python</span>) &#23545;&#35937;&#20063;&#26377; (<span class="application">Python</span>) &#23646;&#24615;&#65292;&#23427;&#20204;&#29992;&#20110;&#35775;&#38382;&#23545;&#35937;&#34920;&#31034;&#30340; (<acronym class="acronym">XML</acronym>) &#23646;&#24615;&#12290;&#25105;&#21578;&#35785;&#36807;&#20320;&#23427;&#35753;&#20154;&#31946;&#28034;&#12290;&#25105;&#20250;&#20844;&#24320;&#25552;&#20986;&#20851;&#20110;&#22914;&#20309;&#26356;&#26126;&#26174;&#22320;&#21306;&#20998;&#36825;&#20123;&#19981;&#21516;&#30340;&#24314;&#35758;&#12290;
</blockquote></div><div class="example"><a name="d0e24963"></a><p class="title"><b>&#20363;&nbsp;9.24.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse('binary.xml')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">reflist = xmldoc.getElementsByTagName('ref')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">bitref = reflist[0]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print bitref.toxml()</span>
<font color="teal">&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">bitref.attributes</span>          <a name="kgp.attributes.1.1"></a>circled_1_delcric
<font color="teal">&lt;xml.dom.minidom.NamedNodeMap instance at 0x81e0c9c&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">bitref.attributes.keys()</span>   <a name="kgp.attributes.1.2"></a>circled_2_delcric <a name="kgp.attributes.1.3"></a>circled_3_delcric
<font color="teal">[u'id']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">bitref.attributes.values()</span> <a name="kgp.attributes.1.4"></a>circled_4_delcric
<font color="teal">[&lt;xml.dom.minidom.Attr instance at 0x81d5044&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">bitref.attributes["id"]</span>    <a name="kgp.attributes.1.5"></a>circled_5_delcric
<font color="teal">&lt;xml.dom.minidom.Attr instance at 0x81d5044&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.attributes.1.1">circled_1_delcric</a> </dt><dd>&#27599;&#20010; <code class="classname">Element</code> &#23545;&#35937;&#37117;&#26377;&#19968;&#20010; <code class="literal">attributes</code> &#23646;&#24615;&#65292;&#23427;&#26159;&#19968;&#20010; <code class="classname">NamedNodeMap</code> &#23545;&#35937;&#12290;&#21548;&#19978;&#21435;&#25402;&#21523;&#20154;&#30340;&#65292;&#20854;&#23454;&#19981;&#28982;&#65292;&#22240;&#20026; <code class="classname">NamedNodeMap</code> &#26159;&#19968;&#20010;<a class="link" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#34892;&#20026;&#20687;&#23383;&#20856;</a>&#30340;&#23545;&#35937;&#65292;&#25152;&#20197;&#20320;&#24050;&#32463;&#30693;&#36947;&#24590;&#20040;&#20351;&#29992;&#23427;&#20102;&#12290;</dd><dt><a href="#kgp.attributes.1.2">circled_2_delcric</a> </dt><dd>&#23558; <code class="classname">NamedNodeMap</code> &#35270;&#20026;&#19968;&#20010;&#23383;&#20856;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807; <code class="function">attributes.keys()</code> &#33719;&#24471;&#23646;&#24615;&#21517;&#31216;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;&#36825;&#20010;&#20803;&#32032;&#21482;&#26377;&#19968;&#20010;&#23646;&#24615;&#65292;<code class="literal">'id'</code>&#12290;</dd><dt><a href="#kgp.attributes.1.3">circled_3_delcric</a> </dt><dd>&#23646;&#24615;&#21517;&#31216;&#65292;&#20687;&#20854;&#23427; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#30340;&#25991;&#26412;&#19968;&#26679;&#65292;&#37117;&#26159;&#20197; <a class="link" href="#kgp.unicode" title="9.4.&nbsp;Unicode">unicode</a> &#20445;&#23384;&#30340;&#12290;</dd><dt><a href="#kgp.attributes.1.4">circled_4_delcric</a> </dt><dd>&#20877;&#27425;&#23558; <code class="classname">NamedNodeMap</code> &#35270;&#20026;&#19968;&#20010;&#23383;&#20856;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807; <code class="function">attributes.values()</code> &#33719;&#21462;&#23646;&#24615;&#20540;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;&#36825;&#20123;&#20540;&#26412;&#36523;&#26159; <code class="classname">Attr</code> &#31867;&#22411;&#30340;&#23545;&#35937;&#12290;&#20320;&#23558;&#22312;&#19979;&#19968;&#20010;&#20363;&#23376;&#20013;&#30475;&#21040;&#22914;&#20309;&#33719;&#21462;&#23545;&#35937;&#30340;&#26377;&#29992;&#20449;&#24687;&#12290;</dd><dt><a href="#kgp.attributes.1.5">circled_5_delcric</a> </dt><dd>&#20173;&#28982;&#25226; <code class="classname">NamedNodeMap</code> &#35270;&#20026;&#19968;&#20010;&#23383;&#20856;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#24120;&#29992;&#30340;&#23383;&#20856;&#35821;&#27861;&#21644;&#21517;&#31216;&#35775;&#38382;&#21333;&#20010;&#30340;&#23646;&#24615;&#12290;(&#37027;&#20123;&#38750;&#24120;&#35748;&#30495;&#30340;&#35835;&#32773;&#23558;&#24050;&#32463;&#30693;&#36947; <code class="classname">NamedNodeMap</code> &#31867;&#26159;&#22914;&#20309;&#23454;&#29616;&#36825;&#19968;&#25216;&#24039;&#30340;&#65306;&#36890;&#36807;&#23450;&#20041;&#19968;&#20010; <a class="link" href="#fileinfo.specialmethods" title="5.6.&nbsp;&#19987;&#29992;&#31867;&#26041;&#27861;"><code class="function">__getitem__</code> &#19987;&#29992;&#26041;&#27861;</a>&#12290;&#20854;&#23427;&#30340;&#35835;&#32773;&#21487;&#33021;&#20048;&#24847;&#25509;&#21463;&#36825;&#19968;&#20107;&#23454;&#65306;&#20182;&#20204;&#19981;&#38656;&#35201;&#29702;&#35299;&#23427;&#26159;&#22914;&#20309;&#24037;&#20316;&#30340;&#23601;&#21487;&#20197;&#26377;&#25928;&#22320;&#20351;&#29992;&#23427;&#12290;)</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e25098"></a><p class="title"><b>&#20363;&nbsp;9.25.&nbsp;&#35775;&#38382;&#21333;&#20010;&#23646;&#24615;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">a = bitref.attributes["id"]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">a</span>
<font color="teal">&lt;xml.dom.minidom.Attr instance at 0x81d5044&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">a.name</span>  <a name="kgp.attributes.2.1"></a>circled_1_delcric
<font color="teal">u'id'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">a.value</span> <a name="kgp.attributes.2.2"></a>circled_2_delcric
<font color="teal">u'bit'</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.attributes.2.1">circled_1_delcric</a> </dt><dd><code class="classname">Attr</code> &#23545;&#35937;&#23436;&#25972;&#20195;&#34920;&#20102;&#21333;&#20010; <acronym class="acronym">XML</acronym> &#20803;&#32032;&#30340;&#21333;&#20010; <acronym class="acronym">XML</acronym> &#23646;&#24615;&#12290;&#23646;&#24615;&#30340;&#21517;&#31216; (&#19982;&#20320;&#22312; <code class="literal">bitref.attributes</code> <code class="classname">NamedNodeMap</code> &#20266;&#23383;&#20856;&#20013;&#23547;&#25214;&#30340;&#23545;&#35937;&#21516;&#21517;) &#20445;&#23384;&#22312;<code class="literal">a.name</code>&#20013;&#12290;</dd><dt><a href="#kgp.attributes.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#20010; <acronym class="acronym">XML</acronym> &#23646;&#24615;&#30340;&#30495;&#23454;&#25991;&#26412;&#20540;&#20445;&#23384;&#22312; <code class="literal">a.value</code> &#20013;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="d0e25165">&#27880;&#24847;: &#23646;&#24615;&#27809;&#26377;&#39034;&#24207;</a></b><br>&#31867;&#20284;&#20110;&#23383;&#20856;&#65292;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#20803;&#32032;&#30340;&#23646;&#24615;&#27809;&#26377;&#39034;&#24207;&#12290;&#23646;&#24615;&#21487;&#20197;&#20197;&#26576;&#31181;&#39034;&#24207;<span class="emphasis"><em>&#20598;&#28982;</em></span> &#21015;&#22312;&#26368;&#21021;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#65292;&#32780;&#22312; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#35299;&#26512;&#20026; <span class="application">Python</span> &#23545;&#35937;&#26102;&#65292;<code class="classname">Attr</code> &#23545;&#35937;&#20197;&#26576;&#31181;&#39034;&#24207;<span class="emphasis"><em>&#20598;&#28982;</em></span> &#21015;&#20986;&#65292;&#36825;&#20123;&#39034;&#24207;&#37117;&#26159;&#20219;&#24847;&#30340;&#65292;&#27809;&#26377;&#20219;&#20309;&#29305;&#21035;&#30340;&#21547;&#20041;&#12290;&#20320;&#24212;&#35813;&#24635;&#26159;&#20351;&#29992;&#21517;&#31216;&#26469;&#35775;&#38382;&#21333;&#20010;&#23646;&#24615;&#65292;&#23601;&#20687;&#23383;&#20856;&#30340;&#38190;&#19968;&#26679;&#12290;</blockquote></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.segue"></a>9.7.&nbsp;Segue <sup>[<a name="d0e25195" href="#ftn.d0e25195" class="footnote">9</a>]</sup></h2></div></div></div><div class="abstract"><p>&#20197;&#19978;&#23601;&#26159; XML &#30340;&#26680;&#24515;&#20869;&#23481;&#12290;&#19979;&#19968;&#31456;&#23558;&#20351;&#29992;&#30456;&#21516;&#30340;&#31034;&#20363;&#31243;&#24207;&#65292;&#20294;&#26159;&#28966;&#28857;&#22312;&#20110;&#33021;&#20351;&#31243;&#24207;&#26356;&#21152;&#28789;&#27963;&#30340;&#20854;&#23427;&#26041;&#38754;&#65306;&#20351;&#29992;&#36755;&#20837;&#27969;&#22788;&#29702;&#65292;&#20351;&#29992; <code class="function">getattr</code> &#36827;&#34892;&#26041;&#27861;&#20998;&#21457;&#65292;&#24182;&#20351;&#29992;&#21629;&#20196;&#34892;&#26631;&#35782;&#20801;&#35768;&#29992;&#25143;&#37325;&#26032;&#37197;&#32622;&#31243;&#24207;&#32780;&#26080;&#38656;&#20462;&#25913;&#20195;&#30721;&#12290;</p></div><p>&#22312;&#36827;&#20837;&#19979;&#19968;&#31456;&#21069;&#65292;&#20320;&#24212;&#35813;&#27809;&#26377;&#22256;&#38590;&#30340;&#23436;&#25104;&#36825;&#20123;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#20351;&#29992; <code class="filename">minidom</code> <a class="link" href="#kgp.parse" title="9.3.&nbsp;XML &#35299;&#26512;">&#35299;&#26512; <acronym class="acronym">XML</acronym> &#25991;&#26723;</a>&#65292;<a class="link" href="#kgp.search" title="9.5.&nbsp;&#25628;&#32034;&#20803;&#32032;">&#25628;&#32034;&#24050;&#35299;&#26512;&#25991;&#26723;</a>&#65292;&#24182;&#20197;&#20219;&#24847;&#39034;&#24207;&#35775;&#38382;<a class="link" href="#kgp.attributes" title="9.6.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;">&#20803;&#32032;&#23646;&#24615;</a>&#21644;<a class="link" href="#kgp.child" title="10.4.&nbsp;&#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;">&#20803;&#32032;&#23376;&#20803;&#32032;</a></li><li>&#23558;&#22797;&#26434;&#30340;&#24211;&#32452;&#32455;&#20026;<a class="link" href="#kgp.packages" title="9.2.&nbsp;&#21253;">&#21253;</a></li><li>&#23558; <a class="link" href="#kgp.unicode" title="9.4.&nbsp;Unicode">unicode &#23383;&#31526;&#20018;&#36716;&#25442;</a>&#20026;&#19981;&#21516;&#30340;&#23383;&#31526;&#32534;&#30721;</li></ul></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e23957" href="#d0e23957" class="para">8</a>] </sup>&#36825;&#19968;&#28857;&#65292;&#24456;&#19981;&#24184;<span class="emphasis"><em>&#20173;&#28982;</em></span> &#36807;&#20998;&#31616;&#21333;&#20102;&#12290;&#29616;&#22312; unicode &#24050;&#32463;&#25193;&#23637;&#29992;&#26469;&#22788;&#29702;&#21476;&#32769;&#30340;&#27721;&#23383;&#12289;&#38889;&#25991;&#21644;&#26085;&#25991;&#25991;&#26412;&#65292;&#23427;&#20204;&#26377;&#22826;&#22810;&#19981;&#21516;&#30340;&#23383;&#31526;&#65292;&#20197;&#33267;&#20110; 2 &#23383;&#33410;&#30340; unicode &#31995;&#32479;&#19981;&#33021;&#20840;&#37096;&#34920;&#31034;&#12290;&#20294;&#24403;&#21069; <span class="application">Python</span> &#19981;&#25903;&#25345;&#36229;&#20986;&#33539;&#22260;&#30340;&#32534;&#30721;&#65292;&#24182;&#19988;&#25105;&#19981;&#30693;&#36947;&#26159;&#21542;&#26377;&#27491;&#22312;&#35745;&#21010;&#36827;&#34892;&#35299;&#20915;&#30340;&#39033;&#30446;&#12290;&#23545;&#19981;&#36215;&#65292;&#20320;&#24050;&#32463;&#21040;&#20102;&#25105;&#32463;&#39564;&#30340;&#26497;&#38480;&#20102;&#12290;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e25195" href="#d0e25195" class="para">9</a>] </sup>&#8220;Segue&#8221;&#26159;&#38899;&#20048;&#26415;&#35821;&#65292;&#24847;&#20026;&#8220;&#32487;&#32493;&#28436;&#22863;&#8221;&#12290;</p></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="streams"></a>&#31532;&nbsp;10&nbsp;&#31456;&nbsp;&#33050;&#26412;&#21644;&#27969;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.openanything"></a>10.1.&nbsp;&#25277;&#35937;&#36755;&#20837;&#28304;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#30340;&#26368;&#24378;&#22823;&#21147;&#37327;&#20043;&#19968;&#26159;&#23427;&#30340;&#21160;&#24577;&#32465;&#23450;&#65292;&#32780;&#21160;&#24577;&#32465;&#23450;&#26368;&#24378;&#22823;&#30340;&#29992;&#27861;&#20043;&#19968;&#26159;<span class="emphasis"><em>&#31867;&#25991;&#20214;(file-like)&#23545;&#35937;</em></span>&#12290;</p></div><p>&#35768;&#22810;&#38656;&#35201;&#36755;&#20837;&#28304;&#30340;&#20989;&#25968;&#21487;&#20197;&#21482;&#25509;&#25910;&#19968;&#20010;&#25991;&#20214;&#21517;&#65292;&#24182;&#20197;&#35835;&#26041;&#24335;&#25171;&#24320;&#25991;&#20214;&#65292;&#35835;&#21462;&#25991;&#20214;&#65292;&#22788;&#29702;&#23436;&#25104;&#21518;&#20851;&#38381;&#23427;&#12290;&#20854;&#23454;&#23427;&#20204;&#19981;&#26159;&#36825;&#26679;&#30340;&#65292;&#32780;&#26159;&#25509;&#25910;&#19968;&#20010;<span class="emphasis"><em>&#31867;&#25991;&#20214;&#23545;&#35937;</em></span>&#12290;</p><p>&#22312;&#26368;&#31616;&#21333;&#30340;&#20363;&#23376;&#20013;&#65292;<span class="emphasis"><em>&#31867;&#25991;&#20214;&#23545;&#35937;</em></span> &#26159;&#20219;&#24847;&#19968;&#20010;&#24102;&#26377; <code class="function">read</code> &#26041;&#27861;&#30340;&#23545;&#35937;&#65292;&#36825;&#20010;&#26041;&#27861;&#24102;&#26377;&#19968;&#20010;&#21487;&#36873;&#30340; <code class="varname">size</code> &#21442;&#25968;&#65292;&#24182;&#36820;&#22238;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;&#35843;&#29992;&#26102;&#22914;&#26524;&#27809;&#26377; <code class="varname">size</code> &#21442;&#25968;&#65292;&#23427;&#20174;&#36755;&#20837;&#28304;&#20013;&#35835;&#21462;&#25152;&#26377;&#19996;&#35199;&#24182;&#23558;&#25152;&#26377;&#25968;&#25454;&#20316;&#20026;&#21333;&#20010;&#23383;&#31526;&#20018;&#36820;&#22238;&#65307;&#35843;&#29992;&#26102;&#22914;&#26524;&#25351;&#23450;&#20102; <code class="varname">size</code> &#21442;&#25968;&#65292;&#23427;&#23558;&#20174;&#36755;&#20837;&#28304;&#20013;&#35835;&#21462; <code class="varname">size</code> &#22823;&#23567;&#30340;&#25968;&#25454;&#24182;&#36820;&#22238;&#36825;&#20123;&#25968;&#25454;&#65307;&#20877;&#27425;&#35843;&#29992;&#30340;&#26102;&#20505;&#65292;&#23427;&#20174;&#20313;&#19979;&#30340;&#22320;&#26041;&#24320;&#22987;&#24182;&#36820;&#22238;&#19979;&#19968;&#22359;&#25968;&#25454;&#12290;</p><p>&#36825;&#23601;&#26159;<a class="link" href="#fileinfo.files" title="6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;">&#20174;&#30495;&#23454;&#25991;&#20214;&#35835;&#21462;&#25968;&#25454;</a>&#30340;&#24037;&#20316;&#26041;&#24335;&#65307;&#21306;&#21035;&#22312;&#20110;&#20320;&#19981;&#29992;&#25226;&#33258;&#24049;&#23616;&#38480;&#20110;&#30495;&#23454;&#30340;&#25991;&#20214;&#12290;&#36755;&#20837;&#28304;&#21487;&#20197;&#26159;&#20219;&#20309;&#19996;&#35199;&#65306;&#30913;&#30424;&#19978;&#30340;&#25991;&#20214;&#65292;&#29978;&#33267;&#26159;&#19968;&#20010;&#30828;&#32534;&#30721;&#30340;&#23383;&#31526;&#20018;&#12290;&#21482;&#35201;&#20320;&#23558;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#20256;&#36882;&#32473;&#20989;&#25968;&#65292;&#20989;&#25968;&#21482;&#26159;&#35843;&#29992;&#23545;&#35937;&#30340; <code class="function">read</code> &#26041;&#27861;&#65292;&#23601;&#21487;&#20197;&#22788;&#29702;&#20219;&#20309;&#31867;&#22411;&#30340;&#36755;&#20837;&#28304;&#65292;&#32780;&#19981;&#38656;&#35201;&#20026;&#22788;&#29702;&#27599;&#31181;&#31867;&#22411;&#20998;&#21035;&#32534;&#30721;&#12290;
</p><p>&#20320;&#21487;&#33021;&#20250;&#32435;&#38391;&#65292;&#36825;&#21644; <acronym class="acronym">XML</acronym> &#22788;&#29702;&#26377;&#20160;&#20040;&#20851;&#31995;&#12290;&#20854;&#23454; <code class="function">minidom.parse</code> &#23601;&#26159;&#19968;&#20010;&#21487;&#20197;&#25509;&#25910;&#31867;&#25991;&#20214;&#23545;&#35937;&#30340;&#20989;&#25968;&#12290;</p><div class="example"><a name="d0e25300"></a><p class="title"><b>&#20363;&nbsp;10.1.&nbsp;&#20174;&#25991;&#20214;&#20013;&#35299;&#26512; <acronym class="acronym">XML</acronym></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom import minidom</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fsock = open('binary.xml')</span>    <a name="kgp.openanything.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse(fsock)</span> <a name="kgp.openanything.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fsock.close()</span>                 <a name="kgp.openanything.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print xmldoc.toxml()</span>          <a name="kgp.openanything.1.4"></a>circled_4_delcric
<font color="teal">&lt;?xml version="1.0" ?&gt;
&lt;grammar&gt;
&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;
&lt;ref id="byte"&gt;
  &lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;
&lt;/ref&gt;
&lt;/grammar&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.openanything.1.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#20320;&#35201;&#25171;&#24320;&#19968;&#20010;&#30913;&#30424;&#19978;&#30340;&#25991;&#20214;&#12290;&#36825;&#20250;&#25552;&#20379;&#32473;&#20320;&#19968;&#20010;<a class="link" href="#fileinfo.files" title="6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;">&#25991;&#20214;&#23545;&#35937;</a>&#12290;</dd><dt><a href="#kgp.openanything.1.2">circled_2_delcric</a> </dt><dd>&#23558;&#25991;&#20214;&#23545;&#35937;&#20256;&#36882;&#32473; <code class="function">minidom.parse</code>&#65292;&#23427;&#35843;&#29992; <code class="varname">fsock</code> &#30340; <code class="function">read</code> &#26041;&#27861;&#24182;&#20174;&#30913;&#30424;&#19978;&#30340;&#25991;&#20214;&#35835;&#21462; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#12290;</dd><dt><a href="#kgp.openanything.1.3">circled_3_delcric</a> </dt><dd>&#30830;&#20445;&#22788;&#29702;&#23436;&#25991;&#20214;&#21518;&#35843;&#29992; <code class="function">close</code> &#26041;&#27861;&#12290;<code class="function">minidom.parse</code>&#19981;&#20250;&#26367;&#20320;&#20570;&#36825;&#20214;&#20107;&#12290;</dd><dt><a href="#kgp.openanything.1.4">circled_4_delcric</a> </dt><dd>&#22312;&#36820;&#22238;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#19978;&#35843;&#29992; <code class="methodname">toxml()</code> &#26041;&#27861;&#65292;&#25171;&#21360;&#20986;&#25972;&#20010;&#25991;&#26723;&#30340;&#20869;&#23481;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21734;&#65292;&#25152;&#26377;&#36825;&#20123;&#30475;&#19978;&#21435;&#20687;&#26159;&#22312;&#28010;&#36153;&#22823;&#37327;&#30340;&#26102;&#38388;&#12290;&#27605;&#31455;&#65292;&#20320;&#24050;&#32463;&#30475;&#21040;&#65292;<code class="function">minidom.parse</code> &#21487;&#20197;&#21482;&#25509;&#25910;&#25991;&#20214;&#21517;&#65292;&#24182;&#33258;&#21160;&#25191;&#34892;&#25152;&#26377;&#25171;&#24320;&#25991;&#20214;&#21644;&#20851;&#38381;&#26080;&#29992;&#25991;&#20214;&#30340;&#34892;&#20026;&#12290;&#19981;&#38169;&#65292;&#22914;&#26524;&#20320;&#30693;&#36947;&#27491;&#35201;&#35299;&#26512;&#30340;&#26159;&#19968;&#20010;&#26412;&#22320;&#25991;&#20214;&#65292;&#20320;&#21487;&#20197;&#20256;&#36882;&#25991;&#20214;&#21517;&#32780;&#19988; <code class="function">minidom.parse</code> &#21487;&#20197;&#36275;&#22815;&#32874;&#26126;&#22320;&#20570;&#27491;&#30830;&#30340;&#20107;&#24773; (<span class="trademark">Do The Right Thing</span>(tm)<sup>[<a name="d0e25392" href="#ftn.d0e25392" class="footnote">10</a>]</sup>)&#65292;&#36825;&#19968;&#20999;&#37117;&#19981;&#20250;&#26377;&#38382;&#39064;&#12290;&#20294;&#26159;&#35831;&#27880;&#24847;&#65292;&#20351;&#29992;&#31867;&#25991;&#20214;&#65292;&#20250;&#20351;&#20998;&#26512;&#30452;&#25509;&#20174; Internet &#19978;&#26469;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#21464;&#24471;&#22810;&#20040;&#30456;&#20284;&#21644;&#23481;&#26131;&#65281;</p><div class="example"><a name="kgp.openanything.urllib"></a><p class="title"><b>&#20363;&nbsp;10.2.&nbsp;&#35299;&#26512;&#26469;&#33258; <acronym class="acronym">URL</acronym> &#30340; <acronym class="acronym">XML</acronym></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">usock = urllib.urlopen('http://slashdot.org/slashdot.rdf')</span> <a name="kgp.openanything.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse(usock)</span>                              <a name="kgp.openanything.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">usock.close()</span>                                              <a name="kgp.openanything.2.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print xmldoc.toxml()</span>                                       <a name="kgp.openanything.2.4"></a>circled_4_delcric
<font color="teal">&lt;?xml version="1.0" ?&gt;
&lt;rdf:RDF xmlns="http://my.netscape.com/rdf/simple/0.9/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;

&lt;channel&gt;
&lt;title&gt;Slashdot&lt;/title&gt;
&lt;link&gt;http://slashdot.org/&lt;/link&gt;
&lt;description&gt;News for nerds, stuff that matters&lt;/description&gt;
&lt;/channel&gt;

&lt;image&gt;
&lt;title&gt;Slashdot&lt;/title&gt;
&lt;url&gt;http://images.slashdot.org/topics/topicslashdot.gif&lt;/url&gt;
&lt;link&gt;http://slashdot.org/&lt;/link&gt;
&lt;/image&gt;

&lt;item&gt;
&lt;title&gt;To HDTV or Not to HDTV?&lt;/title&gt;
&lt;link&gt;http://slashdot.org/article.pl?sid=01/12/28/0421241&lt;/link&gt;
&lt;/item&gt;

[...snip...]</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.openanything.2.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#22312;<a class="link" href="#dialect.extract.urllib" title="&#20363;&nbsp;8.5.&nbsp;urllib &#20171;&#32461;">&#21069;&#19968;&#31456;</a>&#20013;&#25152;&#30475;&#21040;&#30340;&#65292;<code class="function">urlopen</code> &#25509;&#25910;&#19968;&#20010; web &#39029;&#38754;&#30340; <acronym class="acronym">URL</acronym> &#20316;&#20026;&#21442;&#25968;&#24182;&#36820;&#22238;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#12290;&#26368;&#37325;&#35201;&#30340;&#26159;&#65292;&#36825;&#20010;&#23545;&#35937;&#26377;&#19968;&#20010; <code class="function">read</code> &#26041;&#27861;&#65292;&#23427;&#21487;&#20197;&#36820;&#22238; web &#39029;&#38754;&#30340; <acronym class="acronym">HTML</acronym> &#28304;&#20195;&#30721;&#12290;</dd><dt><a href="#kgp.openanything.2.2">circled_2_delcric</a> </dt><dd>&#29616;&#22312;&#25226;&#31867;&#25991;&#20214;&#23545;&#35937;&#20256;&#36882;&#32473; <code class="function">minidom.parse</code>&#65292;&#23427;&#39034;&#20174;&#22320;&#35843;&#29992;&#23545;&#35937;&#30340; <code class="function">read</code> &#26041;&#27861;&#24182;&#35299;&#26512; <code class="function">read</code> &#26041;&#27861;&#36820;&#22238;&#30340; <acronym class="acronym">XML</acronym> &#25968;&#25454;&#12290;&#36825;&#19982; <acronym class="acronym">XML</acronym> &#25968;&#25454;&#29616;&#22312;&#30452;&#25509;&#26469;&#28304;&#20110; web &#39029;&#38754;&#30340;&#20107;&#23454;&#27627;&#19981;&#30456;&#24178;&#12290;<code class="function">minidom.parse</code> &#24182;&#19981;&#30693;&#36947; web &#39029;&#38754;&#65292;&#23427;&#20063;&#19981;&#20851;&#24515; web &#39029;&#38754;&#65307;&#23427;&#21482;&#30693;&#36947;&#31867;&#25991;&#20214;&#23545;&#35937;&#12290;</dd><dt><a href="#kgp.openanything.2.3">circled_3_delcric</a> </dt><dd>&#21040;&#36825;&#37324;&#24050;&#32463;&#22788;&#29702;&#23436;&#27605;&#20102;&#65292;&#30830;&#20445;&#23558; <code class="function">urlopen</code> &#25552;&#20379;&#32473;&#20320;&#30340;&#31867;&#25991;&#20214;&#23545;&#35937;&#20851;&#38381;&#12290;</dd><dt><a href="#kgp.openanything.2.4">circled_4_delcric</a> </dt><dd>&#39034;&#20415;&#25552;&#19968;&#21477;&#65292;&#36825;&#20010; <acronym class="acronym">URL</acronym> &#26159;&#30495;&#23454;&#30340;&#65292;&#23427;&#30495;&#30340;&#26159;&#19968;&#20010; <acronym class="acronym">XML</acronym>&#12290;&#23427;&#26159; Slashdot (<a href="http://slashdot.org/">http://slashdot.org/</a>) &#31449;&#28857; (&#19968;&#20010;&#25216;&#26415;&#26032;&#38395;&#21644;&#38543;&#31508;&#31449;&#28857;) &#19978;&#24403;&#21069;&#26032;&#38395;&#25552;&#35201;&#30340; <acronym class="acronym">XML</acronym> &#34920;&#31034;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e25505"></a><p class="title"><b>&#20363;&nbsp;10.3.&nbsp;&#35299;&#26512;&#23383;&#31526;&#20018; <acronym class="acronym">XML</acronym> (&#23481;&#26131;&#20294;&#19981;&#28789;&#27963;&#30340;&#26041;&#24335;)</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">contents = "&lt;grammar&gt;&lt;ref id='bit'&gt;&lt;p&gt;0&lt;/p&gt;&lt;p&gt;1&lt;/p&gt;&lt;/ref&gt;&lt;/grammar&gt;"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parseString(contents)</span> <a name="kgp.openanything.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print xmldoc.toxml()</span>
<font color="teal">&lt;?xml version="1.0" ?&gt;
&lt;grammar&gt;&lt;ref id="bit"&gt;&lt;p&gt;0&lt;/p&gt;&lt;p&gt;1&lt;/p&gt;&lt;/ref&gt;&lt;/grammar&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.openanything.3.1">circled_1_delcric</a> </dt><dd><code class="filename">minidom</code> &#26377;&#19968;&#20010;&#26041;&#27861;&#65292;<code class="function">parseString</code>&#65292;&#23427;&#25509;&#25910;&#19968;&#20010;&#23383;&#31526;&#20018;&#24418;&#24335;&#30340;&#23436;&#25972; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20316;&#20026;&#21442;&#25968;&#24182;&#35299;&#26512;&#36825;&#20010;&#21442;&#25968;&#12290;&#22914;&#26524;&#20320;&#24050;&#32463;&#23558;&#25972;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#25918;&#20837;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#23427;&#20195;&#26367; <code class="function">minidom.parse</code>&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22909;&#21543;&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#20351;&#29992; <code class="function">minidom.parse</code> &#20989;&#25968;&#26469;&#35299;&#26512;&#26412;&#22320;&#25991;&#20214;&#21644;&#36828;&#31471; <acronym class="acronym">URL</acronym>&#65292;&#20294;&#23545;&#20110;&#35299;&#26512;&#23383;&#31526;&#20018;&#65292;&#20320;&#20351;&#29992;&#8230;&#8230;&#21478;&#19968;&#20010;&#20989;&#25968;&#12290;&#36825;&#23601;&#26159;&#35828;&#65292;&#22914;&#26524;&#20320;&#35201;&#20174;&#25991;&#20214;&#12289;<acronym class="acronym">URL</acronym> &#25110;&#32773;&#23383;&#31526;&#20018;&#25509;&#25910;&#36755;&#20837;&#65292;&#23601;&#38656;&#35201;&#29305;&#21035;&#30340;&#36923;&#36753;&#26469;&#21028;&#26029;&#21442;&#25968;&#26159;&#21542;&#26159;&#23383;&#31526;&#20018;&#65292;&#28982;&#21518;&#35843;&#29992; <code class="function">parseString</code>&#12290;&#22810;&#19981;&#35753;&#20154;&#28385;&#24847;&#12290;</p><p>&#22914;&#26524;&#26377;&#19968;&#20010;&#26041;&#27861;&#21487;&#20197;&#25226;&#23383;&#31526;&#20018;&#36716;&#25442;&#25104;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#37027;&#20040;&#20320;&#21482;&#35201;&#36825;&#20010;&#23545;&#35937;&#20256;&#36882;&#32473; <code class="function">minidom.parse</code> &#23601;&#21487;&#20197;&#20102;&#12290;&#20107;&#23454;&#19978;&#65292;&#26377;&#19968;&#20010;&#27169;&#22359;&#19987;&#38376;&#35774;&#35745;&#29992;&#26469;&#20570;&#36825;&#20214;&#20107;&#65306;<code class="filename">StringIO</code>&#12290;</p><div class="example"><a name="kgp.openanything.stringio.example"></a><p class="title"><b>&#20363;&nbsp;10.4.&nbsp;<code class="filename">StringIO</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">contents = "&lt;grammar&gt;&lt;ref id='bit'&gt;&lt;p&gt;0&lt;/p&gt;&lt;p&gt;1&lt;/p&gt;&lt;/ref&gt;&lt;/grammar&gt;"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import StringIO</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock = StringIO.StringIO(contents)</span>   <a name="kgp.openanything.4.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.read()</span>                          <a name="kgp.openanything.4.2"></a>circled_2_delcric
<font color="teal">"&lt;grammar&gt;&lt;ref id='bit'&gt;&lt;p&gt;0&lt;/p&gt;&lt;p&gt;1&lt;/p&gt;&lt;/ref&gt;&lt;/grammar&gt;"</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.read()</span>                          <a name="kgp.openanything.4.3"></a>circled_3_delcric
<font color="teal">''</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.seek(0)</span>                         <a name="kgp.openanything.4.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.read(15)</span>                        <a name="kgp.openanything.4.5"></a>circled_5_delcric
<font color="teal">'&lt;grammar&gt;&lt;ref i'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.read(15)</span>
<font color="teal">"d='bit'&gt;&lt;p&gt;0&lt;/p"</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.read()</span>
<font color="teal">'&gt;&lt;p&gt;1&lt;/p&gt;&lt;/ref&gt;&lt;/grammar&gt;'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.close()</span>                         <a name="kgp.openanything.4.6"></a>circled_6_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.openanything.4.1">circled_1_delcric</a> </dt><dd><code class="filename">StringIO</code> &#27169;&#22359;&#21482;&#21253;&#21547;&#20102;&#19968;&#20010;&#31867;&#65292;&#20063;&#21483; <code class="filename">StringIO</code>&#65292;&#23427;&#20801;&#35768;&#20320;&#23558;&#19968;&#20010;&#23383;&#31526;&#20018;&#36716;&#25442;&#20026;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#12290; <code class="filename">StringIO</code> &#31867;&#22312;&#21019;&#24314;&#23454;&#20363;&#26102;&#25509;&#25910;&#23383;&#31526;&#20018;&#20316;&#20026;&#21442;&#25968;&#12290;</dd><dt><a href="#kgp.openanything.4.2">circled_2_delcric</a> </dt><dd> &#29616;&#22312;&#20320;&#26377;&#20102;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#20320;&#21487;&#29992;&#23427;&#20570;&#31867;&#25991;&#20214;&#30340;&#25152;&#26377;&#20107;&#24773;&#12290;&#27604;&#22914; <code class="function">read</code> &#21487;&#20197;&#36820;&#22238;&#21407;&#22987;&#23383;&#31526;&#20018;&#12290;</dd><dt><a href="#kgp.openanything.4.3">circled_3_delcric</a> </dt><dd>&#20877;&#27425;&#35843;&#29992; <code class="function">read</code> &#36820;&#22238;&#31354;&#23383;&#31526;&#20018;&#12290;&#30495;&#23454;&#25991;&#20214;&#23545;&#35937;&#30340;&#24037;&#20316;&#26041;&#24335;&#20063;&#26159;&#36825;&#26679;&#30340;&#65307;&#19968;&#26086;&#20320;&#35835;&#21462;&#20102;&#25972;&#20010;&#25991;&#20214;&#65292;&#22914;&#26524;&#19981;&#26174;&#24335;&#23450;&#20301;&#21040;&#25991;&#20214;&#30340;&#24320;&#22987;&#20301;&#32622;&#65292;&#23601;&#19981;&#21487;&#33021;&#35835;&#21462;&#21040;&#20219;&#20309;&#20854;&#20182;&#25968;&#25454;&#12290;<code class="classname">StringIO</code> &#23545;&#35937;&#20197;&#30456;&#21516;&#30340;&#26041;&#24335;&#36827;&#34892;&#24037;&#20316;&#12290;</dd><dt><a href="#kgp.openanything.4.4">circled_4_delcric</a> </dt><dd>&#20351;&#29992; <code class="classname">StringIO</code> &#23545;&#35937;&#30340; <code class="function">seek</code> &#26041;&#27861;&#65292;&#20320;&#21487;&#20197;&#26174;&#24335;&#22320;&#23450;&#20301;&#21040;&#23383;&#31526;&#20018;&#30340;&#24320;&#22987;&#20301;&#32622;&#65292;&#23601;&#20687;&#22312;&#25991;&#20214;&#20013;&#23450;&#20301;&#19968;&#26679;&#12290;</dd><dt><a href="#kgp.openanything.4.5">circled_5_delcric</a> </dt><dd>&#23558;&#19968;&#20010; <code class="varname">size</code> &#21442;&#25968;&#20256;&#36882;&#32473; <code class="function">read</code> &#26041;&#27861;&#65292;&#20320;&#36824;&#21487;&#20197;&#20197;&#22359;&#30340;&#24418;&#24335;&#35835;&#21462;&#23383;&#31526;&#20018;&#12290;</dd><dt><a href="#kgp.openanything.4.6">circled_6_delcric</a> </dt><dd>&#20219;&#20309;&#26102;&#20505;&#65292;<code class="function">read</code> &#37117;&#23558;&#36820;&#22238;&#23383;&#31526;&#20018;&#30340;&#26410;&#35835;&#37096;&#20998;&#12290;&#25152;&#26377;&#36825;&#20123;&#20005;&#26684;&#22320;&#25353;&#25991;&#20214;&#23545;&#35937;&#30340;&#26041;&#24335;&#24037;&#20316;&#65307;&#36825;&#23601;&#26159;&#26415;&#35821;<span class="emphasis"><em>&#31867;&#25991;&#20214;&#23545;&#35937;</em></span> &#30340;&#26469;&#21382;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e25709"></a><p class="title"><b>&#20363;&nbsp;10.5.&nbsp;&#35299;&#26512;&#23383;&#31526;&#20018; <acronym class="acronym">XML</acronym> (&#31867;&#25991;&#20214;&#23545;&#35937;&#26041;&#24335;)</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">contents = "&lt;grammar&gt;&lt;ref id='bit'&gt;&lt;p&gt;0&lt;/p&gt;&lt;p&gt;1&lt;/p&gt;&lt;/ref&gt;&lt;/grammar&gt;"</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock = StringIO.StringIO(contents)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse(ssock)</span> <a name="kgp.openanything.5.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">ssock.close()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print xmldoc.toxml()</span>
<font color="teal">&lt;?xml version="1.0" ?&gt;
&lt;grammar&gt;&lt;ref id="bit"&gt;&lt;p&gt;0&lt;/p&gt;&lt;p&gt;1&lt;/p&gt;&lt;/ref&gt;&lt;/grammar&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.openanything.5.1">circled_1_delcric</a> </dt><dd>&#29616;&#22312;&#20320;&#21487;&#20197;&#25226;&#31867;&#25991;&#20214;&#23545;&#35937; (&#23454;&#38469;&#26159;&#19968;&#20010; <code class="classname">StringIO</code>) &#20256;&#36882;&#32473; <code class="function">minidom.parse</code>&#65292;&#23427;&#23558;&#35843;&#29992;&#23545;&#35937;&#30340; <code class="function">read</code> &#26041;&#27861;&#24182;&#39640;&#20852;&#22320;&#24320;&#22987;&#35299;&#26512;&#65292;&#32477;&#19981;&#20250;&#30693;&#36947;&#23427;&#30340;&#36755;&#20837;&#28304;&#33258;&#19968;&#20010;&#30828;&#32534;&#30721;&#30340;&#23383;&#31526;&#20018;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#29616;&#22312;&#20320;&#30693;&#36947;&#20102;&#22914;&#20309;&#20351;&#29992;&#21516;&#19968;&#20010;&#20989;&#25968;&#65292;<code class="function">minidom.parse</code>&#65292;&#26469;&#35299;&#26512;&#19968;&#20010;&#20445;&#23384;&#22312; web &#39029;&#38754;&#19978;&#12289;&#26412;&#22320;&#25991;&#20214;&#20013;&#25110;&#30828;&#32534;&#30721;&#23383;&#31526;&#20018;&#20013;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#12290;&#23545;&#20110;&#19968;&#20010; web &#39029;&#38754;&#65292;&#20351;&#29992; <code class="function">urlopen</code> &#24471;&#21040;&#31867;&#25991;&#20214;&#23545;&#35937;&#65307;&#23545;&#20110;&#26412;&#22320;&#25991;&#20214;&#65292;&#20351;&#29992; <code class="function">open</code>&#65307;&#23545;&#20110;&#23383;&#31526;&#20018;&#65292;&#20351;&#29992; <code class="classname">StringIO</code>&#12290;&#29616;&#22312;&#35753;&#25105;&#20204;&#36827;&#19968;&#27493;&#24182;&#24402;&#32435;&#19968;&#19979;<span class="emphasis"><em>&#36825;&#20123;</em></span> &#19981;&#21516;&#12290;</p><div class="example"><a name="kgp.openanything.example"></a><p class="title"><b>&#20363;&nbsp;10.6.&nbsp;<code class="function">openAnything</code></b></p><div class="example-contents"><pre class="programlisting">
def openAnything(source):                  <a name="kgp.openanything.6.1"></a>circled_1_delcric
    # try to open with urllib (if source is http, ftp, or file URL)
    import urllib                         
    try:                                  
        return urllib.urlopen(source)      <a name="kgp.openanything.6.2"></a>circled_2_delcric
    except (IOError, OSError):            
        pass                              

    # try to open with native open function (if source is pathname)
    try:                                  
        return open(source)                <a name="kgp.openanything.6.3"></a>circled_3_delcric
    except (IOError, OSError):            
        pass                              

    # treat source as string
    import StringIO                       
    return StringIO.StringIO(str(source))  <a name="kgp.openanything.6.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.openanything.6.1">circled_1_delcric</a> </dt><dd><code class="function">openAnything</code> &#20989;&#25968;&#25509;&#21463;&#21333;&#20010;&#21442;&#25968;&#65292;<code class="varname">source</code>&#65292;&#24182;&#36820;&#22238;&#31867;&#25991;&#20214;&#23545;&#35937;&#12290;<code class="varname">source</code> &#26159;&#26576;&#31181;&#31867;&#22411;&#30340;&#23383;&#31526;&#20018;&#65307;&#23427;&#21487;&#33021;&#26159;&#19968;&#20010; <acronym class="acronym">URL</acronym> (&#20363;&#22914; <code class="literal">'http://slashdot.org/slashdot.rdf'</code>)&#65292;&#19968;&#20010;&#26412;&#22320;&#25991;&#20214;&#30340;&#23436;&#25972;&#25110;&#32773;&#37096;&#20998;&#36335;&#24452;&#21517; (&#20363;&#22914; <code class="literal">'binary.xml'</code>)&#65292;&#25110;&#32773;&#26159;&#19968;&#20010;&#21253;&#21547;&#20102;&#24453;&#35299;&#26512; <acronym class="acronym">XML</acronym> &#25968;&#25454;&#30340;&#23383;&#31526;&#20018;&#12290;</dd><dt><a href="#kgp.openanything.6.2">circled_2_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#26816;&#26597; <code class="varname">source</code> &#26159;&#21542;&#26159;&#19968;&#20010; <acronym class="acronym">URL</acronym>&#12290;&#36825;&#37324;&#36890;&#36807;&#24378;&#21046;&#26041;&#24335;&#36827;&#34892;&#65306;&#23581;&#35797;&#25226;&#23427;&#24403;&#20316;&#19968;&#20010; <acronym class="acronym">URL</acronym> &#25171;&#24320;&#24182;&#38745;&#38745;&#22320;&#24573;&#30053;&#25171;&#24320;&#38750; <acronym class="acronym">URL</acronym> &#24341;&#36215;&#30340;&#38169;&#35823;&#12290;&#36825;&#26679;&#20570;&#38750;&#24120;&#22909;&#65292;&#22240;&#20026;&#22914;&#26524; <code class="filename">urllib</code> &#23558;&#26469;&#25903;&#25345;&#26356;&#22810;&#30340; <acronym class="acronym">URL</acronym> &#31867;&#22411;&#65292;&#19981;&#29992;&#37325;&#26032;&#32534;&#30721;&#23601;&#21487;&#20197;&#25903;&#25345;&#23427;&#20204;&#12290;&#22914;&#26524; <code class="filename">urllib</code> &#33021;&#22815;&#25171;&#24320; <code class="varname">source</code>&#65292;&#37027;&#20040; <code class="literal">return</code> &#21487;&#20197;&#31435;&#21051;&#25226;&#20320;&#36386;&#20986;&#20989;&#25968;&#65292;&#19979;&#38754;&#30340; <code class="literal">try</code> &#35821;&#21477;&#23558;&#19981;&#20250;&#25191;&#34892;&#12290;</dd><dt><a href="#kgp.openanything.6.3">circled_3_delcric</a> </dt><dd>&#21478;&#19968;&#26041;&#38754;&#65292;&#22914;&#26524; <code class="filename">urllib</code> &#21521;&#20320;&#21628;&#21898;&#24182;&#21578;&#35785;&#20320; <code class="varname">source</code> &#19981;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340; <acronym class="acronym">URL</acronym>&#65292;&#20320;&#20551;&#35774;&#23427;&#26159;&#19968;&#20010;&#30913;&#30424;&#25991;&#20214;&#30340;&#36335;&#24452;&#24182;&#23581;&#35797;&#25171;&#24320;&#23427;&#12290;&#20877;&#19968;&#27425;&#65292;&#20320;&#19981;&#29992;&#20570;&#20219;&#20309;&#29305;&#21035;&#30340;&#20107;&#26469;&#26816;&#26597; <code class="varname">source</code> &#26159;&#21542;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340;&#25991;&#20214;&#21517; (&#22312;&#19981;&#21516;&#30340;&#24179;&#21488;&#19978;&#65292;&#21028;&#26029;&#25991;&#20214;&#21517;&#26377;&#25928;&#24615;&#30340;&#35268;&#21017;&#21464;&#21270;&#24456;&#22823;&#65292;&#22240;&#27492;&#19981;&#31649;&#24590;&#26679;&#20570;&#37117;&#21487;&#33021;&#20250;&#21028;&#26029;&#38169;)&#12290;&#21453;&#32780;&#65292;&#21482;&#35201;&#30450;&#30446;&#22320;&#25171;&#24320;&#25991;&#20214;&#24182;&#38745;&#38745;&#22320;&#25429;&#33719;&#20219;&#20309;&#38169;&#35823;&#23601;&#21487;&#20197;&#20102;&#12290;</dd><dt><a href="#kgp.openanything.6.4">circled_4_delcric</a> </dt><dd>&#21040;&#36825;&#37324;&#65292;&#20320;&#38656;&#35201;&#20551;&#35774; <code class="varname">source</code> &#26159;&#19968;&#20010;&#20854;&#20013;&#26377;&#30828;&#32534;&#30721;&#25968;&#25454;&#30340;&#23383;&#31526;&#20018; (&#22240;&#20026;&#27809;&#26377;&#21035;&#30340;&#21487;&#20197;&#21028;&#26029;&#30340;&#20102;)&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#20351;&#29992; <code class="classname">StringIO</code> &#20174;&#20013;&#21019;&#24314;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#24182;&#23558;&#23427;&#36820;&#22238;&#12290;(&#23454;&#38469;&#19978;&#65292;&#30001;&#20110;&#20351;&#29992;&#20102; <code class="function">str</code> &#20989;&#25968;&#65292;&#25152;&#20197; <code class="varname">source</code> &#27809;&#26377;&#24517;&#35201;&#19968;&#23450;&#26159;&#23383;&#31526;&#20018;&#65307;&#23427;&#21487;&#20197;&#26159;&#20219;&#20309;&#23545;&#35937;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#23427;&#30340;&#23383;&#31526;&#20018;&#34920;&#31034;&#24418;&#24335;&#65292;&#21482;&#35201;&#23450;&#20041;&#20102;&#23427;&#30340; <code class="function">__str__</code> <a class="link" href="#fileinfo.morespecial" title="5.7.&nbsp;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;">&#19987;&#29992;&#26041;&#27861;</a>&#12290;)</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#20320;&#21487;&#20197;&#20351;&#29992;&#36825;&#20010; <code class="function">openAnything</code> &#20989;&#25968;&#32852;&#21512; <code class="function">minidom.parse</code> &#26500;&#36896;&#19968;&#20010;&#20989;&#25968;&#65292;&#25509;&#25910;&#19968;&#20010;&#25351;&#21521; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#30340; <code class="varname">source</code>&#65292;&#32780;&#19988;&#26080;&#38656;&#30693;&#36947;&#36825;&#20010; <code class="varname">source</code> &#30340;&#21547;&#20041; (&#21487;&#20197;&#26159;&#19968;&#20010; <acronym class="acronym">URL</acronym> &#25110;&#26159;&#19968;&#20010;&#26412;&#22320;&#25991;&#20214;&#21517;&#65292;&#25110;&#26159;&#19968;&#20010;&#30828;&#32534;&#30721; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#30340;&#23383;&#31526;&#20018;&#24418;&#24335;)&#65292;&#28982;&#21518;&#35299;&#26512;&#23427;&#12290;</p><div class="example"><a name="d0e25908"></a><p class="title"><b>&#20363;&nbsp;10.7.&nbsp;&#22312; <code class="filename">kgp.py</code> &#20013;&#20351;&#29992; <code class="function">openAnything</code></b></p><div class="example-contents"><pre class="programlisting">
class KantGenerator:
    def _load(self, source):
        sock = toolbox.openAnything(source)
        xmldoc = minidom.parse(sock).documentElement
        sock.close()
        return xmldoc</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.stdio"></a>10.2.&nbsp;&#26631;&#20934;&#36755;&#20837;&#12289;&#36755;&#20986;&#21644;&#38169;&#35823;</h2></div></div></div><div class="abstract"><p><acronym class="acronym">UNIX</acronym> &#29992;&#25143;&#24050;&#32463;&#23545;&#26631;&#20934;&#36755;&#20837;&#12289;&#26631;&#20934;&#36755;&#20986;&#21644;&#26631;&#20934;&#38169;&#35823;&#30340;&#27010;&#24565;&#38750;&#24120;&#29087;&#24713;&#20102;&#12290;&#36825;&#19968;&#33410;&#26159;&#20026;&#20854;&#20182;&#19981;&#29087;&#24713;&#30340;&#20154;&#20934;&#22791;&#30340;&#12290;</p></div><p>&#26631;&#20934;&#36755;&#20837;&#21644;&#26631;&#20934;&#38169;&#35823; (&#36890;&#24120;&#32553;&#20889;&#20026; <code class="literal">stdout</code> &#21644; <code class="literal">stderr</code>) &#26159;&#20869;&#24314;&#22312;&#27599;&#19968;&#20010; <acronym class="acronym">UNIX</acronym> &#31995;&#32479;&#20013;&#30340;&#31649;&#36947;&#12290;&#24403;&#20320; <code class="function">print</code> &#26576;&#20123;&#19996;&#35199;&#26102;&#65292;&#32467;&#26524;&#21069;&#24448; <code class="literal">stdout</code> &#31649;&#36947;&#65307;&#24403;&#20320;&#30340;&#31243;&#24207;&#23849;&#28291;&#24182;&#25171;&#21360;&#20986;&#35843;&#35797;&#20449;&#24687; (&#20363;&#22914; <span class="application">Python</span> &#20013;&#30340; traceback (&#38169;&#35823;&#36319;&#36394;)) &#30340;&#26102;&#20505;&#65292;&#20449;&#24687;&#21069;&#24448; <code class="literal">stderr</code> &#31649;&#36947;&#12290;&#36890;&#24120;&#36825;&#20004;&#20010;&#31649;&#36947;&#21482;&#19982;&#20320;&#27491;&#22312;&#24037;&#20316;&#30340;&#32456;&#31471;&#31383;&#21475;&#30456;&#32852;&#65292;&#25152;&#20197;&#24403;&#19968;&#20010;&#31243;&#24207;&#25171;&#21360;&#26102;&#65292;&#20320;&#21487;&#20197;&#30475;&#21040;&#36755;&#20986;&#65292;&#32780;&#24403;&#19968;&#20010;&#31243;&#24207;&#23849;&#28291;&#26102;&#65292;&#20320;&#21487;&#20197;&#30475;&#21040;&#35843;&#35797;&#20449;&#24687;&#12290;(&#22914;&#26524;&#20320;&#27491;&#22312;&#19968;&#20010;&#22522;&#20110;&#31383;&#21475;&#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#19978;&#24037;&#20316;&#65292;<code class="literal">stdout</code> &#21644; <code class="literal">stderr</code> &#32570;&#30465;&#20026;&#20320;&#30340;"<span class="quote">&#20132;&#20114;&#31383;&#21475;</span>"&#12290;)</p><div class="example"><a name="d0e25966"></a><p class="title"><b>&#20363;&nbsp;10.8.&nbsp;<code class="literal">stdout</code> &#21644; <code class="literal">stderr</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for i in rangecircled_3_delcric:</span>
<code class="prompt">...     </code><span class="userinput">print 'Dive in'</span>             <a name="kgp.stdio.1.1"></a>circled_1_delcric
<font color="teal">Dive in
Dive in
Dive in</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import sys</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for i in rangecircled_3_delcric:</span>
<code class="prompt">...     </code><span class="userinput">sys.stdout.write('Dive in')</span> <a name="kgp.stdio.1.2"></a>circled_2_delcric
<font color="teal">Dive inDive inDive in</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for i in rangecircled_3_delcric:</span>
<code class="prompt">...     </code><span class="userinput">sys.stderr.write('Dive in')</span> <a name="kgp.stdio.1.3"></a>circled_3_delcric
<font color="teal">Dive inDive inDive in</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.stdio.1.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#22312;<a class="xref" href="#fileinfo.for.counter" title="&#20363;&nbsp;6.9.&nbsp;&#31616;&#21333;&#35745;&#25968;">&#20363;&nbsp;6.9 &#8220;&#31616;&#21333;&#35745;&#25968;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; <span class="application">Python</span> &#20869;&#32622;&#30340; <code class="function">range</code> &#20989;&#25968;&#26469;&#26500;&#36896;&#31616;&#21333;&#30340;&#35745;&#25968;&#24490;&#29615;&#65292;&#21363;&#37325;&#22797;&#26576;&#29289;&#19968;&#23450;&#30340;&#27425;&#25968;&#12290;</dd><dt><a href="#kgp.stdio.1.2">circled_2_delcric</a> </dt><dd><code class="literal">stdout</code> &#26159;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#65307;&#35843;&#29992;&#23427;&#30340; <code class="function">write</code> &#20989;&#25968;&#21487;&#20197;&#25171;&#21360;&#20986;&#20320;&#32473;&#23450;&#30340;&#20219;&#20309;&#23383;&#31526;&#20018;&#12290;&#23454;&#38469;&#19978;&#65292;&#36825;&#23601;&#26159; <code class="function">print</code> &#20989;&#25968;&#30495;&#27491;&#20570;&#30340;&#20107;&#24773;&#65307;&#23427;&#22312;&#20320;&#25171;&#21360;&#30340;&#23383;&#31526;&#20018;&#21518;&#38754;&#21152;&#19978;&#19968;&#20010;&#30828;&#22238;&#36710;&#65292;&#28982;&#21518;&#35843;&#29992; <code class="function">sys.stdout.write</code> &#20989;&#25968;&#12290;</dd><dt><a href="#kgp.stdio.1.3">circled_3_delcric</a> </dt><dd>&#22312;&#26368;&#31616;&#21333;&#30340;&#20363;&#23376;&#20013;&#65292;<code class="literal">stdout</code> &#21644; <code class="literal">stderr</code> &#25226;&#23427;&#20204;&#30340;&#36755;&#20986;&#21457;&#36865;&#21040;&#30456;&#21516;&#30340;&#22320;&#26041;&#65306;<span class="application">Python</span> <acronym class="acronym">IDE</acronym> (&#22914;&#26524;&#20320;&#22312;&#19968;&#20010; <acronym class="acronym">IDE</acronym> &#20013;&#30340;&#35805;)&#65292;&#25110;&#32773;&#32456;&#31471; (&#22914;&#26524;&#20320;&#20174;&#21629;&#20196;&#34892;&#36816;&#34892; <span class="application">Python</span> &#30340;&#35805;)&#12290;&#21644; <code class="literal">stdout</code> &#19968;&#26679;&#65292;<code class="literal">stderr</code> &#24182;&#19981;&#20026;&#20320;&#28155;&#21152;&#30828;&#22238;&#36710;&#65307;&#22914;&#26524;&#38656;&#35201;&#65292;&#35201;&#33258;&#24049;&#21152;&#19978;&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="literal">stdout</code> &#21644; <code class="literal">stderr</code> &#37117;&#26159;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#23601;&#20687;&#22312;<a class="xref" href="#kgp.openanything" title="10.1.&nbsp;&#25277;&#35937;&#36755;&#20837;&#28304;">&#31532;&nbsp;10.1&nbsp;&#33410; &#8220;&#25277;&#35937;&#36755;&#20837;&#28304;&#8221;</a>&#20013;&#35752;&#35770;&#30340;&#19968;&#26679;&#65292;&#20294;&#26159;&#23427;&#20204;&#37117;&#26159;&#21482;&#20889;&#30340;&#12290;&#23427;&#20204;&#37117;&#27809;&#26377; <code class="function">read</code> &#26041;&#27861;&#65292;&#21482;&#26377; <code class="function">write</code> &#26041;&#27861;&#12290;&#28982;&#32780;&#65292;&#23427;&#20204;&#20173;&#28982;&#26159;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#22240;&#27492;&#20320;&#21487;&#20197;&#23558;&#20854;&#23427;&#20219;&#20309; (&#31867;) &#25991;&#20214;&#23545;&#35937;&#36171;&#20540;&#32473;&#23427;&#20204;&#26469;&#37325;&#23450;&#21521;&#20854;&#36755;&#20986;&#12290;</p><div class="example"><a name="d0e26093"></a><p class="title"><b>&#20363;&nbsp;10.9.&nbsp;&#37325;&#23450;&#21521;&#36755;&#20986;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">[you@localhost kgp]$ </code><span class="userinput">python stdout.py</span>
<font color="teal">Dive in</font>
<code class="prompt">[you@localhost kgp]$ </code><span class="userinput">cat out.log</span>
<font color="teal">This message will be logged instead of displayed</font></pre><p>(&#22312; Windows &#19978;&#65292;&#20320;&#35201;&#20351;&#29992; <code class="literal">type</code> &#26469;&#20195;&#26367; <code class="literal">cat</code> &#26174;&#31034;&#25991;&#20214;&#30340;&#20869;&#23481;&#12290;)</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
#stdout.py
import sys

print 'Dive in'                                          <a name="kgp.stdio.2.1"></a>circled_1_delcric
saveout = sys.stdout                                     <a name="kgp.stdio.2.2"></a>circled_2_delcric
fsock = open('out.log', 'w')                             <a name="kgp.stdio.2.3"></a>circled_3_delcric
sys.stdout = fsock                                       <a name="kgp.stdio.2.4"></a>circled_4_delcric
print 'This message will be logged instead of displayed' <a name="kgp.stdio.2.5"></a>circled_5_delcric
sys.stdout = saveout                                     <a name="kgp.stdio.2.6"></a>circled_6_delcric
fsock.close()                                            <a name="kgp.stdio.2.7"></a>circled_7_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.stdio.2.1">circled_1_delcric</a> </dt><dd>&#25171;&#21360;&#36755;&#20986;&#21040; <acronym class="acronym">IDE</acronym> "<span class="quote">&#20132;&#20114;&#31383;&#21475;</span>" (&#25110;&#32456;&#31471;&#65292;&#22914;&#26524;&#20174;&#21629;&#20196;&#34892;&#36816;&#34892;&#33050;&#26412;&#30340;&#35805;)&#12290;</dd><dt><a href="#kgp.stdio.2.2">circled_2_delcric</a> </dt><dd>&#22987;&#32456;&#22312;&#37325;&#23450;&#21521;&#21069;&#20445;&#23384; <code class="literal">stdout</code>&#65292;&#36825;&#26679;&#30340;&#35805;&#20043;&#21518;&#20320;&#36824;&#21487;&#20197;&#23558;&#20854;&#35774;&#22238;&#27491;&#24120;&#12290;</dd><dt><a href="#kgp.stdio.2.3">circled_3_delcric</a> </dt><dd>&#25171;&#24320;&#19968;&#20010;&#26032;&#25991;&#20214;&#29992;&#20110;&#20889;&#20837;&#12290;&#22914;&#26524;&#25991;&#20214;&#19981;&#23384;&#22312;&#65292;&#23558;&#20250;&#34987;&#21019;&#24314;&#12290;&#22914;&#26524;&#25991;&#20214;&#23384;&#22312;&#65292;&#23558;&#34987;&#35206;&#30422;&#12290;</dd><dt><a href="#kgp.stdio.2.4">circled_4_delcric</a> </dt><dd>&#25152;&#26377;&#21518;&#32493;&#30340;&#36755;&#20986;&#37117;&#20250;&#34987;&#37325;&#23450;&#21521;&#21040;&#21018;&#25165;&#25171;&#24320;&#30340;&#26032;&#25991;&#20214;&#19978;&#12290;</dd><dt><a href="#kgp.stdio.2.5">circled_5_delcric</a> </dt><dd>&#36825;&#26679;&#21482;&#20250;&#23558;&#36755;&#20986;&#32467;&#26524;"<span class="quote">&#25171;&#21360;</span>"&#21040;&#26085;&#24535;&#25991;&#20214;&#20013;&#65307;&#22312; <acronym class="acronym">IDE</acronym> &#31383;&#21475;&#20013;&#25110;&#22312;&#23631;&#24149;&#19978;&#19981;&#20250;&#30475;&#21040;&#36755;&#20986;&#32467;&#26524;&#12290;</dd><dt><a href="#kgp.stdio.2.6">circled_6_delcric</a> </dt><dd>&#22312;&#25105;&#20204;&#23558; <code class="literal">stdout</code> &#25630;&#20081;&#20043;&#21069;&#65292;&#35753;&#25105;&#20204;&#25226;&#23427;&#35774;&#22238;&#21407;&#26469;&#30340;&#26041;&#24335;&#12290;</dd><dt><a href="#kgp.stdio.2.7">circled_7_delcric</a> </dt><dd>&#20851;&#38381;&#26085;&#24535;&#25991;&#20214;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37325;&#23450;&#21521; <code class="literal">stderr</code> &#20197;&#23436;&#20840;&#30456;&#21516;&#30340;&#26041;&#24335;&#36827;&#34892;&#65292;&#21482;&#35201;&#25226; <code class="function">sys.stdout</code> &#25913;&#20026; <code class="function">sys.stderr</code>&#12290;</p><div class="example"><a name="d0e26193"></a><p class="title"><b>&#20363;&nbsp;10.10.&nbsp;&#37325;&#23450;&#21521;&#38169;&#35823;&#20449;&#24687;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">[you@localhost kgp]$ </code><span class="userinput">python stderr.py</span>
<code class="prompt">[you@localhost kgp]$ </code><span class="userinput">cat error.log</span>
<font color="teal">Traceback (most recent line last):
  File "stderr.py", line 5, in ?
    raise Exception, 'this error will be logged'
Exception: this error will be logged</font></pre><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
#stderr.py
import sys

fsock = open('error.log', 'w')               <a name="kgp.stdio.3.1"></a>circled_1_delcric
sys.stderr = fsock                           <a name="kgp.stdio.3.2"></a>circled_2_delcric
raise Exception, 'this error will be logged' <a name="kgp.stdio.3.3"></a>circled_3_delcric <a name="kgp.stdio.3.4"></a>circled_4_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.stdio.3.1">circled_1_delcric</a> </dt><dd>&#25171;&#24320;&#20320;&#35201;&#23384;&#20648;&#35843;&#35797;&#20449;&#24687;&#30340;&#26085;&#24535;&#25991;&#20214;&#12290;</dd><dt><a href="#kgp.stdio.3.2">circled_2_delcric</a> </dt><dd>&#23558;&#26032;&#25171;&#24320;&#30340;&#26085;&#24535;&#25991;&#20214;&#30340;&#25991;&#20214;&#23545;&#35937;&#36171;&#20540;&#32473; <code class="literal">stderr</code> &#20197;&#37325;&#23450;&#21521;&#26631;&#20934;&#38169;&#35823;&#12290;</dd><dt><a href="#kgp.stdio.3.3">circled_3_delcric</a> </dt><dd>&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#12290;&#20174;&#23631;&#24149;&#36755;&#20986;&#19978;&#21487;&#20197;&#27880;&#24847;&#21040;&#36825;&#20010;&#34892;&#20026;<span class="emphasis"><em>&#27809;&#26377;</em></span> &#22312;&#23631;&#24149;&#19978;&#25171;&#21360;&#20986;&#20219;&#20309;&#19996;&#35199;&#12290;&#25152;&#26377;&#27491;&#24120;&#30340;&#36319;&#36394;&#20449;&#24687;&#24050;&#32463;&#20889;&#36827; <code class="filename">error.log</code>&#12290;</dd><dt><a href="#kgp.stdio.3.4">circled_4_delcric</a> </dt><dd>&#36824;&#35201;&#27880;&#24847;&#20320;&#26082;&#27809;&#26377;&#26174;&#24335;&#20851;&#38381;&#26085;&#24535;&#25991;&#20214;&#65292;&#20063;&#27809;&#26377;&#23558; <code class="literal">stderr</code> &#35774;&#22238;&#26368;&#21021;&#30340;&#20540;&#12290;&#36825;&#26679;&#25402;&#22909;&#65292;&#22240;&#20026;&#19968;&#26086;&#31243;&#24207;&#23849;&#28291; (&#30001;&#20110;&#24341;&#21457;&#30340;&#24322;&#24120;)&#65292;<span class="application">Python</span> &#23558;&#26367;&#25105;&#20204;&#28165;&#29702;&#24182;&#20851;&#38381;&#25991;&#20214;&#65292;&#22240;&#27492;&#27704;&#36828;&#19981;&#24674;&#22797; <code class="literal">stderr</code> &#19981;&#20250;&#36896;&#25104;&#20160;&#20040;&#24433;&#21709;&#12290;&#28982;&#32780;&#23545;&#20110; <code class="literal">stdout</code>&#65292;&#24674;&#22797;&#21021;&#22987;&#20540;&#30456;&#23545;&#26356;&#20026;&#37325;&#35201;&#8213;&#8213;&#20320;&#21487;&#33021;&#20250;&#22312;&#21518;&#38754;&#20877;&#27425;&#25805;&#20316;&#26631;&#20934;&#36755;&#20986;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21521;&#26631;&#20934;&#38169;&#35823;&#20889;&#20837;&#38169;&#35823;&#20449;&#24687;&#26159;&#24456;&#24120;&#35265;&#30340;&#65292;&#25152;&#20197;&#26377;&#19968;&#31181;&#36739;&#24555;&#30340;&#35821;&#27861;&#21487;&#20197;&#31435;&#21051;&#23548;&#20986;&#20449;&#24687;&#12290;</p><div class="example"><a name="kgp.stdio.print.example"></a><p class="title"><b>&#20363;&nbsp;10.11.&nbsp;&#25171;&#21360;&#21040; <code class="literal">stderr</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print 'entering function'</span>
<font color="teal">entering function</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import sys</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print &gt;&gt; sys.stderr, 'entering function'</span> <a name="kgp.stdio.6.1"></a>circled_1_delcric
<font color="teal">entering function</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.stdio.6.1">circled_1_delcric</a> </dt><dd><code class="function">print</code> &#35821;&#21477;&#30340;&#24555;&#25463;&#35821;&#27861;&#21487;&#20197;&#29992;&#20110;&#20889;&#20837;&#20219;&#20309;&#25171;&#24320;&#30340;&#25991;&#20214; (&#25110;&#32773;&#26159;&#31867;&#25991;&#20214;&#23545;&#35937;)&#12290;&#22312;&#36825;&#37324;&#65292;&#20320;&#21487;&#20197;&#23558;&#21333;&#20010; <code class="function">print</code> &#35821;&#21477;&#37325;&#23450;&#21521;&#21040; <code class="literal">stderr</code> &#32780;&#19988;&#19981;&#29992;&#24433;&#21709;&#21518;&#38754;&#30340; <code class="function">print</code> &#35821;&#21477;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21478;&#19968;&#26041;&#38754;&#65292;&#26631;&#20934;&#36755;&#20837;&#26159;&#19968;&#20010;&#21482;&#35835;&#25991;&#20214;&#23545;&#35937;&#65292;&#23427;&#34920;&#31034;&#20174;&#21069;&#19968;&#20010;&#31243;&#24207;&#21040;&#36825;&#20010;&#31243;&#24207;&#30340;&#25968;&#25454;&#27969;&#12290;&#36825;&#20010;&#23545;&#20110;&#32769;&#30340; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#29992;&#25143;&#21644; Windows &#29992;&#25143;&#21487;&#33021;&#19981;&#22826;&#23481;&#26131;&#29702;&#35299;&#65292;&#38500;&#38750;&#20320;&#21463;&#21040;&#36807; <acronym class="acronym">MS-DOS</acronym> &#21629;&#20196;&#34892;&#30340;&#24433;&#21709;&#12290;&#22312; <acronym class="acronym">MS-DOS</acronym> &#21629;&#20196;&#34892;&#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#19968;&#34892;&#25351;&#20196;&#26500;&#36896;&#19968;&#20010;&#21629;&#20196;&#30340;&#38142;&#65292;&#20351;&#24471;&#19968;&#20010;&#31243;&#24207;&#30340;&#36755;&#20986;&#23601;&#21487;&#20197;&#25104;&#20026;&#19979;&#19968;&#20010;&#31243;&#24207;&#30340;&#36755;&#20837;&#12290;&#31532;&#19968;&#20010;&#31243;&#24207;&#21482;&#26159;&#31616;&#21333;&#22320;&#36755;&#20986;&#21040;&#26631;&#20934;&#36755;&#20986;&#19978; (&#31243;&#24207;&#26412;&#36523;&#27809;&#26377;&#20570;&#20219;&#20309;&#29305;&#21035;&#30340;&#37325;&#23450;&#21521;&#65292;&#21482;&#26159;&#25191;&#34892;&#20102;&#26222;&#36890;&#30340; <code class="function">print</code> &#35821;&#21477;&#31561;)&#65292;&#28982;&#21518;&#65292;&#19979;&#19968;&#20010;&#31243;&#24207;&#20174;&#26631;&#20934;&#36755;&#20837;&#20013;&#35835;&#21462;&#65292;&#25805;&#20316;&#31995;&#32479;&#23601;&#25226;&#19968;&#20010;&#31243;&#24207;&#30340;&#36755;&#20986;&#36830;&#25509;&#21040;&#19968;&#20010;&#31243;&#24207;&#30340;&#36755;&#20837;&#12290;</p><div class="example"><a name="d0e26323"></a><p class="title"><b>&#20363;&nbsp;10.12.&nbsp;&#38142;&#25509;&#21629;&#20196;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">[you@localhost kgp]$ </code><span class="userinput">python kgp.py -g binary.xml</span>         <a name="kgp.stdio.4.1"></a>circled_1_delcric
<font color="teal">01100111</font>
<code class="prompt">[you@localhost kgp]$ </code><span class="userinput">cat binary.xml</span>                      <a name="kgp.stdio.4.2"></a>circled_2_delcric
<font color="teal">&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE grammar PUBLIC "-//diveintopython.org//DTD Kant Generator Pro v1.0//EN" "kgp.dtd"&gt;
&lt;grammar&gt;
&lt;ref id="bit"&gt;
  &lt;p&gt;0&lt;/p&gt;
  &lt;p&gt;1&lt;/p&gt;
&lt;/ref&gt;
&lt;ref id="byte"&gt;
  &lt;p&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;\
&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;xref id="bit"/&gt;&lt;/p&gt;
&lt;/ref&gt;
&lt;/grammar&gt;</font>
<code class="prompt">[you@localhost kgp]$ </code><span class="userinput">cat binary.xml | python kgp.py -g -</span> <a name="kgp.stdio.4.3"></a>circled_3_delcric <a name="kgp.stdio.4.4"></a>circled_4_delcric
<font color="teal">10110001</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.stdio.4.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312;<a class="xref" href="#kgp.divein" title="9.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;9.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;&#35813;&#21629;&#20196;&#23558;&#21482;&#25171;&#21360;&#19968;&#20010;&#38543;&#26426;&#30340;&#20843;&#20301;&#23383;&#31526;&#20018;&#65292;&#20854;&#20013;&#21482;&#26377; <code class="constant">0</code> &#25110;&#32773; <code class="constant">1</code>&#12290;</dd><dt><a href="#kgp.stdio.4.2">circled_2_delcric</a> </dt><dd>&#35813;&#22788;&#21482;&#26159;&#31616;&#21333;&#22320;&#25171;&#21360;&#20986;&#25972;&#20010; <code class="filename">binary.xml</code> &#25991;&#26723;&#30340;&#20869;&#23481;&#12290;(Windows &#29992;&#25143;&#24212;&#35813;&#29992; <code class="literal">type</code> &#20195;&#26367; <code class="literal">cat</code>&#12290;)</dd><dt><a href="#kgp.stdio.4.3">circled_3_delcric</a> </dt><dd>&#35813;&#22788;&#25171;&#21360; <code class="filename">binary.xml</code> &#30340;&#20869;&#23481;&#65292;&#20294;&#26159;"<span class="quote"><code class="literal">|</code></span>"&#23383;&#31526;&#65292;&#31216;&#20026;"<span class="quote">&#31649;&#36947;</span>"&#31526;&#65292;&#35828;&#26126;&#20869;&#23481;&#19981;&#20250;&#25171;&#21360;&#21040;&#23631;&#24149;&#19978;&#65307;&#23427;&#20204;&#20250;&#25104;&#20026;&#19979;&#19968;&#20010;&#21629;&#20196;&#30340;&#26631;&#20934;&#36755;&#20837;&#65292;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#26159;&#20320;&#35843;&#29992;&#30340; <span class="application">Python</span> &#33050;&#26412;&#12290;</dd><dt><a href="#kgp.stdio.4.4">circled_4_delcric</a> </dt><dd>&#20026;&#20102;&#19981;&#29992;&#25351;&#23450;&#19968;&#20010;&#25991;&#20214; (&#20363;&#22914; <code class="filename">binary.xml</code>)&#65292;&#20320;&#38656;&#35201;&#25351;&#23450;"<span class="quote"><code class="literal">-</code></span>"&#65292;&#23427;&#20250;&#20351;&#24471;&#20320;&#30340;&#33050;&#26412;&#20174;&#26631;&#20934;&#36755;&#20837;&#36733;&#20837;&#33050;&#26412;&#65292;&#32780;&#19981;&#26159;&#20174;&#30913;&#30424;&#19978;&#30340;&#29305;&#23450;&#25991;&#20214;&#12290; (&#19979;&#19968;&#20010;&#20363;&#23376;&#26356;&#22810;&#22320;&#35828;&#26126;&#20102;&#36825;&#26159;&#22914;&#20309;&#23454;&#29616;&#30340;)&#12290;&#25152;&#20197;&#25928;&#26524;&#21644;&#31532;&#19968;&#31181;&#35821;&#27861;&#26159;&#19968;&#26679;&#30340;&#65292;&#22312;&#37027;&#37324;&#20320;&#35201;&#30452;&#25509;&#25351;&#23450;&#35821;&#27861;&#25991;&#20214;&#65292;&#20294;&#26159;&#24819;&#24819;&#36825;&#37324;&#30340;&#25193;&#23637;&#24615;&#12290;&#35753;&#25105;&#20204;&#25226; <code class="literal">cat binary.xml</code> &#25442;&#25104;&#21035;&#30340;&#20160;&#20040;&#19996;&#35199;&#8213;&#8213;&#20363;&#22914;&#36816;&#34892;&#19968;&#20010;&#33050;&#26412;&#21160;&#24577;&#29983;&#25104;&#35821;&#27861;&#8213;&#8213;&#28982;&#21518;&#36890;&#36807;&#31649;&#36947;&#23558;&#23427;&#23548;&#20837;&#20320;&#30340;&#33050;&#26412;&#12290;&#23427;&#21487;&#20197;&#26469;&#28304;&#20110;&#20219;&#20309;&#22320;&#26041;&#65306;&#25968;&#25454;&#24211;&#65292;&#25110;&#32773;&#26159;&#29983;&#25104;&#35821;&#27861;&#30340;&#20803;&#33050;&#26412;&#65292;&#25110;&#32773;&#20854;&#20182;&#12290;&#20320;&#26681;&#26412;&#19981;&#38656;&#35201;&#20462;&#25913;&#20320;&#30340; <code class="filename">kgp.py</code> &#33050;&#26412;&#23601;&#21487;&#20197;&#24182;&#20837;&#36825;&#20010;&#21151;&#33021;&#12290;&#20320;&#35201;&#20570;&#30340;&#20165;&#20165;&#26159;&#20174;&#26631;&#20934;&#36755;&#20837;&#21462;&#24471;&#19968;&#20010;&#35821;&#27861;&#25991;&#20214;&#65292;&#28982;&#21518;&#20320;&#23601;&#21487;&#20197;&#23558;&#20854;&#20182;&#30340;&#36923;&#36753;&#20998;&#31163;&#20986;&#26469;&#65292;&#25918;&#21040;&#21478;&#19968;&#31243;&#24207;&#20013;&#21435;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#33050;&#26412;&#26159;&#22914;&#20309;"<span class="quote">&#30693;&#36947;</span>"&#22312;&#35821;&#27861;&#25991;&#20214;&#26159;"<span class="quote"><code class="literal">-</code></span>"&#26102;&#20174;&#26631;&#20934;&#36755;&#20837;&#35835;&#21462;? &#20854;&#23454;&#19981;&#31070;&#22855;&#65307;&#23427;&#21482;&#26159;&#20195;&#30721;&#12290;</p><div class="example"><a name="d0e26424"></a><p class="title"><b>&#20363;&nbsp;10.13.&nbsp;&#22312; <code class="filename">kgp.py</code> &#20013;&#20174;&#26631;&#20934;&#36755;&#20837;&#35835;&#21462;</b></p><div class="example-contents"><pre class="programlisting">
def openAnything(source):
    if source == "-":    <a name="kgp.stdio.5.1"></a>circled_1_delcric
        import sys
        return sys.stdin

    # try to open with urllib (if source is http, ftp, or file URL)
    import urllib
    try:

[... snip ...]</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.stdio.5.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159; <code class="filename">toolbox.py</code> &#20013;&#30340; <code class="function">openAnything</code> &#20989;&#25968;&#65292;&#20197;&#21069;&#22312;<a class="xref" href="#kgp.openanything" title="10.1.&nbsp;&#25277;&#35937;&#36755;&#20837;&#28304;">&#31532;&nbsp;10.1&nbsp;&#33410; &#8220;&#25277;&#35937;&#36755;&#20837;&#28304;&#8221;</a>&#20013;&#20320;&#24050;&#32463;&#26816;&#35270;&#36807;&#20102;&#12290;&#25152;&#26377;&#20320;&#35201;&#20570;&#30340;&#23601;&#26159;&#22312;&#20989;&#25968;&#30340;&#24320;&#22987;&#21152;&#20837; 3 &#34892;&#20195;&#30721;&#26469;&#26816;&#27979;&#28304;&#26159;&#21542;&#26159;"<span class="quote"><code class="literal">-</code></span>"&#65307;&#22914;&#26524;&#26159;&#65292;&#36820;&#22238; <code class="literal">sys.stdin</code>&#12290;&#23601;&#36825;&#20040;&#31616;&#21333;&#65281;&#35760;&#20303;&#65292;<code class="literal">stdin</code> &#26159;&#19968;&#20010;&#25317;&#26377; <code class="function">read</code> &#26041;&#27861;&#30340;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#25152;&#20197;&#20854;&#23427;&#30340;&#20195;&#30721; (&#22312; <code class="filename">kgp.py</code> &#20013;&#65292;&#22312;&#37027;&#37324;&#20320;&#35843;&#29992;&#20102; <code class="function">openAnything</code>) &#19968;&#28857;&#37117;&#19981;&#38656;&#35201;&#25913;&#21160;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.cache"></a>10.3.&nbsp;&#26597;&#35810;&#32531;&#20914;&#33410;&#28857;</h2></div></div></div><div class="abstract"><p><code class="filename">kgp.py</code> &#20351;&#29992;&#20102;&#22810;&#31181;&#25216;&#24039;&#65292;&#22312;&#20320;&#36827;&#34892; <acronym class="acronym">XML</acronym> &#22788;&#29702;&#26102;&#65292;&#23427;&#20204;&#25110;&#35768;&#33021;&#27966;&#19978;&#29992;&#22330;&#12290;&#31532;&#19968;&#20010;&#23601;&#26159;&#65292;&#21033;&#29992;&#36755;&#20837;&#25991;&#26723;&#30340;&#32467;&#26500;&#31283;&#23450;&#29305;&#24449;&#26469;&#26500;&#24314;&#33410;&#28857;&#32531;&#20914;&#12290;</p></div><p>&#19968;&#20010;&#35821;&#27861;&#25991;&#20214;&#23450;&#20041;&#20102;&#19968;&#31995;&#21015;&#30340; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#12290;&#27599;&#20010; <code class="sgmltag-element">ref</code> &#21253;&#21547;&#20102;&#19968;&#20010;&#25110;&#22810;&#20010; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;<code class="sgmltag-element">p</code> &#20803;&#32032;&#21017;&#21487;&#20197;&#21253;&#21547;&#24456;&#22810;&#19981;&#21516;&#30340;&#19996;&#35199;&#65292;&#21253;&#25324; <code class="sgmltag-element">xref</code>&#12290;&#23545;&#20110;&#27599;&#20010; <code class="sgmltag-element">xref</code>&#65292;&#20320;&#37117;&#33021;&#25214;&#21040;&#30456;&#23545;&#24212;&#30340; <code class="sgmltag-element">ref</code> &#20803;&#32032; (&#23427;&#20204;&#20855;&#26377;&#30456;&#21516;&#30340; <code class="sgmltag-element">id</code> &#23646;&#24615;)&#65292;&#28982;&#21518;&#36873;&#25321; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#30340;&#23376;&#20803;&#32032;&#20043;&#19968;&#36827;&#34892;&#35299;&#26512;&#12290;(&#22312;&#19979;&#19968;&#37096;&#20998;&#20013;&#20320;&#23558;&#30475;&#21040;&#26159;&#22914;&#20309;&#36827;&#34892;&#36825;&#31181;&#38543;&#26426;&#36873;&#25321;&#30340;&#12290;)</p><p>&#35821;&#27861;&#30340;&#26500;&#24314;&#26041;&#24335;&#22914;&#19979;&#65306;&#20808;&#20026;&#26368;&#23567;&#30340;&#29255;&#27573;&#23450;&#20041; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#65292;&#28982;&#21518;&#20351;&#29992; <code class="sgmltag-element">xref</code> &#23450;&#20041;&#8220;&#21253;&#21547;&#8221;&#31532;&#19968;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#30340; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#65292;&#31561;&#31561;&#12290;&#28982;&#21518;&#65292;&#35299;&#26512;&#8220;&#26368;&#22823;&#30340;&#8221;&#24341;&#29992;&#24182;&#36319;&#30528; <code class="sgmltag-element">xref</code> &#36339;&#26469;&#36339;&#21435;&#65292;&#26368;&#21518;&#36755;&#20986;&#30495;&#23454;&#30340;&#25991;&#26412;&#12290;&#36755;&#20986;&#30340;&#25991;&#26412;&#20381;&#36182;&#20110;&#20320;&#27599;&#27425;&#22635;&#20805; <code class="sgmltag-element">xref</code> &#26102;&#25152;&#20570;&#30340; (&#38543;&#26426;) &#20915;&#31574;&#65292;&#25152;&#20197;&#27599;&#27425;&#30340;&#36755;&#20986;&#37117;&#26159;&#19981;&#21516;&#30340;&#12290;</p><p>&#36825;&#31181;&#26041;&#24335;&#38750;&#24120;&#28789;&#27963;&#65292;&#20294;&#26159;&#26377;&#19968;&#20010;&#19981;&#22909;&#30340;&#22320;&#26041;&#65306;&#24615;&#33021;&#12290;&#24403;&#20320;&#25214;&#21040;&#19968;&#20010; <code class="sgmltag-element">xref</code> &#24182;&#38656;&#35201;&#25214;&#21040;&#30456;&#24212;&#30340; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#26102;&#65292;&#20250;&#36935;&#21040;&#19968;&#20010;&#38382;&#39064;&#12290;<code class="sgmltag-element">xref</code> &#26377; <code class="sgmltag-element">id</code> &#23646;&#24615;&#65292;&#32780;&#20320;&#35201;&#25214;&#25317;&#26377;&#30456;&#21516; <code class="sgmltag-element">id</code> &#23646;&#24615;&#30340; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#65292;&#20294;&#26159;&#27809;&#26377;&#31616;&#21333;&#30340;&#26041;&#24335;&#20570;&#21040;&#36825;&#20214;&#20107;&#12290;&#36739;&#24930;&#30340;&#26041;&#24335;&#26159;&#27599;&#27425;&#33719;&#21462;&#25152;&#26377; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#30340;&#23436;&#25972;&#21015;&#34920;&#65292;&#28982;&#21518;&#25163;&#21160;&#36941;&#21382;&#24182;&#26816;&#35270;&#27599;&#19968;&#20010; <code class="sgmltag-element">id</code> &#23646;&#24615;&#12290;&#36739;&#24555;&#30340;&#26041;&#24335;&#26159;&#21482;&#20570;&#19968;&#27425;&#65292;&#28982;&#21518;&#20197;&#23383;&#20856;&#24418;&#24335;&#26500;&#24314;&#19968;&#20010;&#32531;&#20914;&#12290;</p><div class="example"><a name="d0e26553"></a><p class="title"><b>&#20363;&nbsp;10.14.&nbsp;<code class="function">loadGrammar</code></b></p><div class="example-contents"><pre class="programlisting">
    def loadGrammar(self, grammar):                         
        self.grammar = self._load(grammar)                  
        self.refs = {}                                       <a name="kgp.cache.1.1"></a>circled_1_delcric
        for ref in self.grammar.getElementsByTagName("ref"): <a name="kgp.cache.1.2"></a>circled_2_delcric
            self.refs[ref.attributes["id"].value] = ref      <a name="kgp.cache.1.3"></a>circled_3_delcric <a name="kgp.cache.1.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.cache.1.1">circled_1_delcric</a> </dt><dd>&#20174;&#21019;&#24314;&#19968;&#20010;&#31354;&#23383;&#20856; <code class="varname">self.refs</code> &#24320;&#22987;&#12290;</dd><dt><a href="#kgp.cache.1.2">circled_2_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312;<a class="xref" href="#kgp.search" title="9.5.&nbsp;&#25628;&#32034;&#20803;&#32032;">&#31532;&nbsp;9.5&nbsp;&#33410; &#8220;&#25628;&#32034;&#20803;&#32032;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;<code class="function">getElementsByTagName</code> &#36820;&#22238;&#25152;&#26377;&#29305;&#23450;&#21517;&#31216;&#20803;&#32032;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;&#20320;&#21487;&#20197;&#24456;&#23481;&#26131;&#22320;&#24471;&#21040;&#25152;&#26377; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#30340;&#19968;&#20010;&#21015;&#34920;&#65292;&#28982;&#21518;&#36941;&#21382;&#36825;&#20010;&#21015;&#34920;&#12290;</dd><dt><a href="#kgp.cache.1.3">circled_3_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312;<a class="xref" href="#kgp.attributes" title="9.6.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;">&#31532;&nbsp;9.6&nbsp;&#33410; &#8220;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;&#20351;&#29992;&#26631;&#20934;&#30340;&#23383;&#20856;&#35821;&#27861;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#21517;&#31216;&#26469;&#35775;&#38382;&#20010;&#21035;&#20803;&#32032;&#12290;&#25152;&#20197;&#65292;<code class="varname">self.refs</code> &#23383;&#20856;&#30340;&#38190;&#23558;&#26159;&#27599;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#30340; <code class="sgmltag-element">id</code> &#23646;&#24615;&#20540;&#12290;</dd><dt><a href="#kgp.cache.1.4">circled_4_delcric</a> </dt><dd><code class="varname">self.refs</code> &#23383;&#20856;&#30340;&#20540;&#23558;&#26159; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#26412;&#36523;&#12290;&#22914;&#20320;&#22312;<a class="xref" href="#kgp.parse" title="9.3.&nbsp;XML &#35299;&#26512;">&#31532;&nbsp;9.3&nbsp;&#33410; &#8220;<acronym class="acronym">XML</acronym> &#35299;&#26512;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;&#24050;&#35299;&#26512; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#12289;&#33410;&#28857;&#12289;&#27880;&#37322;&#21644;&#25991;&#26412;&#29255;&#27573;&#37117;&#26159;&#19968;&#20010;&#23545;&#35937;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21482;&#35201;&#26500;&#24314;&#20102;&#36825;&#20010;&#32531;&#20914;&#65292;&#26080;&#35770;&#20309;&#26102;&#20320;&#36935;&#21040;&#19968;&#20010; <code class="sgmltag-element">xref</code> &#24182;&#19988;&#38656;&#35201;&#25214;&#21040;&#20855;&#26377;&#30456;&#21516; <code class="sgmltag-element">id</code> &#23646;&#24615;&#30340; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#65292;&#37117;&#21482;&#38656;&#22312; <code class="varname">self.refs</code> &#20013;&#26597;&#25214;&#23427;&#12290;</p><div class="example"><a name="d0e26625"></a><p class="title"><b>&#20363;&nbsp;10.15.&nbsp;&#20351;&#29992; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#32531;&#20914;</b></p><div class="example-contents"><pre class="programlisting">
    def do_xref(self, node):
        id = node.attributes["id"].value
        self.parse(self.randomChildElement(self.refs[id]))</pre></div></div><br class="example-break"><p>&#20320;&#23558;&#22312;&#19979;&#19968;&#37096;&#20998;&#25506;&#31350; <code class="function">randomChildElement</code> &#20989;&#25968;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.child"></a>10.4.&nbsp;&#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;</h2></div></div></div><div class="abstract"><p>&#35299;&#26512; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#21478;&#19968;&#20010;&#26377;&#29992;&#30340;&#24049;&#25216;&#24039;&#26159;&#26597;&#25214;&#26576;&#20010;&#29305;&#23450;&#20803;&#32032;&#30340;&#25152;&#26377;&#30452;&#25509;&#23376;&#20803;&#32032;&#12290;&#20363;&#22914;&#65292;&#22312;&#35821;&#27861;&#25991;&#20214;&#20013;&#65292;&#19968;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#21487;&#20197;&#26377;&#25968;&#20010; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#20854;&#20013;&#27599;&#19968;&#20010;&#37117;&#21487;&#20197;&#21253;&#21547;&#24456;&#22810;&#19996;&#35199;&#65292;&#21253;&#25324;&#20854;&#20182;&#30340; <code class="sgmltag-element">p</code> &#20803;&#32032;&#12290;&#20320;&#21482;&#35201;&#26597;&#25214;&#20316;&#20026; <code class="sgmltag-element">ref</code> &#23401;&#23376;&#30340; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#19981;&#29992;&#26597;&#25214;&#20854;&#20182; <code class="sgmltag-element">p</code> &#20803;&#32032;&#30340;&#23401;&#23376; <code class="sgmltag-element">p</code> &#20803;&#32032;&#12290;</p></div><p>&#20320;&#21487;&#33021;&#35748;&#20026;&#20320;&#21482;&#35201;&#31616;&#21333;&#22320;&#20351;&#29992; <code class="function">getElementsByTagName</code> &#26469;&#23454;&#29616;&#36825;&#28857;&#23601;&#21487;&#20197;&#20102;&#65292;&#20294;&#26159;&#20320;&#19981;&#21487;&#20197;&#36825;&#20040;&#20570;&#12290;<code class="function">getElementsByTagName</code> &#36882;&#24402;&#25628;&#32034;&#24182;&#36820;&#22238;&#25152;&#26377;&#25214;&#21040;&#30340;&#20803;&#32032;&#30340;&#21333;&#20010;&#21015;&#34920;&#12290;&#30001;&#20110; <code class="sgmltag-element">p</code> &#20803;&#32032;&#21487;&#20197;&#21253;&#21547;&#20854;&#20182;&#30340; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#20320;&#19981;&#33021;&#20351;&#29992; <code class="function">getElementsByTagName</code>&#65292;&#22240;&#20026;&#23427;&#20250;&#36820;&#22238;&#20320;&#19981;&#35201;&#30340;&#23884;&#22871; <code class="sgmltag-element">p</code> &#20803;&#32032;&#12290;&#20026;&#20102;&#21482;&#25214;&#21040;&#30452;&#25509;&#23376;&#20803;&#32032;&#65292;&#20320;&#35201;&#33258;&#24049;&#36827;&#34892;&#22788;&#29702;&#12290;</p><div class="example"><a name="d0e26690"></a><p class="title"><b>&#20363;&nbsp;10.16.&nbsp;&#26597;&#25214;&#30452;&#25509;&#23376;&#20803;&#32032;</b></p><div class="example-contents"><pre class="programlisting">
    def randomChildElement(self, node):
        choices = [e for e in node.childNodes
                   if e.nodeType == e.ELEMENT_NODE] <a name="kgp.child.1.1"></a>circled_1_delcric <a name="kgp.child.1.2"></a>circled_2_delcric <a name="kgp.child.1.3"></a>circled_3_delcric
        chosen = random.choice(choices)             <a name="kgp.child.1.4"></a>circled_4_delcric
        return chosen                              </pre><div class="calloutlist"><dl compact><dt><a href="#kgp.child.1.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312;<a class="xref" href="#kgp.parse.gettingchildnodes.example" title="&#20363;&nbsp;9.9.&nbsp;&#33719;&#21462;&#23376;&#33410;&#28857;">&#20363;&nbsp;9.9 &#8220;&#33719;&#21462;&#23376;&#33410;&#28857;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;<code class="function">childNodes</code> &#23646;&#24615;&#36820;&#22238;&#20803;&#32032;&#25152;&#26377;&#23376;&#33410;&#28857;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;</dd><dt><a href="#kgp.child.1.2">circled_2_delcric</a> </dt><dd>&#28982;&#32780;&#65292;&#27491;&#22914;&#20320;&#22312;<a class="xref" href="#kgp.parse.childnodescanbetext.example" title="&#20363;&nbsp;9.11.&nbsp;&#23376;&#33410;&#28857;&#21487;&#20197;&#26159;&#25991;&#26412;">&#20363;&nbsp;9.11 &#8220;&#23376;&#33410;&#28857;&#21487;&#20197;&#26159;&#25991;&#26412;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;<code class="function">childNodes</code> &#36820;&#22238;&#30340;&#21015;&#34920;&#21253;&#21547;&#20102;&#25152;&#26377;&#19981;&#21516;&#31867;&#22411;&#30340;&#33410;&#28857;&#65292;&#21253;&#25324;&#25991;&#26412;&#33410;&#28857;&#12290;&#36825;&#24182;&#19981;&#26159;&#20320;&#22312;&#36825;&#37324;&#35201;&#26597;&#25214;&#30340;&#12290;&#20320;&#21482;&#35201;&#20803;&#32032;&#24418;&#24335;&#30340;&#23401;&#23376;&#12290;</dd><dt><a href="#kgp.child.1.3">circled_3_delcric</a> </dt><dd>&#27599;&#20010;&#33410;&#28857;&#37117;&#26377;&#19968;&#20010; <code class="varname">nodeType</code> &#23646;&#24615;&#65292;&#23427;&#21487;&#20197;&#26159;<code class="literal">ELEMENT_NODE</code>, <code class="literal">TEXT_NODE</code>, <code class="literal">COMMENT_NODE</code>&#65292;&#25110;&#32773;&#20854;&#23427;&#20540;&#12290;&#21487;&#33021;&#20540;&#30340;&#23436;&#25972;&#21015;&#34920;&#22312; <code class="classname">xml.dom</code> &#21253;&#30340; <code class="filename">__init__.py</code> &#25991;&#20214;&#20013;&#12290;(&#20851;&#20110;&#21253;&#30340;&#20171;&#32461;&#65292;&#21442;&#35265;<a class="xref" href="#kgp.packages" title="9.2.&nbsp;&#21253;">&#31532;&nbsp;9.2&nbsp;&#33410; &#8220;&#21253;&#8221;</a>&#12290;) &#20294;&#20320;&#21482;&#26159;&#23545;&#20803;&#32032;&#33410;&#28857;&#26377;&#20852;&#36259;&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#36807;&#28388;&#20986;&#19968;&#20010;&#21015;&#34920;&#65292;&#20854;&#20013;&#21482;&#21253;&#21547; <code class="varname">nodeType</code> &#26159;<code class="literal">ELEMENT_NODE</code>&#30340;&#33410;&#28857;&#12290;</dd><dt><a href="#kgp.child.1.4">circled_4_delcric</a> </dt><dd>&#21482;&#35201;&#25317;&#26377;&#20102;&#19968;&#20010;&#30495;&#23454;&#20803;&#32032;&#30340;&#21015;&#34920;&#65292;&#36873;&#25321;&#20219;&#24847;&#19968;&#20010;&#37117;&#24456;&#23481;&#26131;&#12290;<span class="application">Python</span> &#26377;&#19968;&#20010;&#21483; <code class="filename">random</code> &#30340;&#27169;&#22359;&#65292;&#23427;&#21253;&#21547;&#20102;&#22909;&#20960;&#20010;&#26377;&#29992;&#30340;&#20989;&#25968;&#12290;<code class="function">random.choice</code> &#20989;&#25968;&#25509;&#25910;&#19968;&#20010;&#20219;&#24847;&#25968;&#37327;&#26465;&#30446;&#30340;&#21015;&#34920;&#24182;&#38543;&#26426;&#36820;&#22238;&#20854;&#20013;&#30340;&#19968;&#20010;&#26465;&#30446;&#12290;&#27604;&#22914;&#65292;&#22914;&#26524; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#21253;&#21547;&#20102;&#22810;&#20010; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#37027;&#20040; <code class="varname">choices</code> &#23558;&#20250;&#26159; <code class="sgmltag-element">p</code> &#20803;&#32032;&#30340;&#19968;&#20010;&#21015;&#34920;&#65292;&#32780; <code class="varname">chosen</code> &#23558;&#34987;&#36171;&#20104;&#20854;&#20013;&#30340;&#26576;&#19968;&#20010;&#20540;&#65292;&#32780;&#36825;&#20010;&#20540;&#26159;&#38543;&#26426;&#36873;&#25321;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.handler"></a>10.5.&nbsp;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;</h2></div></div></div><div class="abstract"><p>&#31532;&#19977;&#20010;&#26377;&#29992;&#30340; <acronym class="acronym">XML</acronym> &#22788;&#29702;&#25216;&#24039;&#26159;&#23558;&#20320;&#30340;&#20195;&#30721;&#22522;&#20110;&#33410;&#28857;&#31867;&#22411;&#21644;&#20803;&#32032;&#21517;&#31216;&#20998;&#25955;&#21040;&#36923;&#36753;&#20989;&#25968;&#20013;&#12290;&#35299;&#26512;&#21518;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26159;&#30001;&#21508;&#31181;&#31867;&#22411;&#30340;&#33410;&#28857;&#32452;&#25104;&#30340;&#65292;&#27599;&#19968;&#20010;&#37117;&#26159;&#36890;&#36807; <span class="application">Python</span> &#23545;&#35937;&#34920;&#31034;&#30340;&#12290;&#25991;&#26723;&#26412;&#36523;&#30340;&#26681;&#23618;&#27425;&#36890;&#36807;&#19968;&#20010; <code class="classname">Document</code> &#23545;&#35937;&#34920;&#31034;&#12290;<code class="classname">Document</code> &#36824;&#21253;&#21547;&#20102;&#19968;&#20010;&#25110;&#22810;&#20010; <code class="classname">Element</code> &#23545;&#35937; (&#34920;&#31034; <acronym class="acronym">XML</acronym> &#26631;&#35760;)&#65292;&#20854;&#20013;&#30340;&#27599;&#19968;&#20010;&#21487;&#20197;&#21253;&#21547;&#20854;&#23427;&#30340; <code class="classname">Element</code> &#23545;&#35937;&#12289;<code class="classname">Text</code> &#23545;&#35937; (&#34920;&#31034;&#25991;&#26412;)&#65292;&#25110;&#32773; <code class="classname">Comment</code> &#23545;&#35937; (&#34920;&#31034;&#20869;&#23884;&#27880;&#37322;)&#12290;&#20351;&#29992; <span class="application">Python</span> &#32534;&#20889;&#20998;&#31163;&#21508;&#20010;&#33410;&#28857;&#31867;&#22411;&#36923;&#36753;&#30340;&#20998;&#21457;&#22120;&#38750;&#24120;&#23481;&#26131;&#12290;</p></div><div class="example"><a name="d0e26817"></a><p class="title"><b>&#20363;&nbsp;10.17.&nbsp;&#24050;&#35299;&#26512; <acronym class="acronym">XML</acronym> &#23545;&#35937;&#30340;&#31867;&#21517;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from xml.dom import minidom</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc = minidom.parse('kant.xml')</span> <a name="kgp.handler.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc</span>
<font color="teal">&lt;xml.dom.minidom.Document instance at 0x01359DE8&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc.__class__</span>                   <a name="kgp.handler.1.2"></a>circled_2_delcric
<font color="teal">&lt;class xml.dom.minidom.Document at 0x01105D40&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xmldoc.__class__.__name__</span>          <a name="kgp.handler.1.3"></a>circled_3_delcric
<font color="teal">'Document'</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.handler.1.1">circled_1_delcric</a> </dt><dd>&#26242;&#26102;&#20551;&#35774; <code class="filename">kant.xml</code> &#22312;&#24403;&#21069;&#30446;&#24405;&#20013;&#12290;</dd><dt><a href="#kgp.handler.1.2">circled_2_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312;<a class="xref" href="#kgp.packages" title="9.2.&nbsp;&#21253;">&#31532;&nbsp;9.2&nbsp;&#33410; &#8220;&#21253;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;&#35299;&#26512; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#36820;&#22238;&#30340;&#23545;&#35937;&#26159;&#19968;&#20010; <code class="classname">Document</code> &#23545;&#35937;&#65292;&#23601;&#20687;&#22312; <code class="filename">xml.dom</code> &#21253;&#30340; <code class="filename">minidom.py</code> &#20013;&#23450;&#20041;&#30340;&#19968;&#26679;&#12290;&#21448;&#22914;&#20320;&#22312;<a class="xref" href="#fileinfo.create" title="5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;">&#31532;&nbsp;5.4&nbsp;&#33410; &#8220;&#31867;&#30340;&#23454;&#20363;&#21270;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;<code class="literal">__class__</code> &#26159;&#27599;&#20010; <span class="application">Python</span> &#23545;&#35937;&#30340;&#19968;&#20010;&#20869;&#32622;&#23646;&#24615;&#12290;</dd><dt><a href="#kgp.handler.1.3">circled_3_delcric</a> </dt><dd>&#27492;&#22806;&#65292;<code class="literal">__name__</code> &#26159;&#27599;&#20010; <span class="application">Python</span> &#31867;&#30340;&#20869;&#32622;&#23646;&#24615;&#65292;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;&#36825;&#20010;&#23383;&#31526;&#20018;&#24182;&#19981;&#31070;&#31192;&#65307;&#23427;&#21644;&#20320;&#22312;&#23450;&#20041;&#31867;&#26102;&#36755;&#20837;&#30340;&#31867;&#21517;&#30456;&#21516;&#12290;(&#21442;&#35265;<a class="xref" href="#fileinfo.class" title="5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;">&#31532;&nbsp;5.3&nbsp;&#33410; &#8220;&#31867;&#30340;&#23450;&#20041;&#8221;</a>&#12290;)</dd></dl></div></div></div><br class="example-break"><p>&#22909;&#65292;&#29616;&#22312;&#20320;&#33021;&#22815;&#24471;&#21040;&#20219;&#20309;&#32473;&#23450; <acronym class="acronym">XML</acronym> &#33410;&#28857;&#30340;&#31867;&#21517;&#20102; (&#22240;&#20026;&#27599;&#20010; <acronym class="acronym">XML</acronym> &#33410;&#28857;&#37117;&#26159;&#20197;&#19968;&#20010; <span class="application">Python</span> &#23545;&#35937;&#34920;&#31034;&#30340;)&#12290;&#20320;&#24590;&#26679;&#25165;&#33021;&#21033;&#29992;&#36825;&#28857;&#26469;&#20998;&#31163;&#35299;&#26512;&#27599;&#20010;&#33410;&#28857;&#31867;&#22411;&#30340;&#36923;&#36753;&#21602;&#65311;&#31572;&#26696;&#23601;&#26159; <code class="function">getattr</code>&#65292;&#20320;&#31532;&#19968;&#27425;&#35265;&#23427;&#26159;&#22312;<a class="xref" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;">&#31532;&nbsp;4.4&nbsp;&#33410; &#8220;&#36890;&#36807; <code class="function">getattr</code> &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;&#8221;</a>&#20013;&#12290;</p><div class="example"><a name="d0e26923"></a><p class="title"><b>&#20363;&nbsp;10.18.&nbsp;<code class="function">parse</code>&#65292;&#36890;&#29992; <acronym class="acronym">XML</acronym> &#33410;&#28857;&#20998;&#21457;&#22120;</b></p><div class="example-contents"><pre class="programlisting">
    def parse(self, node):          
        parseMethod = getattr(self, "parse_%s" % node.__class__.__name__) <a name="kgp.handler.2.1"></a>circled_1_delcric <a name="kgp.handler.2.2"></a>circled_2_delcric
        parseMethod(node) <a name="kgp.handler.2.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.handler.2.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#27880;&#24847;&#20320;&#27491;&#22312;&#22522;&#20110;&#20256;&#20837;&#33410;&#28857; (<code class="varname">node</code> &#21442;&#25968;) &#30340;&#31867;&#21517;&#26500;&#36896;&#19968;&#20010;&#36739;&#22823;&#30340;&#23383;&#31526;&#20018;&#12290;&#25152;&#20197;&#22914;&#26524;&#20320;&#20256;&#20837;&#19968;&#20010; <code class="classname">Document</code> &#33410;&#28857;&#65292;&#20320;&#23601;&#26500;&#36896;&#20102;&#23383;&#31526;&#20018; <code class="literal">'parse_Document'</code>&#65292;&#20854;&#23427;&#31867;&#21516;&#20110;&#27492;&#12290;</dd><dt><a href="#kgp.handler.2.2">circled_2_delcric</a> </dt><dd>&#29616;&#22312;&#20320;&#21487;&#20197;&#25226;&#36825;&#20010;&#23383;&#31526;&#20018;&#24403;&#20316;&#19968;&#20010;&#20989;&#25968;&#21517;&#31216;&#65292;&#28982;&#21518;&#36890;&#36807; <code class="function">getattr</code> &#24471;&#21040;&#20989;&#25968;&#33258;&#36523;&#30340;&#24341;&#29992;&#12290;</dd><dt><a href="#kgp.handler.2.3">circled_3_delcric</a> </dt><dd>&#26368;&#21518;&#65292;&#20320;&#21487;&#20197;&#35843;&#29992;&#20989;&#25968;&#24182;&#23558;&#33410;&#28857;&#33258;&#36523;&#20316;&#20026;&#21442;&#25968;&#20256;&#20837;&#12290;&#19979;&#19968;&#20010;&#20363;&#23376;&#23558;&#23637;&#31034;&#27599;&#20010;&#20989;&#25968;&#30340;&#23450;&#20041;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e26960"></a><p class="title"><b>&#20363;&nbsp;10.19.&nbsp;<code class="function">parse</code> &#20998;&#21457;&#22120;&#35843;&#29992;&#30340;&#20989;&#25968;</b></p><div class="example-contents"><pre class="programlisting">
    def parse_Document(self, node): <a name="kgp.handler.3.1"></a>circled_1_delcric
        self.parse(node.documentElement)

    def parse_Text(self, node):    <a name="kgp.handler.3.2"></a>circled_2_delcric
        text = node.data
        if self.capitalizeNextWord:
            self.pieces.append(text[0].upper())
            self.pieces.append(text[1:])
            self.capitalizeNextWord = 0
        else:
            self.pieces.append(text)

    def parse_Comment(self, node): <a name="kgp.handler.3.3"></a>circled_3_delcric
        pass

    def parse_Element(self, node): <a name="kgp.handler.3.4"></a>circled_4_delcric
        handlerMethod = getattr(self, "do_%s" % node.tagName)
        handlerMethod(node)</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.handler.3.1">circled_1_delcric</a> </dt><dd><code class="function">parse_Document</code> &#21482;&#20250;&#34987;&#35843;&#29992;&#19968;&#27425;&#65292;&#22240;&#20026;&#22312;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#21482;&#26377;&#19968;&#20010; <code class="classname">Document</code> &#33410;&#28857;&#65292;&#24182;&#19988;&#22312;&#24050;&#35299;&#26512; <acronym class="acronym">XML</acronym> &#30340;&#34920;&#31034;&#20013;&#21482;&#26377;&#19968;&#20010; <code class="classname">Document</code> &#23545;&#35937;&#12290;&#22312;&#27492;&#23427;&#21482;&#26159;&#36215;&#21040;&#20013;&#36716;&#20316;&#29992;&#65292;&#36716;&#32780;&#35299;&#26512;&#35821;&#27861;&#25991;&#20214;&#30340;&#26681;&#20803;&#32032;&#12290;</dd><dt><a href="#kgp.handler.3.2">circled_2_delcric</a> </dt><dd><code class="function">parse_Text</code> &#22312;&#33410;&#28857;&#34920;&#31034;&#25991;&#26412;&#26102;&#34987;&#35843;&#29992;&#12290;&#36825;&#20010;&#20989;&#25968;&#26412;&#36523;&#20570;&#26576;&#31181;&#29305;&#27530;&#22788;&#29702;&#65292;&#33258;&#21160;&#23558;&#21477;&#23376;&#30340;&#31532;&#19968;&#20010;&#21333;&#35789;&#36827;&#34892;&#22823;&#20889;&#22788;&#29702;&#65292;&#32780;&#19981;&#26159;&#31616;&#21333;&#22320;&#23558;&#34920;&#31034;&#30340;&#25991;&#26412;&#36861;&#21152;&#21040;&#19968;&#20010;&#21015;&#34920;&#20013;&#12290;</dd><dt><a href="#kgp.handler.3.3">circled_3_delcric</a> </dt><dd><code class="function">parse_Comment</code> &#21482;&#26377;&#19968;&#20010; <code class="literal">pass</code>&#65292;&#22240;&#20026;&#20320;&#24182;&#19981;&#20851;&#24515;&#35821;&#27861;&#25991;&#20214;&#20013;&#23884;&#20837;&#30340;&#27880;&#37322;&#12290;&#20294;&#26159;&#27880;&#24847;&#65292;&#20320;&#36824;&#26159;&#35201;&#23450;&#20041;&#36825;&#20010;&#20989;&#25968;&#24182;&#26174;&#24335;&#22320;&#35753;&#23427;&#19981;&#20570;&#20219;&#20309;&#20107;&#24773;&#12290;&#22914;&#26524;&#36825;&#20010;&#20989;&#25968;&#19981;&#23384;&#22312;&#65292;&#36890;&#29992; <code class="function">parse</code> &#20989;&#25968;&#22312;&#36935;&#21040;&#19968;&#20010;&#27880;&#37322;&#30340;&#26102;&#20505;&#20250;&#25191;&#34892;&#22833;&#36133;&#65292;&#22240;&#20026;&#23427;&#35797;&#22270;&#25214;&#21040;&#24182;&#19981;&#23384;&#22312;&#30340; <code class="function">parse_Comment</code> &#20989;&#25968;&#12290;&#20026;&#27599;&#20010;&#33410;&#28857;&#31867;&#22411;&#23450;&#20041;&#29420;&#31435;&#30340;&#20989;&#25968;&#8213;&#8213;&#29978;&#33267;&#20320;&#19981;&#35201;&#20351;&#29992;&#30340;&#8213;&#8213;&#23558;&#20250;&#20351;&#36890;&#29992; <code class="function">parse</code> &#20989;&#25968;&#20445;&#25345;&#31616;&#21333;&#21644;&#27785;&#40664;&#12290;</dd><dt><a href="#kgp.handler.3.4">circled_4_delcric</a> </dt><dd><code class="function">parse_Element</code> &#26041;&#27861;&#20854;&#23454;&#26412;&#36523;&#23601;&#26159;&#19968;&#20010;&#20998;&#21457;&#22120;&#65292;&#19968;&#20010;&#22522;&#20110;&#20803;&#32032;&#30340;&#26631;&#35760;&#21517;&#31216;&#30340;&#20998;&#21457;&#22120;&#12290;&#36825;&#20010;&#22522;&#26412;&#27010;&#24565;&#26159;&#30456;&#21516;&#30340;&#65306;&#20351;&#29992;&#20803;&#32032;&#30340;&#21306;&#21035; (&#23427;&#20204;&#30340;&#26631;&#35760;&#21517;&#31216;) &#28982;&#21518;&#38024;&#23545;&#27599;&#19968;&#20010;&#20998;&#21457;&#21040;&#19968;&#20010;&#29420;&#31435;&#30340;&#20989;&#25968;&#12290;&#20320;&#26500;&#24314;&#20102;&#19968;&#20010;&#31867;&#20284;&#20110; <code class="literal">'do_xref'</code> &#30340;&#23383;&#31526;&#20018; (&#23545; <code class="sgmltag-element">&lt;xref&gt;</code> &#26631;&#35760;&#32780;&#35328;)&#65292;&#25214;&#21040;&#36825;&#20010;&#21517;&#31216;&#30340;&#20989;&#25968;&#65292;&#24182;&#35843;&#29992;&#23427;&#12290;&#23545;&#20854;&#23427;&#30340;&#26631;&#35760;&#21517;&#31216; (&#20687;<code class="sgmltag-element">&lt;p&gt;</code> &#21644; <code class="sgmltag-element">&lt;choice&gt;</code>) &#22312;&#35299;&#26512;&#35821;&#27861;&#25991;&#20214;&#30340;&#26102;&#20505;&#37117;&#21487;&#20197;&#25214;&#21040;&#31867;&#20284;&#30340;&#20989;&#25968;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#20998;&#21457;&#20989;&#25968; <code class="function">parse</code> &#21644; <code class="function">parse_Element</code> &#21482;&#26159;&#25214;&#21040;&#30456;&#21516;&#31867;&#20013;&#30340;&#20854;&#23427;&#26041;&#27861;&#12290;&#22914;&#26524;&#20320;&#36827;&#34892;&#30340;&#22788;&#29702;&#36807;&#31243;&#24456;&#22797;&#26434; (&#25110;&#32773;&#20320;&#26377;&#24456;&#22810;&#19981;&#21516;&#30340;&#26631;&#35760;&#21517;&#31216;)&#65292;&#20320;&#21487;&#20197;&#23558;&#20195;&#30721;&#20998;&#25955;&#21040;&#29420;&#31435;&#30340;&#27169;&#22359;&#20013;&#65292;&#28982;&#21518;&#20351;&#29992;&#21160;&#24577;&#23548;&#20837;&#30340;&#26041;&#24335;&#23548;&#20837;&#27599;&#20010;&#27169;&#22359;&#24182;&#35843;&#29992;&#20320;&#38656;&#35201;&#30340;&#20219;&#20309;&#20989;&#25968;&#12290;&#21160;&#24577;&#23548;&#20837;&#23558;&#22312;<a class="xref" href="#regression" title="&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;">&#31532;&nbsp;16&nbsp;&#31456; <i>&#20989;&#25968;&#32534;&#31243;</i></a>&#20013;&#20171;&#32461;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.commandline"></a>10.6.&nbsp;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#23436;&#20840;&#25903;&#25345;&#21019;&#24314;&#22312;&#21629;&#20196;&#34892;&#36816;&#34892;&#30340;&#31243;&#24207;&#65292;&#20063;&#25903;&#25345;&#36890;&#36807;&#21629;&#20196;&#34892;&#21442;&#25968;&#21644;&#30701;&#38271;&#26679;&#24335;&#26469;&#25351;&#23450;&#21508;&#31181;&#36873;&#39033;&#12290;&#36825;&#20123;&#24182;&#38750;&#26159; <acronym class="acronym">XML</acronym> &#29305;&#23450;&#30340;&#65292;&#20294;&#26159;&#36825;&#26679;&#30340;&#33050;&#26412;&#21487;&#20197;&#20805;&#20998;&#20351;&#29992;&#21629;&#20196;&#34892;&#22788;&#29702;&#65292;&#30475;&#26469;&#26159;&#26102;&#20505;&#25552;&#19968;&#19979;&#23427;&#20102;&#12290;</p></div><p>&#22914;&#26524;&#19981;&#29702;&#35299;&#21629;&#20196;&#34892;&#21442;&#25968;&#22914;&#20309;&#26292;&#38706;&#32473;&#20320;&#30340; <span class="application">Python</span> &#31243;&#24207;&#65292;&#35752;&#35770;&#21629;&#20196;&#34892;&#22788;&#29702;&#26159;&#24456;&#22256;&#38590;&#30340;&#65292;&#25152;&#20197;&#35753;&#25105;&#20204;&#20808;&#20889;&#20010;&#31616;&#21333;&#28857;&#30340;&#31243;&#24207;&#26469;&#30475;&#19968;&#19979;&#12290;</p><div class="example"><a name="d0e27060"></a><p class="title"><b>&#20363;&nbsp;10.20.&nbsp;<code class="varname">sys.argv</code> &#20171;&#32461;</b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
#argecho.py
import sys

for arg in sys.argv: <a name="kgp.commandline.0.1"></a>circled_1_delcric
    print arg</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.commandline.0.1">circled_1_delcric</a> </dt><dd>&#27599;&#20010;&#20256;&#36882;&#32473;&#31243;&#24207;&#30340;&#21629;&#20196;&#34892;&#21442;&#25968;&#37117;&#22312; <code class="varname">sys.argv</code> &#20013;&#65292;&#32780;&#23427;&#20165;&#20165;&#26159;&#19968;&#20010;&#21015;&#34920;&#12290;&#36825;&#37324;&#25105;&#20204;&#22312;&#29420;&#31435;&#34892;&#20013;&#25171;&#21360;&#20986;&#27599;&#20010;&#21442;&#25968;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e27081"></a><p class="title"><b>&#20363;&nbsp;10.21.&nbsp;<code class="varname">sys.argv</code> &#30340;&#20869;&#23481;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">[you@localhost py]$ </code><span class="userinput">python argecho.py</span>             <a name="kgp.commandline.1.1"></a>circled_1_delcric
<font color="teal">argecho.py</font>
<code class="prompt">[you@localhost py]$ </code><span class="userinput">python argecho.py abc def</span>     <a name="kgp.commandline.1.2"></a>circled_2_delcric
<font color="teal">argecho.py
abc
def</font>
<code class="prompt">[you@localhost py]$ </code><span class="userinput">python argecho.py --help</span>      <a name="kgp.commandline.1.3"></a>circled_3_delcric
<font color="teal">argecho.py
--help</font>
<code class="prompt">[you@localhost py]$ </code><span class="userinput">python argecho.py -m kant.xml</span> <a name="kgp.commandline.1.4"></a>circled_4_delcric
<font color="teal">argecho.py
-m
kant.xml</font></pre><div class="calloutlist"><dl compact><dt><a href="#kgp.commandline.1.1">circled_1_delcric</a> </dt><dd>&#20851;&#20110; <code class="varname">sys.argv</code> &#38656;&#35201;&#20102;&#35299;&#30340;&#31532;&#19968;&#20214;&#20107;&#24773;&#23601;&#26159;&#65306;&#23427;&#21253;&#21547;&#20102;&#20320;&#27491;&#22312;&#35843;&#29992;&#30340;&#33050;&#26412;&#30340;&#21517;&#31216;&#12290;&#20320;&#21518;&#38754;&#20250;&#23454;&#38469;&#20351;&#29992;&#36825;&#20010;&#30693;&#35782;&#65292;&#22312;<a class="xref" href="#regression" title="&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;">&#31532;&nbsp;16&nbsp;&#31456; <i>&#20989;&#25968;&#32534;&#31243;</i></a>&#20013;&#12290;&#29616;&#22312;&#19981;&#29992;&#25285;&#24515;&#12290;</dd><dt><a href="#kgp.commandline.1.2">circled_2_delcric</a> </dt><dd>&#21629;&#20196;&#34892;&#21442;&#25968;&#36890;&#36807;&#31354;&#26684;&#36827;&#34892;&#20998;&#38548;&#12290;&#22312; <code class="varname">sys.argv</code> &#21015;&#34920;&#20013;&#65292;&#27599;&#20010;&#21442;&#25968;&#37117;&#26159;&#19968;&#20010;&#29420;&#31435;&#30340;&#20803;&#32032;&#12290;</dd><dt><a href="#kgp.commandline.1.3">circled_3_delcric</a> </dt><dd>&#21629;&#20196;&#34892;&#26631;&#24535;&#65292;&#20687; <code class="literal">--help</code>&#65292;&#22312; <code class="varname">sys.argv</code> &#21015;&#34920;&#20013;&#36824;&#20445;&#23384;&#20102;&#23427;&#20204;&#33258;&#24049;&#30340;&#20803;&#32032;&#12290;</dd><dt><a href="#kgp.commandline.1.4">circled_4_delcric</a> </dt><dd>&#20026;&#20102;&#35753;&#20107;&#24773;&#26356;&#26377;&#36259;&#65292;&#26377;&#20123;&#21629;&#20196;&#34892;&#26631;&#24535;&#26412;&#36523;&#23601;&#25509;&#25910;&#21442;&#25968;&#12290;&#27604;&#22914;&#65292;&#36825;&#37324;&#26377;&#19968;&#20010;&#26631;&#35760; (<code class="literal">-m</code>) &#25509;&#25910;&#19968;&#20010;&#21442;&#25968; (<code class="literal">kant.xml</code>)&#12290;&#26631;&#35760;&#33258;&#36523;&#21644;&#26631;&#35760;&#21442;&#25968;&#21482;&#26159; <code class="varname">sys.argv</code> &#21015;&#34920;&#20013;&#30340;&#19968;&#20018;&#20803;&#32032;&#12290;&#24182;&#27809;&#26377;&#35797;&#22270;&#23558;&#20803;&#32032;&#19982;&#20854;&#23427;&#20803;&#32032;&#36827;&#34892;&#20851;&#32852;&#65307;&#25152;&#26377;&#20320;&#24471;&#21040;&#30340;&#26159;&#19968;&#20010;&#21015;&#34920;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#25152;&#20197;&#27491;&#22914;&#20320;&#25152;&#30475;&#21040;&#30340;&#65292;&#20320;&#30830;&#23454;&#25317;&#26377;&#20102;&#21629;&#20196;&#34892;&#20256;&#20837;&#30340;&#25152;&#26377;&#20449;&#24687;&#65292;&#20294;&#26159;&#25509;&#19979;&#26469;&#35201;&#23454;&#38469;&#20351;&#29992;&#23427;&#20284;&#20046;&#19981;&#37027;&#20040;&#23481;&#26131;&#12290;&#23545;&#20110;&#21482;&#26159;&#25509;&#25910;&#21333;&#20010;&#21442;&#25968;&#25110;&#32773;&#27809;&#26377;&#26631;&#35760;&#30340;&#31616;&#21333;&#31243;&#24207;&#65292;&#20320;&#21487;&#20197;&#31616;&#21333;&#22320;&#20351;&#29992; <code class="literal">sys.argv[1]</code> &#26469;&#35775;&#38382;&#21442;&#25968;&#12290;&#36825;&#27809;&#26377;&#20160;&#20040;&#32670;&#32827;&#30340;&#65307;&#25105;&#19968;&#30452;&#37117;&#26159;&#36825;&#26679;&#20570;&#30340;&#12290;&#23545;&#26356;&#22797;&#26434;&#30340;&#31243;&#24207;&#65292;&#20320;&#38656;&#35201; <code class="filename">getopt</code> &#27169;&#22359;&#12290;</p><div class="example"><a name="d0e27171"></a><p class="title"><b>&#20363;&nbsp;10.22.&nbsp;<code class="filename">getopt</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="programlisting">
def main(argv):                         
    grammar = "kant.xml"                 <a name="kgp.commandline.2.1"></a>circled_1_delcric
    try:                                
        opts, args = getopt.getopt(argv, "hg:d", ["help", "grammar="]) <a name="kgp.commandline.2.2"></a>circled_2_delcric
    except getopt.GetoptError:           <a name="kgp.commandline.2.3"></a>circled_3_delcric
        usage()                          <a name="kgp.commandline.2.4"></a>circled_4_delcric
        sys.exitcircled_2_delcric                     

...

if __name__ == "__main__":
    main(sys.argv[1:])</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.commandline.2.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#30475;&#19968;&#19979;&#20363;&#23376;&#30340;&#26368;&#21518;&#24182;&#27880;&#24847;&#20320;&#27491;&#22312;&#35843;&#29992; <code class="function">main</code> &#20989;&#25968;&#65292;&#21442;&#25968;&#26159; <code class="literal">sys.argv[1:]</code>&#12290;&#35760;&#20303;&#65292;<code class="literal">sys.argv[0]</code> &#26159;&#20320;&#27491;&#22312;&#36816;&#34892;&#33050;&#26412;&#30340;&#21517;&#31216;&#65307;&#22312;&#22788;&#29702;&#21629;&#20196;&#34892;&#26102;&#65292;&#20320;&#19981;&#29992;&#20851;&#24515;&#23427;&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#30733;&#25481;&#23427;&#24182;&#20256;&#20837;&#21015;&#34920;&#30340;&#21097;&#20313;&#37096;&#20998;&#12290;</dd><dt><a href="#kgp.commandline.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#37324;&#23601;&#26159;&#25152;&#26377;&#26377;&#36259;&#22788;&#29702;&#21457;&#29983;&#30340;&#22320;&#26041;&#12290;<code class="filename">getopt</code> &#27169;&#22359;&#30340; <code class="function">getopt</code> &#20989;&#25968;&#25509;&#21463;&#19977;&#20010;&#21442;&#25968;&#65306;&#21442;&#25968;&#21015;&#34920; (&#20320;&#20174; <code class="literal">sys.argv[1:]</code> &#24471;&#21040;&#30340;)&#12289;&#19968;&#20010;&#21253;&#21547;&#20102;&#31243;&#24207;&#25152;&#26377;&#21487;&#33021;&#25509;&#25910;&#21040;&#30340;&#21333;&#23383;&#31526;&#21629;&#20196;&#34892;&#26631;&#24535;&#65292;&#21644;&#19968;&#20010;&#31561;&#20215;&#20110;&#21333;&#23383;&#31526;&#30340;&#38271;&#21629;&#20196;&#34892;&#26631;&#24535;&#30340;&#21015;&#34920;&#12290;&#31532;&#19968;&#27425;&#30475;&#30340;&#26102;&#20505;&#65292;&#36825;&#26377;&#28857;&#28151;&#20081;&#65292;&#19979;&#38754;&#26377;&#26356;&#22810;&#30340;&#32454;&#33410;&#35299;&#37322;&#12290;</dd><dt><a href="#kgp.commandline.2.3">circled_3_delcric</a> </dt><dd>&#22312;&#35299;&#26512;&#36825;&#20123;&#21629;&#20196;&#34892;&#26631;&#24535;&#26102;&#65292;&#22914;&#26524;&#26377;&#20219;&#20309;&#20107;&#24773;&#38169;&#20102;&#65292;<code class="filename">getopt</code> &#20250;&#25243;&#20986;&#24322;&#24120;&#65292;&#20320;&#21487;&#20197;&#25429;&#33719;&#23427;&#12290;&#20320;&#21487;&#20197;&#21578;&#35785; <code class="filename">getopt</code> &#20320;&#26126;&#30333;&#30340;&#25152;&#26377;&#26631;&#24535;&#65292;&#37027;&#20040;&#36825;&#20063;&#24847;&#21619;&#30528;&#32456;&#31471;&#29992;&#25143;&#21487;&#20197;&#20256;&#20837;&#19968;&#20123;&#20320;&#19981;&#29702;&#35299;&#30340;&#21629;&#20196;&#34892;&#26631;&#24535;&#12290;</dd><dt><a href="#kgp.commandline.2.4">circled_4_delcric</a> </dt><dd>&#21644; <acronym class="acronym">UNIX</acronym> &#19990;&#30028;&#20013;&#30340;&#26631;&#20934;&#23454;&#36341;&#19968;&#26679;&#65292;&#22914;&#26524;&#33050;&#26412;&#34987;&#20256;&#20837;&#20102;&#19981;&#33021;&#29702;&#35299;&#30340;&#26631;&#24535;&#65292;&#20320;&#35201;&#25171;&#21360;&#20986;&#27491;&#30830;&#29992;&#27861;&#30340;&#19968;&#20010;&#27010;&#35201;&#24182;&#21451;&#22909;&#22320;&#36864;&#20986;&#12290;&#27880;&#24847;&#65292;&#22312;&#36825;&#37324;&#25105;&#27809;&#26377;&#20889;&#20986; <code class="function">usage</code> &#20989;&#25968;&#12290;&#20320;&#36824;&#26159;&#35201;&#22312;&#26576;&#20010;&#22320;&#26041;&#20889;&#19968;&#20010;&#65292;&#20351;&#23427;&#25171;&#21360;&#20986;&#21512;&#36866;&#30340;&#27010;&#35201;&#65307;&#23427;&#19981;&#26159;&#33258;&#21160;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#20320;&#20256;&#32473; <code class="function">getopt</code> &#20989;&#25968;&#30340;&#21442;&#25968;&#26159;&#20160;&#20040;&#21602;&#65311;&#22909;&#30340;&#65292;&#31532;&#19968;&#20010;&#21482;&#19981;&#36807;&#26159;&#19968;&#20010;&#21629;&#20196;&#34892;&#26631;&#24535;&#21644;&#21442;&#25968;&#30340;&#21407;&#22987;&#21015;&#34920; (&#19981;&#21253;&#25324;&#31532;&#19968;&#20010;&#20803;&#32032;&#8213;&#8213;&#33050;&#26412;&#21517;&#31216;&#65292;&#20320;&#22312;&#35843;&#29992; <code class="function">main</code> &#20989;&#25968;&#20043;&#21069;&#23601;&#24050;&#32463;&#23558;&#23427;&#30733;&#25481;&#20102;)&#12290;&#31532;&#20108;&#20010;&#26159;&#33050;&#26412;&#25509;&#25910;&#30340;&#30701;&#21629;&#20196;&#34892;&#26631;&#24535;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;</p><div class="variablelist"><p class="title"><b><code class="literal">"hg:d"</code></b></p><dl><dt><span class="term"><code class="literal">-h</code></span></dt><dd>&#25171;&#21360;&#29992;&#27861;&#27010;&#35201;</dd><dt><span class="term"><code class="literal">-g ...</code></span></dt><dd>&#20351;&#29992;&#32473;&#23450;&#30340;&#35821;&#27861;&#25991;&#20214;&#25110; URL</dd><dt><span class="term"><code class="literal">-d</code></span></dt><dd>&#22312;&#35299;&#26512;&#26102;&#26174;&#31034;&#35843;&#35797;&#20449;&#24687;</dd></dl></div><p>&#31532;&#19968;&#20010;&#26631;&#24535;&#21644;&#31532;&#19977;&#20010;&#26631;&#24535;&#26159;&#31616;&#21333;&#30340;&#29420;&#31435;&#26631;&#24535;&#65307;&#20320;&#36873;&#25321;&#26159;&#21542;&#25351;&#23450;&#23427;&#20204;&#65292;&#23427;&#20204;&#20570;&#26576;&#20123;&#20107;&#24773; (&#25171;&#21360;&#24110;&#21161;) &#25110;&#32773;&#25913;&#21464;&#29366;&#24577; (&#25171;&#24320;&#35843;&#35797;)&#12290;&#20294;&#26159;&#65292;&#31532;&#20108;&#20010;&#26631;&#24535; (<code class="literal">-g</code>) <span class="emphasis"><em>&#24517;&#39035;</em></span> &#36319;&#38543;&#19968;&#20010;&#21442;&#25968;&#8213;&#8213;&#36827;&#34892;&#35835;&#21462;&#30340;&#35821;&#27861;&#25991;&#20214;&#30340;&#21517;&#31216;&#12290;&#23454;&#38469;&#19978;&#65292;&#23427;&#21487;&#20197;&#26159;&#19968;&#20010;&#25991;&#20214;&#21517;&#25110;&#32773;&#19968;&#20010; web &#22320;&#22336;&#65292;&#36825;&#26102;&#36824;&#19981;&#30693;&#36947; (&#21518;&#38754;&#20250;&#30830;&#23450;)&#65292;&#20294;&#26159;&#20320;&#35201;&#30693;&#36947;&#24517;&#39035;&#35201;<span class="emphasis"><em>&#26377;&#20123;&#19996;&#35199;</em></span>&#12290;&#25152;&#20197;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#22312; <code class="function">getopt</code> &#20989;&#25968;&#30340;&#31532;&#20108;&#20010;&#21442;&#25968;&#30340; <code class="literal">g</code> &#21518;&#38754;&#25918;&#19968;&#20010;&#20882;&#21495;&#65292;&#26469;&#21521; <code class="filename">getopt</code> &#35828;&#26126;&#36825;&#19968;&#28857;&#12290;</p><p>&#26356;&#22797;&#26434;&#30340;&#26159;&#65292;&#36825;&#20010;&#33050;&#26412;&#26082;&#25509;&#25910;&#30701;&#26631;&#24535; (&#20687; <code class="literal">-h</code>)&#65292;&#20063;&#25509;&#21463;&#38271;&#26631;&#24535; (&#20687; <code class="literal">--help</code>)&#65292;&#24182;&#19988;&#20320;&#35201;&#23427;&#20204;&#20570;&#30456;&#21516;&#30340;&#20107;&#12290;&#36825;&#23601;&#26159; <code class="function">getopt</code> &#31532;&#19977;&#20010;&#21442;&#25968;&#23384;&#22312;&#30340;&#21407;&#22240;&#65306;&#23427;&#26159;&#25351;&#23450;&#38271;&#26631;&#24535;&#30340;&#19968;&#20010;&#21015;&#34920;&#65292;&#20854;&#20013;&#30340;&#38271;&#26631;&#24535;&#26159;&#21644;&#31532;&#20108;&#20010;&#21442;&#25968;&#20013;&#25351;&#23450;&#30340;&#30701;&#26631;&#24535;&#30456;&#23545;&#24212;&#30340;&#12290;</p><div class="variablelist"><p class="title"><b><code class="literal">["help", "grammar="]</code></b></p><dl><dt><span class="term"><code class="literal">--help</code></span></dt><dd>&#25171;&#21360;&#29992;&#27861;&#27010;&#35201;</dd><dt><span class="term"><code class="literal">--grammar ...</code></span></dt><dd>&#20351;&#29992;&#32473;&#23450;&#30340;&#35821;&#27861;&#25991;&#20214;&#25110; URL</dd></dl></div><p>&#36825;&#37324;&#26377;&#19977;&#28857;&#35201;&#27880;&#24847;&#65306;</p><div class="orderedlist"><ol type="1"><li>&#25152;&#26377;&#21629;&#20196;&#34892;&#20013;&#30340;&#38271;&#26631;&#24535;&#20197;&#20004;&#20010;&#30701;&#21010;&#32447;&#24320;&#22987;&#65292;&#20294;&#26159;&#22312;&#35843;&#29992; <code class="function">getopt</code> &#26102;&#65292;&#20320;&#19981;&#29992;&#21253;&#21547;&#36825;&#20004;&#20010;&#30701;&#21010;&#32447;&#12290;&#23427;&#20204;&#26159;&#33021;&#22815;&#34987;&#29702;&#35299;&#30340;&#12290;</li><li><code class="literal">--grammar</code> &#26631;&#24535;&#30340;&#21518;&#38754;&#24517;&#39035;&#36319;&#30528;&#21478;&#19968;&#20010;&#21442;&#25968;&#65292;&#23601;&#20687; <code class="literal">-g</code> &#26631;&#24535;&#19968;&#26679;&#12290;&#36890;&#36807;&#31561;&#20110;&#21495;&#26631;&#35782;&#20986;&#26469;&#65306;<code class="literal">"grammar="</code>&#12290;</li><li>&#38271;&#26631;&#24535;&#21015;&#34920;&#27604;&#30701;&#26631;&#24535;&#21015;&#34920;&#26356;&#30701;&#19968;&#20123;&#65292;&#22240;&#20026; <code class="literal">-d</code> &#26631;&#24535;&#27809;&#26377;&#30456;&#24212;&#30340;&#38271;&#26631;&#24535;&#12290;&#36825;&#24456;&#22909;&#65307;&#21482;&#26377; <code class="literal">-d</code> &#25165;&#20250;&#25171;&#24320;&#35843;&#35797;&#12290;&#20294;&#26159;&#30701;&#26631;&#24535;&#21644;&#38271;&#26631;&#24535;&#30340;&#39034;&#24207;&#24517;&#39035;&#26159;&#30456;&#21516;&#30340;&#65292;&#20320;&#24212;&#35813;&#20808;&#25351;&#23450;&#26377;&#38271;&#26631;&#24535;&#30340;&#30701;&#26631;&#24535;&#65292;&#28982;&#21518;&#25165;&#26159;&#21097;&#19979;&#30340;&#30701;&#26631;&#24535;&#12290;</li></ol></div><p>&#34987;&#25630;&#26127;&#27809;&#65311;&#35753;&#25105;&#20204;&#30475;&#19968;&#19979;&#30495;&#23454;&#30340;&#20195;&#30721;&#65292;&#30475;&#30475;&#23427;&#22312;&#19978;&#19979;&#25991;&#20013;&#26159;&#21542;&#36215;&#20316;&#29992;&#12290;</p><div class="example"><a name="d0e27342"></a><p class="title"><b>&#20363;&nbsp;10.23.&nbsp;&#22312; <code class="filename">kgp.py</code> &#20013;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;</b></p><div class="example-contents"><pre class="programlisting">
def main(argv):                          <a name="kgp.commandline.3.0"></a>circled_1_delcric
    grammar = "kant.xml"                
    try:                                
        opts, args = getopt.getopt(argv, "hg:d", ["help", "grammar="])
    except getopt.GetoptError:          
        usage()                         
        sys.exitcircled_2_delcric                     
    for opt, arg in opts:                <a name="kgp.commandline.3.1"></a>circled_2_delcric
        if opt in ("-h", "--help"):      <a name="kgp.commandline.3.2"></a>circled_3_delcric
            usage()                     
            sys.exit()                  
        elif opt == '-d':                <a name="kgp.commandline.3.3"></a>circled_4_delcric
            global _debug               
            _debug = 1                  
        elif opt in ("-g", "--grammar"): <a name="kgp.commandline.3.4"></a>circled_5_delcric
            grammar = arg               

    source = "".join(args)               <a name="kgp.commandline.3.5"></a>circled_6_delcric

    k = KantGenerator(grammar, source)
    print k.output()</pre><div class="calloutlist"><dl compact><dt><a href="#kgp.commandline.3.0">circled_1_delcric</a> </dt><dd><code class="varname">grammar</code> &#21464;&#37327;&#20250;&#36319;&#36394;&#20320;&#27491;&#22312;&#20351;&#29992;&#30340;&#35821;&#27861;&#25991;&#20214;&#12290;&#22914;&#26524;&#20320;&#27809;&#26377;&#22312;&#21629;&#20196;&#34892;&#25351;&#23450;&#23427; (&#20351;&#29992; <code class="literal">-g</code> &#25110;&#32773; <code class="literal">--grammar</code> &#26631;&#24535;&#23450;&#20041;&#23427;)&#65292;&#22312;&#36825;&#37324;&#20320;&#23558;&#21021;&#22987;&#21270;&#23427;&#12290;</dd><dt><a href="#kgp.commandline.3.1">circled_2_delcric</a> </dt><dd>&#20320;&#20174; <code class="function">getopt</code> &#21462;&#22238;&#30340; <code class="varname">opts</code> &#21464;&#37327;&#26159;&#19968;&#20010;&#30001;&#20803;&#32452; (<code class="varname">flag</code> &#21644; <code class="varname">argument</code>) &#32452;&#25104;&#30340;&#21015;&#34920;&#12290;&#22914;&#26524;&#26631;&#24535;&#27809;&#26377;&#24102;&#20219;&#20309;&#21442;&#25968;&#65292;&#37027;&#20040; <code class="varname">arg</code> &#21482;&#26159; <code class="literal">None</code>&#12290;&#36825;&#20351;&#24471;&#36941;&#21382;&#26631;&#24535;&#26356;&#23481;&#26131;&#20102;&#12290;</dd><dt><a href="#kgp.commandline.3.2">circled_3_delcric</a> </dt><dd><code class="function">getopt</code> &#39564;&#35777;&#21629;&#20196;&#34892;&#26631;&#24535;&#26159;&#21542;&#21487;&#25509;&#21463;&#65292;&#20294;&#26159;&#23427;&#19981;&#20250;&#22312;&#30701;&#26631;&#24535;&#21644;&#38271;&#26631;&#24535;&#20043;&#38388;&#20570;&#20219;&#20309;&#36716;&#25442;&#12290;&#22914;&#26524;&#20320;&#25351;&#23450; <code class="literal">-h</code> &#26631;&#24535;&#65292;<code class="varname">opt</code> &#23558;&#20250;&#21253;&#21547; <code class="literal">"-h"</code>&#65307;&#22914;&#26524;&#20320;&#25351;&#23450; <code class="literal">--help</code> &#26631;&#24535;&#65292;<code class="varname">opt</code> &#23558;&#20250;&#21253;&#21547;<code class="literal">"--help"</code> &#26631;&#24535;&#12290;&#25152;&#20197;&#20320;&#38656;&#35201;&#26816;&#26597;&#23427;&#20204;&#20004;&#20010;&#12290;</dd><dt><a href="#kgp.commandline.3.3">circled_4_delcric</a> </dt><dd>&#21035;&#24536;&#20102;&#65292;<code class="literal">-d</code> &#26631;&#24535;&#27809;&#26377;&#30456;&#24212;&#30340;&#38271;&#26631;&#24535;&#65292;&#25152;&#20197;&#20320;&#21482;&#38656;&#35201;&#26816;&#26597;&#30701;&#24418;&#24335;&#12290;&#22914;&#26524;&#20320;&#25214;&#21040;&#20102;&#23427;&#65292;&#20320;&#23601;&#21487;&#20197;&#35774;&#32622;&#19968;&#20010;&#20840;&#23616;&#21464;&#37327;&#26469;&#25351;&#31034;&#21518;&#38754;&#35201;&#25171;&#21360;&#20986;&#35843;&#35797;&#20449;&#24687;&#12290;(&#25105;&#20064;&#24815;&#22312;&#33050;&#26412;&#30340;&#24320;&#21457;&#36807;&#31243;&#20013;&#20351;&#29992;&#23427;&#12290;&#20160;&#20040;&#65292;&#20320;&#20197;&#20026;&#25152;&#26377;&#36825;&#20123;&#31243;&#24207;&#37117;&#26159;&#19968;&#27425;&#25104;&#21151;&#30340;&#65311;)</dd><dt><a href="#kgp.commandline.3.4">circled_5_delcric</a> </dt><dd>&#22914;&#26524;&#20320;&#25214;&#21040;&#20102;&#19968;&#20010;&#35821;&#27861;&#25991;&#20214;&#65292;&#36319;&#22312; <code class="literal">-g</code> &#25110;&#32773; <code class="literal">--grammar</code> &#26631;&#24535;&#21518;&#38754;&#65292;&#37027;&#20320;&#23601;&#35201;&#25226;&#36319;&#22312;&#21518;&#38754;&#30340;&#21442;&#25968; (<code class="varname">arg</code>) &#20445;&#23384;&#21040;&#21464;&#37327;<code class="varname">grammar</code> &#20013;&#65292;&#35206;&#30422;&#25481;&#22312; <code class="function">main</code> &#20989;&#25968;&#20320;&#21021;&#22987;&#21270;&#30340;&#40664;&#35748;&#20540;&#12290;</dd><dt><a href="#kgp.commandline.3.5">circled_6_delcric</a> </dt><dd>&#23601;&#26159;&#36825;&#26679;&#12290;&#20320;&#24050;&#32463;&#36941;&#21382;&#24182;&#22788;&#29702;&#20102;&#25152;&#26377;&#30340;&#21629;&#20196;&#34892;&#26631;&#24535;&#12290;&#36825;&#24847;&#21619;&#30528;&#25152;&#26377;&#21097;&#19979;&#30340;&#19996;&#35199;&#37117;&#24517;&#39035;&#26159;&#21629;&#20196;&#34892;&#21442;&#25968;&#12290;&#23427;&#20204;&#30001; <code class="function">getopt</code> &#20989;&#25968;&#30340; <code class="varname">args</code> &#21464;&#37327;&#36820;&#22238;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#20320;&#25226;&#23427;&#20204;&#24403;&#20316;&#20102;&#35299;&#26512;&#22120;&#28304;&#26448;&#26009;&#12290;&#22914;&#26524;&#27809;&#26377;&#25351;&#23450;&#21629;&#20196;&#34892;&#21442;&#25968;&#65292;<code class="varname">args</code> &#23558;&#26159;&#19968;&#20010;&#31354;&#21015;&#34920;&#65292;&#32780; <code class="varname">source</code> &#23558;&#26159;&#31354;&#23383;&#31526;&#20018;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.alltogether"></a>10.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</h2></div></div></div><div class="abstract"><p>&#20320;&#24050;&#32463;&#20102;&#35299;&#24456;&#22810;&#22522;&#30784;&#30340;&#19996;&#35199;&#12290;&#35753;&#25105;&#20204;&#22238;&#26469;&#30475;&#30475;&#25152;&#26377;&#29255;&#27573;&#26159;&#22914;&#20309;&#25972;&#21512;&#21040;&#19968;&#36215;&#30340;&#12290;</p></div><p>&#20316;&#20026;&#24320;&#22987;&#65292;&#36825;&#37324;&#26159;&#19968;&#20010;<a class="link" href="#kgp.commandline" title="10.6.&nbsp;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;">&#25509;&#25910;&#21629;&#20196;&#34892;&#21442;&#25968;</a>&#30340;&#33050;&#26412;&#65292;&#23427;&#20351;&#29992; <code class="filename">getopt</code> &#27169;&#22359;&#12290;</p><div class="informalexample"><pre class="programlisting">
def main(argv):                         
...
    try:                                
        opts, args = getopt.getopt(argv, "hg:d", ["help", "grammar="])
    except getopt.GetoptError:          
...
    for opt, arg in opts:               
...</pre></div><p>&#21019;&#24314; <code class="classname">KantGenerator</code> &#31867;&#30340;&#19968;&#20010;&#23454;&#20363;&#65292;&#28982;&#21518;&#23558;&#35821;&#27861;&#25991;&#20214;&#21644;&#28304;&#25991;&#20214;&#20256;&#32473;&#23427;&#65292;&#21487;&#33021;&#22312;&#21629;&#20196;&#34892;&#27809;&#26377;&#25351;&#23450;&#12290;</p><div class="informalexample"><pre class="programlisting">
    k = KantGenerator(grammar, source)</pre></div><p><code class="classname">KantGenerator</code> &#23454;&#20363;&#33258;&#21160;&#21152;&#36733;&#35821;&#27861;&#65292;&#23427;&#26159;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#20214;&#12290;&#20320;&#20351;&#29992;&#33258;&#23450;&#20041;&#30340; <code class="function">openAnything</code> &#20989;&#25968;&#25171;&#24320;&#36825;&#20010;&#25991;&#20214; (<a class="link" href="#kgp.openanything" title="10.1.&nbsp;&#25277;&#35937;&#36755;&#20837;&#28304;">&#21487;&#33021;&#20445;&#23384;&#22312;&#19968;&#20010;&#26412;&#22320;&#25991;&#20214;&#20013;&#25110;&#32773;&#19968;&#20010;&#36828;&#31243;&#26381;&#21153;&#22120;&#19978;</a>)&#65292;&#28982;&#21518;&#20351;&#29992;&#20869;&#32622;&#30340; <code class="filename">minidom</code> &#35299;&#26512;&#20989;&#25968;<a class="link" href="#kgp.parse" title="9.3.&nbsp;XML &#35299;&#26512;">&#23558; <acronym class="acronym">XML</acronym> &#35299;&#26512;&#20026;&#19968;&#26869; <span class="application">Python</span> &#23545;&#35937;&#26641;</a>&#12290;</p><div class="informalexample"><pre class="programlisting">
    def _load(self, source):
        sock = toolbox.openAnything(source)
        xmldoc = minidom.parse(sock).documentElement
        sock.close()</pre></div><p>&#21734;&#65292;&#26681;&#25454;&#36825;&#31181;&#26041;&#24335;&#65292;&#20320;&#23558;&#20351;&#29992;&#21040; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#32467;&#26500;&#30340;&#30693;&#35782;<a class="link" href="#kgp.cache" title="10.3.&nbsp;&#26597;&#35810;&#32531;&#20914;&#33410;&#28857;">&#24314;&#31435;&#19968;&#20010;&#24341;&#29992;&#30340;&#23567;&#32531;&#20914;</a>&#65292;&#36825;&#20123;&#24341;&#29992;&#37117;&#21482;&#26159; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#30340;&#20803;&#32032;&#12290;</p><div class="informalexample"><pre class="programlisting">
    def loadGrammar(self, grammar):                         
        for ref in self.grammar.getElementsByTagName("ref"):
            self.refs[ref.attributes["id"].value] = ref     </pre></div><p>&#22914;&#26524;&#20320;&#22312;&#21629;&#20196;&#34892;&#20013;&#25351;&#23450;&#20102;&#26576;&#20123;&#28304;&#26448;&#26009;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#23427;&#65307;&#21542;&#21017;&#20320;&#23558;&#25171;&#24320;&#35821;&#27861;&#25991;&#20214;&#26597;&#25214;&#8220;&#39030;&#23618;&#8221;&#24341;&#29992; (&#27809;&#26377;&#34987;&#20854;&#23427;&#30340;&#19996;&#35199;&#24341;&#29992;) &#24182;&#25226;&#23427;&#20316;&#20026;&#24320;&#22987;&#28857;&#12290;</p><div class="informalexample"><pre class="programlisting">
    def getDefaultSource(self):
        xrefs = {}
        for xref in self.grammar.getElementsByTagName("xref"):
            xrefs[xref.attributes["id"].value] = 1
        xrefs = xrefs.keys()
        standaloneXrefs = [e for e in self.refs.keys() if e not in xrefs]
        return '&lt;xref id="%s"/&gt;' % random.choice(standaloneXrefs)</pre></div><p>&#29616;&#22312;&#20320;&#25171;&#24320;&#20102;&#20102;&#28304;&#26448;&#26009;&#12290;&#23427;&#26159;&#19968;&#20010; <acronym class="acronym">XML</acronym>&#65292;&#20320;&#27599;&#27425;&#35299;&#26512;&#19968;&#20010;&#33410;&#28857;&#12290;&#20026;&#20102;&#35753;&#20195;&#30721;&#20998;&#31163;&#24182;&#20855;&#22791;&#26356;&#39640;&#30340;&#21487;&#32500;&#25252;&#24615;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;<a class="link" href="#kgp.handler" title="10.5.&nbsp;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;">&#38024;&#23545;&#27599;&#20010;&#33410;&#28857;&#31867;&#22411;&#30340;&#29420;&#31435;&#22788;&#29702;&#26041;&#27861;</a>&#12290;</p><div class="informalexample"><pre class="programlisting">
    def parse_Element(self, node): 
        handlerMethod = getattr(self, "do_%s" % node.tagName)
        handlerMethod(node)</pre></div><p>&#20320;&#22312;&#35821;&#27861;&#37324;&#38754;&#36339;&#26469;&#36339;&#21435;&#65292;&#35299;&#26512;&#27599;&#19968;&#20010; <code class="sgmltag-element">p</code> &#20803;&#32032;&#30340;<a class="link" href="#kgp.child" title="10.4.&nbsp;&#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;">&#25152;&#26377;&#23401;&#23376;</a>&#65292;</p><div class="informalexample"><pre class="programlisting">
    def do_p(self, node):
...
        if doit:
            for child in node.childNodes: self.parse(child)</pre></div><p>&#29992;&#20219;&#24847;&#19968;&#20010;&#23401;&#23376;&#26367;&#25442; <code class="sgmltag-element">choice</code> &#20803;&#32032;&#65292;</p><div class="informalexample"><pre class="programlisting">
    def do_choice(self, node):
        self.parse(self.randomChildElement(node))</pre></div><p>&#24182;&#29992;&#23545;&#24212; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#30340;&#20219;&#24847;&#23401;&#23376;&#26367;&#25442; <code class="sgmltag-element">xref</code>&#65292;&#21069;&#38754;&#20320;&#24050;&#32463;&#36827;&#34892;&#20102;&#32531;&#20914;&#12290;</p><div class="informalexample"><pre class="programlisting">
    def do_xref(self, node):
        id = node.attributes["id"].value
        self.parse(self.randomChildElement(self.refs[id]))</pre></div><p>&#23601;&#36825;&#26679;&#19968;&#30452;&#35299;&#26512;&#65292;&#26368;&#21518;&#24471;&#21040;&#26222;&#36890;&#25991;&#26412;&#12290;</p><div class="informalexample"><pre class="programlisting">
    def parse_Text(self, node):    
        text = node.data
...
            self.pieces.append(text)</pre></div><p>&#25226;&#32467;&#26524;&#25171;&#21360;&#20986;&#26469;&#12290;</p><div class="informalexample"><pre class="programlisting">
def main(argv):                         
...
    k = KantGenerator(grammar, source)
    print k.output()</pre></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kgp.summary"></a>10.8.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p><span class="application">Python</span> &#24102;&#26377;&#35299;&#26512;&#21644;&#25805;&#20316; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#38750;&#24120;&#24378;&#22823;&#30340;&#24211;&#12290;<code class="filename">minidom</code> &#25509;&#25910;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#20214;&#24182;&#23558;&#20854;&#35299;&#26512;&#20026; <span class="application">Python</span> &#23545;&#35937;&#65292;&#24182;&#25552;&#20379;&#20102;&#23545;&#20219;&#24847;&#20803;&#32032;&#30340;&#38543;&#26426;&#35775;&#38382;&#12290;&#36827;&#19968;&#27493;&#65292;&#26412;&#31456;&#23637;&#31034;&#20102;&#22914;&#20309;&#21033;&#29992; <span class="application">Python</span> &#21019;&#24314;&#19968;&#20010;&#8220;&#30495;&#23454;&#8221;&#29420;&#31435;&#30340;&#21629;&#20196;&#34892;&#33050;&#26412;&#65292;&#36830;&#21516;&#21629;&#20196;&#34892;&#26631;&#24535;&#12289;&#21629;&#20196;&#34892;&#21442;&#25968;&#12289;&#38169;&#35823;&#22788;&#29702;&#65292;&#29978;&#33267;&#20174;&#21069;&#19968;&#20010;&#31243;&#24207;&#30340;&#31649;&#36947;&#25509;&#25910;&#36755;&#20837;&#30340;&#33021;&#21147;&#12290;</p></div><p>&#22312;&#32487;&#32493;&#19979;&#19968;&#31456;&#21069;&#65292;&#20320;&#24212;&#35813;&#26080;&#22256;&#38590;&#22320;&#23436;&#25104;&#25152;&#26377;&#36825;&#20123;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#36890;&#36807;&#26631;&#20934;&#36755;&#20837;&#36755;&#20986;<a class="link" href="#kgp.stdio" title="10.2.&nbsp;&#26631;&#20934;&#36755;&#20837;&#12289;&#36755;&#20986;&#21644;&#38169;&#35823;">&#38142;&#25509;&#31243;&#24207;</a></li><li>&#20351;&#29992; <code class="function">getattr</code> <a class="link" href="#kgp.handler" title="10.5.&nbsp;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;">&#23450;&#20041;&#21160;&#24577;&#20998;&#21457;&#22120;</a></li><li>&#36890;&#36807; <code class="filename">getopt</code> <a class="link" href="#kgp.commandline" title="10.6.&nbsp;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;">&#20351;&#29992;&#21629;&#20196;&#34892;&#26631;&#24535;</a>&#24182;&#36827;&#34892;&#39564;&#35777;</li></ul></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e25392" href="#d0e25392" class="para">10</a>] </sup>&#36825;&#26159;&#19968;&#37096;&#33879;&#21517;&#30340;&#30005;&#24433;&#12290;&#8213;&#8213;&#35793;&#27880;</p></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="oa"></a>&#31532;&nbsp;11&nbsp;&#31456;&nbsp;HTTP Web &#26381;&#21153;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.divein"></a>11.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p> &#22312;&#35762;&#35299;<a class="link" href="#dialect.extract.urllib" title="&#20363;&nbsp;8.5.&nbsp;urllib &#20171;&#32461;">&#22914;&#20309;&#19979;&#36733; web &#39029;</a>&#21644;<a class="link" href="#kgp.openanything.urllib" title="&#20363;&nbsp;10.2.&nbsp;&#35299;&#26512;&#26469;&#33258; URL &#30340; XML">&#22914;&#20309;&#20174; URL &#35299;&#26512; XML</a>&#26102;&#65292;&#20320;&#24050;&#32463;&#23398;&#20064;&#20102;&#20851;&#20110; <a class="link" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">HTML &#22788;&#29702;</a>&#21644; <a class="link" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">XML &#22788;&#29702;</a>&#65292;&#25509;&#19979;&#26469;&#35753;&#25105;&#20204;&#26469;&#26356;&#20840;&#38754;&#22320;&#25506;&#35752;&#26377;&#20851; HTTP web &#26381;&#21153;&#30340;&#20027;&#39064;&#12290;</p></div><p>&#31616;&#21333;&#22320;&#35762;&#65292;HTTP web &#26381;&#21153;&#26159;&#25351;&#20197;&#32534;&#31243;&#30340;&#26041;&#24335;&#30452;&#25509;&#20351;&#29992; HTTP &#25805;&#20316;&#20174;&#36828;&#31243;&#26381;&#21153;&#22120;&#21457;&#36865;&#21644;&#25509;&#25910;&#25968;&#25454;&#12290;&#22914;&#26524;&#20320;&#35201;&#20174;&#26381;&#21153;&#22120;&#33719;&#21462;&#25968;&#25454;&#65292;&#30452;&#25509;&#20351;&#29992; HTTP GET&#65307;&#22914;&#26524;&#24744;&#24819;&#21457;&#36865;&#26032;&#25968;&#25454;&#21040;&#26381;&#21153;&#22120;&#65292;&#20351;&#29992; HTTP POST&#12290;(&#19968;&#20123;&#36739;&#39640;&#32423;&#30340; HTTP web &#26381;&#21153; API &#20063;&#23450;&#20041;&#20102;&#20351;&#29992; HTTP PUT &#21644; HTTP DELETE &#20462;&#25913;&#21644;&#21024;&#38500;&#29616;&#26377;&#25968;&#25454;&#30340;&#26041;&#27861;&#12290;) &#25442;&#21477;&#35805;&#35828;&#65292;&#26500;&#24314;&#22312; HTTP &#21327;&#35758;&#20013;&#30340; "<span class="quote">verbs (&#21160;&#20316;)</span>" (GET, POST, PUT &#21644; DELETE) &#30452;&#25509;&#26144;&#23556;&#20026;&#25509;&#25910;&#12289;&#21457;&#36865;&#12289;&#20462;&#25913;&#21644;&#21024;&#38500;&#31561;&#24212;&#29992;&#32423;&#21035;&#30340;&#25805;&#20316;&#12290;</p><p>&#36825;&#31181;&#26041;&#27861;&#30340;&#20027;&#35201;&#20248;&#28857;&#26159;&#31616;&#21333;&#65292;&#24182;&#19988;&#35768;&#22810;&#19981;&#21516;&#30340;&#31449;&#28857;&#20805;&#20998;&#21360;&#35777;&#20102;&#36825;&#26679;&#30340;&#31616;&#21333;&#24615;&#26159;&#21463;&#27426;&#36814;&#30340;&#12290;&#25968;&#25454; (&#36890;&#24120;&#26159; XML &#25968;&#25454;) &#33021;&#38745;&#24577;&#21019;&#24314;&#21644;&#23384;&#20648;&#65292;&#25110;&#36890;&#36807;&#26381;&#21153;&#22120;&#31471;&#33050;&#26412;&#21644;&#25152;&#26377;&#20027;&#27969;&#35745;&#31639;&#26426;&#35821;&#35328; (&#21253;&#25324;&#29992;&#20110;&#19979;&#36733;&#25968;&#25454;&#30340; HTTP &#24211;) &#21160;&#24577;&#29983;&#25104;&#12290;&#35843;&#35797;&#20063;&#24456;&#31616;&#21333;&#65292;&#22240;&#20026;&#24744;&#21487;&#20197;&#22312;&#20219;&#24847;&#27983;&#35272;&#22120;&#20013;&#35843;&#29992;&#32593;&#32476;&#26381;&#21153;&#26469;&#26597;&#30475;&#36825;&#20123;&#21407;&#22987;&#25968;&#25454;&#12290;&#29616;&#20195;&#27983;&#35272;&#22120;&#29978;&#33267;&#21487;&#20197;&#20026;&#24744;&#36827;&#34892;&#33391;&#22909;&#30340;&#26684;&#24335;&#21270;&#24182;&#28418;&#20142;&#22320;&#25171;&#21360;&#36825;&#20123; XML &#25968;&#25454;&#65292;&#20197;&#20415;&#35753;&#24744;&#24555;&#36895;&#22320;&#27983;&#35272;&#12290;</p><p>HTTP web &#26381;&#21153;&#19978;&#30340;&#32431; XML &#24212;&#29992;&#20030;&#20363;&#65306;</p><div class="itemizedlist"><ul><li>Amazon API (<a href="http://www.amazon.com/webservices">http://www.amazon.com/webservices</a>) &#20801;&#35768;&#24744;&#20174; Amazon.com &#22312;&#32447;&#21830;&#24215;&#33719;&#21462;&#20135;&#21697;&#20449;&#24687;&#12290;</li><li>National Weather Service (<a href="http://www.nws.noaa.gov/alerts/">http://www.nws.noaa.gov/alerts/</a>) (&#32654;&#22269;) &#21644; Hong Kong Observatory (<a href="http://demo.xml.weather.gov.hk/">http://demo.xml.weather.gov.hk/</a>) (&#39321;&#28207;) &#36890;&#36807; web &#26381;&#21153;&#25552;&#20379;&#22825;&#27668;&#35686;&#25253;&#12290;</li><li>Atom API (<a href="http://atomenabled.org/">http://atomenabled.org/</a>) &#29992;&#26469;&#31649;&#29702;&#22522;&#20110; web &#30340;&#20869;&#23481;&#12290;</li><li>Syndicated feeds (<a href="http://syndic8.com/">http://syndic8.com/</a>) &#24212;&#29992;&#20110; weblogs &#21644;&#26032;&#38395;&#31449;&#28857;&#20013;&#24102;&#32473;&#24744;&#26469;&#33258;&#20247;&#22810;&#31449;&#28857;&#30340;&#26368;&#26032;&#28040;&#24687;&#12290;</li></ul></div><p>&#22312;&#21518;&#38754;&#30340;&#20960;&#31456;&#37324;&#65292;&#25105;&#20204;&#23558;&#25506;&#32034;&#20351;&#29992; HTTP &#36827;&#34892;&#25968;&#25454;&#21457;&#36865;&#21644;&#25509;&#25910;&#20256;&#36755;&#30340; API&#65292;&#20294;&#26159;&#19981;&#20250;&#23558;&#24212;&#29992;&#35821;&#20041;&#26144;&#23556;&#21040;&#28508;&#22312;&#30340; HTTP &#35821;&#20041;&#12290;(&#25152;&#26377;&#36825;&#20123;&#37117;&#26159;&#36890;&#36807; HTTP POST &#36825;&#20010;&#31649;&#36947;&#23436;&#25104;&#30340;&#12290;) &#20294;&#26159;&#26412;&#31456;&#23558;&#20851;&#27880;&#20351;&#29992; HTTP GET &#20174;&#36828;&#31243;&#26381;&#21153;&#22120;&#33719;&#21462;&#25968;&#25454;&#65292;&#24182;&#19988;&#23558;&#25506;&#32034;&#20960;&#20010;&#30001;&#32431; HTTP web &#26381;&#21153;&#24102;&#26469;&#26368;&#22823;&#21033;&#30410;&#30340; HTTP &#29305;&#24615;&#12290;</p><p>&#22914;&#19979;&#25152;&#31034;&#20026;<a class="link" href="#streams" title="&#31532;&nbsp;10&nbsp;&#31456;&nbsp;&#33050;&#26412;&#21644;&#27969;">&#19978;&#19968;&#31456;</a>&#26366;&#32463;&#30475;&#21040;&#36807;&#30340; <code class="filename">openanything</code> &#27169;&#22359;&#30340;&#26356;&#39640;&#32423;&#29256;&#26412;&#65306;</p><div class="example"><a name="d0e27701"></a><p class="title"><b>&#20363;&nbsp;11.1.&nbsp;<code class="filename">openanything.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
import urllib2, urlparse, gzip
from StringIO import StringIO

USER_AGENT = 'OpenAnything/1.0 +http://diveintopython.org/http_web_services/'

class SmartRedirectHandler(urllib2.HTTPRedirectHandler):    
    def http_error_301(self, req, fp, code, msg, headers):  
        result = urllib2.HTTPRedirectHandler.http_error_301(
            self, req, fp, code, msg, headers)              
        result.status = code                                
        return result                                       

    def http_error_302(self, req, fp, code, msg, headers):  
        result = urllib2.HTTPRedirectHandler.http_error_302(
            self, req, fp, code, msg, headers)              
        result.status = code                                
        return result                                       

class DefaultErrorHandler(urllib2.HTTPDefaultErrorHandler):   
    def http_error_default(self, req, fp, code, msg, headers):
        result = urllib2.HTTPError(                           
            req.get_full_url(), code, msg, headers, fp)       
        result.status = code                                  
        return result                                         

def openAnything(source, etag=None, lastmodified=None, agent=USER_AGENT):
    '''URL, filename, or string --&gt; stream

    This function lets you define parsers that take any input source
    (URL, pathname to local or network file, or actual data as a string)
    and deal with it in a uniform manner.  Returned object is guaranteed
    to have all the basic stdio read methods (read, readline, readlines).
    Just .close() the object when you're done with it.

    If the etag argument is supplied, it will be used as the value of an
    If-None-Match request header.

    If the lastmodified argument is supplied, it must be a formatted
    date/time string in GMT (as returned in the Last-Modified header of
    a previous request).  The formatted date/time will be used
    as the value of an If-Modified-Since request header.

    If the agent argument is supplied, it will be used as the value of a
    User-Agent request header.
    '''

    if hasattr(source, 'read'):
        return source

    if source == '-':
        return sys.stdin

    if urlparse.urlparse(source)[0] == 'http':                                      
        # open URL with urllib2                                                     
        request = urllib2.Request(source)                                           
        request.add_header('User-Agent', agent)                                     
        if etag:                                                                    
            request.add_header('If-None-Match', etag)                               
        if lastmodified:                                                            
            request.add_header('If-Modified-Since', lastmodified)                   
        request.add_header('Accept-encoding', 'gzip')                               
        opener = urllib2.build_opener(SmartRedirectHandler(), DefaultErrorHandler())
        return opener.open(request)                                                 
    
    # try to open with native open function (if source is a filename)
    try:
        return open(source)
    except (IOError, OSError):
        pass

    # treat source as string
    return StringIO(str(source))

def fetch(source, etag=None, last_modified=None, agent=USER_AGENT):  
    '''Fetch data and metadata from a URL, file, stream, or string'''
    result = {}                                                      
    f = openAnything(source, etag, last_modified, agent)             
    result['data'] = f.read()                                        
    if hasattr(f, 'headers'):                                        
        # save ETag, if the server sent one                          
        result['etag'] = f.headers.get('ETag')                       
        # save Last-Modified header, if the server sent one          
        result['lastmodified'] = f.headers.get('Last-Modified')      
        if f.headers.get('content-encoding', '') == 'gzip':          
            # data came back gzip-compressed, decompress it          
            result['data'] = gzip.GzipFile(fileobj=StringIO(result['data']])).read()
    if hasattr(f, 'url'):                                            
        result['url'] = f.url                                        
        result['status'] = 200                                       
    if hasattr(f, 'status'):                                         
        result['status'] = f.status                                  
    f.close()                                                        
    return result                                                    
</pre></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>Paul Prescod &#35748;&#20026;&#32431; HTTP web &#26381;&#21153;&#26159; Internet &#30340;&#26410;&#26469; (<a href="http://webservices.xml.com/pub/a/ws/2002/02/06/rest.html">http://webservices.xml.com/pub/a/ws/2002/02/06/rest.html</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.review"></a>11.2.&nbsp;&#36991;&#20813;&#36890;&#36807; HTTP &#37325;&#22797;&#22320;&#33719;&#21462;&#25968;&#25454;</h2></div></div></div><div class="abstract"><p>&#20551;&#22914;&#35828;&#20320;&#24819;&#29992; HTTP &#19979;&#36733;&#36164;&#28304;&#65292;&#20363;&#22914;&#19968;&#20010; Atom feed &#27719;&#32858;&#12290;&#20320;&#19981;&#20165;&#20165;&#24819;&#19979;&#36733;&#19968;&#27425;&#65307;&#32780;&#26159;&#24819;&#19968;&#27425;&#21448;&#19968;&#27425;&#22320;&#19979;&#36733;&#23427;&#65292;&#22914;&#27599;&#23567;&#26102;&#19968;&#27425;&#65292;&#20174;&#25552;&#20379; news feed &#30340;&#31449;&#28857;&#33719;&#24471;&#26368;&#26032;&#30340;&#28040;&#24687;&#12290;&#35753;&#25105;&#20204;&#39318;&#20808;&#29992;&#19968;&#31181;&#30452;&#25509;&#32780;&#21407;&#22987;&#30340;&#26041;&#27861;&#26469;&#23454;&#29616;&#23427;&#65292;&#28982;&#21518;&#30475;&#30475;&#22914;&#20309;&#25913;&#36827;&#23427;&#12290;
</p></div><div class="example"><a name="d0e27729"></a><p class="title"><b>&#20363;&nbsp;11.2.&nbsp;&#29992;&#30452;&#25509;&#32780;&#21407;&#22987;&#30340;&#26041;&#27861;&#19979;&#36733; feed</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">data = urllib.urlopen('http://diveintomark.org/xml/atom.xml').read()</span>    <a name="oa.review.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print data</span>
<font color="teal">&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;
&lt;feed version="0.3"
  xmlns="http://purl.org/atom/ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="en"&gt;
  &lt;title mode="escaped"&gt;dive into mark&lt;/title&gt;
  &lt;link rel="alternate" type="text/html" href="http://diveintomark.org/"/&gt;
  &lt;-- rest of feed omitted for brevity --&gt;</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.review.1.1">circled_1_delcric</a> </dt><dd>&#20351;&#29992; <span class="application">Python</span> &#36890;&#36807; HTTP &#19979;&#36733;&#20219;&#20309;&#19996;&#35199;&#37117;&#31616;&#21333;&#24471;&#20196;&#20154;&#38590;&#20197;&#32622;&#20449;&#65307;&#23454;&#38469;&#19978;&#65292;&#21482;&#38656;&#35201;&#19968;&#34892;&#20195;&#30721;&#12290;<code class="filename">urllib</code> &#27169;&#22359;&#26377;&#19968;&#20010;&#20415;&#21033;&#30340; <code class="function">urlopen</code> &#20989;&#25968;&#65292;&#23427;&#25509;&#21463;&#24744;&#25152;&#35201;&#33719;&#21462;&#30340;&#39029;&#38754;&#22320;&#22336;&#65292;&#28982;&#21518;&#36820;&#22238;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#24744;&#20165;&#20165;&#20351;&#29992; <code class="function">read()</code> &#20415;&#21487;&#33719;&#24471;&#39029;&#38754;&#30340;&#20840;&#37096;&#20869;&#23481;&#12290;&#36825;&#20877;&#31616;&#21333;&#19981;&#36807;&#20102;&#12290;
</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#36825;&#31181;&#26041;&#27861;&#26377;&#20309;&#19981;&#22949;&#20043;&#22788;&#21527;&#65311;&#24403;&#28982;&#65292;&#22312;&#27979;&#35797;&#25110;&#24320;&#21457;&#20013;&#19968;&#27425;&#24615;&#30340;&#20351;&#29992;&#27809;&#26377;&#20160;&#20040;&#19981;&#22949;&#12290;&#25105;&#32463;&#24120;&#36825;&#26679;&#12290;&#25105;&#24819;&#35201; feed &#27719;&#32858;&#30340;&#20869;&#23481;&#65292;&#25105;&#23601;&#33719;&#21462; feed &#30340;&#20869;&#23481;&#12290;&#36825;&#31181;&#26041;&#27861;&#23545;&#20854;&#20182; web &#39029;&#38754;&#21516;&#26679;&#26377;&#25928;&#12290;&#20294;&#26159;&#19968;&#26086;&#20320;&#24320;&#22987;&#25353;&#29031; web &#26381;&#21153;&#30340;&#26041;&#24335;&#21435;&#24605;&#32771;&#26377;&#35268;&#21017;&#30340;&#35775;&#38382;&#38656;&#27714;&#26102; (&#35760;&#20303;&#65292;&#20320;&#35828;&#20320;&#35745;&#21010;&#27599;&#23567;&#26102;&#19968;&#27425;&#22320;&#37325;&#22797;&#33719;&#21462;&#36825;&#26679;&#30340; feed ) &#23601;&#20250;&#21457;&#29616;&#36825;&#26679;&#30340;&#20570;&#27861;&#25928;&#29575;&#23454;&#22312;&#26159;&#22826;&#20302;&#20102;&#65292;&#24182;&#19988;&#23545;&#26381;&#21153;&#22120;&#26469;&#35828;&#20063;&#22826;&#31528;&#20102;&#12290;
</p><p>&#19979;&#38754;&#20808;&#35848;&#35770;&#19968;&#20123; HTTP &#30340;&#22522;&#26412;&#29305;&#24615;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.features"></a>11.3.&nbsp;HTTP &#30340;&#29305;&#24615;</h2></div></div></div><div class="abstract"><p>&#36825;&#37324;&#26377;&#20116;&#20010;&#20320;&#24517;&#39035;&#20851;&#27880;&#30340; HTTP &#37325;&#35201;&#29305;&#24615;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e27782"></a>11.3.1.&nbsp;&#29992;&#25143;&#20195;&#29702; (<code class="literal">User-Agent</code>)</h3></div></div></div><p><code class="literal">User-Agent</code> &#26159;&#19968;&#31181;&#23458;&#25143;&#31471;&#21578;&#30693;&#26381;&#21153;&#22120;&#35841;&#22312;&#20160;&#20040;&#26102;&#20505;&#36890;&#36807; HTTP &#35831;&#27714;&#20102;&#19968;&#20010; web &#39029;&#12289;feed &#27719;&#32858;&#25110;&#20854;&#20182;&#31867;&#22411;&#30340; web &#26381;&#21153;&#30340;&#31616;&#21333;&#36884;&#24452;&#12290;&#24403;&#23458;&#25143;&#31471;&#35831;&#27714;&#19968;&#20010;&#36164;&#28304;&#26102;&#65292;&#24212;&#35813;&#23613;&#21487;&#33021;&#26126;&#30830;&#21457;&#36215;&#35831;&#27714;&#30340;&#26159;&#35841;&#65292;&#20197;&#20415;&#24403;&#20135;&#29983;&#24322;&#24120;&#38169;&#35823;&#26102;&#65292;&#20801;&#35768;&#26381;&#21153;&#22120;&#31471;&#30340;&#31649;&#29702;&#21592;&#19982;&#23458;&#25143;&#31471;&#30340;&#24320;&#21457;&#32773;&#21462;&#24471;&#32852;&#31995;&#12290;
</p><p>&#40664;&#35748;&#24773;&#20917;&#19979; <span class="application">Python</span> &#21457;&#36865;&#19968;&#20010;&#36890;&#29992;&#30340; <code class="literal">User-Agent</code>&#65306;<code class="literal">Python-urllib/1.15</code>&#12290;&#19979;&#19968;&#33410;&#65292;&#24744;&#23558;&#30475;&#21040;&#26356;&#21152;&#26377;&#38024;&#23545;&#24615;&#30340; <code class="literal">User-Agent</code>&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e27806"></a>11.3.2.&nbsp;&#37325;&#23450;&#21521; (Redirects)</h3></div></div></div><p>&#26377;&#26102;&#36164;&#28304;&#31227;&#26469;&#31227;&#21435;&#12290;Web &#31449;&#28857;&#37325;&#32452;&#20869;&#23481;&#65292;&#39029;&#38754;&#31227;&#21160;&#21040;&#20102;&#26032;&#30340;&#22320;&#22336;&#12290;&#29978;&#33267;&#26159; web &#26381;&#21153;&#37325;&#32452;&#12290;&#21407;&#26469;&#20301;&#20110; <code class="literal">http://example.com/index.xml</code> &#30340; feed &#27719;&#32858;&#21487;&#33021;&#34987;&#31227;&#21160;&#21040; <code class="literal">http://example.com/xml/atom.xml</code>&#12290;&#25110;&#32773;&#22240;&#20026;&#19968;&#20010;&#26426;&#26500;&#30340;&#25193;&#23637;&#25110;&#37325;&#32452;&#65292;&#25972;&#20010;&#22495;&#34987;&#36801;&#31227;&#12290;&#20363;&#22914;&#65292;<code class="literal">http://www.example.com/index.xml</code> &#21487;&#33021;&#34987;&#37325;&#23450;&#21521;&#21040; <code class="literal">http://server-farm-1.example.com/index.xml</code>&#12290;</p><p>&#24744;&#27599;&#27425;&#20174; HTTP &#26381;&#21153;&#22120;&#35831;&#27714;&#20219;&#20309;&#31867;&#22411;&#30340;&#36164;&#28304;&#26102;&#65292;&#26381;&#21153;&#22120;&#30340;&#21709;&#24212;&#20013;&#22343;&#21253;&#21547;&#19968;&#20010;&#29366;&#24577;&#20195;&#30721;&#12290;&#29366;&#24577;&#20195;&#30721; <code class="literal">200</code> &#30340;&#24847;&#24605;&#26159; "<span class="quote">&#19968;&#20999;&#27491;&#24120;&#65292;&#36825;&#23601;&#26159;&#24744;&#35831;&#27714;&#30340;&#39029;&#38754;</span>"&#12290;&#29366;&#24577;&#20195;&#30721; <code class="literal">404</code> &#30340;&#24847;&#24605;&#26159; "<span class="quote">&#39029;&#38754;&#27809;&#25214;&#21040;</span>"&#12290; (&#24403;&#27983;&#35272; web &#26102;&#65292;&#20320;&#21487;&#33021;&#30475;&#21040;&#36807; 404 errors&#12290;)</p><p>HTTP &#26377;&#20004;&#31181;&#19981;&#21516;&#30340;&#26041;&#27861;&#34920;&#31034;&#36164;&#28304;&#24050;&#32463;&#34987;&#31227;&#21160;&#12290;&#29366;&#24577;&#20195;&#30721; <code class="literal">302</code> &#34920;&#31034;<span class="emphasis"><em>&#20020;&#26102;&#37325;&#23450;&#21521;</em></span>&#65307;&#36825;&#24847;&#21619;&#30528; "<span class="quote">&#21710;&#21568;&#65292;&#35775;&#38382;&#20869;&#23481;&#34987;&#20020;&#26102;&#31227;&#21160;</span>" (&#28982;&#21518;&#22312; <code class="literal">Location:</code> &#22836;&#20449;&#24687;&#20013;&#32473;&#20986;&#20020;&#26102;&#22320;&#22336;)&#12290;&#29366;&#24577;&#20195;&#30721; <code class="literal">301</code> &#34920;&#31034;<span class="emphasis"><em>&#27704;&#20037;&#37325;&#23450;&#21521;</em></span>&#65307;&#36825;&#24847;&#21619;&#30528; "<span class="quote">&#21710;&#21568;&#65292;&#35775;&#38382;&#20869;&#23481;&#34987;&#27704;&#20037;&#31227;&#21160;</span>" (&#28982;&#21518;&#22312; <code class="literal">Location:</code> &#22836;&#20449;&#24687;&#20013;&#32473;&#20986;&#26032;&#22320;&#22336;)&#12290;&#22914;&#26524;&#24744;&#33719;&#24471;&#20102;&#19968;&#20010; <code class="literal">302</code> &#29366;&#24577;&#20195;&#30721;&#21644;&#19968;&#20010;&#26032;&#22320;&#22336;&#65292;HTTP &#35268;&#33539;&#35828;&#24744;&#24212;&#35813;&#20351;&#29992;&#26032;&#22320;&#22336;&#33719;&#21462;&#24744;&#30340;&#35831;&#27714;&#65292;&#20294;&#26159;&#19979;&#27425;&#24744;&#35201;&#35775;&#38382;&#21516;&#19968;&#36164;&#28304;&#26102;&#65292;&#24212;&#35813;&#20351;&#29992;&#21407;&#22320;&#22336;&#37325;&#35797;&#12290;&#20294;&#26159;&#22914;&#26524;&#24744;&#33719;&#24471;&#20102;&#19968;&#20010; <code class="literal">301</code> &#29366;&#24577;&#20195;&#30721;&#21644;&#19968;&#20010;&#26032;&#22320;&#22336;&#65292;&#24744;&#24212;&#35813;&#20174;&#27492;&#20351;&#29992;&#26032;&#22320;&#22336;&#12290;</p><p>&#24403;&#20174; HTTP &#26381;&#21153;&#22120;&#25509;&#21463;&#21040;&#19968;&#20010;&#36866;&#24403;&#30340;&#29366;&#24577;&#20195;&#30721;&#26102;&#65292;<code class="function">urllib.urlopen</code> &#23558;&#33258;&#21160; "<span class="quote">&#36319;&#36394;</span>" &#37325;&#23450;&#21521;&#65292;&#20294;&#19981;&#24184;&#30340;&#26159;&#65292;&#24403;&#23427;&#20570;&#20102;&#37325;&#23450;&#21521;&#26102;&#19981;&#20250;&#21578;&#35785;&#20320;&#12290;
&#20320;&#23558;&#26368;&#32456;&#33719;&#24471;&#25152;&#35831;&#27714;&#30340;&#25968;&#25454;&#65292;&#21364;&#19997;&#27627;&#19981;&#20250;&#23519;&#35273;&#21040;&#22312;&#36825;&#20010;&#36807;&#31243;&#20013;&#19968;&#20010;&#28508;&#22312;&#30340;&#24211; "<span class="quote">&#24110;&#21161;</span>" &#20320;&#20570;&#20102;&#19968;&#27425;&#37325;&#23450;&#21521;&#25805;&#20316;&#12290;&#22240;&#27492;&#20320;&#23558;&#32487;&#32493;&#19981;&#26029;&#22320;&#20351;&#29992;&#26087;&#22320;&#22336;&#65292;&#24182;&#19988;&#27599;&#27425;&#37117;&#23558;&#33719;&#24471;&#34987;&#37325;&#23450;&#21521;&#30340;&#26032;&#22320;&#22336;&#12290;&#36825;&#19968;&#36807;&#31243;&#35201;&#24448;&#36820;&#20004;&#27425;&#32780;&#19981;&#26159;&#19968;&#27425;&#65306;&#22826;&#27809;&#25928;&#29575;&#20102;&#65281;&#26412;&#31456;&#30340;&#21518;&#38754;&#65292;&#24744;&#23558;&#30475;&#21040;&#22914;&#20309;&#25913;&#36827;&#36825;&#19968;&#28857;&#65292;&#20174;&#32780;&#36866;&#24403;&#22320;&#19988;&#26377;&#25928;&#29575;&#22320;&#22788;&#29702;&#27704;&#20037;&#37325;&#23450;&#21521;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e27880"></a>11.3.3.&nbsp;<code class="literal">Last-Modified</code>/<code class="literal">If-Modified-Since</code></h3></div></div></div><p>&#26377;&#20123;&#25968;&#25454;&#38543;&#26102;&#37117;&#22312;&#21464;&#21270;&#12290;CNN.com &#30340;&#20027;&#39029;&#32463;&#24120;&#20960;&#20998;&#38047;&#23601;&#26356;&#26032;&#12290;&#21478;&#19968;&#26041;&#38754;&#65292;Google.com &#30340;&#20027;&#39029;&#20960;&#20010;&#26143;&#26399;&#25165;&#26356;&#26032;&#19968;&#27425; (&#24403;&#20182;&#20204;&#19978;&#20256;&#29305;&#27530;&#30340;&#20551;&#26085; logo&#65292;&#25110;&#20026;&#19968;&#20010;&#26032;&#26381;&#21153;&#20316;&#24191;&#21578;&#26102;)&#12290;
Web &#26381;&#21153;&#26159;&#19981;&#21464;&#30340;&#65306;&#36890;&#24120;&#26381;&#21153;&#22120;&#30693;&#36947;&#20320;&#25152;&#35831;&#27714;&#30340;&#25968;&#25454;&#30340;&#26368;&#21518;&#20462;&#25913;&#26102;&#38388;&#65292;&#24182;&#19988; HTTP &#20026;&#26381;&#21153;&#22120;&#25552;&#20379;&#20102;&#19968;&#31181;&#23558;&#26368;&#36817;&#20462;&#25913;&#25968;&#25454;&#36830;&#21516;&#20320;&#35831;&#27714;&#30340;&#25968;&#25454;&#19968;&#21516;&#21457;&#36865;&#30340;&#26041;&#27861;&#12290;</p><p>&#22914;&#26524;&#20320;&#31532;&#20108;&#27425; (&#25110;&#31532;&#19977;&#27425;&#65292;&#25110;&#31532;&#22235;&#27425;) &#35831;&#27714;&#30456;&#21516;&#30340;&#25968;&#25454;&#65292;&#20320;&#21487;&#20197;&#21578;&#35785;&#26381;&#21153;&#22120;&#20320;&#19978;&#19968;&#27425;&#33719;&#24471;&#30340;&#26368;&#21518;&#20462;&#25913;&#26085;&#26399;&#65306;&#22312;&#20320;&#30340;&#35831;&#27714;&#20013;&#21457;&#36865;&#19968;&#20010; <code class="literal">If-Modified-Since</code> &#22836;&#20449;&#24687;&#65292;&#23427;&#21253;&#21547;&#20102;&#19978;&#19968;&#27425;&#20174;&#26381;&#21153;&#22120;&#36830;&#21516;&#25968;&#25454;&#25152;&#33719;&#24471;&#30340;&#26085;&#26399;&#12290;&#22914;&#26524;&#25968;&#25454;&#20174;&#37027;&#26102;&#36215;&#27809;&#26377;&#25913;&#21464;&#65292;&#26381;&#21153;&#22120;&#23558;&#36820;&#22238;&#19968;&#20010;&#29305;&#27530;&#30340; HTTP &#29366;&#24577;&#20195;&#30721; <code class="literal">304</code>&#65292;&#36825;&#24847;&#21619;&#30528; "<span class="quote">&#20174;&#19978;&#19968;&#27425;&#35831;&#27714;&#21518;&#36825;&#20010;&#25968;&#25454;&#27809;&#26377;&#25913;&#21464;</span>"&#12290;&#36825;&#19968;&#28857;&#26377;&#20309;&#36827;&#27493;&#21602;&#65311;&#24403;&#26381;&#21153;&#22120;&#21457;&#36865;&#29366;&#24577;&#32534;&#30721; <code class="literal">304</code> &#26102;&#65292;<span class="emphasis"><em>&#19981;&#20877;&#37325;&#26032;&#21457;&#36865;&#25968;&#25454;</em></span>&#12290;&#24744;&#20165;&#20165;&#33719;&#24471;&#20102;&#36825;&#20010;&#29366;&#24577;&#20195;&#30721;&#12290;&#25152;&#20197;&#24403;&#25968;&#25454;&#27809;&#26377;&#26356;&#26032;&#26102;&#65292;&#20320;&#19981;&#38656;&#35201;&#19968;&#27425;&#21448;&#19968;&#27425;&#22320;&#19979;&#36733;&#30456;&#21516;&#30340;&#25968;&#25454;&#65307;&#26381;&#21153;&#22120;&#20551;&#23450;&#20320;&#26377;&#26412;&#22320;&#30340;&#32531;&#23384;&#25968;&#25454;&#12290;</p><p>&#25152;&#26377;&#29616;&#20195;&#30340;&#27983;&#35272;&#22120;&#37117;&#25903;&#25345;&#26368;&#36817;&#20462;&#25913; (last-modified) &#30340;&#25968;&#25454;&#26816;&#26597;&#12290;&#22914;&#26524;&#20320;&#26366;&#32463;&#35775;&#38382;&#36807;&#26576;&#39029;&#65292;&#19968;&#22825;&#21518;&#37325;&#26032;&#35775;&#38382;&#30456;&#21516;&#30340;&#39029;&#26102;&#21457;&#29616;&#23427;&#27809;&#26377;&#21464;&#21270;&#65292;&#24182;&#22855;&#24618;&#31532;&#20108;&#27425;&#35775;&#38382;&#26102;&#39029;&#38754;&#21152;&#36733;&#24471;&#22914;&#27492;&#20043;&#24555;&#8212;&#8212;&#36825;&#23601;&#26159;&#21407;&#22240;&#25152;&#22312;&#12290;&#20320;&#30340;&#27983;&#35272;&#22120;&#39318;&#27425;&#35775;&#38382;&#26102;&#20250;&#22312;&#26412;&#22320;&#32531;&#23384;&#39029;&#38754;&#20869;&#23481;&#65292;&#24403;&#20320;&#31532;&#20108;&#27425;&#35775;&#38382;&#65292;&#27983;&#35272;&#22120;&#33258;&#21160;&#21457;&#36865;&#39318;&#27425;&#35775;&#38382;&#26102;&#20174;&#26381;&#21153;&#22120;&#33719;&#24471;&#30340;&#26368;&#36817;&#20462;&#25913;&#26085;&#26399;&#12290;&#26381;&#21153;&#22120;&#31616;&#21333;&#22320;&#36820;&#22238; <code class="literal">304: Not Modified</code> (&#27809;&#26377;&#20462;&#25913;)&#65292;&#22240;&#27492;&#27983;&#35272;&#22120;&#23601;&#20250;&#30693;&#36947;&#20174;&#26412;&#22320;&#32531;&#23384;&#21152;&#36733;&#39029;&#38754;&#12290;&#22312;&#36825;&#19968;&#28857;&#19978;&#65292;Web &#26381;&#21153;&#20063;&#22914;&#27492;&#26234;&#33021;&#12290;</p><p><span class="application">Python</span> &#30340; URL &#24211;&#27809;&#26377;&#25552;&#20379;&#20869;&#32622;&#30340;&#26368;&#36817;&#20462;&#25913;&#25968;&#25454;&#26816;&#26597;&#25903;&#25345;&#65292;&#20294;&#26159;&#20320;&#21487;&#20197;&#20026;&#27599;&#19968;&#20010;&#35831;&#27714;&#28155;&#21152;&#20219;&#24847;&#30340;&#22836;&#20449;&#24687;&#24182;&#22312;&#27599;&#19968;&#20010;&#21709;&#24212;&#20013;&#35835;&#21462;&#20219;&#24847;&#22836;&#20449;&#24687;&#65292;&#20174;&#32780;&#33258;&#24049;&#28155;&#21152;&#36825;&#31181;&#25903;&#25345;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e27915"></a>11.3.4.&nbsp;<code class="literal">ETag</code>/<code class="literal">If-None-Match</code></h3></div></div></div><p>ETag &#26159;&#23454;&#29616;&#19982;&#26368;&#36817;&#20462;&#25913;&#25968;&#25454;&#26816;&#26597;&#21516;&#26679;&#30340;&#21151;&#33021;&#30340;&#21478;&#19968;&#31181;&#26041;&#27861;&#65306;&#27809;&#26377;&#21464;&#21270;&#26102;&#19981;&#37325;&#26032;&#19979;&#36733;&#25968;&#25454;&#12290;&#20854;&#24037;&#20316;&#26041;&#24335;&#26159;&#65306;&#26381;&#21153;&#22120;&#21457;&#36865;&#20320;&#25152;&#35831;&#27714;&#30340;&#25968;&#25454;&#30340;&#21516;&#26102;&#65292;&#21457;&#36865;&#26576;&#31181;&#25968;&#25454;&#30340; hash (&#22312; <code class="literal">ETag</code> &#22836;&#20449;&#24687;&#20013;&#32473;&#20986;)&#12290;hash &#30340;&#30830;&#23450;&#23436;&#20840;&#21462;&#20915;&#20110;&#26381;&#21153;&#22120;&#12290;&#24403;&#31532;&#20108;&#27425;&#35831;&#27714;&#30456;&#21516;&#30340;&#25968;&#25454;&#26102;&#65292;&#20320;&#38656;&#35201;&#22312; <code class="literal">If-None-Match:</code> &#22836;&#20449;&#24687;&#20013;&#21253;&#21547; ETag hash&#65292;&#22914;&#26524;&#25968;&#25454;&#27809;&#26377;&#25913;&#21464;&#65292;&#26381;&#21153;&#22120;&#23558;&#36820;&#22238; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#12290;&#19982;&#26368;&#36817;&#20462;&#25913;&#25968;&#25454;&#26816;&#26597;&#30456;&#21516;&#65292;&#26381;&#21153;&#22120;<span class="emphasis"><em>&#20165;&#20165;</em></span> &#21457;&#36865; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#65307;&#31532;&#20108;&#27425;&#23558;&#19981;&#20026;&#20320;&#21457;&#36865;&#30456;&#21516;&#30340;&#25968;&#25454;&#12290;&#22312;&#31532;&#20108;&#27425;&#35831;&#27714;&#26102;&#65292;&#36890;&#36807;&#21253;&#21547; ETag hash&#65292;&#20320;&#21578;&#35785;&#26381;&#21153;&#22120;&#65306;&#22914;&#26524; hash &#20173;&#26087;&#21305;&#37197;&#23601;&#27809;&#26377;&#24517;&#35201;&#37325;&#26032;&#21457;&#36865;&#30456;&#21516;&#30340;&#25968;&#25454;&#65292;&#22240;&#20026;&#20320;&#36824;&#26377;&#19978;&#19968;&#27425;&#35775;&#38382;&#36807;&#30340;&#25968;&#25454;&#12290;</p><p><span class="application">Python</span> &#30340; URL &#24211;&#27809;&#26377;&#23545; ETag &#30340;&#20869;&#32622;&#25903;&#25345;&#65292;&#20294;&#26159;&#22312;&#26412;&#31456;&#21518;&#38754;&#20320;&#23558;&#30475;&#21040;&#22914;&#20309;&#28155;&#21152;&#36825;&#31181;&#25903;&#25345;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e27943"></a>11.3.5.&nbsp;&#21387;&#32553; (Compression)</h3></div></div></div><p>&#26368;&#21518;&#19968;&#20010;&#37325;&#35201;&#30340; HTTP &#29305;&#24615;&#26159; gzip &#21387;&#32553;&#12290;
&#20851;&#20110; HTTP web &#26381;&#21153;&#30340;&#20027;&#39064;&#20960;&#20046;&#24635;&#26159;&#20250;&#28041;&#21450;&#22312;&#32593;&#32476;&#32447;&#36335;&#19978;&#20256;&#36755;&#30340; XML&#12290;XML &#26159;&#25991;&#26412;&#65292;&#32780;&#19988;&#36824;&#26159;&#30456;&#24403;&#20887;&#38271;&#30340;&#25991;&#26412;&#65292;&#32780;&#25991;&#26412;&#36890;&#24120;&#21487;&#20197;&#34987;&#24456;&#22909;&#22320;&#21387;&#32553;&#12290;&#24403;&#20320;&#36890;&#36807; HTTP &#35831;&#27714;&#19968;&#20010;&#36164;&#28304;&#26102;&#65292;&#21487;&#20197;&#21578;&#35785;&#26381;&#21153;&#22120;&#65292;&#22914;&#26524;&#23427;&#26377;&#20219;&#20309;&#26032;&#25968;&#25454;&#35201;&#21457;&#36865;&#32473;&#25105;&#26102;&#65292;&#35831;&#20197;&#21387;&#32553;&#30340;&#26684;&#24335;&#21457;&#36865;&#12290;&#22312;&#20320;&#30340;&#35831;&#27714;&#20013;&#21253;&#21547; <code class="literal">Accept-encoding: gzip</code> &#22836;&#20449;&#24687;&#65292;&#22914;&#26524;&#26381;&#21153;&#22120;&#25903;&#25345;&#21387;&#32553;&#65292;&#23427;&#23558;&#36820;&#22238;&#30001; gzip &#21387;&#32553;&#30340;&#25968;&#25454;&#24182;&#19988;&#20351;&#29992; <code class="literal">Content-encoding: gzip</code> &#22836;&#20449;&#24687;&#26631;&#35760;&#12290;</p><p><span class="application">Python</span> &#30340; URL &#24211;&#26412;&#36523;&#27809;&#26377;&#20869;&#32622;&#23545; gzip &#21387;&#32553;&#30340;&#25903;&#25345;&#65292;&#20294;&#26159;&#20320;&#33021;&#20026;&#35831;&#27714;&#28155;&#21152;&#20219;&#24847;&#30340;&#22836;&#20449;&#24687;&#12290;<span class="application">Python</span> &#36824;&#25552;&#20379;&#20102;&#19968;&#20010;&#29420;&#31435;&#30340; <code class="filename">gzip</code> &#27169;&#22359;&#65292;&#23427;&#25552;&#20379;&#20102;&#23545;&#25968;&#25454;&#36827;&#34892;&#35299;&#21387;&#32553;&#30340;&#21151;&#33021;&#12290;</p><p>&#27880;&#24847;&#25105;&#20204;&#29992;&#20110;&#19979;&#36733; feed &#27719;&#32858;&#30340;<a class="link" href="#oa.review" title="11.2.&nbsp;&#36991;&#20813;&#36890;&#36807; HTTP &#37325;&#22797;&#22320;&#33719;&#21462;&#25968;&#25454;">&#23567;&#21333;&#34892;&#33050;&#26412;</a>&#24182;&#19981;&#25903;&#25345;&#20219;&#20309;&#36825;&#20123; HTTP &#29305;&#24615;&#12290;&#35753;&#25105;&#20204;&#26469;&#30475;&#30475;&#22914;&#20309;&#25913;&#21892;&#23427;&#12290;</p></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.debug"></a>11.4.&nbsp;&#35843;&#35797; HTTP web &#26381;&#21153;</h2></div></div></div><div class="abstract"><p>&#39318;&#20808;&#65292;&#35753;&#25105;&#20204;&#24320;&#21551; <span class="application">Python</span> HTTP &#24211;&#30340;&#35843;&#35797;&#29305;&#24615;&#24182;&#26597;&#30475;&#32593;&#32476;&#32447;&#36335;&#19978;&#30340;&#20256;&#36755;&#36807;&#31243;&#12290;&#36825;&#23545;&#26412;&#31456;&#30340;&#20840;&#37096;&#20869;&#23481;&#37117;&#24456;&#26377;&#29992;&#65292;&#22240;&#20026;&#20320;&#23558;&#28155;&#21152;&#36234;&#26469;&#36234;&#22810;&#30340;&#29305;&#24615;&#12290;</p></div><div class="example"><a name="d0e27980"></a><p class="title"><b>&#20363;&nbsp;11.3.&nbsp;&#35843;&#35797; HTTP</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import httplib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">httplib.HTTPConnection.debuglevel = 1</span>             <a name="oa.debug.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">feeddata = urllib.urlopen('http://diveintomark.org/xml/atom.xml').read()</span>
<font color="teal">connect: (diveintomark.org, 80)</font>                       <a name="oa.debug.1.2"></a>circled_2_delcric
<font color="teal">send: '</font>
<font color="teal">GET /xml/atom.xml HTTP/1.0</font>                            <a name="oa.debug.1.3"></a>circled_3_delcric
<font color="teal">Host: diveintomark.org</font>                                <a name="oa.debug.1.4"></a>circled_4_delcric
<font color="teal">User-agent: Python-urllib/1.15</font>                        <a name="oa.debug.1.5"></a>circled_5_delcric
<font color="teal">'</font>
<font color="teal">reply: 'HTTP/1.1 200 OK\r\n'</font>                          <a name="oa.debug.1.6"></a>circled_6_delcric
<font color="teal">header: Date: Wed, 14 Apr 2004 22:27:30 GMT</font>
<font color="teal">header: Server: Apache/2.0.49 (Debian GNU/Linux)</font>
<font color="teal">header: Content-Type: application/atom+xml</font>
<font color="teal">header: Last-Modified: Wed, 14 Apr 2004 22:14:38 GMT</font>  <a name="oa.debug.1.7"></a>circled_7_delcric
<font color="teal">header: ETag: "e8284-68e0-4de30f80"</font>                   <a name="oa.debug.1.8"></a>circled_8_delcric
<font color="teal">header: Accept-Ranges: bytes</font>
<font color="teal">header: Content-Length: 26848</font>
<font color="teal">header: Connection: close</font>
</pre></div></div><br class="example-break"><div class="calloutlist"><dl compact><dt><a href="#oa.debug.1.1">circled_1_delcric</a> </dt><dd><code class="filename">urllib</code> &#20381;&#36182;&#20110;&#21478;&#19968;&#20010; <span class="application">Python</span> &#30340;&#26631;&#20934;&#24211;&#65292;<code class="filename">httplib</code>&#12290;&#36890;&#24120;&#20320;&#19981;&#24517;&#26174;&#24335;&#22320;&#32473;&#20986; <code class="literal">import httplib</code> (<code class="filename">urllib</code> &#20250;&#33258;&#21160;&#23548;&#20837;)&#65292;&#20294;&#26159;&#20320;&#21487;&#20197;&#20026; <code class="classname">HTTPConnection</code> &#31867; (<code class="filename">urllib</code> &#22312;&#20869;&#37096;&#20351;&#29992;&#23427;&#26469;&#35775;&#38382; HTTP &#26381;&#21153;&#22120;) &#35774;&#32622;&#35843;&#35797;&#26631;&#35760;&#12290;&#36825;&#26159;&#19968;&#31181;&#20196;&#20154;&#38590;&#20197;&#32622;&#20449;&#30340;&#26377;&#29992;&#25216;&#26415;&#12290;<span class="application">Python</span> &#20854;&#20182;&#30340;&#19968;&#20123;&#24211;&#20063;&#26377;&#31867;&#20284;&#30340;&#35843;&#35797;&#26631;&#35760;&#65292;&#20294;&#26159;&#27809;&#26377;&#21629;&#21517;&#21644;&#24320;&#21551;&#23427;&#20204;&#30340;&#29305;&#27530;&#26631;&#20934;&#65307;&#22914;&#26524;&#26377;&#31867;&#20284;&#30340;&#29305;&#24615;&#21487;&#29992;&#65292;&#20320;&#38656;&#35201;&#38405;&#35835;&#27599;&#19968;&#20010;&#24211;&#30340;&#25991;&#26723;&#26469;&#26597;&#30475;&#20351;&#29992;&#26041;&#27861;&#12290;</dd><dt><a href="#oa.debug.1.2">circled_2_delcric</a> </dt><dd>&#26082;&#28982;&#24050;&#32463;&#35774;&#32622;&#20102;&#35843;&#35797;&#26631;&#35760;&#65292;HTTP &#30340;&#35831;&#27714;&#21644;&#21709;&#24212;&#20449;&#24687;&#20250;&#23454;&#26102;&#22320;&#34987;&#25171;&#21360;&#20986;&#26469;&#12290;&#39318;&#20808;&#21578;&#35785;&#20320;&#30340;&#26159;&#20320;&#36830;&#25509;&#26381;&#21153;&#22120; <code class="literal">diveintomark.org</code> &#30340; 80 &#31471;&#21475;&#65292;&#36825;&#26159; HTTP &#30340;&#26631;&#20934;&#31471;&#21475;&#12290;</dd><dt><a href="#oa.debug.1.3">circled_3_delcric</a> </dt><dd>&#24403;&#20320;&#35831;&#27714; Atom feed &#26102;&#65292;<code class="filename">urllib</code> &#21521;&#26381;&#21153;&#22120;&#21457;&#36865;&#19977;&#34892;&#20449;&#24687;&#12290;&#31532;&#19968;&#34892;&#25351;&#20986;&#20320;&#20351;&#29992;&#30340; HTTP verb &#21644;&#36164;&#28304;&#30340;&#36335;&#24452; (&#38500;&#21435;&#22495;&#21517;)&#12290;&#22312;&#26412;&#31456;&#20013;&#25152;&#26377;&#30340;&#35831;&#27714;&#37117;&#23558;&#20351;&#29992; <code class="literal">GET</code>&#65292;&#20294;&#26159;&#22312;&#19979;&#19968;&#31456;&#30340; <acronym class="acronym">SOAP</acronym> &#20013;&#65292;&#20320;&#20250;&#30475;&#21040;&#25152;&#26377;&#30340;&#35831;&#27714;&#37117;&#20351;&#29992; <code class="literal">POST</code> &#12290;&#38500;&#20102;&#35831;&#27714;&#30340;&#21160;&#35789;&#19981;&#21516;&#20043;&#22806;&#65292;&#22522;&#26412;&#30340;&#35821;&#27861;&#26159;&#30456;&#21516;&#30340;&#12290;</dd><dt><a href="#oa.debug.1.4">circled_4_delcric</a> </dt><dd>&#31532;&#20108;&#34892;&#26159; <code class="literal">Host</code> &#22836;&#20449;&#24687;&#65292;&#23427;&#25351;&#20986;&#20320;&#25152;&#35775;&#38382;&#30340;&#26381;&#21153;&#30340;&#22495;&#21517;&#12290;&#36825;&#19968;&#28857;&#24456;&#37325;&#35201;&#65292;&#22240;&#20026;&#19968;&#20010;&#29420;&#31435;&#30340; HTTP &#26381;&#21153;&#22120;&#21487;&#20197;&#26381;&#21153;&#20110;&#22810;&#20010;&#19981;&#21516;&#30340;&#22495;&#12290;&#24403;&#21069;&#25105;&#30340;&#26381;&#21153;&#22120;&#26381;&#21153;&#20110; 12 &#20010;&#22495;&#65307;&#20854;&#20182;&#30340;&#26381;&#21153;&#22120;&#21487;&#20197;&#26381;&#21153;&#20110;&#25104;&#30334;&#20035;&#33267;&#19978;&#21315;&#20010;&#22495;&#12290;</dd><dt><a href="#oa.debug.1.5">circled_5_delcric</a> </dt><dd>&#31532;&#19977;&#34892;&#26159; <code class="literal">User-Agent</code> &#22836;&#20449;&#24687;&#12290;&#22312;&#27492;&#20320;&#30475;&#21040;&#30340;&#26159;&#30001; <code class="filename">urllib</code> &#24211;&#40664;&#35748;&#28155;&#21152;&#30340;&#26222;&#36890;&#30340; <code class="literal">User-Agent</code> &#12290;&#22312;&#19979;&#19968;&#33410;&#65292;&#20320;&#20250;&#30475;&#21040;&#22914;&#20309;&#33258;&#23450;&#20041;&#23427;&#30340;&#26356;&#22810;&#32454;&#33410;&#12290;</dd><dt><a href="#oa.debug.1.6">circled_6_delcric</a> </dt><dd>&#26381;&#21153;&#22120;&#29992;&#29366;&#24577;&#20195;&#30721;&#21644;&#19968;&#31995;&#21015;&#30340;&#22836;&#20449;&#24687;&#31572;&#22797; (&#20854;&#20013;&#19968;&#20123;&#25968;&#25454;&#21487;&#33021;&#20250;&#34987;&#23384;&#20648;&#21040; <code class="varname">feeddata</code> &#21464;&#37327;&#20013;)&#12290;&#36825;&#37324;&#30340;&#29366;&#24577;&#20195;&#30721;&#26159; <code class="literal">200</code>&#65292;&#24847;&#21619;&#30528; "<span class="quote">&#19968;&#20999;&#27491;&#24120;&#65292;&#36825;&#23601;&#26159;&#24744;&#35831;&#27714;&#30340;&#25968;&#25454;</span>"&#12290;&#26381;&#21153;&#22120;&#20063;&#20250;&#21578;&#35785;&#20320;&#21709;&#24212;&#35831;&#27714;&#30340;&#25968;&#25454;&#12289;&#19968;&#20123;&#26377;&#20851;&#26381;&#21153;&#22120;&#33258;&#36523;&#30340;&#20449;&#24687;&#65292;&#20197;&#21450;&#20256;&#32473;&#20320;&#30340;&#25968;&#25454;&#30340;&#20869;&#23481;&#31867;&#22411;&#12290;&#26681;&#25454;&#20320;&#30340;&#24212;&#29992;&#19981;&#21516;&#65292;&#36825;&#25110;&#35768;&#26377;&#29992;&#65292;&#25110;&#35768;&#27809;&#29992;&#12290;&#36825;&#20805;&#20998;&#30830;&#35748;&#20102;&#20320;&#25152;&#35831;&#27714;&#30340;&#26159;&#19968;&#20010; Atom feed&#65292;&#30631;&#65292;&#20320;&#33719;&#24471;&#20102; Atom feed (<code class="literal">application/atom+xml</code>&#65292;&#23427;&#26159;&#24050;&#32463;&#27880;&#20876;&#30340;&#26377;&#20851; Atom feeds &#30340;&#20869;&#23481;&#31867;&#22411;)&#12290;</dd><dt><a href="#oa.debug.1.7">circled_7_delcric</a> </dt><dd>&#24403;&#27492; Atom feed &#26377;&#26368;&#36817;&#30340;&#20462;&#25913;&#65292;&#26381;&#21153;&#22120;&#20250;&#21578;&#35785;&#20320; (&#26412;&#20363;&#20013;&#65292;&#22823;&#32422;&#21457;&#29983;&#22312; 13 &#20998;&#38047;&#20043;&#21069;)&#12290;&#24403;&#19979;&#27425;&#35831;&#27714;&#21516;&#26679;&#30340; feed &#26102;&#65292;&#20320;&#21487;&#20197;&#36825;&#20010;&#26085;&#26399;&#20877;&#21457;&#36865;&#32473;&#26381;&#21153;&#22120;&#65292;&#26381;&#21153;&#22120;&#23558;&#20570;&#26368;&#36817;&#20462;&#25913;&#25968;&#25454;&#26816;&#26597;&#12290;</dd><dt><a href="#oa.debug.1.8">circled_8_delcric</a> </dt><dd>&#26381;&#21153;&#22120;&#20063;&#20250;&#21578;&#35785;&#20320;&#36825;&#20010; Atom feed &#26377;&#19968;&#20010;&#20540;&#20026; <code class="literal">"e8284-68e0-4de30f80"</code> &#30340; ETag hash&#12290;&#36825;&#20010; hash &#33258;&#36523;&#27809;&#26377;&#20219;&#20309;&#24847;&#20041;&#65307;&#38500;&#20102;&#22312;&#19979;&#27425;&#35775;&#38382;&#30456;&#21516;&#30340; feed &#26102;&#23558;&#23427;&#36865;&#36824;&#32473;&#26381;&#21153;&#22120;&#20043;&#22806;&#65292;&#20320;&#20063;&#19981;&#38656;&#35201;&#29992;&#23427;&#20570;&#20160;&#20040;&#12290;&#28982;&#21518;&#26381;&#21153;&#22120;&#20351;&#29992;&#23427;&#21578;&#35785;&#20320;&#20462;&#25913;&#26085;&#26399;&#26159;&#21542;&#34987;&#25913;&#21464;&#20102;&#12290;</dd></dl></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.useragent"></a>11.5.&nbsp;&#35774;&#32622; <code class="literal">User-Agent</code></h2></div></div></div><div class="abstract"><p>&#25913;&#21892;&#20320;&#30340; HTTP web &#26381;&#21153;&#23458;&#25143;&#31471;&#30340;&#31532;&#19968;&#27493;&#23601;&#26159;&#29992; <code class="literal">User-Agent</code> &#36866;&#24403;&#22320;&#37492;&#21035;&#20320;&#33258;&#24049;&#12290;&#20026;&#20102;&#20570;&#21040;&#36825;&#19968;&#28857;&#65292;&#20320;&#38656;&#35201;&#36828;&#31163;&#22522;&#26412;&#30340; <code class="filename">urllib</code> &#32780;&#28145;&#20837;&#21040; <code class="filename">urllib2</code>&#12290;</p></div><div class="example"><a name="d0e28175"></a><p class="title"><b>&#20363;&nbsp;11.4.&nbsp;<code class="filename">urllib2</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import httplib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">httplib.HTTPConnection.debuglevel = 1</span>                             <a name="oa.useragent.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib2</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request = urllib2.Request('http://diveintomark.org/xml/atom.xml')</span> <a name="oa.useragent.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">opener = urllib2.build_opener()</span>                                   <a name="oa.useragent.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">feeddata = opener.open(request).read()</span>                            <a name="oa.useragent.1.4"></a>circled_4_delcric
<font color="teal">connect: (diveintomark.org, 80)</font>
<font color="teal">send: '</font>
<font color="teal">GET /xml/atom.xml HTTP/1.0</font>
<font color="teal">Host: diveintomark.org</font>
<font color="teal">User-agent: Python-urllib/2.1</font>
<font color="teal">'</font>
<font color="teal">reply: 'HTTP/1.1 200 OK\r\n'</font>
<font color="teal">header: Date: Wed, 14 Apr 2004 23:23:12 GMT</font>
<font color="teal">header: Server: Apache/2.0.49 (Debian GNU/Linux)</font>
<font color="teal">header: Content-Type: application/atom+xml</font>
<font color="teal">header: Last-Modified: Wed, 14 Apr 2004 22:14:38 GMT</font>
<font color="teal">header: ETag: "e8284-68e0-4de30f80"</font>
<font color="teal">header: Accept-Ranges: bytes</font>
<font color="teal">header: Content-Length: 26848</font>
<font color="teal">header: Connection: close</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.useragent.1.1">circled_1_delcric</a> </dt><dd>&#22914;&#26524;&#20320;&#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20173;&#26087;&#20026;&#19978;&#19968;&#33410;&#30340;&#20363;&#23376;&#32780;&#25171;&#24320;&#30528;&#65292;&#20320;&#21487;&#20197;&#30053;&#36807;&#36825;&#19968;&#27493;&#65292;&#22312;&#24320;&#21551; <a class="link" href="#oa.debug" title="11.4.&nbsp;&#35843;&#35797; HTTP web &#26381;&#21153;">HTTP &#35843;&#35797;</a>&#26102;&#20320;&#33021;&#30475;&#21040;&#32593;&#32476;&#32447;&#36335;&#19978;&#30340;&#23454;&#38469;&#20256;&#36755;&#36807;&#31243;&#12290;</dd><dt><a href="#oa.useragent.1.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992; <code class="filename">urllib2</code> &#33719;&#21462; HTTP &#36164;&#28304;&#21253;&#25324;&#19977;&#20010;&#22788;&#29702;&#27493;&#39588;&#65292;&#36825;&#20250;&#26377;&#21161;&#20110;&#20320;&#29702;&#35299;&#36825;&#19968;&#36807;&#31243;&#12290;
&#31532;&#19968;&#27493;&#26159;&#21019;&#24314; <code class="classname">Request</code> &#23545;&#35937;&#65292;&#23427;&#25509;&#21463;&#19968;&#20010;&#20320;&#26368;&#32456;&#24819;&#35201;&#33719;&#21462;&#36164;&#28304;&#30340; URL&#12290;&#27880;&#24847;&#36825;&#19968;&#27493;&#23454;&#38469;&#19978;&#36824;&#19981;&#33021;&#33719;&#21462;&#20219;&#20309;&#19996;&#35199;&#12290;</dd><dt><a href="#oa.useragent.1.3">circled_3_delcric</a> </dt><dd>&#31532;&#20108;&#27493;&#26159;&#21019;&#24314;&#19968;&#20010; URL &#24320;&#21551;&#22120; (opener)&#12290;&#23427;&#21487;&#20197;&#25509;&#21463;&#20219;&#20309;&#25968;&#37327;&#30340;&#22788;&#29702;&#22120;&#26469;&#25511;&#21046;&#21709;&#24212;&#30340;&#22788;&#29702;&#12290;&#20294;&#20320;&#20063;&#21487;&#20197;&#21019;&#24314;&#19968;&#20010;&#27809;&#26377;&#20219;&#20309;&#33258;&#23450;&#20041;&#22788;&#29702;&#22120;&#30340;&#24320;&#21551;&#22120;&#65292;&#22312;&#36825;&#20799;&#20320;&#23601;&#26159;&#36825;&#20040;&#20570;&#30340;&#12290;&#20320;&#23558;&#22312;&#26412;&#31456;&#21518;&#38754;&#25506;&#31350;&#37325;&#23450;&#21521;&#30340;&#37096;&#20998;&#30475;&#21040;&#22914;&#20309;&#23450;&#20041;&#21644;&#20351;&#29992;&#33258;&#23450;&#20041;&#22788;&#29702;&#22120;&#30340;&#20869;&#23481;&#12290;</dd><dt><a href="#oa.useragent.1.4">circled_4_delcric</a> </dt><dd>&#26368;&#21518;&#19968;&#20010;&#27493;&#39588;&#26159;&#65292;&#20351;&#29992;&#20320;&#21019;&#24314;&#30340; <code class="classname">Request</code> &#23545;&#35937;&#21578;&#35785;&#24320;&#21551;&#22120;&#25171;&#24320; URL&#12290;&#22240;&#20026;&#20320;&#33021;&#20174;&#33719;&#24471;&#30340;&#20449;&#24687;&#20013;&#30475;&#21040;&#25152;&#26377;&#35843;&#35797;&#20449;&#24687;&#65292;&#36825;&#20010;&#27493;&#39588;&#23454;&#38469;&#19978;&#33719;&#24471;&#20102;&#36164;&#28304;&#24182;&#19988;&#25226;&#36820;&#22238;&#25968;&#25454;&#23384;&#20648;&#22312;&#20102; <code class="varname">feeddata</code> &#20013;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e28299"></a><p class="title"><b>&#20363;&nbsp;11.5.&nbsp;&#32473; <code class="classname">Request</code> &#28155;&#21152;&#22836;&#20449;&#24687;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request</span>                                                <a name="oa.useragent.2.1"></a>circled_1_delcric
<font color="teal">&lt;urllib2.Request instance at 0x00250AA8&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request.get_full_url()</span>
<font color="teal">http://diveintomark.org/xml/atom.xml</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request.add_header('User-Agent',
<code class="prompt">...     </code>'OpenAnything/1.0 +http://diveintopython.org/')</span>    <a name="oa.useragent.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">feeddata = opener.open(request).read()</span>                 <a name="oa.useragent.2.3"></a>circled_3_delcric
<font color="teal">connect: (diveintomark.org, 80)</font>
<font color="teal">send: '</font>
<font color="teal">GET /xml/atom.xml HTTP/1.0</font>
<font color="teal">Host: diveintomark.org</font>
<font color="teal">User-agent: OpenAnything/1.0 +http://diveintopython.org/</font>   <a name="oa.useragent.2.4"></a>circled_4_delcric
<font color="teal">'</font>
<font color="teal">reply: 'HTTP/1.1 200 OK\r\n'</font>
<font color="teal">header: Date: Wed, 14 Apr 2004 23:45:17 GMT</font>
<font color="teal">header: Server: Apache/2.0.49 (Debian GNU/Linux)</font>
<font color="teal">header: Content-Type: application/atom+xml</font>
<font color="teal">header: Last-Modified: Wed, 14 Apr 2004 22:14:38 GMT</font>
<font color="teal">header: ETag: "e8284-68e0-4de30f80"</font>
<font color="teal">header: Accept-Ranges: bytes</font>
<font color="teal">header: Content-Length: 26848</font>
<font color="teal">header: Connection: close</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.useragent.2.1">circled_1_delcric</a> </dt><dd>&#32487;&#32493;&#21069;&#38754;&#30340;&#20363;&#23376;&#65307;&#20320;&#24050;&#32463;&#29992;&#20320;&#35201;&#35775;&#38382;&#30340; URL &#21019;&#24314;&#20102; <code class="classname">Request</code> &#12290;</dd><dt><a href="#oa.useragent.2.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992;<code class="classname">Request</code> &#23545;&#35937;&#30340; <code class="function">add_header</code> &#26041;&#27861;&#65292;&#20320;&#33021;&#21521;&#35831;&#27714;&#20013;&#28155;&#21152;&#20219;&#24847;&#30340; HTTP &#22836;&#20449;&#24687;&#12290;&#31532;&#19968;&#20010;&#21442;&#25968;&#26159;&#22836;&#20449;&#24687;&#65292;&#31532;&#20108;&#20010;&#21442;&#25968;&#26159;&#22836;&#20449;&#24687;&#30340;&#20540;&#12290;<code class="literal">User-Agent</code> &#30340;&#32422;&#23450;&#26684;&#24335;&#26159;&#65306;&#24212;&#29992;&#21517;&#65292;&#36319;&#19968;&#20010;&#26012;&#32447;&#65292;&#36319;&#29256;&#26412;&#21495;&#12290;&#21097;&#19979;&#30340;&#26159;&#33258;&#30001;&#30340;&#26684;&#24335;&#65292;&#20320;&#23558;&#30475;&#21040;&#35768;&#22810;&#30127;&#29378;&#30340;&#21464;&#21270;&#65292;&#20294;&#36890;&#24120;&#36825;&#37324;&#24212;&#35813;&#21253;&#21547;&#20320;&#30340;&#24212;&#29992;&#30340; URL&#12290;&#21644;&#20320;&#30340;&#35831;&#27714;&#30340;&#20854;&#20182;&#20449;&#24687;&#19968;&#26679;&#65292;<code class="literal">User-Agent</code> &#20250;&#34987;&#26381;&#21153;&#22120;&#32426;&#24405;&#19979;&#26469;&#65292;&#20854;&#20013;&#21253;&#21547;&#20320;&#30340;&#24212;&#29992;&#30340; URL&#12290;&#22914;&#26524;&#21457;&#29983;&#38169;&#35823;&#65292;&#26381;&#21153;&#22120;&#31649;&#29702;&#21592;&#23601;&#33021;&#36890;&#36807;&#26597;&#30475;&#20182;&#20204;&#30340;&#35775;&#38382;&#26085;&#24535;&#19982;&#20320;&#32852;&#31995;&#12290;</dd><dt><a href="#oa.useragent.2.3">circled_3_delcric</a> </dt><dd>&#20043;&#21069;&#20320;&#21019;&#24314;&#30340;<code class="varname">opener</code> &#23545;&#35937;&#20063;&#21487;&#20197;&#20877;&#29983;&#65292;&#19988;&#23427;&#23558;&#20877;&#27425;&#33719;&#24471;&#30456;&#21516;&#30340; feed&#65292;&#20294;&#36825;&#27425;&#20351;&#29992;&#20102;&#20320;&#33258;&#23450;&#20041;&#30340; <code class="literal">User-Agent</code> &#22836;&#20449;&#24687;&#12290;</dd><dt><a href="#oa.useragent.2.4">circled_4_delcric</a> </dt><dd>&#36825;&#23601;&#26159;&#20320;&#21457;&#36865;&#30340;&#33258;&#23450;&#20041;&#30340; <code class="literal">User-Agent</code>&#65292;&#20195;&#26367;&#20102; <span class="application">Python</span> &#40664;&#35748;&#21457;&#36865;&#30340;&#19968;&#33324;&#30340; <code class="literal">User-Agent</code>&#12290;&#33509;&#20320;&#32487;&#32493;&#30475;&#65292;&#20250;&#27880;&#24847;&#21040;&#20320;&#23450;&#20041;&#30340;&#26159; <code class="literal">User-Agent</code> &#22836;&#20449;&#24687;&#65292;&#20294;&#23454;&#38469;&#19978;&#21457;&#36865;&#30340;&#26159; <code class="literal">User-agent</code> &#22836;&#20449;&#24687;&#12290;&#30475;&#30475;&#26377;&#20309;&#19981;&#21516;&#65311;<code class="filename">urllib2</code> &#25913;&#21464;&#20102;&#22823;&#23567;&#20889;&#25152;&#20197;&#21482;&#26377;&#39318;&#23383;&#27597;&#26159;&#22823;&#20889;&#30340;&#12290;&#36825;&#27809;&#38382;&#39064;&#65292;&#22240;&#20026; HTTP &#35268;&#23450;&#22836;&#20449;&#24687;&#30340;&#23383;&#27573;&#21517;&#26159;&#22823;&#23567;&#20889;&#26080;&#20851;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.etags"></a>11.6.&nbsp;&#22788;&#29702; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code></h2></div></div></div><div class="abstract"><p>&#26082;&#28982;&#20320;&#30693;&#36947;&#22914;&#20309;&#22312;&#20320;&#30340; web &#26381;&#21153;&#35831;&#27714;&#20013;&#28155;&#21152;&#33258;&#23450;&#20041;&#30340; HTTP &#22836;&#20449;&#24687;&#65292;&#25509;&#19979;&#26469;&#30475;&#30475;&#22914;&#20309;&#28155;&#21152; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code> &#22836;&#20449;&#24687;&#30340;&#25903;&#25345;&#12290;</p></div><p>&#19979;&#38754;&#30340;&#36825;&#20123;&#20363;&#23376;&#23558;&#20197;&#35843;&#35797;&#26631;&#35760;&#32622;&#20026;&#20851;&#38381;&#30340;&#29366;&#24577;&#26469;&#26174;&#31034;&#36755;&#20986;&#32467;&#26524;&#12290;&#22914;&#26524;&#20320;&#36824;&#20572;&#30041;&#22312;&#19978;&#19968;&#37096;&#20998;&#30340;&#24320;&#21551;&#29366;&#24577;&#65292;&#21487;&#20197;&#20351;&#29992; <code class="literal">httplib.HTTPConnection.debuglevel = 0</code> &#23558;&#20854;&#35774;&#32622;&#20026;&#20851;&#38381;&#29366;&#24577;&#12290;&#25110;&#32773;&#65292;&#22914;&#26524;&#20320;&#35748;&#20026;&#26377;&#24110;&#21161;&#20063;&#21487;&#20197;&#20445;&#25345;&#20026;&#24320;&#21551;&#29366;&#24577;&#12290;</p><div class="example"><a name="oa.etags.example.1"></a><p class="title"><b>&#20363;&nbsp;11.6.&nbsp;&#27979;&#35797; <code class="literal">Last-Modified</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib2</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request = urllib2.Request('http://diveintomark.org/xml/atom.xml')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">opener = urllib2.build_opener()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">firstdatastream = opener.open(request)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">firstdatastream.headers.dict</span>                       <a name="oa.etags.1.1"></a>circled_1_delcric
<font color="teal">{'date': 'Thu, 15 Apr 2004 20:42:41 GMT', 
 'server': 'Apache/2.0.49 (Debian GNU/Linux)', 
 'content-type': 'application/atom+xml',
 'last-modified': 'Thu, 15 Apr 2004 19:45:21 GMT', 
 'etag': '"e842a-3e53-55d97640"',
 'content-length': '15955', 
 'accept-ranges': 'bytes', 
 'connection': 'close'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request.add_header('If-Modified-Since',</span>
<code class="prompt">...     </code><span class="userinput">firstdatastream.headers.get('Last-Modified'))</span>  <a name="oa.etags.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">seconddatastream = opener.open(request)</span>            <a name="oa.etags.1.3"></a>circled_3_delcric
<font color="red">Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in ?
  File "c:\python23\lib\urllib2.py", line 326, in open
    '_open', req)
  File "c:\python23\lib\urllib2.py", line 306, in _call_chain
    result = func(*args)
  File "c:\python23\lib\urllib2.py", line 901, in http_open
    return self.do_open(httplib.HTTP, req)
  File "c:\python23\lib\urllib2.py", line 895, in do_open
    return self.parent.error('http', req, fp, code, msg, hdrs)
  File "c:\python23\lib\urllib2.py", line 352, in error
    return self._call_chain(*args)
  File "c:\python23\lib\urllib2.py", line 306, in _call_chain
    result = func(*args)
  File "c:\python23\lib\urllib2.py", line 412, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 304: Not Modified</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.etags.1.1">circled_1_delcric</a> </dt><dd>&#36824;&#35760;&#24471;&#24403;&#35843;&#35797;&#26631;&#35760;&#35774;&#32622;&#20026;&#24320;&#21551;&#26102;&#25152;&#26377;&#37027;&#20123;&#20320;&#30475;&#21040;&#30340; HTTP &#22836;&#20449;&#24687;&#25171;&#21360;&#36755;&#20986;&#21527;&#65311;
&#36825;&#37324;&#20415;&#26159;&#29992;&#32534;&#31243;&#26041;&#24335;&#35775;&#38382;&#23427;&#20204;&#30340;&#26041;&#27861;&#65306;

<code class="varname">firstdatastream.headers</code> &#26159;<a class="link" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#19968;&#20010;&#31867;&#20284; dictionary &#34892;&#20026;&#30340;&#23545;&#35937;</a>&#24182;&#19988;&#20801;&#35768;&#20320;&#33719;&#24471;&#20219;&#20309;&#20010;&#21035;&#30340;&#20174; HTTP &#26381;&#21153;&#22120;&#36820;&#22238;&#30340;&#22836;&#20449;&#24687;&#12290;</dd><dt><a href="#oa.etags.1.2">circled_2_delcric</a> </dt><dd>&#22312;&#31532;&#20108;&#27425;&#35831;&#27714;&#26102;&#65292;&#20320;&#29992;&#31532;&#19968;&#27425;&#35831;&#27714;&#33719;&#24471;&#30340;&#26368;&#36817;&#20462;&#25913;&#26102;&#38388;&#28155;&#21152;&#20102; <code class="literal">If-Modified-Since</code> &#22836;&#20449;&#24687;&#12290;&#22914;&#26524;&#25968;&#25454;&#27809;&#34987;&#25913;&#21464;&#65292;&#26381;&#21153;&#22120;&#24212;&#35813;&#36820;&#22238;&#19968;&#20010; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#12290;</dd><dt><a href="#oa.etags.1.3">circled_3_delcric</a> </dt><dd>&#27627;&#26080;&#30097;&#38382;&#65292;&#25968;&#25454;&#27809;&#34987;&#25913;&#21464;&#12290;&#20320;&#21487;&#20197;&#20174;&#36319;&#36394;&#36820;&#22238;&#32467;&#26524;&#30475;&#21040; <code class="filename">urllib2</code> &#25243;&#20986;&#20102;&#19968;&#20010;&#29305;&#27530;&#24322;&#24120;&#65292;<code class="classname">HTTPError</code>&#65292;&#20197;&#21709;&#24212; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#12290;&#36825;&#26377;&#28857;&#19981;&#23547;&#24120;&#65292;&#24182;&#19988;&#23436;&#20840;&#27809;&#26377;&#20219;&#20309;&#24110;&#21161;&#12290;&#27605;&#31455;&#65292;&#23427;&#19981;&#26159;&#20010;&#38169;&#35823;&#65307;&#20320;&#26126;&#30830;&#22320;&#35810;&#38382;&#26381;&#21153;&#22120;&#22914;&#26524;&#27809;&#26377;&#21464;&#21270;&#23601;&#19981;&#35201;&#21457;&#36865;&#20219;&#20309;&#25968;&#25454;&#65292;&#24182;&#19988;&#25968;&#25454;&#27809;&#26377;&#21464;&#21270;&#65292;&#25152;&#20197;&#26381;&#21153;&#22120;&#21578;&#35785;&#20320;&#23427;&#27809;&#26377;&#20026;&#20320;&#21457;&#36865;&#20219;&#20309;&#25968;&#25454;&#12290;&#37027;&#19981;&#26159;&#20010;&#38169;&#35823;&#65307;&#23454;&#38469;&#19978;&#20063;&#27491;&#26159;&#20320;&#25152;&#26399;&#26395;&#30340;&#12290;</dd></dl></div></div></div><br class="example-break"><p><code class="filename">urllib2</code> &#20063;&#20026;&#20320;&#35748;&#20026;&#26159;&#38169;&#35823;&#30340;&#20854;&#20182;&#26465;&#20214;&#24341;&#21457; <code class="classname">HTTPError</code> &#24322;&#24120;&#65292;&#27604;&#22914; <code class="literal">404</code> (page not found)&#12290;&#23454;&#38469;&#19978;&#65292;&#23427;&#23558;&#20026;<span class="emphasis"><em>&#20219;&#20309;</em></span> &#38500;&#20102;&#29366;&#24577;&#20195;&#30721; <code class="literal">200</code> (OK)&#12289;<code class="literal">301</code> (permanent redirect)&#25110; <code class="literal">302</code> (temporary redirect) &#20043;&#22806;&#30340;&#29366;&#24577;&#24341;&#21457; <code class="classname">HTTPError</code>&#12290;&#25429;&#33719;&#29366;&#24577;&#20195;&#30721;&#24182;&#31616;&#21333;&#36820;&#22238;&#23427;&#65292;&#32780;&#19981;&#26159;&#25243;&#20986;&#24322;&#24120;&#65292;&#36825;&#24212;&#35813;&#23545;&#20320;&#24456;&#26377;&#24110;&#21161;&#12290;&#20026;&#20102;&#23454;&#29616;&#23427;&#65292;&#20320;&#23558;&#38656;&#35201;&#33258;&#23450;&#20041;&#19968;&#20010; URL &#22788;&#29702;&#22120;&#12290;</p><div class="example"><a name="d0e28580"></a><p class="title"><b>&#20363;&nbsp;11.7.&nbsp;&#23450;&#20041; URL &#22788;&#29702;&#22120;</b></p><div class="example-contents"><p>&#36825;&#20010;&#33258;&#23450;&#20041;&#30340; URL &#22788;&#29702;&#22120;&#26159; <code class="filename">openanything.py</code> &#30340;&#19968;&#37096;&#20998;&#12290;</p><pre class="programlisting">
class DefaultErrorHandler(urllib2.HTTPDefaultErrorHandler):    <a name="oa.etags.2.1"></a>circled_1_delcric
    def http_error_default(self, req, fp, code, msg, headers): <a name="oa.etags.2.2"></a>circled_2_delcric
        result = urllib2.HTTPError(                           
            req.get_full_url(), code, msg, headers, fp)       
        result.status = code                                   <a name="oa.etags.2.3"></a>circled_3_delcric
        return result                                         
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.etags.2.1">circled_1_delcric</a> </dt><dd><code class="filename">urllib2</code> &#26159;&#22260;&#32469; URL &#22788;&#29702;&#22120;&#32780;&#35774;&#35745;&#30340;&#12290;&#27599;&#19968;&#20010;&#22788;&#29702;&#22120;&#23601;&#26159;&#19968;&#20010;&#33021;&#23450;&#20041;&#20219;&#24847;&#25968;&#37327;&#26041;&#27861;&#30340;&#31867;&#12290;&#24403;&#26576;&#20107;&#20214;&#21457;&#29983;&#26102;&#8212;&#8212;&#27604;&#22914;&#19968;&#20010; HTTP &#38169;&#35823;&#65292;&#29978;&#33267;&#26159; <code class="literal">304</code> &#20195;&#30721;&#8212;&#8212;<code class="filename">urllib2</code> &#23457;&#35270;&#29992;&#20110;&#22788;&#29702;&#23427;&#30340; &#19968;&#31995;&#21015;&#24050;&#23450;&#20041;&#30340;&#22788;&#29702;&#22120;&#26041;&#27861;&#12290;&#22312;&#27492;&#35201;&#29992;&#21040;&#33258;&#30465;&#65292;&#19982; <a class="xref" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">&#31532;&nbsp;9&nbsp;&#31456; <i><acronym class="acronym">XML</acronym> &#22788;&#29702;</i></a>&#20013;&#20026;&#19981;&#21516;&#33410;&#28857;&#31867;&#22411;&#23450;&#20041;&#19981;&#21516;&#22788;&#29702;&#22120;&#31867;&#20284;&#12290;&#20294;&#26159; <code class="filename">urllib2</code> &#26159;&#24456;&#28789;&#27963;&#30340;&#65292;&#36824;&#21487;&#20197;&#20869;&#30465;&#20026;&#24403;&#21069;&#35831;&#27714;&#25152;&#23450;&#20041;&#30340;&#25152;&#26377;&#22788;&#29702;&#22120;&#12290;
</dd><dt><a href="#oa.etags.2.2">circled_2_delcric</a> </dt><dd>&#24403;&#20174;&#26381;&#21153;&#22120;&#25509;&#25910;&#21040;&#19968;&#20010; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#26102;&#65292;<code class="filename">urllib2</code> &#26597;&#25214;&#23450;&#20041;&#30340;&#25805;&#20316;&#24182;&#35843;&#29992; <code class="methodname">http_error_default</code> &#26041;&#27861;&#12290;&#36890;&#36807;&#23450;&#20041;&#19968;&#20010;&#33258;&#23450;&#20041;&#30340;&#38169;&#35823;&#22788;&#29702;&#65292;&#20320;&#21487;&#20197;&#38459;&#27490; <code class="filename">urllib2</code> &#24341;&#21457;&#24322;&#24120;&#12290;&#21462;&#32780;&#20195;&#20043;&#30340;&#26159;&#65292;&#20320;&#21019;&#24314; <code class="classname">HTTPError</code> &#23545;&#35937;&#65292;&#36820;&#22238;&#23427;&#32780;&#19981;&#26159;&#24341;&#21457;&#24322;&#24120;&#12290;</dd><dt><a href="#oa.etags.2.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#20851;&#38190;&#37096;&#20998;&#65306;&#36820;&#22238;&#20043;&#21069;&#65292;&#20320;&#20445;&#23384;&#20174; HTTP &#26381;&#21153;&#22120;&#36820;&#22238;&#30340;&#29366;&#24577;&#20195;&#30721;&#12290;&#36825;&#23558;&#20351;&#20320;&#20174;&#20027;&#35843;&#31243;&#24207;&#36731;&#32780;&#26131;&#20030;&#22320;&#35775;&#38382;&#23427;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e28634"></a><p class="title"><b>&#20363;&nbsp;11.8.&nbsp;&#20351;&#29992;&#33258;&#23450;&#20041; URL &#22788;&#29702;&#22120;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request.headers</span>                           <a name="oa.etags.3.1"></a>circled_1_delcric
<font color="teal">{'If-modified-since': 'Thu, 15 Apr 2004 19:45:21 GMT'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import openanything</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">opener = urllib2.build_opener(</span>
<code class="prompt">...     </code><span class="userinput">openanything.DefaultErrorHandler())</span>   <a name="oa.etags.3.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">seconddatastream = opener.open(request)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">seconddatastream.status</span>                   <a name="oa.etags.3.3"></a>circled_3_delcric
<font color="teal">304</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">seconddatastream.read()</span>                   <a name="oa.etags.3.4"></a>circled_4_delcric
<font color="teal">''</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.etags.3.1">circled_1_delcric</a> </dt><dd>&#32487;&#32493;&#21069;&#38754;&#30340;&#20363;&#23376;&#65292;<code class="classname">Request</code> &#23545;&#35937;&#24050;&#32463;&#34987;&#35774;&#32622;&#65292;&#24182;&#19988;&#20320;&#24050;&#32463;&#28155;&#21152;&#20102; <code class="literal">If-Modified-Since</code> &#22836;&#20449;&#24687;&#12290;</dd><dt><a href="#oa.etags.3.2">circled_2_delcric</a> </dt><dd>&#36825;&#26159;&#20851;&#38190;&#25152;&#22312;&#65306;&#26082;&#28982;&#24050;&#32463;&#23450;&#20041;&#20102;&#20320;&#30340;&#33258;&#23450;&#20041; URL &#22788;&#29702;&#22120;&#65292;&#20320;&#38656;&#35201;&#21578;&#35785; <code class="filename">urllib2</code> &#26469;&#20351;&#29992;&#23427;&#12290;&#36824;&#35760;&#24471;&#25105;&#24590;&#20040;&#35828; <code class="filename">urllib2</code> &#23558;&#19968;&#20010; HTTP &#36164;&#28304;&#30340;&#35775;&#38382;&#36807;&#31243;&#20998;&#35299;&#20026;&#19977;&#20010;&#27493;&#39588;&#30340;&#27491;&#24403;&#29702;&#30001;&#21527;&#65311;&#36825;&#20415;&#26159;&#20026;&#20160;&#20040;&#26500;&#24314; HTTP &#24320;&#21551;&#22120;&#26159;&#20854;&#27493;&#39588;&#20043;&#19968;&#65292;&#22240;&#20026;&#20320;&#33021;&#29992;&#20320;&#33258;&#23450;&#20041;&#30340; URL &#25805;&#20316;&#35206;&#30422; <code class="filename">urllib2</code> &#30340;&#40664;&#35748;&#34892;&#20026;&#26469;&#21019;&#24314;&#23427;&#12290;</dd><dt><a href="#oa.etags.3.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#20320;&#21487;&#20197;&#24555;&#36895;&#22320;&#25171;&#24320;&#19968;&#20010;&#36164;&#28304;&#65292;&#36820;&#22238;&#32473;&#20320;&#30340;&#23545;&#35937;&#26082;&#21253;&#25324;&#24120;&#35268;&#22836;&#20449;&#24687; (&#20351;&#29992; <code class="varname">seconddatastream.headers.dict</code> &#35775;&#38382;&#23427;&#20204;)&#65292;&#20063;&#21253;&#25324; HTTP &#29366;&#24577;&#20195;&#30721;&#12290;&#22312;&#27492;&#65292;&#27491;&#22914;&#20320;&#25152;&#26399;&#26395;&#30340;&#65292;&#29366;&#24577;&#20195;&#30721;&#26159; <code class="literal">304</code>&#65292;&#24847;&#21619;&#30528;&#27492;&#25968;&#25454;&#33258;&#20174;&#19978;&#27425;&#35831;&#27714;&#21518;&#27809;&#26377;&#34987;&#20462;&#25913;&#12290;</dd><dt><a href="#oa.etags.3.4">circled_4_delcric</a> </dt><dd>&#27880;&#24847;&#24403;&#26381;&#21153;&#22120;&#36820;&#22238; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#26102;&#65292;&#24182;&#27809;&#26377;&#37325;&#26032;&#21457;&#36865;&#25968;&#25454;&#12290;&#36825;&#23601;&#26159;&#20840;&#37096;&#30340;&#20851;&#38190;&#65306;&#27809;&#26377;&#37325;&#26032;&#19979;&#36733;&#26410;&#20462;&#25913;&#30340;&#25968;&#25454;&#65292;&#20174;&#32780;&#33410;&#30465;&#20102;&#24102;&#23485;&#12290;&#22240;&#27492;&#33509;&#20320;&#30830;&#23454;&#24819;&#35201;&#37027;&#20010;&#25968;&#25454;&#65292;&#20320;&#38656;&#35201;&#22312;&#39318;&#27425;&#33719;&#24471;&#23427;&#26102;&#22312;&#26412;&#22320;&#32531;&#23384;&#25968;&#25454;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22788;&#29702; <code class="literal">ETag</code> &#30340;&#24037;&#20316;&#20063;&#38750;&#24120;&#30456;&#20284;&#65292;&#21482;&#19981;&#36807;&#19981;&#26159;&#26816;&#26597; <code class="literal">Last-Modified</code> &#24182;&#21457;&#36865; <code class="literal">If-Modified-Since</code>&#65292;&#32780;&#26159;&#26816;&#26597; <code class="literal">ETag</code> &#24182;&#21457;&#36865; <code class="literal">If-None-Match</code>&#12290;&#35753;&#25105;&#20204;&#25171;&#24320;&#19968;&#20010;&#26032;&#30340; <acronym class="acronym">IDE</acronym> &#20250;&#35805;&#12290;</p><div class="example"><a name="oa.etags.example"></a><p class="title"><b>&#20363;&nbsp;11.9.&nbsp;&#25903;&#25345; <code class="literal">ETag</code>/<code class="literal">If-None-Match</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib2, openanything</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request = urllib2.Request('http://diveintomark.org/xml/atom.xml')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">opener = urllib2.build_opener(</span>
<code class="prompt">...     </code><span class="userinput">openanything.DefaultErrorHandler())</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">firstdatastream = opener.open(request)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">firstdatastream.headers.get('ETag')</span>        <a name="oa.etags.4.1"></a>circled_1_delcric
<font color="teal">'"e842a-3e53-55d97640"'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">firstdata = firstdatastream.read()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print firstdata</span>                            <a name="oa.etags.4.2"></a>circled_2_delcric
<font color="teal">&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;
&lt;feed version="0.3"
  xmlns="http://purl.org/atom/ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="en"&gt;
  &lt;title mode="escaped"&gt;dive into mark&lt;/title&gt;
  &lt;link rel="alternate" type="text/html" href="http://diveintomark.org/"/&gt;
  &lt;-- rest of feed omitted for brevity --&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request.add_header('If-None-Match',</span>
<code class="prompt">...     </code><span class="userinput">firstdatastream.headers.get('ETag'))</span>   <a name="oa.etags.4.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">seconddatastream = opener.open(request)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">seconddatastream.status</span>                    <a name="oa.etags.4.4"></a>circled_4_delcric
<font color="teal">304</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">seconddatastream.read()</span>                    <a name="oa.etags.4.5"></a>circled_5_delcric
<font color="teal">''</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.etags.4.1">circled_1_delcric</a> </dt><dd>&#20351;&#29992; <code class="varname">firstdatastream.headers</code> &#20266;&#23383;&#20856;&#65292;&#20320;&#21487;&#20197;&#33719;&#24471;&#20174;&#26381;&#21153;&#22120;&#36820;&#22238;&#30340; <code class="literal">ETag</code>  (&#22914;&#26524;&#26381;&#21153;&#22120;&#27809;&#26377;&#36820;&#22238; <code class="literal">ETag</code> &#20250;&#21457;&#29983;&#20160;&#20040;&#65311;&#31572;&#26696;&#26159;&#65292;&#36825;&#19968;&#34892;&#20195;&#30721;&#23558;&#36820;&#22238; <code class="literal">None</code>&#12290;)</dd><dt><a href="#oa.etags.4.2">circled_2_delcric</a> </dt><dd>OK&#65292;&#20320;&#33719;&#24471;&#20102;&#25968;&#25454;&#12290;</dd><dt><a href="#oa.etags.4.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#36827;&#34892;&#31532;&#20108;&#27425;&#35843;&#29992;&#65292;&#23558; <code class="literal">If-None-Match</code> &#22836;&#20449;&#24687;&#35774;&#32622;&#20026;&#20320;&#31532;&#19968;&#27425;&#35843;&#29992;&#33719;&#24471;&#30340; <code class="literal">ETag</code>&#12290;</dd><dt><a href="#oa.etags.4.4">circled_4_delcric</a> </dt><dd>&#31532;&#20108;&#27425;&#35843;&#29992;&#38745;&#38745;&#22320;&#25104;&#21151;&#20102; (&#27809;&#26377;&#20986;&#29616;&#20219;&#20309;&#30340;&#24322;&#24120;)&#65292;&#24182;&#19988;&#20320;&#21448;&#19968;&#27425;&#30475;&#21040;&#20102;&#20174;&#26381;&#21153;&#22120;&#36820;&#22238;&#30340; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#12290;&#20320;&#31532;&#20108;&#27425;&#22522;&#20110; <code class="literal">ETag</code> &#21457;&#36865;&#35831;&#27714;&#65292;&#26381;&#21153;&#22120;&#30693;&#36947;&#25968;&#25454;&#27809;&#26377;&#34987;&#25913;&#21464;&#12290;</dd><dt><a href="#oa.etags.4.5">circled_5_delcric</a> </dt><dd>&#26080;&#35770; <code class="literal">304</code> &#26159;&#34987; <code class="literal">Last-Modified</code> &#25968;&#25454;&#26816;&#26597;&#36824;&#26159; <code class="literal">ETag</code> hash &#21305;&#37197;&#35302;&#21457;&#30340;&#65292;&#33719;&#24471; <code class="literal">304</code> &#30340;&#21516;&#26102;&#37117;&#19981;&#20250;&#19979;&#36733;&#25968;&#25454;&#12290;&#36825;&#23601;&#26159;&#37325;&#28857;&#25152;&#22312;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="tip.etag.vs.lastmodified">&#27880;&#24847;: &#25903;&#25345; <code class="literal">Last-Modified</code> <span class="emphasis"><em>&#21644;</em></span> <code class="literal">ETag</code></a></b><br>&#22312;&#36825;&#20123;&#20363;&#23376;&#20013;&#65292;HTTP &#26381;&#21153;&#22120;&#21516;&#26102;&#25903;&#25345; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code> &#22836;&#20449;&#24687;&#65292;&#20294;&#24182;&#38750;&#25152;&#26377;&#30340;&#26381;&#21153;&#22120;&#30342;&#22914;&#27492;&#12290;&#20316;&#20026;&#19968;&#20010; web &#26381;&#21153;&#30340;&#23458;&#25143;&#31471;&#65292;&#20320;&#24212;&#35813;&#20026;&#25903;&#25345;&#20004;&#31181;&#22836;&#20449;&#24687;&#20570;&#20934;&#22791;&#65292;&#20294;&#26159;&#20320;&#30340;&#31243;&#24207;&#20063;&#24212;&#35813;&#20026;&#26381;&#21153;&#22120;&#20165;&#25903;&#25345;&#20854;&#20013;&#19968;&#31181;&#22836;&#20449;&#24687;&#25110;&#20004;&#31181;&#22836;&#20449;&#24687;&#37117;&#19981;&#25903;&#25345;&#32780;&#20570;&#20934;&#22791;&#12290;</blockquote></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.redirect"></a>11.7.&nbsp;&#22788;&#29702;&#37325;&#23450;&#21521;</h2></div></div></div><div class="abstract"><p>&#20320;&#21487;&#20197;&#20351;&#29992;&#20004;&#31181;&#19981;&#21516;&#30340;&#33258;&#23450;&#20041; URL &#22788;&#29702;&#22120;&#26469;&#22788;&#29702;&#27704;&#20037;&#37325;&#23450;&#21521;&#21644;&#20020;&#26102;&#37325;&#23450;&#21521;&#12290;</p></div><p>&#39318;&#20808;&#65292;&#35753;&#25105;&#20204;&#26469;&#30475;&#30475;&#37325;&#23450;&#21521;&#22788;&#29702;&#30340;&#24517;&#35201;&#24615;&#12290;</p><div class="example"><a name="d0e28926"></a><p class="title"><b>&#20363;&nbsp;11.10.&nbsp;&#27809;&#26377;&#37325;&#23450;&#21521;&#22788;&#29702;&#30340;&#24773;&#20917;&#19979;&#65292;&#35775;&#38382; web &#26381;&#21153; </b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib2, httplib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">httplib.HTTPConnection.debuglevel = 1</span>           <a name="oa.redirect.1.0"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request = urllib2.Request(</span>
<code class="prompt">...     </code><span class="userinput">'http://diveintomark.org/redir/example301.xml')</span> <a name="oa.redirect.1.1"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">opener = urllib2.build_opener()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = opener.open(request)</span>
<font color="teal">connect: (diveintomark.org, 80)
send: '
GET /redir/example301.xml HTTP/1.0
Host: diveintomark.org
User-agent: Python-urllib/2.1
'
reply: 'HTTP/1.1 301 Moved Permanently\r\n'</font>             <a name="oa.redirect.1.2"></a>circled_3_delcric
<font color="teal">header: Date: Thu, 15 Apr 2004 22:06:25 GMT
header: Server: Apache/2.0.49 (Debian GNU/Linux)
header: Location: http://diveintomark.org/xml/atom.xml</font>  <a name="oa.redirect.1.3"></a>circled_4_delcric
<font color="teal">header: Content-Length: 338
header: Connection: close
header: Content-Type: text/html; charset=iso-8859-1
connect: (diveintomark.org, 80)
send: '
GET /xml/atom.xml HTTP/1.0</font>                              <a name="oa.redirect.1.4"></a>circled_5_delcric
<font color="teal">Host: diveintomark.org
User-agent: Python-urllib/2.1
'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Thu, 15 Apr 2004 22:06:25 GMT
header: Server: Apache/2.0.49 (Debian GNU/Linux)
header: Last-Modified: Thu, 15 Apr 2004 19:45:21 GMT
header: ETag: "e842a-3e53-55d97640"
header: Accept-Ranges: bytes
header: Content-Length: 15955
header: Connection: close
header: Content-Type: application/atom+xml</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.url</span>                                               <a name="oa.redirect.1.5"></a>circled_6_delcric
<font color="teal">'http://diveintomark.org/xml/atom.xml'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.headers.dict</span>
<font color="teal">{'content-length': '15955', 
'accept-ranges': 'bytes', 
'server': 'Apache/2.0.49 (Debian GNU/Linux)', 
'last-modified': 'Thu, 15 Apr 2004 19:45:21 GMT', 
'connection': 'close', 
'etag': '"e842a-3e53-55d97640"', 
'date': 'Thu, 15 Apr 2004 22:06:25 GMT', 
'content-type': 'application/atom+xml'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.status</span>
<font color="red">Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in ?
AttributeError: addinfourl instance has no attribute 'status'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.redirect.1.0">circled_1_delcric</a> </dt><dd>&#20320;&#26368;&#22909;&#24320;&#21551;&#35843;&#35797;&#29366;&#24577;&#65292;&#30475;&#30475;&#21457;&#29983;&#20102;&#20160;&#20040;&#12290;</dd><dt><a href="#oa.redirect.1.1">circled_2_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010;&#25105;&#24050;&#32463;&#35774;&#32622;&#20102;&#27704;&#20037;&#37325;&#23450;&#21521;&#21040;&#25105;&#30340; Atom feed <code class="literal">http://diveintomark.org/xml/atom.xml</code> &#30340; URL&#12290;</dd><dt><a href="#oa.redirect.1.2">circled_3_delcric</a> </dt><dd>&#27627;&#26080;&#30097;&#38382;&#65292;&#24403;&#20320;&#35797;&#22270;&#20174;&#37027;&#20010;&#22320;&#22336;&#19979;&#36733;&#25968;&#25454;&#26102;&#65292;&#26381;&#21153;&#22120;&#20250;&#36820;&#22238; <code class="literal">301</code> &#29366;&#24577;&#20195;&#30721;&#65292;&#21578;&#35785;&#20320;&#20320;&#35775;&#38382;&#30340;&#36164;&#28304;&#24050;&#32463;&#34987;&#27704;&#20037;&#31227;&#21160;&#20102;&#12290;</dd><dt><a href="#oa.redirect.1.3">circled_4_delcric</a> </dt><dd>&#26381;&#21153;&#22120;&#21516;&#26102;&#36820;&#22238; <code class="literal">Location:</code> &#22836;&#20449;&#24687;&#65292;&#23427;&#32473;&#20986;&#20102;&#36825;&#20010;&#25968;&#25454;&#30340;&#26032;&#22320;&#22336;&#12290;</dd><dt><a href="#oa.redirect.1.4">circled_5_delcric</a> </dt><dd><code class="filename">urllib2</code> &#27880;&#24847;&#21040;&#20102;&#37325;&#23450;&#21521;&#29366;&#24577;&#20195;&#30721;&#24182;&#20250;&#33258;&#21160;&#20174;<code class="literal">Location:</code> &#22836;&#20449;&#24687;&#20013;&#32473;&#20986;&#30340;&#26032;&#22320;&#22336;&#33719;&#21462;&#25968;&#25454;&#12290;</dd><dt><a href="#oa.redirect.1.5">circled_6_delcric</a> </dt><dd>&#20174; <code class="varname">opener</code> &#36820;&#22238;&#30340;&#23545;&#35937;&#21253;&#25324;&#26032;&#30340;&#27704;&#20037;&#22320;&#22336;&#21644;&#31532;&#20108;&#27425;&#35831;&#27714;&#33719;&#24471;&#30340;&#25152;&#26377;&#22836;&#20449;&#24687; (&#20174;&#19968;&#20010;&#26032;&#30340;&#27704;&#20037;&#22320;&#22336;&#33719;&#24471;)&#12290;&#20294;&#26159;&#29366;&#24577;&#20195;&#30721;&#19981;&#35265;&#20102;&#65292;&#22240;&#27492;&#20320;&#26080;&#20174;&#30693;&#26195;&#37325;&#23450;&#21521;&#21040;&#24213;&#26159;&#27704;&#20037;&#37325;&#23450;&#21521;&#36824;&#26159;&#20020;&#26102;&#37325;&#23450;&#21521;&#12290;&#36825;&#26159;&#33267;&#20851;&#37325;&#35201;&#30340;&#65306;&#22914;&#26524;&#36825;&#26159;&#20020;&#26102;&#37325;&#23450;&#21521;&#65292;&#37027;&#20040;&#20320;&#24212;&#35813;&#32487;&#32493;&#20351;&#29992;&#26087;&#22320;&#22336;&#35775;&#38382;&#25968;&#25454;&#12290;&#20294;&#26159;&#22914;&#26524;&#26159;&#27704;&#20037;&#37325;&#23450;&#21521; (&#27491;&#22914;&#26412;&#20363;)&#65292;&#20320;&#24212;&#35813;&#20174;&#29616;&#22312;&#36215;&#20351;&#29992;&#26032;&#22320;&#22336;&#35775;&#38382;&#25968;&#25454;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#19981;&#22826;&#29702;&#24819;&#65292;&#20294;&#24456;&#23481;&#26131;&#25913;&#36827;&#12290;&#23454;&#38469;&#19978;&#24403; <code class="filename">urllib2</code> &#36935;&#21040; <code class="literal">301</code> &#25110; <code class="literal">302</code> &#26102;&#30340;&#34892;&#20026;&#24182;&#19981;&#26159;&#25105;&#20204;&#25152;&#26399;&#26395;&#30340;&#65292;&#25152;&#20197;&#35753;&#25105;&#20204;&#26469;&#35206;&#30422;&#36825;&#20123;&#34892;&#20026;&#12290;&#22914;&#20309;&#23454;&#29616;&#21602;&#65311;&#29992;&#19968;&#20010;&#33258;&#23450;&#20041;&#30340;&#22788;&#29702;&#22120;&#65292;<a class="link" href="#oa.etags" title="11.6.&nbsp;&#22788;&#29702; Last-Modified &#21644; ETag">&#27491;&#22914;&#20320;&#22788;&#29702; <code class="literal">304</code> &#20195;&#30721;&#25152;&#20570;&#30340;</a>&#12290;</p><div class="example"><a name="d0e29062"></a><p class="title"><b>&#20363;&nbsp;11.11.&nbsp;&#23450;&#20041;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;</b></p><div class="example-contents"><p>&#36825;&#20010;&#31867;&#23450;&#20041;&#22312; <code class="filename">openanything.py</code>&#12290;</p><pre class="programlisting">
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):     <a name="oa.redirect.2.1"></a>circled_1_delcric
    def http_error_301(self, req, fp, code, msg, headers):  
        result = urllib2.HTTPRedirectHandler.http_error_301( <a name="oa.redirect.2.2"></a>circled_2_delcric
            self, req, fp, code, msg, headers)              
        result.status = code                                 <a name="oa.redirect.2.3"></a>circled_3_delcric
        return result                                       

    def http_error_302(self, req, fp, code, msg, headers):   <a name="oa.redirect.2.4"></a>circled_4_delcric
        result = urllib2.HTTPRedirectHandler.http_error_302(
            self, req, fp, code, msg, headers)              
        result.status = code                                
        return result                                       
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.redirect.2.1">circled_1_delcric</a> </dt><dd>&#37325;&#23450;&#21521;&#34892;&#20026;&#23450;&#20041;&#22312; <code class="filename">urllib2</code> &#30340;&#19968;&#20010;&#21483;&#20570; <code class="classname">HTTPRedirectHandler</code> &#30340;&#31867;&#20013;&#12290;&#25105;&#20204;&#19981;&#24819;&#23436;&#20840;&#22320;&#35206;&#30422;&#36825;&#20123;&#34892;&#20026;&#65292;&#21482;&#24819;&#20570;&#28857;&#25193;&#23637;&#65292;&#25152;&#20197;&#25105;&#20204;&#23376;&#31867;&#21270; <code class="classname">HTTPRedirectHandler</code>&#65292;&#20174;&#32780;&#25105;&#20204;&#20173;&#28982;&#21487;&#20197;&#35843;&#29992;&#31062;&#20808;&#31867;&#26469;&#23454;&#29616;&#25152;&#26377;&#21407;&#26469;&#30340;&#21151;&#33021;&#12290;</dd><dt><a href="#oa.redirect.2.2">circled_2_delcric</a> </dt><dd>&#24403;&#20174;&#26381;&#21153;&#22120;&#33719;&#24471; <code class="literal">301</code> &#29366;&#24577;&#20195;&#30721;&#65292;<code class="filename">urllib2</code> &#23558;&#25628;&#32034;&#22788;&#29702;&#22120;&#24182;&#35843;&#29992; <code class="methodname">http_error_301</code> &#26041;&#27861;&#12290;&#25105;&#20204;&#39318;&#20808;&#35201;&#20570;&#30340;&#23601;&#26159;&#22312;&#31062;&#20808;&#20013;&#35843;&#29992; <code class="methodname">http_error_301</code> &#26041;&#27861;&#65292;&#23427;&#23558;&#22788;&#29702;&#26597;&#25214; <code class="literal">Location:</code> &#22836;&#20449;&#24687;&#30340;&#24037;&#20316;&#24182;&#36319;&#36394;&#37325;&#23450;&#21521;&#21040;&#26032;&#22320;&#22336;&#12290;</dd><dt><a href="#oa.redirect.2.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#20851;&#38190;&#65306;&#36820;&#22238;&#20043;&#21069;&#65292;&#20320;&#23384;&#20648;&#20102;&#29366;&#24577;&#20195;&#30721; (<code class="literal">301</code>)&#65292;&#25152;&#20197;&#20027;&#35843;&#31243;&#24207;&#31245;&#21518;&#23601;&#21487;&#20197;&#35775;&#38382;&#23427;&#20102;&#12290;</dd><dt><a href="#oa.redirect.2.4">circled_4_delcric</a> </dt><dd>&#20020;&#26102;&#37325;&#23450;&#21521; (&#29366;&#24577;&#20195;&#30721; <code class="literal">302</code>) &#20197;&#30456;&#21516;&#30340;&#26041;&#24335;&#24037;&#20316;&#65306;&#35206;&#30422; <code class="literal">http_error_302</code> &#26041;&#27861;&#65292;&#35843;&#29992;&#31062;&#20808;&#65292;&#24182;&#22312;&#36820;&#22238;&#20043;&#21069;&#20445;&#23384;&#29366;&#24577;&#20195;&#30721;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#23558;&#20026;&#25105;&#20204;&#24102;&#26469;&#20160;&#20040;&#65311;&#29616;&#22312;&#20320;&#21487;&#20197;&#29992;&#33258;&#23450;&#20041;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;&#26500;&#36896;&#19968;&#20010;&#30340; URL &#24320;&#21551;&#22120;&#65292;&#24182;&#19988;&#23427;&#20381;&#28982;&#33021;&#33258;&#21160;&#36319;&#36394;&#37325;&#23450;&#21521;&#65292;&#20063;&#33021;&#23637;&#31034;&#20986;&#37325;&#23450;&#21521;&#29366;&#24577;&#20195;&#30721;&#12290;</p><div class="example"><a name="d0e29128"></a><p class="title"><b>&#20363;&nbsp;11.12.&nbsp;&#20351;&#29992;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;&#26816;&#26597;&#27704;&#20037;&#37325;&#23450;&#21521;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request = urllib2.Request('http://diveintomark.org/redir/example301.xml')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import openanything, httplib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">httplib.HTTPConnection.debuglevel = 1</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">opener = urllib2.build_opener(</span>
<code class="prompt">...     </code><span class="userinput">openanything.SmartRedirectHandler())</span>           <a name="oa.redirect.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = opener.open(request)</span>
<font color="teal">connect: (diveintomark.org, 80)
send: 'GET /redir/example301.xml HTTP/1.0
Host: diveintomark.org
User-agent: Python-urllib/2.1
'
reply: 'HTTP/1.1 301 Moved Permanently\r\n'</font>            <a name="oa.redirect.3.2"></a>circled_2_delcric
<font color="teal">header: Date: Thu, 15 Apr 2004 22:13:21 GMT
header: Server: Apache/2.0.49 (Debian GNU/Linux)
header: Location: http://diveintomark.org/xml/atom.xml
header: Content-Length: 338
header: Connection: close
header: Content-Type: text/html; charset=iso-8859-1
connect: (diveintomark.org, 80)
send: '
GET /xml/atom.xml HTTP/1.0
Host: diveintomark.org
User-agent: Python-urllib/2.1
'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Thu, 15 Apr 2004 22:13:21 GMT
header: Server: Apache/2.0.49 (Debian GNU/Linux)
header: Last-Modified: Thu, 15 Apr 2004 19:45:21 GMT
header: ETag: "e842a-3e53-55d97640"
header: Accept-Ranges: bytes
header: Content-Length: 15955
header: Connection: close
header: Content-Type: application/atom+xml
</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.status</span>                                           <a name="oa.redirect.3.3"></a>circled_3_delcric
<font color="teal">301</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.url</span>
<font color="teal">'http://diveintomark.org/xml/atom.xml'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.redirect.3.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#29992;&#21018;&#21018;&#23450;&#20041;&#30340;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;&#21019;&#24314;&#19968;&#20010; URL &#24320;&#21551;&#22120;&#12290;</dd><dt><a href="#oa.redirect.3.2">circled_2_delcric</a> </dt><dd>&#20320;&#21457;&#36865;&#20102;&#19968;&#20010;&#35831;&#27714;&#65292;&#24182;&#22312;&#21709;&#24212;&#20013;&#33719;&#24471;&#20102; <code class="literal">301</code> &#29366;&#24577;&#20195;&#30721;&#12290;
&#22914;&#27492;&#19968;&#26469;&#65292;<code class="methodname">http_error_301</code> &#26041;&#27861;&#23601;&#34987;&#35843;&#29992;&#20102;&#12290;&#20320;&#35843;&#29992;&#20102;&#31062;&#20808;&#31867;&#65292;&#36319;&#36394;&#20102;&#37325;&#23450;&#21521;&#24182;&#19988;&#21457;&#36865;&#20102;&#19968;&#20010;&#26032;&#22320;&#22336; (<code class="literal">http://diveintomark.org/xml/atom.xml</code>) &#35831;&#27714;&#12290;</dd><dt><a href="#oa.redirect.3.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#20915;&#23450;&#24615;&#30340;&#19968;&#27493;&#65306;&#29616;&#22312;&#65292;&#20320;&#19981;&#20165;&#20570;&#21040;&#20102;&#35775;&#38382;&#19968;&#20010;&#26032; URL&#65292;&#32780;&#19988;&#33719;&#24471;&#20102;&#37325;&#23450;&#21521;&#30340;&#29366;&#24577;&#20195;&#30721;&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#26029;&#23450;&#36825;&#26159;&#19968;&#20010;&#27704;&#20037;&#37325;&#23450;&#21521;&#12290;&#19979;&#19968;&#27425;&#20320;&#35831;&#27714;&#36825;&#20010;&#25968;&#25454;&#26102;&#65292;&#23601;&#24212;&#35813;&#20351;&#29992; <code class="varname">f.url</code> &#25351;&#23450;&#30340;&#26032;&#22320;&#22336; (<code class="literal">http://diveintomark.org/xml/atom.xml</code>)&#12290;&#22914;&#26524;&#20320;&#24050;&#32463;&#22312;&#37197;&#32622;&#25991;&#20214;&#25110;&#25968;&#25454;&#24211;&#20013;&#23384;&#20648;&#20102;&#36825;&#20010;&#22320;&#22336;&#65292;&#23601;&#38656;&#35201;&#26356;&#26032;&#26087;&#22320;&#22336;&#32780;&#19981;&#26159;&#21453;&#22797;&#22320;&#20351;&#29992;&#26087;&#22320;&#22336;&#35831;&#27714;&#26381;&#21153;&#12290;&#29616;&#22312;&#26159;&#26356;&#26032;&#20320;&#30340;&#22320;&#22336;&#31807;&#30340;&#26102;&#20505;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#21516;&#26679;&#30340;&#37325;&#23450;&#21521;&#22788;&#29702;&#20063;&#21487;&#20197;&#21578;&#35785;&#20320;<span class="emphasis"><em>&#19981;&#35813;</em></span> &#26356;&#26032;&#20320;&#30340;&#22320;&#22336;&#31807;&#12290;</p><div class="example"><a name="d0e29221"></a><p class="title"><b>&#20363;&nbsp;11.13.&nbsp;&#20351;&#29992;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;&#26816;&#26597;&#20020;&#26102;&#37325;&#23450;&#21521;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request = urllib2.Request(</span>
<code class="prompt">...     </code><span class="userinput">'http://diveintomark.org/redir/example302.xml')</span>   <a name="oa.redirect.4.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = opener.open(request)</span>
<font color="teal">connect: (diveintomark.org, 80)
send: '
GET /redir/example302.xml HTTP/1.0
Host: diveintomark.org
User-agent: Python-urllib/2.1
'
reply: 'HTTP/1.1 302 Found\r\n'</font>                           <a name="oa.redirect.4.2"></a>circled_2_delcric
<font color="teal">header: Date: Thu, 15 Apr 2004 22:18:21 GMT
header: Server: Apache/2.0.49 (Debian GNU/Linux)
header: Location: http://diveintomark.org/xml/atom.xml
header: Content-Length: 314
header: Connection: close
header: Content-Type: text/html; charset=iso-8859-1
connect: (diveintomark.org, 80)
send: '
GET /xml/atom.xml HTTP/1.0</font>                                <a name="oa.redirect.4.3"></a>circled_3_delcric
<font color="teal">Host: diveintomark.org
User-agent: Python-urllib/2.1
'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Thu, 15 Apr 2004 22:18:21 GMT
header: Server: Apache/2.0.49 (Debian GNU/Linux)
header: Last-Modified: Thu, 15 Apr 2004 19:45:21 GMT
header: ETag: "e842a-3e53-55d97640"
header: Accept-Ranges: bytes
header: Content-Length: 15955
header: Connection: close
header: Content-Type: application/atom+xml</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.status</span>                                              <a name="oa.redirect.4.4"></a>circled_4_delcric
<font color="teal">302</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.url</span>
<font color="teal">http://diveintomark.org/xml/atom.xml</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.redirect.4.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010; URL&#65292;&#25105;&#24050;&#32463;&#35774;&#32622;&#20102;&#23427;&#65292;&#35753;&#23427;&#21578;&#35785;&#23458;&#25143;&#31471;<span class="emphasis"><em>&#20020;&#26102;</em></span> &#37325;&#23450;&#21521;&#21040; <code class="literal">http://diveintomark.org/xml/atom.xml</code>&#12290;</dd><dt><a href="#oa.redirect.4.2">circled_2_delcric</a> </dt><dd>&#26381;&#21153;&#22120;&#36820;&#22238; <code class="literal">302</code> &#29366;&#24577;&#20195;&#30721;&#65292;&#26631;&#35782;&#20986;&#19968;&#20010;&#20020;&#26102;&#37325;&#23450;&#21521;&#12290;&#25968;&#25454;&#30340;&#20020;&#26102;&#26032;&#22320;&#22336;&#22312; <code class="literal">Location:</code> &#22836;&#20449;&#24687;&#20013;&#32473;&#20986;&#12290;</dd><dt><a href="#oa.redirect.4.3">circled_3_delcric</a> </dt><dd><code class="filename">urllib2</code> &#35843;&#29992;&#20320;&#30340; <code class="methodname">http_error_302</code> &#26041;&#27861;&#65292;&#23427;&#35843;&#29992;&#20102; <code class="classname">urllib2.HTTPRedirectHandler</code> &#20013;&#30340;&#21516;&#21517;&#30340;&#31062;&#20808;&#26041;&#27861;&#65292;&#36319;&#36394;&#37325;&#23450;&#21521;&#21040;&#19968;&#20010;&#26032;&#22320;&#22336;&#12290;&#28982;&#21518;&#20320;&#30340; <code class="methodname">http_error_302</code> &#26041;&#27861;&#23384;&#20648;&#29366;&#24577;&#20195;&#30721; (<code class="literal">302</code>) &#20351;&#20027;&#35843;&#31243;&#24207;&#22312;&#31245;&#21518;&#21487;&#20197;&#33719;&#24471;&#23427;&#12290;</dd><dt><a href="#oa.redirect.4.4">circled_4_delcric</a> </dt><dd>&#27492;&#26102;&#65292;&#24050;&#32463;&#25104;&#21151;&#36861;&#36394;&#37325;&#23450;&#21521;&#21040; <code class="literal">http://diveintomark.org/xml/atom.xml</code>&#12290;<code class="varname">f.status</code> &#21578;&#35785;&#20320;&#36825;&#26159;&#19968;&#20010;&#20020;&#26102;&#37325;&#23450;&#21521;&#65292;&#36825;&#24847;&#21619;&#30528;&#20320;&#24212;&#35813;&#32487;&#32493;&#20351;&#29992;&#21407;&#26469;&#30340;&#22320;&#22336; (<code class="literal">http://diveintomark.org/redir/example302.xml</code>) &#35831;&#27714;&#25968;&#25454;&#12290;&#20063;&#35768;&#19979;&#19968;&#27425;&#23427;&#20173;&#28982;&#34987;&#37325;&#23450;&#21521;&#65292;&#20063;&#35768;&#19981;&#20250;&#12290;&#20063;&#35768;&#20250;&#37325;&#23450;&#21521;&#21040;&#19981;&#21516;&#30340;&#22320;&#22336;&#12290;&#36825;&#20063;&#19981;&#22909;&#35828;&#12290;&#26381;&#21153;&#22120;&#35828;&#36825;&#20010;&#37325;&#23450;&#21521;&#20165;&#20165;&#26159;&#20020;&#26102;&#30340;&#65292;&#20320;&#24212;&#35813;&#23562;&#37325;&#23427;&#12290;&#24182;&#19988;&#29616;&#22312;&#20320;&#33719;&#24471;&#20102;&#33021;&#20351;&#20027;&#35843;&#31243;&#24207;&#23562;&#37325;&#23427;&#30340;&#20805;&#20998;&#20449;&#24687;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.gzip"></a>11.8.&nbsp;&#22788;&#29702;&#21387;&#32553;&#25968;&#25454;</h2></div></div></div><div class="abstract"><p>&#20320;&#35201;&#25903;&#25345;&#30340;&#26368;&#21518;&#19968;&#20010;&#37325;&#35201;&#30340; HTTP &#29305;&#24615;&#26159;&#21387;&#32553;&#12290;&#35768;&#22810; web &#26381;&#21153;&#20855;&#26377;&#21457;&#36865;&#21387;&#32553;&#25968;&#25454;&#30340;&#33021;&#21147;&#65292;&#36825;&#21487;&#20197;&#23558;&#32593;&#32476;&#32447;&#36335;&#19978;&#20256;&#36755;&#30340;&#22823;&#37327;&#25968;&#25454;&#28040;&#20943; 60% &#20197;&#19978;&#12290;&#36825;&#23588;&#20854;&#36866;&#29992;&#20110; XML web &#26381;&#21153;&#65292;&#22240;&#20026; XML &#25968;&#25454; &#30340;&#21387;&#32553;&#29575;&#21487;&#20197;&#24456;&#39640;&#12290;</p></div><p>&#26381;&#21153;&#22120;&#19981;&#20250;&#20026;&#20320;&#21457;&#36865;&#21387;&#32553;&#25968;&#25454;&#65292;&#38500;&#38750;&#20320;&#21578;&#35785;&#26381;&#21153;&#22120;&#20320;&#21487;&#20197;&#22788;&#29702;&#21387;&#32553;&#25968;&#25454;&#12290;</p><div class="example"><a name="d0e29332"></a><p class="title"><b>&#20363;&nbsp;11.14.&nbsp;&#21578;&#35785;&#26381;&#21153;&#22120;&#20320;&#24819;&#33719;&#24471;&#21387;&#32553;&#25968;&#25454;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import urllib2, httplib</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">httplib.HTTPConnection.debuglevel = 1</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request = urllib2.Request('http://diveintomark.org/xml/atom.xml')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">request.add_header('Accept-encoding', 'gzip')</span>        <a name="oa.gzip.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">opener = urllib2.build_opener()</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = opener.open(request)</span>
<font color="teal">connect: (diveintomark.org, 80)
send: '
GET /xml/atom.xml HTTP/1.0
Host: diveintomark.org
User-agent: Python-urllib/2.1
Accept-encoding: gzip</font>                                    <a name="oa.gzip.1.2"></a>circled_2_delcric
<font color="teal">'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date: Thu, 15 Apr 2004 22:24:39 GMT
header: Server: Apache/2.0.49 (Debian GNU/Linux)
header: Last-Modified: Thu, 15 Apr 2004 19:45:21 GMT
header: ETag: "e842a-3e53-55d97640"
header: Accept-Ranges: bytes
header: Vary: Accept-Encoding
header: Content-Encoding: gzip</font>                           <a name="oa.gzip.1.3"></a>circled_3_delcric
<font color="teal">header: Content-Length: 6289</font>                             <a name="oa.gzip.1.4"></a>circled_4_delcric
<font color="teal">header: Connection: close
header: Content-Type: application/atom+xml</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.gzip.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#20851;&#38190;&#65306;&#19968;&#21019;&#24314;&#20102; <code class="classname">Request</code> &#23545;&#35937;&#65292;&#23601;&#28155;&#21152;&#19968;&#20010; <code class="literal">Accept-encoding</code> &#22836;&#20449;&#24687;&#21578;&#35785;&#26381;&#21153;&#22120;&#20320;&#33021;&#25509;&#21463; gzip &#21387;&#32553;&#25968;&#25454;&#12290;<code class="literal">gzip</code> &#26159;&#20320;&#20351;&#29992;&#30340;&#21387;&#32553;&#31639;&#27861;&#30340;&#21517;&#31216;&#12290;&#29702;&#35770;&#19978;&#20320;&#21487;&#20197;&#20351;&#29992;&#20854;&#23427;&#30340;&#21387;&#32553;&#31639;&#27861;&#65292;&#20294;&#26159; <code class="literal">gzip</code> &#26159; web &#26381;&#21153;&#22120;&#19978;&#20351;&#29992;&#29575;&#39640;&#36798; 99% &#30340;&#19968;&#31181;&#12290;</dd><dt><a href="#oa.gzip.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#26159;&#20320;&#30340;&#22836;&#20449;&#24687;&#20256;&#36234;&#32593;&#32476;&#32447;&#36335;&#30340;&#36807;&#31243;&#12290;</dd><dt><a href="#oa.gzip.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#26381;&#21153;&#22120;&#30340;&#36820;&#22238;&#20449;&#24687;&#65306;<code class="literal">Content-Encoding: gzip</code> &#22836;&#20449;&#24687;&#24847;&#21619;&#30528;&#20320;&#35201;&#22238;&#24471;&#30340;&#25968;&#25454;&#24050;&#32463;&#34987; gzip &#21387;&#32553;&#20102;&#12290;</dd><dt><a href="#oa.gzip.1.4">circled_4_delcric</a> </dt><dd><code class="literal">Content-Length</code> &#22836;&#20449;&#24687;&#26159;&#24050;&#21387;&#32553;&#25968;&#25454;&#30340;&#38271;&#24230;&#65292;&#24182;&#38750;&#35299;&#21387;&#32553;&#25968;&#25454;&#30340;&#38271;&#24230;&#12290;&#19968;&#20250;&#20799;&#20320;&#20250;&#30475;&#21040;&#65292;&#23454;&#38469;&#30340;&#35299;&#21387;&#32553;&#25968;&#25454;&#38271;&#24230;&#20026; 15955&#65292;&#22240;&#27492; gzip &#21387;&#32553;&#33410;&#30465;&#20102; 60% &#20197;&#19978;&#30340;&#32593;&#32476;&#24102;&#23485;&#65281;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e29417"></a><p class="title"><b>&#20363;&nbsp;11.15.&nbsp;&#35299;&#21387;&#32553;&#25968;&#25454;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">compresseddata = f.read()</span>                              <a name="oa.gzip.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">len(compresseddata)</span>
<font color="teal">6289</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import StringIO</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">compressedstream = StringIO.StringIO(compresseddata)</span>   <a name="oa.gzip.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import gzip</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">gzipper = gzip.GzipFile(fileobj=compressedstream)</span>      <a name="oa.gzip.2.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">data = gzipper.read()</span>                                  <a name="oa.gzip.2.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">print data</span>                                             <a name="oa.gzip.2.5"></a>circled_5_delcric
<font color="teal">&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;
&lt;feed version="0.3"
  xmlns="http://purl.org/atom/ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="en"&gt;
  &lt;title mode="escaped"&gt;dive into mark&lt;/title&gt;
  &lt;link rel="alternate" type="text/html" href="http://diveintomark.org/"/&gt;
  &lt;-- rest of feed omitted for brevity --&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">len(data)</span>
<font color="teal">15955</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.gzip.2.1">circled_1_delcric</a> </dt><dd>&#32487;&#32493;&#19978;&#38754;&#30340;&#20363;&#23376;&#65292;<code class="varname">f</code> &#26159;&#19968;&#20010;&#20174; URL &#24320;&#21551;&#22120;&#36820;&#22238;&#30340;&#31867;&#25991;&#20214;&#23545;&#35937;&#12290;&#20351;&#29992;&#23427;&#30340; <code class="methodname">read()</code> &#26041;&#27861;&#23558;&#27491;&#24120;&#22320;&#33719;&#24471;&#38750;&#21387;&#32553;&#25968;&#25454;&#65292;&#20294;&#26159;&#22240;&#20026;&#36825;&#20010;&#25968;&#25454;&#24050;&#32463;&#34987; gzip &#21387;&#32553;&#36807;&#65292;&#25152;&#20197;&#36825;&#21482;&#26159;&#33719;&#24471;&#20320;&#24819;&#35201;&#30340;&#26368;&#32456;&#25968;&#25454;&#30340;&#31532;&#19968;&#27493;&#12290;</dd><dt><a href="#oa.gzip.2.2">circled_2_delcric</a> </dt><dd>&#22909;&#21543;&#65292;&#21482;&#26159;&#20808;&#24471;&#26377;&#28857;&#20799;&#20940;&#20081;&#30340;&#27493;&#39588;&#12290;<span class="application">Python</span> &#26377;&#19968;&#20010; <code class="filename">gzip</code> &#27169;&#22359;&#65292;&#23427;&#33021;&#35835;&#21462; (&#24403;&#28982;&#20063;&#33021;&#20889;&#20837;) &#30913;&#30424;&#19978;&#30340; gzip &#21387;&#32553;&#25991;&#20214;&#12290;&#20294;&#26159;&#30913;&#30424;&#19978;&#36824;&#27809;&#26377;&#25991;&#20214;&#65292;&#21482;&#22312;&#20869;&#23384;&#37324;&#26377;&#19968;&#20010; gzip &#21387;&#32553;&#32531;&#20914;&#21306;&#65292;&#24182;&#19988;&#20320;&#19981;&#24819;&#20165;&#20165;&#20026;&#20102;&#35299;&#21387;&#32553;&#32780;&#20889;&#20986;&#19968;&#20010;&#20020;&#26102;&#25991;&#20214;&#12290;&#37027;&#20040;&#24590;&#20040;&#20570;&#26469;&#20174;&#20869;&#23384;&#25968;&#25454; (<code class="varname">compresseddata</code>) &#21019;&#24314;&#31867;&#25991;&#20214;&#23545;&#35937;&#21602;&#65311;&#36825;&#38656;&#35201;&#20351;&#29992; <code class="filename">StringIO</code> &#27169;&#22359;&#12290;&#20320;&#39318;&#27425;&#30475;&#21040; <code class="filename">StringIO</code> &#27169;&#22359;&#26159;&#22312;<a class="link" href="#kgp.openanything.stringio.example" title="&#20363;&nbsp;10.4.&nbsp;StringIO &#20171;&#32461;">&#19978;&#19968;&#31456;</a>&#65292;&#20294;&#29616;&#22312;&#20320;&#20250;&#21457;&#29616;&#23427;&#30340;&#21478;&#19968;&#31181;&#29992;&#27861;&#12290;</dd><dt><a href="#oa.gzip.2.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#20320;&#21487;&#20197;&#21019;&#24314; <code class="classname">GzipFile</code> &#30340;&#19968;&#20010;&#23454;&#20363;&#65292;&#24182;&#19988;&#21578;&#35785;&#23427;&#20854;&#20013;&#30340; "<span class="quote">&#25991;&#20214;</span>" &#26159;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937; <code class="varname">compressedstream</code>&#12290;</dd><dt><a href="#oa.gzip.2.4">circled_4_delcric</a> </dt><dd>&#36825;&#26159;&#20570;&#25152;&#26377;&#24037;&#20316;&#30340;&#19968;&#34892;&#65306;&#20174; <code class="classname">GzipFile</code> &#20013; "<span class="quote">&#35835;&#21462;</span>" &#23558;&#20250;&#35299;&#21387;&#32553;&#25968;&#25454;&#12290;&#24863;&#21040;&#22855;&#22937;&#21527;&#65311;&#26159;&#30340;&#65292;&#23427;&#30830;&#23454;&#35299;&#21387;&#32553;&#20102;&#25968;&#25454;&#12290;<code class="varname">gzipper</code> &#26159;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#23427;&#20195;&#34920;&#19968;&#20010; gzip &#21387;&#32553;&#25991;&#20214;&#12290;&#23613;&#31649;&#36825;&#20010; "<span class="quote">&#25991;&#20214;</span>" &#24182;&#38750;&#19968;&#20010;&#30913;&#30424;&#19978;&#30340;&#30495;&#23454;&#25991;&#20214;&#65307;&#20294; <code class="varname">gzipper</code> &#36824;&#26159;&#20174;&#20320;&#29992; <code class="filename">StringIO</code> &#21253;&#35013;&#20102;&#21387;&#32553;&#25968;&#25454;&#30340;&#31867;&#25991;&#20214;&#23545;&#35937;&#20013; "<span class="quote">&#35835;&#21462;</span>" &#25968;&#25454;&#65292;&#32780;&#23427;&#20165;&#20165;&#26159;&#20869;&#23384;&#20013;&#30340;&#21464;&#37327; <code class="varname">compresseddata</code>&#12290;&#21387;&#32553;&#30340;&#25968;&#25454;&#26469;&#33258;&#21738;&#21602;&#65311;&#26368;&#21021;&#20320;&#20174;&#36828;&#31243; HTTP &#26381;&#21153;&#22120;&#19979;&#36733;&#23427;&#65292;&#36890;&#36807;&#20174;&#29992; <code class="function">urllib2.build_opener</code> &#21019;&#24314;&#30340;&#31867;&#25991;&#20214;&#23545;&#35937;&#20013; "<span class="quote">&#35835;&#21462;</span>"&#12290;&#20196;&#20154;&#21507;&#24778;&#21543;&#65292;&#36825;&#23601;&#26159;&#25152;&#26377;&#30340;&#27493;&#39588;&#12290;&#38142;&#26465;&#19978;&#30340;&#27599;&#19968;&#27493;&#37117;&#23436;&#20840;&#19981;&#30693;&#36947;&#19978;&#19968;&#27493;&#22312;&#36896;&#20551;&#12290;</dd><dt><a href="#oa.gzip.2.5">circled_5_delcric</a> </dt><dd>&#30475;&#30475;&#21543;&#65292;&#23454;&#38469;&#30340;&#25968;&#25454; (&#23454;&#38469;&#20026; 15955 bytes)&#12290;</dd></dl></div></div></div><br class="example-break"><p>"<span class="quote">&#31561;&#31561;!</span>" &#25105;&#21548;&#35265;&#20320;&#22312;&#21483;&#12290;"<span class="quote">&#36824;&#33021;&#26356;&#31616;&#21333;&#21527;&#65281;</span>" &#25105;&#30693;&#36947;&#20320;&#22312;&#24819;&#20160;&#20040;&#12290;&#20320;&#22312;&#65292;&#26082;&#28982; <code class="varname">opener.open</code> &#36820;&#22238;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#37027;&#20040;&#20026;&#20160;&#20040;&#19981;&#25243;&#24323;&#20013;&#38388;&#20214; <code class="filename">StringIO</code> &#32780;&#36890;&#36807; <code class="varname">f</code> &#30452;&#25509;&#35775;&#38382; <code class="methodname">GzipFile</code> &#21602;&#65311;OK&#65292;&#25110;&#35768;&#20320;&#27809;&#24819;&#21040;&#65292;&#20294;&#26159;&#21035;&#20026;&#27492;&#25285;&#24515;&#65292;&#22240;&#20026;&#37027;&#26679;&#26080;&#27861;&#24037;&#20316;&#12290;</p><div class="example"><a name="d0e29584"></a><p class="title"><b>&#20363;&nbsp;11.16.&nbsp;&#20174;&#26381;&#21153;&#22120;&#30452;&#25509;&#35299;&#21387;&#32553;&#25968;&#25454;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f = opener.open(request)</span>                  <a name="oa.gzip.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">f.headers.get('Content-Encoding')</span>         <a name="oa.gzip.3.2"></a>circled_2_delcric
<font color="teal">'gzip'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">data = gzip.GzipFile(fileobj=f).read()</span>    <a name="oa.gzip.3.3"></a>circled_3_delcric
<font color="red">Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in ?
  File "c:\python23\lib\gzip.py", line 217, in read
    self._read(readsize)
  File "c:\python23\lib\gzip.py", line 252, in _read
    pos = self.fileobj.tell()   # Save current position
AttributeError: addinfourl instance has no attribute 'tell'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.gzip.3.1">circled_1_delcric</a> </dt><dd>&#32487;&#32493;&#21069;&#38754;&#30340;&#20363;&#23376;&#65292;&#20320;&#24050;&#32463;&#26377;&#19968;&#20010;&#35774;&#32622;&#20102; <code class="literal">Accept-encoding: gzip</code> &#22836;&#20449;&#24687;&#30340; <code class="classname">Request</code> &#23545;&#35937;&#12290;</dd><dt><a href="#oa.gzip.3.2">circled_2_delcric</a> </dt><dd>&#31616;&#21333;&#22320;&#25171;&#24320;&#35831;&#27714;&#23558;&#33719;&#24471;&#20320;&#30340;&#22836;&#20449;&#24687; (&#34429;&#28982;&#36824;&#27809;&#19979;&#36733;&#20219;&#20309;&#25968;&#25454;)&#12290;&#27491;&#22914;&#20320;&#20174; <code class="literal">Content-Encoding</code> &#22836;&#20449;&#24687;&#25152;&#30475;&#21040;&#30340;&#65292;&#36825;&#20010;&#25968;&#25454;&#34987;&#35201;&#27714;&#29992; gzip &#21387;&#32553;&#21457;&#36865;&#12290;</dd><dt><a href="#oa.gzip.3.3">circled_3_delcric</a> </dt><dd>&#20174; <code class="methodname">opener.open</code> &#36820;&#22238;&#20102;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#20174;&#22836;&#20449;&#24687;&#20013;&#20320;&#21487;&#20197;&#33719;&#30693;&#65292;&#20320;&#23558;&#33719;&#24471; gzip &#21387;&#32553;&#25968;&#25454;&#12290;&#20026;&#20160;&#20040;&#19981;&#31616;&#21333;&#22320;&#36890;&#36807;&#37027;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#30452;&#25509;&#35775;&#38382; <code class="classname">GzipFile</code> &#21602;&#65311;&#24403;&#20320;&#20174; <code class="classname">GzipFile</code> &#23454;&#20363; "<span class="quote">&#35835;&#21462;</span>" &#26102;&#65292;&#23427;&#23558;&#20174;&#36828;&#31243; HTTP &#26381;&#21153;&#22120; "<span class="quote">&#35835;&#21462;</span>" &#34987;&#21387;&#32553;&#30340;&#25968;&#25454;&#24182;&#19988;&#31435;&#21363;&#35299;&#21387;&#32553;&#12290;&#36825;&#26159;&#20010;&#22909;&#20027;&#24847;&#65292;&#20294;&#26159;&#19981;&#34892;&#12290;&#30001; gzip &#21387;&#32553;&#30340;&#24037;&#20316;&#26041;&#24335;&#25152;&#33268;&#65292;<code class="classname">GzipFile</code> &#38656;&#35201;&#23384;&#20648;&#20854;&#20301;&#32622;&#24182;&#22312;&#21387;&#32553;&#25991;&#20214;&#19978;&#24448;&#36820;&#28216;&#36208;&#12290;&#24403; "<span class="quote">&#25991;&#20214;</span>" &#26159;&#26469;&#33258;&#36828;&#31243;&#26381;&#21153;&#22120;&#30340;&#23383;&#33410;&#27969;&#26102;&#26080;&#27861;&#24037;&#20316;&#65307;&#20320;&#33021;&#29992;&#23427;&#20570;&#30340;&#25152;&#26377;&#24037;&#20316;&#23601;&#26159;&#19968;&#27425;&#36820;&#22238;&#19968;&#20010;&#23383;&#33410;&#27969;&#65292;&#32780;&#19981;&#26159;&#22312;&#23383;&#33410;&#27969;&#19978;&#24448;&#36820;&#12290;&#25152;&#20197;&#20351;&#29992; <code class="filename">StringIO</code> &#36825;&#31181;&#30475;&#19978;&#21435;&#19981;&#22826;&#20248;&#38597;&#30340;&#25163;&#27573;&#26159;&#26368;&#22909;&#30340;&#35299;&#20915;&#26041;&#26696;&#65306;&#19979;&#36733;&#21387;&#32553;&#30340;&#25968;&#25454;&#65292;&#29992; <code class="filename">StringIO</code> &#21019;&#24314;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#65292;&#24182;&#20174;&#20013;&#35299;&#21387;&#32553;&#25968;&#25454;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.alltogether"></a>11.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</h2></div></div></div><div class="abstract"><p>&#20320;&#24050;&#32463;&#30475;&#21040;&#20102;&#26500;&#36896;&#19968;&#20010;&#26234;&#33021;&#30340; HTTP web &#23458;&#25143;&#31471;&#30340;&#25152;&#26377;&#29255;&#26029;&#12290;&#29616;&#22312;&#35753;&#25105;&#20204;&#30475;&#30475;&#22914;&#20309;&#23558;&#23427;&#20204;&#25972;&#21512;&#21040;&#19968;&#36215;&#12290;</p></div><div class="example"><a name="d0e29670"></a><p class="title"><b>&#20363;&nbsp;11.17.&nbsp;<code class="function">openanything</code> &#20989;&#25968;</b></p><div class="example-contents"><p>&#36825;&#20010;&#20989;&#25968;&#23450;&#20041;&#22312; <code class="filename">openanything.py</code> &#20013;&#12290;</p><pre class="programlisting">
def openAnything(source, etag=None, lastmodified=None, agent=USER_AGENT):
    # non-HTTP code omitted for brevity
    if urlparse.urlparse(source)[0] == 'http':                                       <a name="oa.alltogether.1.1"></a>circled_1_delcric
        # open URL with urllib2                                                     
        request = urllib2.Request(source)                                           
        request.add_header('User-Agent', agent)                                      <a name="oa.alltogether.1.2"></a>circled_2_delcric
        if etag:                                                                    
            request.add_header('If-None-Match', etag)                                <a name="oa.alltogether.1.3"></a>circled_3_delcric
        if lastmodified:                                                            
            request.add_header('If-Modified-Since', lastmodified)                    <a name="oa.alltogether.1.4"></a>circled_4_delcric
        request.add_header('Accept-encoding', 'gzip')                                <a name="oa.alltogether.1.5"></a>circled_5_delcric
        opener = urllib2.build_opener(SmartRedirectHandler(), DefaultErrorHandler()) <a name="oa.alltogether.1.6"></a>circled_6_delcric
        return opener.open(request)                                                  <a name="oa.alltogether.1.7"></a>circled_7_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.alltogether.1.1">circled_1_delcric</a> </dt><dd><code class="filename">urlparse</code> &#26159;&#19968;&#20010;&#35299;&#26512; URL &#30340;&#20415;&#25463;&#30340;&#24037;&#20855;&#27169;&#22359;&#12290;&#23427;&#30340;&#20027;&#35201;&#20989;&#25968;&#20063;&#21483; <code class="function">urlparse</code>&#65292;&#25509;&#21463;&#19968;&#20010; URL &#24182;&#23558;&#20854;&#25286;&#20998;&#20026; tuple (scheme (&#21327;&#35758;), domain (&#22495;&#21517;), path (&#36335;&#24452;), params (&#21442;&#25968;), query string parameters (&#35831;&#27714;&#23383;&#31526;&#20018;&#21442;&#25968;), fragment identifier (&#29255;&#27573;&#25928;&#39564;&#31526;))&#12290;&#24403;&#28982;&#65292;&#20320;&#21807;&#19968;&#38656;&#35201;&#27880;&#24847;&#30340;&#23601;&#26159; scheme&#65292;&#30830;&#35748;&#20320;&#22788;&#29702;&#30340;&#26159;&#19968;&#20010; HTTP URL (<code class="filename">urllib2</code> &#25165;&#33021;&#22788;&#29702;)&#12290;</dd><dt><a href="#oa.alltogether.1.2">circled_2_delcric</a> </dt><dd>&#36890;&#36807;&#35843;&#29992;&#20989;&#25968;&#20351;&#29992; <code class="literal">User-Agent</code> &#21521; HTTP &#26381;&#21153;&#22120;&#30830;&#23450;&#20320;&#30340;&#36523;&#20221;&#12290;&#22914;&#26524;&#27809;&#26377; <code class="literal">User-Agent</code> &#34987;&#25351;&#23450;&#65292;&#20320;&#20250;&#20351;&#29992;&#19968;&#20010;&#40664;&#35748;&#30340;&#65292;&#23601;&#26159;&#23450;&#20041;&#22312;&#26089;&#26399;&#30340; <code class="filename">openanything.py</code> &#27169;&#22359;&#20013;&#30340;&#37027;&#20010;&#12290;&#20320;&#20174;&#26469;&#19981;&#20250;&#20351;&#29992;&#21040;&#40664;&#35748;&#30340;&#23450;&#20041;&#22312; <code class="filename">urllib2</code> &#20013;&#30340;&#37027;&#20010;&#12290;</dd><dt><a href="#oa.alltogether.1.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#32473;&#20986;&#20102; <code class="literal">ETag</code>&#65292;&#35201;&#22312; <code class="literal">If-None-Match</code> &#22836;&#20449;&#24687;&#20013;&#21457;&#36865;&#23427;&#12290;</dd><dt><a href="#oa.alltogether.1.4">circled_4_delcric</a> </dt><dd>&#22914;&#26524;&#32473;&#20986;&#20102;&#26368;&#36817;&#20462;&#25913;&#26085;&#26399;&#65292;&#35201;&#22312; <code class="literal">If-Modified-Since</code> &#22836;&#20449;&#24687;&#20013;&#21457;&#36865;&#23427;&#12290;</dd><dt><a href="#oa.alltogether.1.5">circled_5_delcric</a> </dt><dd>&#22914;&#26524;&#21487;&#33021;&#35201;&#21578;&#35785;&#26381;&#21153;&#22120;&#20320;&#35201;&#33719;&#21462;&#21387;&#32553;&#25968;&#25454;&#12290;</dd><dt><a href="#oa.alltogether.1.6">circled_6_delcric</a> </dt><dd>&#20351;&#29992;<span class="emphasis"><em>&#20004;&#20010;</em></span> &#33258;&#23450;&#20041; URL &#22788;&#29702;&#22120;&#21019;&#24314;&#19968;&#20010; URL &#24320;&#21551;&#22120;&#65306;<code class="classname">SmartRedirectHandler</code> &#32456;&#20110;&#22788;&#29702; <code class="literal">301</code> &#21644; <code class="literal">302</code> &#37325;&#23450;&#21521;&#65292;&#32780; <code class="classname">DefaultErrorHandler</code> &#29992;&#20110;&#22788;&#29702; <code class="literal">304</code>, <code class="literal">404</code> &#20197;&#21450;&#20854;&#23427;&#30340;&#38169;&#35823;&#26465;&#20214;&#12290;</dd><dt><a href="#oa.alltogether.1.7">circled_7_delcric</a> </dt><dd>&#23601;&#26159;&#36825;&#26679;&#65281;&#25171;&#24320; URL &#24182;&#36820;&#22238;&#19968;&#20010;&#31867;&#25991;&#20214;&#23545;&#35937;&#32473;&#35843;&#29992;&#32773;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e29768"></a><p class="title"><b>&#20363;&nbsp;11.18.&nbsp;<code class="function">fetch</code> &#20989;&#25968;</b></p><div class="example-contents"><p>&#36825;&#20010;&#20989;&#25968;&#23450;&#20041;&#22312; <code class="filename">openanything.py</code> &#20013;&#12290;</p><pre class="programlisting">
def fetch(source, etag=None, last_modified=None, agent=USER_AGENT):  
    '''Fetch data and metadata from a URL, file, stream, or string'''
    result = {}                                                      
    f = openAnything(source, etag, last_modified, agent)              <a name="oa.alltogether.2.1"></a>circled_1_delcric
    result['data'] = f.read()                                         <a name="oa.alltogether.2.2"></a>circled_2_delcric
    if hasattr(f, 'headers'):                                        
        # save ETag, if the server sent one                          
        result['etag'] = f.headers.get('ETag')                        <a name="oa.alltogether.2.3"></a>circled_3_delcric
        # save Last-Modified header, if the server sent one          
        result['lastmodified'] = f.headers.get('Last-Modified')       <a name="oa.alltogether.2.4"></a>circled_4_delcric
        if f.headers.get('content-encoding', '') == 'gzip':           <a name="oa.alltogether.2.5"></a>circled_5_delcric
            # data came back gzip-compressed, decompress it          
            result['data'] = gzip.GzipFile(fileobj=StringIO(result['data']])).read()
    if hasattr(f, 'url'):                                             <a name="oa.alltogether.2.6"></a>circled_6_delcric
        result['url'] = f.url                                        
        result['status'] = 200                                       
    if hasattr(f, 'status'):                                          <a name="oa.alltogether.2.7"></a>circled_7_delcric
        result['status'] = f.status                                  
    f.close()                                                        
    return result                                                    
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.alltogether.2.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#20320;&#29992; URL&#12289;<code class="literal">ETag</code> hash&#12289;<code class="literal">Last-Modified</code> &#26085;&#26399;&#21644; <code class="literal">User-Agent</code> &#35843;&#29992; <code class="function">openAnything</code> &#20989;&#25968;&#12290;</dd><dt><a href="#oa.alltogether.2.2">circled_2_delcric</a> </dt><dd>&#35835;&#21462;&#20174;&#26381;&#21153;&#22120;&#36820;&#22238;&#30340;&#30495;&#23454;&#25968;&#25454;&#12290;&#36825;&#21487;&#33021;&#26159;&#34987;&#21387;&#32553;&#30340;&#65307;&#22914;&#26524;&#26159;&#65292;&#23558;&#22312;&#21518;&#38754;&#36827;&#34892;&#35299;&#21387;&#32553;&#12290;</dd><dt><a href="#oa.alltogether.2.3">circled_3_delcric</a> </dt><dd>&#20445;&#23384;&#20174;&#26381;&#21153;&#22120;&#36820;&#22238;&#30340; <code class="literal">ETag</code> hash&#65292;&#36825;&#26679;&#20027;&#35843;&#31243;&#24207;&#19979;&#19968;&#27425;&#23601;&#33021;&#25226;&#23427;&#20256;&#36882;&#32473;&#20320;&#65292;&#28982;&#21518;&#20877;&#20256;&#36882;&#32473; <code class="function">openAnything</code>&#65292;&#25918;&#21040; <code class="literal">If-None-Match</code> &#22836;&#20449;&#24687;&#37324;&#21457;&#36865;&#32473;&#36828;&#31243;&#26381;&#21153;&#22120;&#12290;</dd><dt><a href="#oa.alltogether.2.4">circled_4_delcric</a> </dt><dd>&#20063;&#35201;&#20445;&#23384; <code class="literal">Last-Modified</code> &#25968;&#25454;&#12290;</dd><dt><a href="#oa.alltogether.2.5">circled_5_delcric</a> </dt><dd>&#22914;&#26524;&#26381;&#21153;&#22120;&#35828;&#23427;&#21457;&#36865;&#30340;&#26159;&#21387;&#32553;&#25968;&#25454;&#65292;&#23601;&#25191;&#34892;&#35299;&#21387;&#32553;&#12290;</dd><dt><a href="#oa.alltogether.2.6">circled_6_delcric</a> </dt><dd>&#22914;&#26524;&#20320;&#30340;&#26381;&#21153;&#22120;&#36820;&#22238;&#19968;&#20010; URL &#23601;&#20445;&#23384;&#23427;&#65292;&#24182;&#22312;&#26597;&#26126;&#20043;&#21069;&#20551;&#23450;&#29366;&#24577;&#20195;&#30721;&#20026; <code class="literal">200</code>&#12290;</dd><dt><a href="#oa.alltogether.2.7">circled_7_delcric</a> </dt><dd>&#22914;&#26524;&#20854;&#20013;&#19968;&#20010;&#33258;&#23450;&#20041; URL &#22788;&#29702;&#22120;&#25429;&#33719;&#20102;&#19968;&#20010;&#29366;&#24577;&#20195;&#30721;&#65292;&#20063;&#35201;&#20445;&#23384;&#19979;&#26469;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e29843"></a><p class="title"><b>&#20363;&nbsp;11.19.&nbsp;&#20351;&#29992; <code class="filename">openanything.py</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import openanything</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">useragent = 'MyHTTPWebServicesApp/1.0'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">url = 'http://diveintopython.org/redir/example301.xml'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params = openanything.fetch(url, agent=useragent)</span>              <a name="oa.alltogether.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">params</span>                                                         <a name="oa.alltogether.3.2"></a>circled_2_delcric
<font color="teal">{'url': 'http://diveintomark.org/xml/atom.xml', 
'lastmodified': 'Thu, 15 Apr 2004 19:45:21 GMT', 
'etag': '"e842a-3e53-55d97640"', 
'status': 301,
'data': '&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;
&lt;feed version="0.3"
&lt;-- rest of data omitted for brevity --&gt;'}</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">if params['status'] == 301:</span>                                    <a name="oa.alltogether.3.3"></a>circled_3_delcric
<code class="prompt">...     </code><span class="userinput">url = params['url']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">newparams = openanything.fetch(</span>
<code class="prompt">...     </code><span class="userinput">url, params['etag'], params['lastmodified'], useragent)</span>    <a name="oa.alltogether.3.4"></a>circled_4_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">newparams</span>
<font color="teal">{'url': 'http://diveintomark.org/xml/atom.xml', 
'lastmodified': None, 
'etag': '"e842a-3e53-55d97640"', 
'status': 304,
'data': ''}</font>                                                        <a name="oa.alltogether.3.5"></a>circled_5_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#oa.alltogether.3.1">circled_1_delcric</a> </dt><dd>&#31532;&#19968;&#27425;&#33719;&#21462;&#36164;&#28304;&#26102;&#65292;&#20320;&#27809;&#26377; <code class="literal">ETag</code> hash &#25110; <code class="literal">Last-Modified</code> &#26085;&#26399;&#65292;&#25152;&#20197;&#20320;&#19981;&#29992;&#20351;&#29992;&#36825;&#20123;&#21442;&#25968;&#12290; (&#23427;&#20204;&#26159;<a class="link" href="#apihelper.optional" title="4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;">&#21487;&#36873;&#21442;&#25968;</a>&#12290;)</dd><dt><a href="#oa.alltogether.3.2">circled_2_delcric</a> </dt><dd>&#20320;&#33719;&#24471;&#20102;&#19968;&#20010; dictionary&#65292;&#23427;&#21253;&#25324;&#20960;&#20010;&#26377;&#29992;&#30340;&#22836;&#20449;&#24687;&#12289;HTTP &#29366;&#24577;&#20195;&#30721;&#21644;&#20174;&#26381;&#21153;&#22120;&#36820;&#22238;&#30340;&#30495;&#23454;&#25968;&#25454;&#12290;<code class="filename">openanything</code> &#22312;&#20869;&#37096;&#22788;&#29702; gzip &#21387;&#32553;&#65307;&#22312;&#26412;&#32423;&#21035;&#19978;&#20320;&#19981;&#24517;&#20851;&#24515;&#23427;&#12290;</dd><dt><a href="#oa.alltogether.3.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#20320;&#24471;&#21040;&#19968;&#20010; <code class="literal">301</code> &#29366;&#24577;&#20195;&#30721;&#65292;&#34920;&#31034;&#26159;&#20010;&#27704;&#20037;&#37325;&#23450;&#21521;&#65292;&#20320;&#38656;&#35201;&#25226;&#20320;&#30340; URL &#26356;&#26032;&#20026;&#26032;&#22320;&#22336;&#12290;</dd><dt><a href="#oa.alltogether.3.4">circled_4_delcric</a> </dt><dd>&#31532;&#20108;&#27425;&#33719;&#21462;&#30456;&#21516;&#30340;&#36164;&#28304;&#26102;&#65292;&#20320;&#24050;&#32463;&#20174;&#20197;&#24448;&#33719;&#24471;&#20102;&#21508;&#31181;&#20449;&#24687;&#65306;URL (&#21487;&#33021;&#34987;&#26356;&#26032;&#20102;)&#12289;&#20174;&#19978;&#19968;&#27425;&#35775;&#38382;&#33719;&#24471;&#30340; <code class="literal">ETag</code>&#12289;&#20174;&#19978;&#19968;&#27425;&#35775;&#38382;&#33719;&#24471;&#30340; <code class="literal">Last-Modified</code> &#26085;&#26399;&#65292;&#24403;&#28982;&#36824;&#26377; <code class="literal">User-Agent</code>&#12290;</dd><dt><a href="#oa.alltogether.3.5">circled_5_delcric</a> </dt><dd>&#20320;&#37325;&#26032;&#33719;&#21462;&#20102;&#36825;&#20010; dictionary&#65292;&#20294;&#26159;&#25968;&#25454;&#27809;&#26377;&#25913;&#21464;&#65292;&#25152;&#20197;&#20320;&#24471;&#21040;&#20102;&#19968;&#20010; <code class="literal">304</code> &#29366;&#24577;&#20195;&#30721;&#32780;&#27809;&#26377;&#25968;&#25454;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="oa.summary"></a>11.10.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p><code class="filename">openanything.py</code> &#21450;&#20854;&#20989;&#25968;&#29616;&#22312;&#21487;&#20197;&#23436;&#32654;&#22320;&#24037;&#20316;&#20102;&#12290;</p></div><p>&#27599;&#20010;&#23458;&#25143;&#31471;&#37117;&#24212;&#35813;&#25903;&#25345; HTTP web &#26381;&#21153;&#30340;&#20197;&#19979; 5 &#20010;&#37325;&#35201;&#29305;&#24615;&#65306;</p><div class="itemizedlist"><ul><li><a class="link" href="#oa.useragent" title="11.5.&nbsp;&#35774;&#32622; User-Agent">&#36890;&#36807;&#35774;&#32622;&#36866;&#24403;&#30340; <code class="literal">User-Agent</code></a> &#35782;&#21035;&#20320;&#30340;&#24212;&#29992;&#12290;</li><li>&#36866;&#24403;&#22320;&#22788;&#29702;<a class="link" href="#oa.redirect" title="11.7.&nbsp;&#22788;&#29702;&#37325;&#23450;&#21521;">&#27704;&#20037;&#37325;&#23450;&#21521;</a>&#12290;</li><li>&#25903;&#25345; <a class="link" href="#oa.etags" title="11.6.&nbsp;&#22788;&#29702; Last-Modified &#21644; ETag"><code class="literal">Last-Modified</code> &#26085;&#26399;&#26816;&#26597;</a>&#20174;&#32780;&#36991;&#20813;&#22312;&#25968;&#25454;&#26410;&#25913;&#21464;&#30340;&#24773;&#20917;&#19979;&#37325;&#26032;&#19979;&#36733;&#25968;&#25454;&#12290;</li><li>&#25903;&#25345; <a class="link" href="#oa.etags.example" title="&#20363;&nbsp;11.9.&nbsp;&#25903;&#25345; ETag/If-None-Match"><code class="literal">ETag</code> hash</a> &#20174;&#32780;&#36991;&#20813;&#22312;&#25968;&#25454;&#26410;&#25913;&#21464;&#30340;&#24773;&#20917;&#19979;&#37325;&#26032;&#19979;&#36733;&#25968;&#25454;&#12290;</li><li>&#25903;&#25345; <a class="link" href="#oa.gzip" title="11.8.&nbsp;&#22788;&#29702;&#21387;&#32553;&#25968;&#25454;">gzip &#21387;&#32553;</a>&#20174;&#32780;&#22312;&#25968;&#25454;<span class="emphasis"><em>&#24050;&#32463;</em></span> &#25913;&#21464;&#30340;&#24773;&#20917;&#19979;&#23613;&#21487;&#33021;&#22320;&#20943;&#23569;&#20256;&#36755;&#24102;&#23485;&#12290;</li></ul></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="soap"></a>&#31532;&nbsp;12&nbsp;&#31456;&nbsp;<acronym class="acronym">SOAP</acronym> Web &#26381;&#21153;</h1></div></div></div><div class="abstract"><p><a class="xref" href="#oa" title="&#31532;&nbsp;11&nbsp;&#31456;&nbsp;HTTP Web &#26381;&#21153;">&#31532; 11 &#31456;</a> &#20851;&#27880; HTTP &#19978;&#38754;&#21521;&#25991;&#26723;&#30340;web &#26381;&#21153;&#12290;"<span class="quote">&#36755;&#20837;&#21442;&#25968;</span>" &#26159; <acronym class="acronym">URL</acronym>&#65292;"<span class="quote">&#36820;&#22238;&#20540;</span>" &#26159;&#38656;&#35201;&#20320;&#26469;&#35299;&#26512;&#30340;&#19968;&#20010;&#23454;&#38469;&#30340; XML &#25991;&#26723;&#12290;</p><p>&#26412;&#31456;&#23558;&#20851;&#27880;&#26356;&#21152;&#32467;&#26500;&#21270;&#30340; <acronym class="acronym">SOAP</acronym> web &#26381;&#21153;&#12290;<acronym class="acronym">SOAP</acronym> &#19981;&#38656;&#35201;&#20320;&#30452;&#25509;&#19982; HTTP &#35831;&#27714;&#21644; XML &#25991;&#26723;&#25171;&#20132;&#36947;&#65292;&#32780;&#26159;&#20801;&#35768;&#20320;&#27169;&#25311;&#36820;&#22238;&#21407;&#22987;&#25968;&#25454;&#31867;&#22411;&#30340;&#20989;&#25968;&#35843;&#29992;&#12290;&#27491;&#20687;&#20320;&#23558;&#35201;&#30475;&#21040;&#30340;&#65292;&#36825;&#20010;&#25551;&#36848;&#24688;&#22914;&#20854;&#20221;&#65307;&#20320;&#21487;&#20197;&#20351;&#29992;&#26631;&#20934; <span class="application">Python</span> &#35843;&#29992;&#35821;&#27861;&#36890;&#36807; <acronym class="acronym">SOAP</acronym> &#24211;&#21435;&#35843;&#29992;&#19968;&#20010;&#20989;&#25968;&#65292;&#36825;&#20010;&#20989;&#25968;&#20063;&#33258;&#28982;&#20250;&#36820;&#22238; <span class="application">Python</span> &#23545;&#35937;&#21644;&#20540;&#12290;&#20294;&#25581;&#24320;&#36825;&#23618;&#38754;&#32433;&#65292;<acronym class="acronym">SOAP</acronym> &#24211;&#23454;&#38469;&#19978;&#25191;&#34892;&#20102;&#19968;&#20010;&#22810;&#20010; XML &#25991;&#26723;&#21644;&#36828;&#31243;&#26381;&#21153;&#22120;&#21442;&#19982;&#30340;&#22797;&#26434;&#22788;&#29702;&#36807;&#31243;&#12290;</p><p><acronym class="acronym">SOAP</acronym> &#30340;&#36148;&#20999;&#23450;&#20041;&#24456;&#22797;&#26434;&#65292;&#19981;&#35201;&#35823;&#35748;&#20026; <acronym class="acronym">SOAP</acronym> &#23601;&#26159;&#29992;&#20110;&#35843;&#29992;&#36828;&#31243;&#20989;&#25968;&#12290;&#26377;&#20123;&#20154;&#35273;&#24471;&#24212;&#35813;&#34917;&#20805;&#19978;&#65306;<acronym class="acronym">SOAP</acronym> &#36824;&#20801;&#35768;&#21333;&#21521;&#24322;&#27493;&#30340;&#20449;&#24687;&#36890;&#36807;&#65292;&#20197;&#21450;&#38754;&#21521;&#25991;&#26723;&#30340; Web &#26381;&#21153;&#12290;&#26377;&#36825;&#26679;&#24819;&#27861;&#30340;&#20154;&#26159;&#27491;&#30830;&#30340;&#65292;<acronym class="acronym">SOAP</acronym> &#30340;&#30830;&#26159;&#36825;&#26679;&#65292;&#20294;&#21364;&#19981;&#27490;&#20110;&#27492;&#12290;&#20294;&#36825;&#19968;&#31456;&#30340;&#37325;&#28857;&#22312;&#20110;&#25152;&#35859;&#30340; "<span class="quote">RPC-style</span>" <acronym class="acronym">SOAP</acronym>&#8213;&#8213;&#35843;&#29992;&#36828;&#31243;&#20989;&#25968;&#33719;&#24471;&#36820;&#22238;&#32467;&#26524;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.divein"></a>12.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>&#20320;&#29992; Google&#65292;&#23545;&#21543;&#65311;&#23427;&#26159;&#19968;&#20010;&#24456;&#27969;&#34892;&#30340;&#25628;&#32034;&#24341;&#25806;&#12290;&#20320;&#26159;&#21542;&#24076;&#26395;&#33021;&#20197;&#31243;&#24207;&#21270;&#30340;&#26041;&#24335;&#35775;&#38382; Google &#30340;&#25628;&#32034;&#32467;&#26524;&#21602;&#65311;&#29616;&#22312;&#20320;&#33021;&#20570;&#21040;&#20102;&#12290;&#19979;&#38754;&#26159;&#19968;&#20010;&#29992; <span class="application">Python</span> &#25628;&#32034; Google &#30340;&#31243;&#24207;&#12290;</p></div><div class="example"><a name="d0e30081"></a><p class="title"><b>&#20363;&nbsp;12.1.&nbsp;<code class="filename">search.py</code></b></p><div class="example-contents"><pre class="programlisting">from SOAPpy import WSDL

# you'll need to configure these two values;
# see http://www.google.com/apis/
WSDLFILE = '/path/to/copy/of/GoogleSearch.wsdl'
APIKEY = 'YOUR_GOOGLE_API_KEY'

_server = WSDL.Proxy(WSDLFILE)
def search(q):
    """Search Google and return list of {title, link, description}"""
    results = _server.doGoogleSearch(
        APIKEY, q, 0, 10, False, "", False, "", "utf-8", "utf-8")
    return [{"title": r.title.encode("utf-8"),
             "link": r.URL.encode("utf-8"),
             "description": r.snippet.encode("utf-8")}
            for r in results.resultElements]

if __name__ == '__main__':
    import sys
    for r in search(sys.argv[1])[:5]:
        print r['title']
        print r['link']
        print r['description']
        print</pre></div></div><br class="example-break"><p>&#20320;&#21487;&#20197;&#22312;&#36739;&#22823;&#30340;&#31243;&#24207;&#20013;&#20197;&#27169;&#22359;&#23548;&#20837;&#24182;&#20351;&#29992;&#23427;&#65292;&#20063;&#21487;&#20197;&#22312;&#21629;&#20196;&#34892;&#19978;&#36816;&#34892;&#36825;&#20010;&#33050;&#26412;&#12290;&#22312;&#21629;&#20196;&#34892;&#19978;&#65292;&#38656;&#35201;&#25226;&#26597;&#35810;&#23383;&#31526;&#20018;&#20316;&#20026;&#21629;&#20196;&#34892;&#21442;&#25968;&#20351;&#29992;&#65292;&#20043;&#21518;&#23601;&#20250;&#25171;&#21360;&#20986;&#26368;&#21069;&#38754;&#30340;&#20116;&#20010; Google &#26597;&#35810;&#32467;&#26524;&#65292;&#21253;&#25324;&#65306;URL&#12289;&#26631;&#39064;&#21644;&#25551;&#36848;&#20449;&#24687;&#12290;</p><p>&#19979;&#38754;&#26159;&#20197; "<span class="quote">python</span>" &#20316;&#20026;&#21629;&#20196;&#34892;&#21442;&#25968;&#30340;&#26597;&#35810;&#32467;&#26524;&#12290;</p><div class="example"><a name="d0e30094"></a><p class="title"><b>&#20363;&nbsp;12.2.&nbsp;<code class="filename">search.py</code> &#30340;&#20351;&#29992;&#26679;&#20363;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">C:\diveintopython\common\py&gt;</code> <span class="userinput">python search.py "python"</span>
<font color="teal">&lt;b&gt;Python&lt;/b&gt; Programming Language
http://www.python.org/
Home page for &lt;b&gt;Python&lt;/b&gt;, an interpreted, interactive, object-oriented,
extensible&lt;br&gt; programming language. &lt;b&gt;...&lt;/b&gt; &lt;b&gt;Python&lt;/b&gt;
is OSI Certified Open Source: OSI Certified.

&lt;b&gt;Python&lt;/b&gt; Documentation Index
http://www.python.org/doc/
 &lt;b&gt;...&lt;/b&gt; New-style classes (aka descrintro). Regular expressions. Database
API. Email Us.&lt;br&gt; docs@&lt;b&gt;python&lt;/b&gt;.org. (c) 2004. &lt;b&gt;Python&lt;/b&gt;
Software Foundation. &lt;b&gt;Python&lt;/b&gt; Documentation. &lt;b&gt;...&lt;/b&gt;

Download &lt;b&gt;Python&lt;/b&gt; Software
http://www.python.org/download/
Download Standard &lt;b&gt;Python&lt;/b&gt; Software. &lt;b&gt;Python&lt;/b&gt; 2.3.3 is the
current production&lt;br&gt; version of &lt;b&gt;Python&lt;/b&gt;. &lt;b&gt;...&lt;/b&gt;
&lt;b&gt;Python&lt;/b&gt; is OSI Certified Open Source:

Pythonline
http://www.pythonline.com/


Dive Into &lt;b&gt;Python&lt;/b&gt;
http://diveintopython.org/
Dive Into &lt;b&gt;Python&lt;/b&gt;. &lt;b&gt;Python&lt;/b&gt; from novice to pro. Find:
&lt;b&gt;...&lt;/b&gt; It is also available in multiple&lt;br&gt; languages. Read
Dive Into &lt;b&gt;Python&lt;/b&gt;. This book is still being written. &lt;b&gt;...&lt;/b&gt;</font>
</pre></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li><a href="http://www.xmethods.net/">http://www.xmethods.net/</a> &#26159;&#19968;&#20010;&#35775;&#38382; <acronym class="acronym">SOAP</acronym> web &#26381;&#21153;&#30340;&#20844;&#20849;&#30693;&#35782;&#24211;&#12290;</li><li><acronym class="acronym">SOAP</acronym> &#35268;&#33539; (<a href="http://www.w3.org/TR/soap/">http://www.w3.org/TR/soap/</a>)&#30456;&#24403;&#21487;&#35835;&#65292;&#22914;&#26524;&#20320;&#21916;&#27426;&#36825;&#31867;&#19996;&#35199;&#30340;&#35805;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.install"></a>12.2.&nbsp;&#23433;&#35013; SOAP &#24211;</h2></div></div></div><div class="abstract"><p>&#19982;&#26412;&#20070;&#20013;&#30340;&#20854;&#20182;&#20195;&#30721;&#19981;&#21516;&#65292;&#26412;&#31456;&#20381;&#36182;&#30340;&#24211;&#19981;&#26159; <span class="application">Python</span> &#39044;&#23433;&#35013;&#30340;&#12290;</p></div><p>&#22312;&#28145;&#20837;&#23398;&#20064; <acronym class="acronym">SOAP</acronym> web &#26381;&#21153;&#20043;&#21069;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013;&#19977;&#20010;&#24211;&#65306;<span class="application">PyXML</span>&#12289;<span class="application">fpconst</span> &#21644; <span class="application">SOAPpy</span>&#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e30152"></a>12.2.1.&nbsp;&#23433;&#35013; <span class="application">PyXML</span></h3></div></div></div><p>&#20320;&#35201;&#29992;&#21040;&#30340;&#31532;&#19968;&#20010;&#24211;&#26159; <span class="application">PyXML</span>&#65292;&#23427;&#26159; <acronym class="acronym">XML</acronym> &#24211;&#30340;&#19968;&#20010;&#39640;&#32423;&#32452;&#20214;&#65292;&#25552;&#20379;&#20102;&#27604;&#25105;&#20204;&#22312; <a class="xref" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">&#31532; 9 &#31456;</a> &#23398;&#20064;&#30340; <acronym class="acronym">XML</acronym> &#20869;&#24314;&#24211;&#26356;&#22810;&#30340;&#21151;&#33021;&#12290;</p><div class="procedure"><a name="d0e30170"></a><p class="title"><b>&#36807;&#31243;&nbsp;12.1.&nbsp;</b></p><p>&#19979;&#38754;&#26159;&#23433;&#35013; <span class="application">PyXML</span> &#30340;&#27493;&#39588;&#65306;</p><ol type="1"><li><p>&#35775;&#38382; <a href="http://pyxml.sourceforge.net/">http://pyxml.sourceforge.net/</a>&#65292;&#28857;&#20987; Downloads&#65292;&#19979;&#36733;&#36866;&#21512;&#20320;&#25152;&#20351;&#29992;&#25805;&#20316;&#31995;&#32479;&#30340;&#26368;&#26032;&#29256;&#26412;&#12290;</p></li><li><p>&#22914;&#26524;&#20320;&#25152;&#20351;&#29992;&#30340;&#26159; Windows&#65292;&#37027;&#20040;&#20320;&#26377;&#22810;&#20010;&#36873;&#25321;&#12290;&#19968;&#23450;&#35201;&#30830;&#20445;&#20320;&#25152;&#19979;&#36733;&#30340; <span class="application">PyXML</span> &#21644;&#20320;&#25152;&#20351;&#29992;&#30340; <span class="application">Python</span> &#29256;&#26412;&#21305;&#37197;&#12290;</p></li><li><p>&#21452;&#20987;&#23433;&#35013;&#31243;&#24207;&#12290;&#22914;&#26524;&#20320;&#19979;&#36733;&#30340;&#26159;&#20026; Windows &#25552;&#20379;&#30340; <span class="application">PyXML</span> 0.8.3&#65292;&#24182;&#19988;&#20320;&#25152;&#20351;&#29992;&#30340;&#26159; <span class="application">Python</span> 2.3&#65292;&#36825;&#20010;&#23433;&#35013;&#31243;&#24207;&#24212;&#35813;&#26159; <code class="filename">PyXML-0.8.3.win32-py2.3.exe</code>&#12290;</p></li><li><p>&#28145;&#20837;&#23433;&#35013;&#36807;&#31243;&#12290;</p></li><li><p>&#23433;&#35013;&#23436;&#25104;&#21518;&#65292;&#20851;&#38381;&#23433;&#35013;&#31243;&#24207;&#65292;&#27809;&#26377;&#20219;&#20309;&#23433;&#35013;&#25104;&#21151;&#30340;&#26157;&#31034; (&#24182;&#27809;&#26377;&#22312;&#24320;&#22987;&#33756;&#21333;&#12289;&#24555;&#25463;&#26639;&#25110;&#26700;&#38754;&#20986;&#29616;&#22270;&#26631;)&#12290;&#22240;&#20026; <span class="application">PyXML</span> &#20165;&#20165;&#26159;&#34987;&#20854;&#20182;&#31243;&#24207;&#35843;&#29992;&#30340; <acronym class="acronym">XML</acronym> &#30340;&#24211;&#38598;&#21512;&#12290;</p></li></ol></div><p>&#35201;&#26816;&#39564; <span class="application">PyXML</span> &#23433;&#35013;&#24471;&#26159;&#21542;&#27491;&#30830;&#65292;&#21487;&#20197;&#36816;&#34892; <span class="application">Python</span> <acronym class="acronym">IDE</acronym>&#65292;&#19979;&#38754;&#30340;&#25351;&#20196;&#21487;&#20197;&#30475;&#21040; <acronym class="acronym">XML</acronym> &#24211;&#30340;&#23433;&#35013;&#29256;&#26412;&#12290;</p><div class="example"><a name="d0e30229"></a><p class="title"><b>&#20363;&nbsp;12.3.&nbsp;&#26816;&#39564; <span class="application">PyXML</span> &#23433;&#35013;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import xml</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">xml.__version__</span>
<font color="teal">'0.8.3'</font>
</pre><p>&#36825;&#20010;&#23433;&#35013;&#29256;&#26412;&#21495;&#24212;&#35813;&#21644;&#20320;&#25152;&#19979;&#36733;&#24182;&#23433;&#35013;&#30340; <span class="application">PyXML</span> &#23433;&#35013;&#31243;&#24207;&#29256;&#26412;&#21495;&#19968;&#33268;&#12290;</p></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e30255"></a>12.2.2.&nbsp;&#23433;&#35013; <span class="application">fpconst</span></h3></div></div></div><p>&#20320;&#25152;&#38656;&#35201;&#23433;&#35013;&#30340;&#31532;&#20108;&#20010;&#24211;&#26159; <span class="application">fpconst</span>&#65292;&#23427;&#26159;&#19968;&#31995;&#21015;&#25903;&#25345; IEEE754 double-precision &#29305;&#27530;&#20540;&#30340;&#24120;&#37327;&#21644;&#20989;&#25968;&#65292;&#25552;&#20379;&#20102;&#23545; Not-a-Number (NaN), Positive Infinity (Inf) &#21644; Negative Infinity (-Inf) &#31561;&#29305;&#27530;&#20540;&#30340;&#25903;&#25345;&#65292;&#32780;&#36825;&#26159; <acronym class="acronym">SOAP</acronym> &#25968;&#25454;&#31867;&#22411;&#35268;&#33539;&#30340;&#32452;&#25104;&#37096;&#20998;&#12290;</p><div class="procedure"><a name="d0e30268"></a><p class="title"><b>&#36807;&#31243;&nbsp;12.2.&nbsp;</b></p><p>&#19979;&#38754;&#26159; <span class="application">fpconst</span> &#30340;&#23433;&#35013;&#36807;&#31243;&#65306;</p><ol type="1"><li><p>&#20174; <a href="http://www.analytics.washington.edu/statcomp/projects/rzope/fpconst/">http://www.analytics.washington.edu/statcomp/projects/rzope/fpconst/</a> &#19979;&#36733; <span class="application">fpconst</span> &#30340;&#26368;&#26032;&#29256;&#26412;&#12290;</p></li><li><p>&#25552;&#20379;&#20102;&#20004;&#31181;&#26684;&#24335;&#30340;&#19979;&#36733;&#65306;<code class="filename">.tar.gz</code> &#21644; <code class="filename">.zip</code>&#12290;&#22914;&#26524;&#20320;&#20351;&#29992;&#30340;&#26159; Windows &#25805;&#20316;&#31995;&#32479;&#65292;&#19979;&#36733; <code class="filename">.zip</code> &#25991;&#20214;&#65307;&#20854;&#20182;&#24773;&#20917;&#19979;&#24212;&#35813;&#19979;&#36733; <code class="filename">.tar.gz</code> &#25991;&#20214;&#12290;</p></li><li><p>&#23545;&#36825;&#20010;&#25991;&#20214;&#36827;&#34892;&#35299;&#21387;&#32553;&#12290;&#22312; Windows XP &#19978;&#20320;&#21487;&#20197;&#40736;&#26631;&#21491;&#38190;&#21333;&#20987;&#36825;&#20010;&#25991;&#20214;&#24182;&#36873;&#25321;&#8220;&#35299;&#21387;&#25991;&#20214;&#8221;&#65307;&#22312;&#36739;&#26089;&#30340; Windows &#29256;&#26412;&#19978;&#21017;&#38656;&#35201; WinZip &#20043;&#31867;&#30340;&#31532;&#19977;&#26041;&#35299;&#21387;&#31243;&#24207;&#12290;&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#65292;&#21487;&#20197;&#21491;&#38190;&#21333;&#20987;&#21387;&#32553;&#25991;&#20214;&#36827;&#34892;&#35299;&#21387;&#12290;</p></li><li><p>&#25171;&#24320;&#21629;&#20196;&#25552;&#31034;&#31526;&#31383;&#21475;&#24182;&#23450;&#20301;&#21040;&#35299;&#21387;&#30446;&#24405;&#12290;</p></li><li><p>&#38190;&#20837; <strong class="userinput"><code>python setup.py install</code></strong> &#36816;&#34892;&#23433;&#35013;&#31243;&#24207;&#12290;</p></li></ol></div><p>&#35201;&#26816;&#39564; <span class="application">fpconst</span> &#23433;&#35013;&#24471;&#26159;&#21542;&#27491;&#30830;&#65292;&#36816;&#34892; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#24182;&#26597;&#30475;&#29256;&#26412;&#21495;&#12290;</p><div class="example"><a name="d0e30327"></a><p class="title"><b>&#20363;&nbsp;12.4.&nbsp;&#26816;&#39564; <span class="application">fpconst</span> &#23433;&#35013;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import fpconst</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">fpconst.__version__</span>
<font color="teal">'0.6.0'</font>
</pre><p>&#36825;&#20010;&#23433;&#35013;&#29256;&#26412;&#21495;&#24212;&#35813;&#21644;&#20320;&#25152;&#19979;&#36733;&#24182;&#29992;&#20110;&#23433;&#35013;&#30340; <span class="application">fpconst</span> &#21387;&#32553;&#21253;&#29256;&#26412;&#21495;&#19968;&#33268;&#12290;</p></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e30353"></a>12.2.3.&nbsp;&#23433;&#35013; <span class="application">SOAPpy</span></h3></div></div></div><p>&#31532;&#19977;&#20010;&#65292;&#20063;&#26159;&#26368;&#21518;&#19968;&#20010;&#38656;&#35201;&#23433;&#35013;&#30340;&#24211;&#26159; <acronym class="acronym">SOAP</acronym> &#24211;&#26412;&#36523;&#65306;<span class="application">SOAPpy</span>&#12290;</p><div class="procedure"><a name="d0e30366"></a><p class="title"><b>&#36807;&#31243;&nbsp;12.3.&nbsp;</b></p><p>&#19979;&#38754;&#26159;&#23433;&#35013; <span class="application">SOAPpy</span>&#30340;&#36807;&#31243;&#65306;</p><ol type="1"><li><p>&#35775;&#38382; <a href="http://pywebsvcs.sourceforge.net/">http://pywebsvcs.sourceforge.net/</a> &#24182;&#36873;&#25321; <span class="application">SOAPpy</span> &#37096;&#20998;&#20013;&#26368;&#26032;&#30340;&#23448;&#26041;&#21457;&#24067;&#12290;</p></li><li><p>&#25552;&#20379;&#20102;&#20004;&#31181;&#26684;&#24335;&#30340;&#19979;&#36733;&#12290;&#22914;&#26524;&#20320;&#20351;&#29992;&#30340;&#26159; Windows&#65292;&#37027;&#20040;&#19979;&#36733; <code class="filename">.zip</code> &#25991;&#20214;&#65307;&#20854;&#20182;&#24773;&#20917;&#21017;&#19979;&#36733; <code class="filename">.tar.gz</code> &#25991;&#20214;&#12290;</p></li><li><p>&#21644;&#23433;&#35013; <span class="application">fpconst</span> &#26102;&#19968;&#26679;&#20808;&#35299;&#21387;&#19979;&#36733;&#30340;&#25991;&#20214;&#65294;</p></li><li><p>&#25171;&#24320;&#21629;&#20196;&#25552;&#31034;&#31526;&#31383;&#21475;&#24182;&#23450;&#20301;&#21040;&#35299;&#21387; <span class="application">SOAPpy</span> &#25991;&#20214;&#30340;&#30446;&#24405;&#12290;</p></li><li><p>&#38190;&#20837; <strong class="userinput"><code>python setup.py install</code></strong> &#36816;&#34892;&#23433;&#35013;&#31243;&#24207;&#12290;</p></li></ol></div><p>&#35201;&#26816;&#39564; <span class="application">SOAPpy</span> &#23433;&#35013;&#24471;&#26159;&#21542;&#27491;&#30830;&#65292;&#36816;&#34892; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#24182;&#26597;&#30475;&#29256;&#26412;&#21495;&#12290;</p><div class="example"><a name="d0e30419"></a><p class="title"><b>&#20363;&nbsp;12.5.&nbsp;&#26816;&#39564; <span class="application">SOAPpy</span> &#23433;&#35013;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import SOAPpy</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">SOAPpy.__version__</span>
<font color="teal">'0.11.4'</font>
</pre><p>&#36825;&#20010;&#23433;&#35013;&#29256;&#26412;&#21495;&#24212;&#35813;&#21644;&#20320;&#25152;&#19979;&#36733;&#24182;&#29992;&#20110;&#23433;&#35013;&#30340; <span class="application">SOAPpy</span> &#21387;&#32553;&#21253;&#29256;&#26412;&#21495;&#19968;&#33268;&#12290;</p></div></div><br class="example-break"></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.firststeps"></a>12.3.&nbsp;&#27493;&#20837; <acronym class="acronym">SOAP</acronym></h2></div></div></div><div class="abstract"><p>&#35843;&#29992;&#36828;&#31243;&#20989;&#25968;&#26159; <acronym class="acronym">SOAP</acronym> &#30340;&#26680;&#24515;&#21151;&#33021;&#12290;&#26377;&#24456;&#22810;&#25552;&#20379;&#20844;&#24320; <acronym class="acronym">SOAP</acronym> &#35775;&#38382;&#30340;&#26381;&#21153;&#22120;&#25552;&#20379;&#29992;&#20110;&#23637;&#31034;&#30340;&#31616;&#21333;&#21151;&#33021;&#12290;</p></div><p>&#26368;&#21463;&#27426;&#36814;&#30340; <acronym class="acronym">SOAP</acronym> &#20844;&#24320;&#35775;&#38382;&#26381;&#21153;&#22120;&#26159; <a href="http://www.xmethods.net/">http://www.xmethods.net/</a>&#12290;&#36825;&#20010;&#20363;&#23376;&#20351;&#29992;&#20102;&#19968;&#20010;&#23637;&#31034;&#20989;&#25968;&#65292;&#21487;&#20197;&#26681;&#25454;&#32654;&#22269;&#37038;&#25919;&#32534;&#30721;&#36820;&#22238;&#24403;&#22320;&#27668;&#28201;&#12290;</p><div class="example"><a name="d0e30468"></a><p class="title"><b>&#20363;&nbsp;12.6.&nbsp;&#33719;&#24471;&#29616;&#22312;&#30340;&#27668;&#28201;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import SOAPProxy</span>            <a name="soap.firststeps.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">url = 'http://services.xmethods.net:80/soap/servlet/rpcrouter'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">namespace = 'urn:xmethods-Temperature'</span>  <a name="soap.firststeps.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = SOAPProxy(url, namespace)</span>      <a name="soap.firststeps.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.getTemp('27502')</span>                 <a name="soap.firststeps.1.4"></a>circled_4_delcric
<font color="teal">80.0</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.firststeps.1.1">circled_1_delcric</a> </dt><dd>&#20320;&#36890;&#36807; <code class="classname">SOAPProxy</code> &#36825;&#20010;&#20195;&#29702; (proxy) &#31867;&#35775;&#38382;&#36828;&#31243; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#22120;&#12290;&#36825;&#20010;&#20195;&#29702;&#22788;&#29702;&#20102;&#25152;&#26377;&#30340; <acronym class="acronym">SOAP</acronym> &#20869;&#37096;&#20107;&#21153;&#65292;&#20854;&#20013;&#21253;&#25324;&#65306;&#26681;&#25454;&#20989;&#25968;&#21517;&#21644;&#21442;&#25968;&#21015;&#34920;&#21019;&#24314; XML &#35831;&#27714;&#25991;&#26723;&#65292;&#24182;&#23558;&#36825;&#20010;&#35831;&#27714;&#25991;&#26723;&#36890;&#36807; HTTP &#21457;&#36865;&#21040;&#36828;&#31243; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#22120;&#65307;&#35299;&#26512; XML &#36820;&#22238;&#25991;&#26723;&#65292;&#24182;&#21019;&#24314;&#26412;&#22320;&#30340; <span class="application">Python</span> &#36820;&#22238;&#20540;&#12290;&#22312;&#19979;&#19968;&#33410;&#20013;&#20320;&#23558;&#30475;&#21040;&#36825;&#20010; XML &#25991;&#26723;&#12290;</dd><dt><a href="#soap.firststeps.1.2">circled_2_delcric</a> </dt><dd>&#27599;&#20010; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#37117;&#26377;&#19968;&#20010; <acronym class="acronym">URL</acronym> &#29992;&#20197;&#22788;&#29702;&#25152;&#26377;&#35831;&#27714;&#12290;&#30456;&#21516;&#30340; <acronym class="acronym">URL</acronym> &#21487;&#20197;&#29992;&#20110;&#25152;&#26377;&#30340;&#20989;&#25968;&#35831;&#27714;&#12290;&#27599;&#20010;&#29305;&#23450;&#26381;&#21153;&#21017;&#21482;&#26377;&#19968;&#20010;&#20989;&#25968;&#12290;&#20294;&#31245;&#21518;&#20320;&#23558;&#30475;&#21040;&#30340; Google <acronym class="acronym">API</acronym> &#21364;&#26377;&#22810;&#20010;&#20989;&#25968;&#12290;&#36825;&#20010;&#26381;&#21153;&#30340; <acronym class="acronym">URL</acronym> &#25552;&#20379;&#32473;&#25152;&#26377;&#20989;&#25968;&#20998;&#20139;&#12290;&#27599;&#20010; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#37117;&#26377;&#19968;&#20010;&#21629;&#21517;&#31354;&#38388; (namespace)&#65292;&#36825;&#20010;&#21629;&#21517;&#31354;&#38388;&#26159;&#30001;&#26381;&#21153;&#22120;&#20219;&#24847;&#21629;&#21517;&#30340;&#12290;&#36825;&#19981;&#36807;&#26159;&#20026;&#35843;&#29992; <acronym class="acronym">SOAP</acronym> &#26041;&#27861;&#35774;&#32622;&#30340;&#12290;&#23427;&#20351;&#24471;&#26381;&#21153;&#22120;&#35753;&#22810;&#20010;&#19981;&#30456;&#20851;&#30340;&#26381;&#21153;&#20849;&#20139;&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#36335;&#24452;&#35831;&#27714;&#25104;&#20026;&#21487;&#33021;&#12290;&#36825;&#19982; <span class="application">Python</span> &#20013;&#27169;&#22359;&#30456;&#23545;&#20110;<a class="link" href="#kgp.packages" title="9.2.&nbsp;&#21253;">&#21253;</a>&#30340;&#20851;&#31995;&#31867;&#20284;&#12290;</dd><dt><a href="#soap.firststeps.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#21019;&#24314;&#20102;&#21253;&#21547;&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#26381;&#21153;&#21629;&#21517;&#31354;&#38388;&#30340; <code class="classname">SOAPProxy</code>&#12290;&#27492;&#26102;&#36824;&#19981;&#20250;&#36830;&#25509;&#21040; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#22120;&#65307;&#20165;&#20165;&#26159;&#24314;&#31435;&#20102;&#19968;&#20010;&#26412;&#22320; <span class="application">Python</span> &#23545;&#35937;&#12290;</dd><dt><a href="#soap.firststeps.1.4">circled_4_delcric</a> </dt><dd>&#21040;&#27492;&#20026;&#27490;&#65292;&#22914;&#26524;&#20320;&#30340;&#35774;&#32622;&#23436;&#20840;&#27491;&#30830;&#65292;&#24212;&#35813;&#21487;&#20197;&#21521;&#35843;&#29992;&#26412;&#22320;&#20989;&#25968;&#19968;&#26679;&#35843;&#29992;&#36828;&#31243; <acronym class="acronym">SOAP</acronym> &#26041;&#27861;&#12290;&#36825;&#21644;&#32473;&#26222;&#36890;&#20989;&#25968;&#20256;&#36882;&#21442;&#25968;&#24182;&#25509;&#25910;&#36820;&#22238;&#20540;&#19968;&#26679;&#65292;&#20294;&#22312;&#32972;&#21518;&#21364;&#38544;&#34255;&#30528;&#24456;&#22810;&#30340;&#24037;&#20316;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#35753;&#25105;&#20204;&#30475;&#19968;&#30475;&#36825;&#20123;&#32972;&#21518;&#30340;&#24037;&#20316;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.debug"></a>12.4.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;</h2></div></div></div><div class="abstract"><p> <acronym class="acronym">SOAP</acronym> &#25552;&#20379;&#20102;&#19968;&#20010;&#24456;&#26041;&#20415;&#30340;&#26041;&#27861;&#29992;&#20197;&#26597;&#30475;&#32972;&#21518;&#30340;&#24773;&#24418;&#12290;</p></div><p><code class="classname">SOAPProxy</code> &#30340;&#20004;&#20010;&#23567;&#35774;&#32622;&#23601;&#21487;&#20197;&#25171;&#24320;&#26597;&#38169;&#27169;&#24335;&#12290;</p><div class="example"><a name="d0e30604"></a><p class="title"><b>&#20363;&nbsp;12.7.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import SOAPProxy</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">url = 'http://services.xmethods.net:80/soap/servlet/rpcrouter'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">n = 'urn:xmethods-Temperature'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = SOAPProxy(url, namespace=n)</span>     <a name="soap.debug.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.config.dumpSOAPOut = 1</span>            <a name="soap.debug.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.config.dumpSOAPIn = 1</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">temperature = server.getTemp('27502')</span>    <a name="soap.debug.1.3"></a>circled_3_delcric
<font color="teal">*** Outgoing SOAP ******************************************************
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/1999/XMLSchema"&gt;
&lt;SOAP-ENV:Body&gt;
&lt;ns1:getTemp xmlns:ns1="urn:xmethods-Temperature" SOAP-ENC:root="1"&gt;
&lt;v1 xsi:type="xsd:string"&gt;27502&lt;/v1&gt;
&lt;/ns1:getTemp&gt;
&lt;/SOAP-ENV:Body&gt;
&lt;/SOAP-ENV:Envelope&gt;
************************************************************************
*** Incoming SOAP ******************************************************
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
&lt;SOAP-ENV:Body&gt;
&lt;ns1:getTempResponse xmlns:ns1="urn:xmethods-Temperature"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&gt;
&lt;return xsi:type="xsd:float"&gt;80.0&lt;/return&gt;
&lt;/ns1:getTempResponse&gt;

&lt;/SOAP-ENV:Body&gt;
&lt;/SOAP-ENV:Envelope&gt;
************************************************************************
</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">temperature</span>
<font color="teal">80.0</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.debug.1.1">circled_1_delcric</a> </dt><dd>&#39318;&#20808;&#65292;&#21644;&#24179;&#24120;&#19968;&#26679;&#65292;&#24314;&#31435;&#24102;&#26377;&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#21629;&#21517;&#31354;&#38388;&#30340; <code class="classname">SOAPProxy</code>&#12290;</dd><dt><a href="#soap.debug.1.2">circled_2_delcric</a> </dt><dd>&#28982;&#21518;&#65292;&#36890;&#36807;&#35774;&#32622; <code class="varname">server.config.dumpSOAPIn</code> &#21644; <code class="varname">server.config.dumpSOAPOut</code> &#25171;&#24320;&#26597;&#38169;&#27169;&#24335;&#12290;</dd><dt><a href="#soap.debug.1.3">circled_3_delcric</a> </dt><dd>&#26368;&#21518;&#65292;&#21644;&#24179;&#24120;&#19968;&#26679;&#65292;&#35843;&#29992;&#36828;&#31243; <acronym class="acronym">SOAP</acronym> &#26041;&#27861;&#12290;<acronym class="acronym">SOAP</acronym> &#24211;&#23558;&#20250;&#36755;&#20986;&#36865;&#20986;&#30340; XML &#35831;&#27714;&#25991;&#26723;&#21644;&#25910;&#21040;&#30340; XML &#36820;&#22238;&#25991;&#26723;&#12290;&#36825;&#26159; <code class="classname">SOAPProxy</code> &#20026;&#20320;&#20570;&#30340;&#25152;&#26377;&#24037;&#20316;&#12290;&#26377;&#28857;&#24656;&#24598;&#65292;&#19981;&#26159;&#21527;&#65311;&#35753;&#25105;&#20204;&#26469;&#20998;&#26512;&#19968;&#19979;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22823;&#37096;&#20998; XML &#35831;&#27714;&#25991;&#26723;&#37117;&#22522;&#20110;&#27169;&#26495;&#25991;&#20214;&#12290;&#24573;&#30053;&#25152;&#26377;&#21629;&#21517;&#31354;&#38388;&#22768;&#26126;&#36825;&#20123;&#23545;&#20110;&#25152;&#26377; <acronym class="acronym">SOAP</acronym> &#35843;&#29992;&#37117;&#19968;&#25104;&#19981;&#21464;&#30340;&#19996;&#35199;&#12290;&#36825;&#20010; "<span class="quote">&#20989;&#25968;&#35843;&#29992;</span>" &#30340;&#26680;&#24515;&#26159;<code class="sgmltag-element">&lt;Body&gt;</code> &#24403;&#20013;&#30340;&#37096;&#20998;&#65306;</p><div class="informalexample"><pre class="programlisting">
&lt;ns1:getTemp                                 <a name="soap.debug.2.1"></a>circled_1_delcric
  xmlns:ns1="urn:xmethods-Temperature"       <a name="soap.debug.2.2"></a>circled_2_delcric
  SOAP-ENC:root="1"&gt;
&lt;v1 xsi:type="xsd:string"&gt;27502&lt;/v1&gt;         <a name="soap.debug.2.3"></a>circled_3_delcric
&lt;/ns1:getTemp&gt;
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.debug.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#20803;&#32032;&#21517; <code class="function">getTemp</code> &#23601;&#26159;&#20989;&#25968;&#21517;&#12290;<code class="classname">SOAPProxy</code> &#20351;&#29992; <a class="link" href="#kgp.handler" title="10.5.&nbsp;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;"><code class="function">getattr</code> &#20316;&#20026;&#20998;&#21457;&#22120;</a>&#12290;&#26377;&#21035;&#20110;&#20351;&#29992;&#26041;&#27861;&#21517;&#20998;&#21035;&#35843;&#29992;&#26412;&#22320;&#26041;&#27861;&#65292;&#36825;&#37324;&#20351;&#29992;&#26041;&#27861;&#21517;&#26500;&#36896;&#20102;&#19968;&#20010; XML &#35831;&#27714;&#25991;&#26723;&#12290;</dd><dt><a href="#soap.debug.2.2">circled_2_delcric</a> </dt><dd>&#20989;&#25968;&#30340; XML &#20803;&#32032;&#34987;&#23384;&#20648;&#20110;&#19968;&#20010;&#29305;&#21035;&#30340;&#21629;&#21517;&#31354;&#38388;&#65292;&#36825;&#20010;&#21629;&#21517;&#31354;&#38388;&#23601;&#26159;&#20320;&#22312;&#24314;&#31435; <code class="classname">SOAPProxy</code> &#23545;&#35937;&#26102;&#25152;&#25351;&#23450;&#30340;&#37027;&#20010;&#21629;&#21517;&#31354;&#38388;&#12290;&#20063;&#19981;&#24517;&#20026; <code class="literal">SOAP-ENC:root</code> &#32780;&#33510;&#24700;&#65292;&#22240;&#20026;&#23427;&#20063;&#26159;&#22522;&#20110;&#27169;&#26495;&#25991;&#20214;&#30340;&#12290;</dd><dt><a href="#soap.debug.2.3">circled_3_delcric</a> </dt><dd>&#20989;&#25968;&#30340;&#21442;&#25968;&#20063;&#34987;&#35760;&#20837; XML &#25991;&#26723;&#12290;<code class="classname">SOAPProxy</code> &#26597;&#30475;&#24182;&#30830;&#23450;&#27599;&#20010;&#21442;&#25968;&#30340;&#25968;&#25454;&#31867;&#22411; (&#36825;&#37324;&#26159; string &#23383;&#31526;&#20018;&#31867;&#22411;)&#12290;&#21442;&#25968;&#30340;&#25968;&#25454;&#31867;&#22411;&#35760;&#20837; <code class="literal">xsi:type</code> &#23646;&#24615;&#65292;&#24182;&#22312;&#20854;&#21518;&#35760;&#20837;&#23454;&#38469;&#30340;&#23383;&#31526;&#20018;&#20540;&#12290;</dd></dl></div></div><p>&#36820;&#22238;&#30340; XML &#25991;&#26723;&#21516;&#26679;&#23481;&#26131;&#29702;&#35299;&#65292;&#37325;&#28857;&#22312;&#20110;&#30693;&#36947;&#24212;&#35813;&#24573;&#30053;&#25481;&#21738;&#20123;&#20869;&#23481;&#12290;&#25226;&#27880;&#24847;&#21147;&#38598;&#20013;&#22312; <code class="sgmltag-element">&lt;Body&gt;</code> &#37096;&#20998;&#65306;</p><div class="informalexample"><pre class="programlisting">
&lt;ns1:getTempResponse                             <a name="soap.debug.3.1"></a>circled_1_delcric
  xmlns:ns1="urn:xmethods-Temperature"           <a name="soap.debug.3.2"></a>circled_2_delcric
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&gt;
&lt;return xsi:type="xsd:float"&gt;80.0&lt;/return&gt;       <a name="soap.debug.3.3"></a>circled_3_delcric
&lt;/ns1:getTempResponse&gt;
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.debug.3.1">circled_1_delcric</a> </dt><dd>&#26381;&#21153;&#22120;&#20256;&#22238;&#30340;&#20540;&#35760;&#24405;&#22312; <code class="sgmltag-element">&lt;getTempResponse&gt;</code> &#37096;&#20998;&#30340;&#20960;&#34892;&#20013;&#12290;&#36890;&#24120;&#21253;&#25324;&#20989;&#25968;&#21517;&#21644;&#22238;&#24212; <code class="literal"> (Response)</code>&#12290;&#24403;&#28982;&#20854;&#20182;&#30340;&#20869;&#23481;&#20063;&#21487;&#33021;&#20986;&#29616;&#22312;&#36825;&#37324;&#65292;&#20294; <code class="classname">SOAPProxy</code> &#25152;&#37325;&#35270;&#30340;&#19981;&#26159;&#36825;&#37324;&#30340;&#20803;&#32032;&#21517;&#65292;&#32780;&#26159;&#21629;&#21517;&#31354;&#38388;&#12290;</dd><dt><a href="#soap.debug.3.2">circled_2_delcric</a> </dt><dd>&#26381;&#21153;&#22120;&#36820;&#22238;&#26102;&#25152;&#20351;&#29992;&#30340;&#21629;&#21517;&#31354;&#38388;&#23601;&#26159;&#22312;&#35831;&#27714;&#26102;&#25152;&#29992;&#30340;&#21629;&#21517;&#31354;&#38388;&#65292;&#20063;&#23601;&#26159;&#22312;&#21019;&#24314; <code class="classname">SOAPProxy</code> &#23545;&#35937;&#26102;&#25152;&#25351;&#23450;&#30340;&#21629;&#21517;&#31354;&#38388;&#12290;&#26412;&#31456;&#31245;&#21518;&#30340;&#37096;&#20998;&#20013;&#65292;&#25105;&#20204;&#23558;&#30475;&#21040;&#22312;&#21019;&#24314; <code class="classname">SOAPProxy</code> &#23545;&#35937;&#26102;&#24536;&#35760;&#25351;&#23450;&#21151;&#33021;&#21517;&#31354;&#38388;&#20250;&#24590;&#26679;&#12290;</dd><dt><a href="#soap.debug.3.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#36820;&#22238;&#20540;&#21644;&#23427;&#30340;&#25968;&#25454;&#31867;&#22411; (&#28014;&#28857;&#31867;&#22411; float)&#12290;<code class="classname">SOAPProxy</code> &#20351;&#29992;&#26174;&#24335;&#25968;&#25454;&#31867;&#22411;&#21019;&#24314;&#19968;&#20010;&#26412;&#22320;&#25968;&#25454;&#31867;&#22411;&#30340; <span class="application">Python</span> &#23545;&#35937;&#24182;&#36820;&#22238;&#20043;&#12290;</dd></dl></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.wsdl"></a>12.5.&nbsp;<acronym class="acronym">WSDL</acronym> &#20171;&#32461;</h2></div></div></div><div class="abstract"><p><code class="classname">SOAPProxy</code> &#31867;&#26412;&#22320;&#26041;&#27861;&#35843;&#29992;&#24182;&#36879;&#26126;&#22320;&#36716;&#21521;&#21040;&#36828;&#31243; <acronym class="acronym">SOAP</acronym> &#26041;&#27861;&#12290;&#27491;&#22914;&#20320;&#25152;&#30475;&#21040;&#30340;&#65292;&#36825;&#26159;&#24456;&#22810;&#30340;&#24037;&#20316;&#65292;<code class="classname">SOAPProxy</code> &#24555;&#36895;&#21644;&#36879;&#26126;&#22320;&#23436;&#25104;&#20182;&#20204;&#12290;&#23427;&#27809;&#26377;&#20570;&#21040;&#30340;&#26159;&#25552;&#20379;&#26041;&#27861;&#33258;&#30465;&#30340;&#25163;&#27573;&#12290;</p></div><p>&#32771;&#34385;&#19968;&#19979;&#65306;&#21069;&#38754;&#20004;&#37096;&#20998;&#25152;&#23637;&#29616;&#30340;&#35843;&#29992;&#21482;&#26377;&#19968;&#20010;&#21442;&#25968;&#21644;&#36820;&#22238;&#30340;&#31616;&#21333;&#36828;&#31243; <acronym class="acronym">SOAP</acronym> &#26041;&#27861;&#12290;&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#19968;&#31995;&#21015;&#21442;&#25968;&#21450;&#23427;&#20204;&#30340;&#25968;&#25454;&#31867;&#22411;&#38656;&#35201;&#34987;&#30693;&#36947;&#24182;&#36319;&#36394;&#12290;&#20219;&#20309;&#30340;&#32570;&#22833;&#25110;&#38169;&#35823;&#37117;&#20250;&#23548;&#33268;&#25972;&#20307;&#30340;&#22833;&#36133;&#12290;</p><p>&#36825;&#24182;&#27809;&#26377;&#20160;&#20040;&#21487;&#24778;&#35766;&#30340;&#12290;&#22914;&#26524;&#25105;&#35201;&#35843;&#29992;&#19968;&#20010;&#26412;&#22320;&#20989;&#25968;&#65292;&#25105;&#38656;&#35201;&#30693;&#36947;&#20989;&#25968;&#25152;&#22312;&#30340;&#21253;&#21644;&#27169;&#22359;&#21517; (&#19982;&#20043;&#23545;&#24212;&#30340;&#21017;&#26159;&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#21629;&#21517;&#31354;&#38388;)&#12290;&#25105;&#36824;&#38656;&#35201;&#30693;&#36947;&#27491;&#30830;&#30340;&#20989;&#25968;&#21517;&#20197;&#21450;&#20854;&#20989;&#25968;&#20010;&#25968;&#12290;<span class="application">Python</span> &#31934;&#22937;&#22320;&#19981;&#38656;&#26126;&#31034;&#31867;&#22411;&#65292;&#20294;&#25105;&#36824;&#26159;&#38656;&#35201;&#30693;&#36947;&#26377;&#22810;&#23569;&#20010;&#21442;&#25968;&#38656;&#35201;&#20256;&#36882;&#65292;&#22810;&#23569;&#20010;&#20540;&#23558;&#34987;&#36820;&#22238;&#12290;</p><p>&#26368;&#22823;&#30340;&#21306;&#21035;&#23601;&#22312;&#20110;&#20869;&#30465;&#12290;&#23601;&#20687;&#20320;&#22312; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532; 4 &#31456;</a> &#30475;&#21040;&#30340;&#37027;&#26679;&#65292;<span class="application">Python</span> &#25797;&#38271;&#20110;&#35753;&#20320;&#23454;&#26102;&#22320;&#21435;&#25506;&#32034;&#27169;&#22359;&#21644;&#20989;&#25968;&#30340;&#24773;&#20917;&#12290;&#20320;&#21487;&#20197;&#23545;&#19968;&#20010;&#27169;&#22359;&#20013;&#30340;&#25152;&#26377;&#20989;&#25968;&#36827;&#34892;&#21015;&#34920;&#65292;&#24182;&#19981;&#36153;&#21561;&#28784;&#20043;&#21147;&#22320;&#26126;&#20102;&#20989;&#25968;&#30340;&#22768;&#26126;&#21644;&#21442;&#25968;&#24773;&#20917;&#12290;</p><p><acronym class="acronym">WSDL</acronym> &#20801;&#35768;&#20320;&#23545; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#20570;&#30456;&#21516;&#30340;&#20107;&#24773;&#12290;<acronym class="acronym">WSDL</acronym> &#26159; "<span class="quote">&#32593;&#32476;&#26381;&#21153;&#25551;&#36848;&#35821;&#35328; (Web Services Description Language)</span>"&#30340;&#32553;&#20889;&#12290;&#23427;&#23613;&#31649;&#26159;&#20026;&#33258;&#22914;&#22320;&#34920;&#36848;&#22810;&#31181;&#31867;&#22411;&#30340;&#32593;&#32476;&#26381;&#21153;&#32780;&#35774;&#23450;&#65292;&#21364;&#20063;&#32463;&#24120;&#29992;&#20110;&#25551;&#36848; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#12290;</p><p>&#19968;&#20010; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#19981;&#36807;&#23601;&#26159;&#19968;&#20010;&#25991;&#20214;&#12290;&#26356;&#20855;&#20307;&#22320;&#35762;&#65292;&#26159;&#19968;&#20010; XML &#25991;&#20214;&#12290;&#36890;&#24120;&#23384;&#20648;&#20110;&#20320;&#25152;&#35775;&#38382;&#30340; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#36825;&#20010;&#34987;&#25551;&#36848;&#23545;&#35937;&#25152;&#22312;&#30340;&#26381;&#21153;&#22120;&#19978;&#65292;&#24182;&#27809;&#26377;&#20160;&#20040;&#29305;&#27530;&#20043;&#22788;&#12290;&#22312;&#26412;&#31456;&#31245;&#21518;&#30340;&#20301;&#32622;&#65292;&#25105;&#20204;&#23558;&#19979;&#36733; Google API &#30340; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#24182;&#22312;&#26412;&#22320;&#20351;&#29992;&#23427;&#12290;&#36825;&#24182;&#19981;&#24847;&#21619;&#30528;&#26412;&#22320;&#35843;&#29992; Google&#65292;&#36825;&#20010; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#25152;&#25551;&#36848;&#30340;&#20173;&#26087;&#26159; Google &#26381;&#21153;&#22120;&#19978;&#30340;&#36828;&#31243;&#20989;&#25968;&#12290;</p><p>&#22312; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#20013;&#25551;&#36848;&#20102;&#35843;&#29992;&#30456;&#24212;&#30340; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#30340;&#19968;&#20999;&#65306;</p><div class="itemizedlist"><ul><li>&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#21629;&#21517;&#31354;&#38388;</li><li>&#32593;&#32476;&#26381;&#21153;&#30340;&#31867;&#22411; (&#21487;&#33021;&#26159; <acronym class="acronym">SOAP</acronym> &#30340;&#20989;&#25968;&#35843;&#29992;&#65292;&#20294;&#25105;&#35828;&#36807;&#65292;<acronym class="acronym">WSDL</acronym> &#36275;&#22815;&#33258;&#22914;&#22320;&#21435;&#25551;&#36848;&#32593;&#32476;&#26381;&#21153;&#30340;&#24191;&#27867;&#20869;&#23481;)</li><li>&#26377;&#25928;&#20989;&#25968;&#21015;&#34920;</li><li>&#27599;&#20010;&#20989;&#25968;&#30340;&#21442;&#25968;</li><li>&#27599;&#20010;&#21442;&#25968;&#30340;&#31867;&#22411;</li><li>&#27599;&#20010;&#20989;&#25968;&#30340;&#36820;&#22238;&#20540;&#21450;&#20854;&#25968;&#25454;&#31867;&#22411;</li></ul></div><p>&#25442;&#35328;&#20043;&#65292;&#19968;&#20010; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#21578;&#35785;&#20320;&#35843;&#29992; <acronym class="acronym">SOAP</acronym> &#25152;&#38656;&#35201;&#30693;&#36947;&#30340;&#19968;&#20999;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.introspection"></a>12.6.&nbsp;&#20197; <acronym class="acronym">WSDL</acronym> &#36827;&#34892; <acronym class="acronym">SOAP</acronym> &#20869;&#30465;</h2></div></div></div><div class="abstract"><p>&#23601;&#20687;&#32593;&#32476;&#26381;&#21153;&#33310;&#21488;&#19978;&#30340;&#25152;&#26377;&#20107;&#29289;&#65292;<acronym class="acronym">WSDL</acronym> &#20063;&#32463;&#21382;&#20102;&#19968;&#20010;&#20805;&#28385;&#26126;&#20105;&#26263;&#26007;&#32780;&#19988;&#28459;&#38271;&#22810;&#21464;&#30340;&#21382;&#21490;&#12290;&#25105;&#19981;&#25171;&#31639;&#35762;&#36848;&#36825;&#27573;&#20196;&#25105;&#20260;&#24515;&#30340;&#21382;&#21490;&#12290;&#36824;&#26377;&#19968;&#20123;&#20854;&#20182;&#30340;&#26631;&#20934;&#25552;&#20379;&#30456;&#21516;&#30340;&#25903;&#25345;&#65292;&#20294; <acronym class="acronym">WSDL</acronym> &#36824;&#26159;&#32988;&#20986;&#65292;&#25152;&#20197;&#25105;&#20204;&#36824;&#26159;&#26469;&#23398;&#20064;&#19968;&#19979;&#22914;&#20309;&#20351;&#29992;&#23427;&#12290;</p></div><p><acronym class="acronym">WSDL</acronym> &#26368;&#22522;&#26412;&#30340;&#21151;&#33021;&#20415;&#26159;&#35753;&#20320;&#25581;&#31034; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#22120;&#25152;&#25552;&#20379;&#30340;&#26377;&#25928;&#26041;&#27861;&#12290;</p><div class="example"><a name="d0e30935"></a><p class="title"><b>&#20363;&nbsp;12.8.&nbsp;&#25581;&#31034;&#26377;&#25928;&#26041;&#27861;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import WSDL</span>          <a name="soap.introspection.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">wsdlFile = 'http://www.xmethods.net/sd/2001/TemperatureService.wsdl'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = WSDL.Proxy(wsdlFile)</span>    <a name="soap.introspection.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.methods.keys()</span>            <a name="soap.introspection.1.3"></a>circled_3_delcric
<font color="teal">[u'getTemp']</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.introspection.1.1">circled_1_delcric</a> </dt><dd><span class="application">SOAPpy</span> &#21253;&#21547;&#19968;&#20010; <acronym class="acronym">WSDL</acronym> &#35299;&#26512;&#22120;&#12290;&#22312;&#26412;&#20070;&#20889;&#20316;&#20043;&#26102;&#65292;&#23427;&#34987;&#26631;&#31034;&#20026;&#24320;&#21457;&#30340;&#21021;&#32423;&#38454;&#27573;&#65292;&#20294;&#25105;&#20174;&#26469;&#27809;&#26377;&#22312;&#35299;&#26512;&#20219;&#20309; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#26102;&#36935;&#21040;&#38382;&#39064;&#12290;</dd><dt><a href="#soap.introspection.1.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992;&#19968;&#20010; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#65292;&#20320;&#36824;&#26159;&#35201;&#29992;&#21040;&#19968;&#20010; proxy &#31867;&#65306;<code class="classname">WSDL.Proxy</code>&#65292;&#23427;&#21482;&#38656;&#19968;&#20010;&#21442;&#25968;&#65306;<acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#12290;&#25105;&#25351;&#23450;&#30340;&#26159;&#23384;&#20648;&#22312;&#36828;&#31243;&#26381;&#21153;&#22120;&#19978;&#30340; <acronym class="acronym">WSDL</acronym> &#30340; <acronym class="acronym">URL</acronym>&#65292;&#20294;&#26159;&#36825;&#20010; proxy &#31867;&#23545;&#20110;&#26412;&#22320;&#30340; <acronym class="acronym">WSDL</acronym> &#21103;&#26412;&#24037;&#20316;&#21516;&#26679;&#20986;&#33394;&#12290;&#21019;&#24314; <acronym class="acronym">WSDL</acronym> proxy &#23558;&#20250;&#19979;&#36733; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#24182;&#35299;&#26512;&#23427;&#65292;&#25152;&#20197;&#22914;&#26524; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#26377;&#20219;&#20309;&#38382;&#39064; (&#25110;&#32773;&#30001;&#20110;&#32593;&#32476;&#38382;&#39064;&#19981;&#33021;&#33719;&#24471;) &#20320;&#20250;&#31435;&#21051;&#30693;&#36947;&#12290;</dd><dt><a href="#soap.introspection.1.3">circled_3_delcric</a> </dt><dd><acronym class="acronym">WSDL</acronym> proxy &#31867;&#36890;&#36807; <span class="application">Python</span> &#23383;&#20856; <code class="varname">server.methods</code> &#25581;&#31034;&#26377;&#25928;&#20989;&#25968;&#12290;&#25152;&#20197;&#21015;&#20986;&#26377;&#25928;&#26041;&#27861;&#21482;&#38656;&#35843;&#29992;&#23383;&#20856;&#26041;&#27861; <code class="methodname">keys()</code>&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22909;&#30340;&#65292;&#20320;&#30693;&#36947;&#36825;&#20010; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#22120;&#25552;&#20379;&#19968;&#20010;&#26041;&#27861;&#65306;<code class="methodname">getTemp</code>&#12290;&#20294;&#26159;&#22914;&#20309;&#21435;&#35843;&#29992;&#23427;&#21602;&#65311;<acronym class="acronym">WSDL</acronym> &#20063;&#22312;&#36825;&#26041;&#38754;&#25552;&#20379;&#20449;&#24687;&#12290;</p><div class="example"><a name="d0e31036"></a><p class="title"><b>&#20363;&nbsp;12.9.&nbsp;&#25581;&#31034;&#19968;&#20010;&#26041;&#27861;&#30340;&#21442;&#25968;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo = server.methods['getTemp']</span>  <a name="soap.introspection.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo.inparams</span>                     <a name="soap.introspection.2.2"></a>circled_2_delcric
<font color="teal">[&lt;SOAPpy.wstools.WSDLTools.ParameterInfo instance at 0x00CF3AD0&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo.inparams[0].name</span>             <a name="soap.introspection.2.3"></a>circled_3_delcric
<font color="teal">u'zipcode'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo.inparams[0].type</span>             <a name="soap.introspection.2.4"></a>circled_4_delcric
<font color="teal">(u'http://www.w3.org/2001/XMLSchema', u'string')</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.introspection.2.1">circled_1_delcric</a> </dt><dd> <code class="varname">server.methods</code> &#23383;&#20856;&#20013;&#35760;&#24405;&#19968;&#20010; <span class="application">SOAPpy</span> &#30340;&#29305;&#21035;&#32467;&#26500;&#65292;&#34987;&#31216;&#20026; <code class="classname">CallInfo</code>&#12290;<code class="classname">CallInfo</code> &#23545;&#35937;&#20013;&#21253;&#21547;&#30528;&#29305;&#23450;&#20989;&#25968;&#21644;&#20989;&#25968;&#21442;&#25968;&#30340;&#20449;&#24687;&#12290;</dd><dt><a href="#soap.introspection.2.2">circled_2_delcric</a> </dt><dd>&#20989;&#25968;&#21442;&#25968;&#20449;&#24687;&#23384;&#20648;&#22312; <code class="varname">callInfo.inparams</code> &#20013;&#65292;&#36825;&#26159;&#19968;&#20010;&#35760;&#24405;&#27599;&#19968;&#20010;&#21442;&#25968;&#20449;&#24687;&#30340; <code class="classname">ParameterInfo</code> &#23545;&#35937;&#30340; <span class="application">Python</span> &#21015;&#34920;&#12290;</dd><dt><a href="#soap.introspection.2.3">circled_3_delcric</a> </dt><dd>&#27599;&#20010; <code class="classname">ParameterInfo</code> &#23545;&#35937;&#21253;&#21547;&#19968;&#20010; <code class="varname">name</code> &#23646;&#24615;&#65292;&#36825;&#20415;&#26159;&#21442;&#25968;&#21517;&#12290;&#22312;&#36890;&#36807; <acronym class="acronym">SOAP</acronym> &#35843;&#29992;&#20989;&#25968;&#26102;&#65292;&#20320;&#19981;&#38656;&#35201;&#30693;&#36947;&#21442;&#25968;&#21517;&#65292;&#20294; <acronym class="acronym">SOAP</acronym> &#25903;&#25345;&#22312;&#35843;&#29992;&#20989;&#25968;&#26102;&#20351;&#29992;&#21442;&#25968;&#21517; (&#31867;&#20284;&#20110; <span class="application">Python</span>)&#12290;&#22914;&#26524;&#20351;&#29992;&#21442;&#25968;&#21517;&#65292;<code class="classname">WSDL.Proxy</code> &#23558;&#20250;&#27491;&#30830;&#22320;&#25226;&#36825;&#20123;&#21442;&#25968;&#20851;&#32852;&#21040;&#36828;&#31243;&#20989;&#25968;&#12290;</dd><dt><a href="#soap.introspection.2.4">circled_4_delcric</a> </dt><dd>&#27599;&#20010;&#21442;&#25968;&#37117;&#26159;&#37117;&#26159;&#26174;&#24335;&#31867;&#22411;&#30340;&#65292;&#20351;&#29992;&#30340;&#26159;&#22312; XML Schema &#23450;&#20041;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#20320;&#21487;&#20197;&#22312;&#19978;&#19968;&#33410;&#20013;&#21457;&#29616;&#36825;&#19968;&#28857;&#65306;XML Schema &#21629;&#21517;&#31354;&#38388;&#26159;&#25105;&#35753;&#20320;&#24573;&#30053;&#30340;&#27169;&#29256;&#30340;&#19968;&#37096;&#20998;&#12290;&#23601;&#30446;&#21069;&#32780;&#35328;&#65292;&#20320;&#36824;&#26159;&#21487;&#20197;&#32487;&#32493;&#24573;&#30053;&#23427;&#12290;<code class="varname">zipcode</code> &#21442;&#25968;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#65292;&#22914;&#26524;&#20320;&#21521; <code class="classname">WSDL.Proxy</code> &#23545;&#35937;&#20256;&#36882;&#19968;&#20010; <span class="application">Python</span> &#23383;&#31526;&#20018;&#65292;&#23427;&#20250;&#34987;&#27491;&#30830;&#22320;&#20851;&#32852;&#21644;&#20256;&#36882;&#21040;&#26381;&#21153;&#22120;&#12290;</dd></dl></div></div></div><br class="example-break"><p><acronym class="acronym">WSDL</acronym> &#36824;&#20801;&#35768;&#20320;&#33258;&#30465;&#20989;&#25968;&#30340;&#36820;&#22238;&#20540;&#12290;</p><div class="example"><a name="d0e31143"></a><p class="title"><b>&#20363;&nbsp;12.10.&nbsp;&#25581;&#31034;&#26041;&#27861;&#36820;&#22238;&#20540;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo.outparams</span>            <a name="soap.introspection.3.1"></a>circled_1_delcric
<font color="teal">[&lt;SOAPpy.wstools.WSDLTools.ParameterInfo instance at 0x00CF3AF8&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo.outparams[0].name</span>    <a name="soap.introspection.3.2"></a>circled_2_delcric
<font color="teal">u'return'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo.outparams[0].type</span>
<font color="teal">(u'http://www.w3.org/2001/XMLSchema', u'float')</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.introspection.3.1">circled_1_delcric</a> </dt><dd>&#19982;&#25581;&#31034;&#20989;&#25968;&#21442;&#25968;&#30340; <code class="varname">callInfo.inparams</code> &#23545;&#24212;&#30340;&#26159;&#25581;&#31034;&#36820;&#22238;&#20540;&#30340; <code class="varname">callInfo.outparams</code>&#12290;&#23427;&#20063;&#21516;&#26679;&#26159;&#19968;&#20010;&#21015;&#34920;&#65292;&#22240;&#20026;&#36890;&#36807; <acronym class="acronym">SOAP</acronym> &#35843;&#29992;&#20989;&#25968;&#26102;&#21487;&#20197;&#36820;&#22238;&#22810;&#20010;&#20540;&#65292;&#23601;&#20687; <span class="application">Python</span> &#20989;&#25968;&#19968;&#26679;&#12290;</dd><dt><a href="#soap.introspection.3.2">circled_2_delcric</a> </dt><dd> <code class="classname">ParameterInfo</code> &#23545;&#35937;&#21253;&#21547; <code class="varname">name</code> &#21644; <code class="varname">type</code>&#12290;&#36825;&#20010;&#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#28014;&#28857;&#20540;&#65292;&#23427;&#30340;&#21517;&#23383;&#26159; <code class="varname">return</code>&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#35753;&#25105;&#20204;&#25972;&#21512;&#19968;&#19979;&#65292;&#36890;&#36807; <acronym class="acronym">WSDL</acronym> proxy &#35843;&#29992;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#12290;</p><div class="example"><a name="d0e31215"></a><p class="title"><b>&#20363;&nbsp;12.11.&nbsp;&#36890;&#36807; <acronym class="acronym">WSDL</acronym> proxy &#35843;&#29992;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import WSDL</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">wsdlFile = 'http://www.xmethods.net/sd/2001/TemperatureService.wsdl')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = WSDL.Proxy(wsdlFile)</span>               <a name="soap.introspection.4.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.getTemp('90210')</span>                     <a name="soap.introspection.4.2"></a>circled_2_delcric
<font color="teal">66.0</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.soapproxy.config.dumpSOAPOut = 1</span>     <a name="soap.introspection.4.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.soapproxy.config.dumpSOAPIn = 1</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">temperature = server.getTemp('90210')</span>
<font color="teal">*** Outgoing SOAP ******************************************************
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/1999/XMLSchema"&gt;
&lt;SOAP-ENV:Body&gt;
&lt;ns1:getTemp xmlns:ns1="urn:xmethods-Temperature" SOAP-ENC:root="1"&gt;
&lt;v1 xsi:type="xsd:string"&gt;90210&lt;/v1&gt;
&lt;/ns1:getTemp&gt;
&lt;/SOAP-ENV:Body&gt;
&lt;/SOAP-ENV:Envelope&gt;
************************************************************************
*** Incoming SOAP ******************************************************
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
&lt;SOAP-ENV:Body&gt;
&lt;ns1:getTempResponse xmlns:ns1="urn:xmethods-Temperature"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"&gt;
&lt;return xsi:type="xsd:float"&gt;66.0&lt;/return&gt;
&lt;/ns1:getTempResponse&gt;

&lt;/SOAP-ENV:Body&gt;
&lt;/SOAP-ENV:Envelope&gt;
************************************************************************
</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">temperature</span>
<font color="teal">66.0</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.introspection.4.1">circled_1_delcric</a> </dt><dd>&#36825;&#27604;&#30452;&#25509;&#35843;&#29992; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#26102;&#30340;&#35774;&#32622;&#31616;&#21333;&#65292;&#22240;&#20026;&#22312; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#20013;&#21253;&#21547;&#30528;&#35843;&#29992;&#26381;&#21153;&#25152;&#38656;&#35201;&#30340;&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#21629;&#21517;&#31354;&#38388;&#12290;&#21019;&#24314; <code class="classname">WSDL.Proxy</code> &#23545;&#35937;&#23558;&#20250;&#19979;&#36733; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#65292;&#35299;&#26512;&#20043;&#65292;&#24182;&#35774;&#32622;&#19968;&#20010;&#29992;&#20197;&#35843;&#29992;&#23454;&#38469;&#30340; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#30340; <code class="classname">SOAPProxy</code> &#23545;&#35937;&#12290;</dd><dt><a href="#soap.introspection.4.2">circled_2_delcric</a> </dt><dd>&#21482;&#35201;&#21019;&#24314;&#20102; <code class="classname">WSDL.Proxy</code> &#23545;&#35937;&#65292;&#20320;&#23601;&#21487;&#20197;&#20687;&#35843;&#29992; <code class="classname">SOAPProxy</code> &#23545;&#35937;&#19968;&#26679;&#31616;&#21333;&#22320;&#35843;&#29992;&#19968;&#20010;&#20989;&#25968;&#12290;&#36825;&#24182;&#19981;&#22855;&#24618;&#65292;<code class="classname">WSDL.Proxy</code> &#23601;&#26159;&#19968;&#20010;&#20855;&#26377;&#33258;&#30465;&#26041;&#27861;&#30340; <code class="classname">SOAPProxy</code> &#23553;&#35013;&#22871;&#20214;&#65292;&#25152;&#20197;&#35843;&#29992;&#20989;&#25968;&#30340;&#35821;&#27861;&#20063;&#26159;&#19968;&#26679;&#30340;&#12290;</dd><dt><a href="#soap.introspection.4.3">circled_3_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#36890;&#36807; <code class="varname">server.soapproxy</code> &#35775;&#38382; <code class="classname">WSDL.Proxy</code> &#30340; <code class="classname">SOAPProxy</code>&#12290;&#36825;&#23545;&#20110;&#25171;&#24320;&#26597;&#38169;&#27169;&#24335;&#24456;&#37325;&#35201;&#65292;&#36825;&#26679;&#19968;&#26469;&#24403;&#20320;&#36890;&#36807; <acronym class="acronym">WSDL</acronym> proxy &#35843;&#29992;&#20989;&#25968;&#26102;&#65292;&#23427;&#30340; <code class="classname">SOAPProxy</code> &#23558;&#20250;&#25226;&#32447;&#36335;&#19978;&#26469;&#24448;&#30340; XML &#25991;&#26723;&#29993;&#19979;&#26469;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.google"></a>12.7.&nbsp;&#25628;&#32034; Google</h2></div></div></div><div class="abstract"><p>&#35753;&#25105;&#20204;&#22238;&#21040;&#36825;&#31456;&#24320;&#22987;&#26102;&#20320;&#30475;&#21040;&#30340;&#37027;&#27573;&#20195;&#30721;&#65292;&#33719;&#24471;&#27604;&#24403;&#21069;&#27668;&#28201;&#26356;&#26377;&#20215;&#20540;&#21644;&#20196;&#20154;&#25391;&#22859;&#30340;&#20449;&#24687;&#12290;</p></div><p>Google &#25552;&#20379;&#20102;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> <acronym class="acronym">API</acronym>&#65292;&#20197;&#20415;&#36890;&#36807;&#31243;&#24207;&#36827;&#34892; Google &#25628;&#32034;&#12290;&#20351;&#29992;&#23427;&#30340;&#21069;&#25552;&#26159;&#65292;&#20320;&#27880;&#20876;&#20102; Google &#32593;&#32476;&#26381;&#21153;&#12290;</p><div class="procedure"><a name="d0e31355"></a><p class="title"><b>&#36807;&#31243;&nbsp;12.4.&nbsp;&#27880;&#20876; Google &#32593;&#32476;&#26381;&#21153;</b></p><ol type="1"><li><p>&#35775;&#38382; <a href="http://www.google.com/apis/">http://www.google.com/apis/</a> &#24182;&#21019;&#24314;&#19968;&#20010;&#36134;&#21495;&#12290;&#21807;&#19968;&#30340;&#38656;&#35201;&#26159;&#25552;&#20379;&#19968;&#20010; E-mail &#22320;&#22336;&#12290;&#27880;&#20876;&#20043;&#21518;&#65292;&#20320;&#23558;&#36890;&#36807; E-mail &#25910;&#21040;&#20320;&#30340; Google API &#35768;&#21487;&#35777; (license key)&#12290;&#20320;&#38656;&#35201;&#22312;&#35843;&#29992; Google &#25628;&#32034;&#20989;&#25968;&#26102;&#20351;&#29992;&#36825;&#20010;&#35768;&#21487;&#35777;&#12290;</p></li><li><p>&#36824;&#26159;&#22312; <a href="http://www.google.com/apis/">http://www.google.com/apis/</a> &#19978;&#65292;&#19979;&#36733; Google &#32593;&#32476; APIs &#24320;&#21457;&#24037;&#20855;&#21253; (Google Web APIs developer kit)&#12290;&#23427;&#21253;&#21547;&#30528;&#21253;&#25324; <span class="application">Python</span> &#22312;&#20869;&#30340;&#22810;&#31181;&#35821;&#35328;&#30340;&#26679;&#20363;&#20195;&#30721;&#65292;&#26356;&#37325;&#35201;&#30340;&#26159;&#23427;&#21253;&#21547;&#30528; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#12290;</p></li><li><p>&#35299;&#21387;&#36825;&#20010;&#24320;&#21457;&#24037;&#20855;&#21253;&#24182;&#25214;&#21040; <code class="filename">GoogleSearch.wsdl</code>&#12290;&#23558;&#36825;&#20010;&#25991;&#20214;&#25335;&#36125;&#21040;&#20320;&#26412;&#22320;&#39537;&#21160;&#22120;&#30340;&#19968;&#20010;&#27704;&#20037;&#22320;&#22336;&#12290;&#22312;&#26412;&#31456;&#21518;&#38754;&#20301;&#32622;&#20320;&#20250;&#29992;&#21040;&#23427;&#12290;</p></li></ol></div><p>&#20320;&#26377;&#20102;&#24320;&#21457;&#35768;&#21487;&#35777;&#21644; Google <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#20043;&#21518;&#23601;&#21487;&#20197;&#21644; Google &#32593;&#32476;&#26381;&#21153;&#25171;&#20132;&#36947;&#20102;&#12290;</p><div class="example"><a name="d0e31385"></a><p class="title"><b>&#20363;&nbsp;12.12.&nbsp;&#20869;&#30465; Google &#32593;&#32476;&#26381;&#21153;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import WSDL</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = WSDL.Proxy('/path/to/your/GoogleSearch.wsdl')</span> <a name="soap.google.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.methods.keys()</span>                                  <a name="soap.google.1.2"></a>circled_2_delcric
<font color="teal">[u'doGoogleSearch', u'doGetCachedPage', u'doSpellingSuggestion']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">callInfo = server.methods['doGoogleSearch']</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for arg in callInfo.inparams:</span>                          <a name="soap.google.1.3"></a>circled_3_delcric
<code class="prompt">...     </code><span class="userinput">print arg.name.ljust(15), arg.type</span>
<font color="teal">key             (u'http://www.w3.org/2001/XMLSchema', u'string')
q               (u'http://www.w3.org/2001/XMLSchema', u'string')
start           (u'http://www.w3.org/2001/XMLSchema', u'int')
maxResults      (u'http://www.w3.org/2001/XMLSchema', u'int')
filter          (u'http://www.w3.org/2001/XMLSchema', u'boolean')
restrict        (u'http://www.w3.org/2001/XMLSchema', u'string')
safeSearch      (u'http://www.w3.org/2001/XMLSchema', u'boolean')
lr              (u'http://www.w3.org/2001/XMLSchema', u'string')
ie              (u'http://www.w3.org/2001/XMLSchema', u'string')
oe              (u'http://www.w3.org/2001/XMLSchema', u'string')</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.google.1.1">circled_1_delcric</a> </dt><dd>&#27493;&#20837; Google &#32593;&#32476;&#26381;&#21153;&#24456;&#31616;&#21333;&#65306;&#24314;&#31435;&#19968;&#20010; <code class="classname">WSDL.Proxy</code> &#23545;&#35937;&#24182;&#25351;&#21521;&#21040;&#20320;&#22797;&#21046;&#21040;&#26412;&#22320;&#30340; Google <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#12290;</dd><dt><a href="#soap.google.1.2">circled_2_delcric</a> </dt><dd>&#30001; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#21487;&#30693;&#65292;Google &#25552;&#20379;&#19977;&#20010;&#20989;&#25968;&#65306;<code class="function">doGoogleSearch</code>&#12289;<code class="function">doGetCachedPage</code> &#21644; <code class="function">doSpellingSuggestion</code>&#12290;&#39038;&#21517;&#24605;&#20041;&#65292;&#25191;&#34892; Google &#25628;&#32034;&#24182;&#36820;&#22238;&#32467;&#26524;&#65307;&#33719;&#24471; Google &#26368;&#21518;&#19968;&#27425;&#25195;&#25551;&#35813;&#39029;&#26102;&#33719;&#24471;&#30340;&#32531;&#23384;&#65307;&#22522;&#20110;&#24120;&#35265;&#25340;&#20889;&#38169;&#35823;&#25552;&#20986;&#21333;&#35789;&#25340;&#20889;&#24314;&#35758;&#12290;</dd><dt><a href="#soap.google.1.3">circled_3_delcric</a> </dt><dd><code class="function">doGoogleSearch</code> &#20989;&#25968;&#38656;&#35201;&#19968;&#31995;&#21015;&#19981;&#21516;&#31867;&#22411;&#30340;&#21442;&#25968;&#12290;&#27880;&#24847;&#65306;<acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#21487;&#20197;&#21578;&#35785;&#20320;&#26377;&#21738;&#20123;&#21442;&#25968;&#21644;&#20182;&#20204;&#30340;&#21442;&#25968;&#31867;&#22411;&#65292;&#20294;&#19981;&#33021;&#21578;&#35785;&#20320;&#23427;&#20204;&#30340;&#21547;&#20041;&#21644;&#20351;&#29992;&#26041;&#27861;&#12290;&#22312;&#21442;&#25968;&#20540;&#26377;&#38480;&#23450;&#30340;&#24773;&#20917;&#19979;&#65292;&#29702;&#35770;&#19978;&#23427;&#33021;&#22815;&#21578;&#35785;&#20320;&#21442;&#25968;&#30340;&#21462;&#20540;&#33539;&#22260;&#65292;&#20294; Google &#30340; <acronym class="acronym">WSDL</acronym> &#27809;&#26377;&#37027;&#20040;&#32454;&#21270;&#12290;<code class="classname">WSDL.Proxy</code> &#19981;&#20250;&#21464;&#39764;&#26415;&#65292;&#23427;&#21482;&#33021;&#32473;&#20320; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#20013;&#25552;&#20379;&#30340;&#20449;&#24687;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#37324;&#31616;&#35201;&#22320;&#21015;&#20986;&#20102; <code class="function">doGoogleSearch</code> &#20989;&#25968;&#30340;&#25152;&#26377;&#21442;&#25968;&#65306;</p><div class="itemizedlist"><ul><li><code class="varname">key</code>&#8213;&#8213;&#20320;&#27880;&#20876; Google &#32593;&#32476;&#26381;&#21153;&#26102;&#33719;&#24471;&#30340; Google API &#35768;&#21487;&#35777;&#12290;</li><li><code class="varname">q</code>&#8213;&#8213;&#20320;&#35201;&#25628;&#32034;&#30340;&#35789;&#25110;&#35789;&#32452;&#12290;&#20854;&#35821;&#27861;&#19982; Google &#30340;&#32593;&#31449;&#34920;&#21333;&#22788;&#23436;&#20840;&#30456;&#21516;&#65292;&#20320;&#25152;&#30693;&#36947;&#30340;&#39640;&#32423;&#25628;&#32034;&#35821;&#27861;&#21644;&#25216;&#24039;&#36825;&#37324;&#23436;&#20840;&#36866;&#29992;&#12290;</li><li><code class="varname">start</code>&#8213;&#8213;&#36215;&#22987;&#30340;&#32467;&#26524;&#32534;&#21495;&#12290;&#19982;&#20351;&#29992; Google &#32593;&#39029;&#20132;&#20114;&#25628;&#32034;&#26102;&#30456;&#21516;&#65292;&#36825;&#20010;&#20989;&#25968;&#27599;&#27425;&#36820;&#22238; 10 &#20010;&#32467;&#26524;&#12290;&#22914;&#26524;&#20320;&#38656;&#35201;&#26597;&#30475; "<span class="quote">&#31532;&#20108;</span>" &#39029;&#32467;&#26524;&#21017;&#38656;&#35201;&#23558; <code class="varname">start</code> &#35774;&#32622;&#20026; 10&#12290;</li><li><code class="varname">maxResults</code>&#8213;&#8213;&#36820;&#22238;&#30340;&#32467;&#26524;&#20010;&#25968;&#12290;&#30446;&#21069;&#30340;&#20540;&#26159; 10&#65292;&#24403;&#28982;&#22914;&#26524;&#20320;&#21482;&#23545;&#23569;&#25968;&#36820;&#22238;&#32467;&#26524;&#24863;&#20852;&#36259;&#25110;&#32773;&#24076;&#26395;&#33410;&#30465;&#32593;&#32476;&#24102;&#23485;&#65292;&#20063;&#21487;&#20197;&#23450;&#20041;&#20026;&#36820;&#22238;&#26356;&#23569;&#30340;&#32467;&#26524;&#12290;</li><li><code class="varname">filter</code>&#8213;&#8213;&#22914;&#26524;&#35774;&#32622;&#20026; <code class="constant">True</code>&#65292;Google &#23558;&#20250;&#36807;&#28388;&#32467;&#26524;&#20013;&#37325;&#22797;&#30340;&#39029;&#38754;&#12290;</li><li><code class="varname">restrict</code>&#8213;&#8213;&#36825;&#37324;&#35774;&#32622; <code class="literal">country</code> &#24182;&#36319;&#19978;&#19968;&#20010;&#22269;&#23478;&#20195;&#30721;&#21487;&#20197;&#38480;&#23450;&#21482;&#36820;&#22238;&#29305;&#23450;&#22269;&#23478;&#30340;&#32467;&#26524;&#12290;&#20363;&#22914;&#65306;<code class="literal">countryUK</code> &#29992;&#20110;&#22312;&#33521;&#22269;&#25628;&#32034;&#39029;&#38754;&#12290;&#20320;&#20063;&#21487;&#20197;&#35774;&#23450; <code class="literal">linux</code>&#65292;<code class="literal">mac</code> &#25110;&#32773; <code class="literal">bsd</code> &#20197;&#20415;&#25628;&#32034; Google &#23450;&#20041;&#30340;&#25216;&#26415;&#31449;&#28857;&#32452;&#65292;&#25110;&#32773;&#35774;&#20026; <code class="literal">unclesam</code> &#26469;&#25628;&#32034;&#32654;&#22269;&#25919;&#24220;&#31449;&#28857;&#12290;</li><li><code class="varname">safeSearch</code>&#8213;&#8213;&#22914;&#26524;&#35774;&#32622;&#20026; <code class="constant">True</code>&#65292;Google &#23558;&#20250;&#36807;&#28388;&#25481;&#33394;&#24773;&#31449;&#28857;&#12290;</li><li><code class="varname">lr</code> ("<span class="quote">language restrict</span>"&#65292;&#35821;&#35328;&#38480;&#21046;)&#8213;&#8213;&#36825;&#37324;&#35774;&#32622;&#35821;&#35328;&#38480;&#23450;&#20540;&#36820;&#22238;&#29305;&#23450;&#35821;&#35328;&#30340;&#31449;&#28857;&#12290;</li><li><code class="varname">ie</code> &#21644; <code class="varname">oe</code> ("<span class="quote">input encoding</span>"&#65292;&#36755;&#20837;&#32534;&#30721;&#21644; "<span class="quote">output encoding</span>"&#65292;&#36755;&#20986;&#32534;&#30721;)&#8213;&#8213;&#19981;&#36190;&#25104;&#20351;&#29992;&#65292;&#37117;&#24212;&#35813;&#26159; <code class="literal">utf-8</code>&#12290;</li></ul></div><div class="example"><a name="d0e31570"></a><p class="title"><b>&#20363;&nbsp;12.13.&nbsp;&#25628;&#32034; Google</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import WSDL</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = WSDL.Proxy('/path/to/your/GoogleSearch.wsdl')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">key = 'YOUR_GOOGLE_API_KEY'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results = server.doGoogleSearch(key, 'mark', 0, 10, False, "",</span>
<code class="prompt">...     </code><span class="userinput">False, "", "utf-8", "utf-8")</span>             <a name="soap.google.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">len(results.resultElements)</span>                  <a name="soap.google.2.2"></a>circled_2_delcric
<font color="teal">10</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results.resultElements[0].URL</span>                <a name="soap.google.2.3"></a>circled_3_delcric
<font color="teal">'http://diveintomark.org/'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results.resultElements[0].title</span>
<font color="teal">'dive into &lt;b&gt;mark&lt;/b&gt;'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.google.2.1">circled_1_delcric</a> </dt><dd>&#22312;&#35774;&#32622;&#22909; <code class="classname">WSDL.Proxy</code> &#23545;&#35937;&#20043;&#21518;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#21313;&#20010;&#21442;&#25968;&#26469;&#35843;&#29992; <code class="function">server.doGoogleSearch</code>&#12290;&#35760;&#20303;&#35201;&#20351;&#29992;&#20320;&#27880;&#20876; Google &#32593;&#32476;&#26381;&#21153;&#26102;&#25480;&#26435;&#32473;&#20320;&#33258;&#24049;&#30340; Google API &#35768;&#21487;&#35777;&#12290;</dd><dt><a href="#soap.google.2.2">circled_2_delcric</a> </dt><dd>&#26377;&#24456;&#22810;&#30340;&#36820;&#22238;&#20449;&#24687;&#65292;&#20294;&#25105;&#20204;&#36824;&#26159;&#20808;&#26469;&#30475;&#19968;&#19979;&#23454;&#38469;&#30340;&#36820;&#22238;&#32467;&#26524;&#12290;&#23427;&#20204;&#34987;&#23384;&#20648;&#20110; <code class="varname">results.resultElements</code> &#20043;&#20013;&#65292;&#20320;&#21487;&#20197;&#20687;&#20351;&#29992;&#26222;&#36890;&#30340; <span class="application">Python</span> &#21015;&#34920;&#37027;&#26679;&#26469;&#35843;&#29992;&#23427;&#12290;</dd><dt><a href="#soap.google.2.3">circled_3_delcric</a> </dt><dd><code class="varname">resultElements</code> &#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#37117;&#26159;&#19968;&#20010;&#21253;&#21547; <code class="varname">URL</code>&#12289;<code class="varname">title</code>&#12289;<code class="varname">snippet</code> &#20197;&#21450;&#20854;&#20182;&#23646;&#24615;&#30340;&#23545;&#35937;&#12290;&#22522;&#20110;&#36825;&#19968;&#28857;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#35832;&#22914; <strong class="userinput"><code>dir(results.resultElements[0])</code></strong> &#30340;&#26222;&#36890; <span class="application">Python</span> &#33258;&#30465;&#25216;&#26415;&#26469;&#26597;&#30475;&#26377;&#25928;&#23646;&#24615;&#65292;&#25110;&#32773;&#36890;&#36807; <acronym class="acronym">WSDL</acronym> proxy &#23545;&#35937;&#26597;&#30475;&#20989;&#25968;&#30340; <code class="varname">outparams</code>&#12290;&#19981;&#21516;&#30340;&#26041;&#27861;&#33021;&#24102;&#32473;&#20320;&#30456;&#21516;&#30340;&#32467;&#26524;&#12290;</dd></dl></div></div></div><br class="example-break"><p> <code class="varname">results</code> &#23545;&#35937;&#20013;&#25152;&#21152;&#36733;&#30340;&#19981;&#20165;&#20165;&#26159;&#23454;&#38469;&#30340;&#25628;&#32034;&#32467;&#26524;&#12290;&#23427;&#20063;&#21547;&#26377;&#25628;&#32034;&#34892;&#20026;&#33258;&#36523;&#30340;&#20449;&#24687;&#65292;&#27604;&#22914;&#32791;&#26102;&#21644;&#24635;&#32467;&#26524;&#25968;&#31561; (&#23613;&#31649;&#21482;&#36820;&#22238;&#20102;10&#26465;&#32467;&#26524;)&#12290;Google &#32593;&#39029;&#30028;&#38754;&#20013;&#26174;&#31034;&#20102;&#36825;&#20123;&#20449;&#24687;&#65292;&#36890;&#36807;&#31243;&#24207;&#20320;&#20063;&#21516;&#26679;&#33021;&#33719;&#24471;&#23427;&#20204;&#12290;</p><div class="example"><a name="d0e31680"></a><p class="title"><b>&#20363;&nbsp;12.14.&nbsp;&#20174;Google&#33719;&#24471;&#27425;&#35201;&#20449;&#24687;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results.searchTime</span>                     <a name="soap.google.3.1"></a>circled_1_delcric
<font color="teal">0.224919</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results.estimatedTotalResultsCount</span>     <a name="soap.google.3.2"></a>circled_2_delcric
<font color="teal">29800000</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results.directoryCategories</span>            <a name="soap.google.3.3"></a>circled_3_delcric
<font color="teal">[&lt;SOAPpy.Types.structType item at 14367400&gt;:
 {'fullViewableName':
  'Top/Arts/Literature/World_Literature/American/19th_Century/Twain,_Mark',
  'specialEncoding': ''}]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results.directoryCategories[0].fullViewableName</span>
<font color="teal">'Top/Arts/Literature/World_Literature/American/19th_Century/Twain,_Mark'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.google.3.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#25628;&#32034;&#32791;&#26102; 0.224919 &#31186;&#12290;&#36825;&#19981;&#21253;&#25324;&#29992;&#20110;&#21457;&#36865;&#21644;&#25509;&#25910; <acronym class="acronym">SOAP</acronym> XML &#25991;&#26723;&#30340;&#26102;&#38388;&#65292;&#20165;&#20165;&#26159; Google &#22312;&#25509;&#21040;&#25628;&#32034;&#35831;&#27714;&#21518;&#25191;&#34892;&#25628;&#32034;&#25152;&#33457;&#36153;&#30340;&#26102;&#38388;&#12290;</dd><dt><a href="#soap.google.3.2">circled_2_delcric</a> </dt><dd>&#24635;&#20849;&#26377;&#25509;&#36817; 30,000,000 &#20010;&#32467;&#26524;&#20449;&#24687;&#12290;&#36890;&#36807;&#35753; <code class="varname">start</code> &#21442;&#25968;&#20197; 10 &#36882;&#22686;&#26469;&#37325;&#22797;&#35843;&#29992; <code class="function">server.doGoogleSearch</code>&#65292;&#20320;&#33021;&#22815;&#33719;&#24471;&#20840;&#37096;&#30340;&#32467;&#26524;&#12290;</dd><dt><a href="#soap.google.3.3">circled_3_delcric</a> </dt><dd>&#23545;&#20110;&#26377;&#20123;&#35831;&#27714;&#65292;Google &#36824;&#36820;&#22238;&#19968;&#20010; Google Directory (<a href="http://directory.google.com/">http://directory.google.com/</a>) &#20013;&#30340;&#31867;&#21035;&#21015;&#34920;&#12290;&#20320;&#21487;&#20197;&#29992;&#36825;&#20123; URLs &#21040; <a href="http://directory.google.com/">http://directory.google.com/</a> &#24314;&#31435;&#21040; directory category &#39029;&#38754;&#30340;&#38142;&#25509;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.troubleshooting"></a>12.8.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#25925;&#38556;&#25490;&#38500;</h2></div></div></div><div class="abstract"><p>&#26159;&#30340;&#65292;<acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#30340;&#19990;&#30028;&#20013;&#20063;&#19981;&#24635;&#26159;&#27426;&#20048;&#21644;&#38451;&#20809;&#12290;&#26377;&#26102;&#20505;&#20063;&#20250;&#26377;&#25925;&#38556;&#12290;</p></div><p>&#27491;&#22914;&#20320;&#22312;&#26412;&#31456;&#20013;&#30475;&#21040;&#30340;&#65292;<acronym class="acronym">SOAP</acronym> &#29301;&#25199;&#20102;&#24456;&#22810;&#23618;&#38754;&#12290;<acronym class="acronym">SOAP</acronym> &#21521; HTTP &#26381;&#21153;&#22120;&#21457;&#36865; XML &#25991;&#26723;&#24182;&#25509;&#25910;&#36820;&#22238;&#30340; XML &#25991;&#26723;&#26102;&#38656;&#35201;&#29992;&#21040; HTTP &#23618;&#12290;&#36825;&#26679;&#19968;&#26469;&#65292;&#20320;&#22312; <a class="xref" href="#oa" title="&#31532;&nbsp;11&nbsp;&#31456;&nbsp;HTTP Web &#26381;&#21153;">&#31532;&nbsp;11&nbsp;&#31456; <i>HTTP Web &#26381;&#21153;</i></a> &#23398;&#21040;&#30340;&#35843;&#35797;&#25216;&#26415;&#22312;&#36825;&#37324;&#37117;&#26377;&#20102;&#29992;&#27494;&#20043;&#22320;&#12290;&#20320;&#21487;&#20197; <strong class="userinput"><code>import httplib</code></strong> &#24182;&#35774;&#32622; <strong class="userinput"><code>httplib.HTTPConnection.debuglevel = 1</code></strong> &#26469;&#26597;&#30475;&#28508;&#22312;&#30340; HTTP &#20256;&#36755;&#12290;</p><p>&#22312; HTTP &#23618;&#20043;&#19978;&#65292;&#36824;&#26377;&#20960;&#20010;&#21487;&#33021;&#21457;&#29983;&#38382;&#39064;&#30340;&#22320;&#26041;&#12290;<span class="application">SOAPpy</span> &#38544;&#34255; <acronym class="acronym">SOAP</acronym> &#35821;&#27861;&#30340;&#26412;&#39046;&#20196;&#20320;&#24778;&#21497;&#19981;&#24050;&#65292;&#20294;&#20063;&#24847;&#21619;&#30528;&#22312;&#21457;&#29983;&#38382;&#39064;&#26102;&#26356;&#38590;&#30830;&#23450;&#38382;&#39064;&#25152;&#22312;&#12290;</p><p>&#19979;&#38754;&#30340;&#36825;&#20123;&#20363;&#23376;&#26159;&#25105;&#22312;&#20351;&#29992; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26102;&#29359;&#36807;&#30340;&#19968;&#20123;&#24120;&#35265;&#38169;&#35823;&#20197;&#21450;&#25152;&#20135;&#29983;&#30340;&#38169;&#35823;&#20449;&#24687;&#12290;</p><div class="example"><a name="d0e31792"></a><p class="title"><b>&#20363;&nbsp;12.15.&nbsp;&#20197;&#38169;&#35823;&#30340;&#35774;&#32622;&#35843;&#29992; Proxy &#26041;&#27861;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import SOAPProxy</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">url = 'http://services.xmethods.net:80/soap/servlet/rpcrouter'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = SOAPProxy(url)</span>                                        <a name="soap.troubleshooting.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server.getTemp('27502')</span>                                        <a name="soap.troubleshooting.1.2"></a>circled_2_delcric
<font color="red">&lt;Fault SOAP-ENV:Server.BadTargetObjectURI:
Unable to determine object id from call: is the method element namespaced?&gt;
Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in ?
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 453, in __call__
    return self.__r_call(*args, **kw)
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 475, in __r_call
    self.__hd, self.__ma)
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 389, in __call
    raise p
SOAPpy.Types.faultType: &lt;Fault SOAP-ENV:Server.BadTargetObjectURI:
Unable to determine object id from call: is the method element namespaced?&gt;</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.troubleshooting.1.1">circled_1_delcric</a> </dt><dd>&#20320;&#30475;&#20986;&#38169;&#35823;&#20102;&#21527;&#65311;&#20320;&#25163;&#24037;&#22320;&#21019;&#24314;&#20102;&#19968;&#20010; <code class="classname">SOAPProxy</code>&#65292;&#20320;&#27491;&#30830;&#22320;&#25351;&#23450;&#20102;&#26381;&#21153; <acronym class="acronym">URL</acronym>&#65292;&#20294;&#26159;&#20320;&#27809;&#26377;&#25351;&#23450;&#21629;&#21517;&#31354;&#38388;&#12290;&#30001;&#20110;&#22810;&#20010;&#26381;&#21153;&#21487;&#33021;&#34987;&#36335;&#30001;&#21040;&#30456;&#21516;&#30340;&#26381;&#21153; <acronym class="acronym">URL</acronym>&#65292;&#21629;&#21517;&#31354;&#38388;&#26159;&#30830;&#23450;&#20320;&#25152;&#35843;&#29992;&#30340;&#26381;&#21153;&#21644;&#26041;&#27861;&#30340;&#37325;&#35201;&#20869;&#23481;&#12290;</dd><dt><a href="#soap.troubleshooting.1.2">circled_2_delcric</a> </dt><dd>&#26381;&#21153;&#22120;&#36820;&#22238;&#30340;&#26159;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#38169;&#35823; (Fault)&#65292;<span class="application">SOAPpy</span> &#25226;&#23427;&#36716;&#25442;&#20026; <span class="application">Python</span> &#24322;&#24120; <code class="classname">SOAPpy.Types.faultType</code>&#12290;&#20174;&#20219;&#20309; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#22120;&#36820;&#22238;&#30340;&#38169;&#35823;&#37117;&#26159; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#65292;&#22240;&#27492;&#20320;&#21487;&#20197;&#36731;&#26131;&#22320;&#25429;&#33719;&#36825;&#20010;&#24322;&#24120;&#12290;&#23601;&#27492;&#22788;&#32780;&#35328;&#65292;&#25105;&#20204;&#33021;&#20174; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#20449;&#24687;&#20013;&#30475;&#20986;&#31471;&#20522;&#65306;&#30001;&#20110;&#28304; <code class="classname">SOAPProxy</code> &#23545;&#35937;&#27809;&#26377;&#35774;&#32622;&#26381;&#21153;&#21629;&#21517;&#31354;&#38388;&#65292;&#22240;&#27492;&#26041;&#27861;&#20803;&#32032;&#20063;&#23601;&#27809;&#26377;&#20102;&#21629;&#21517;&#31354;&#38388;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#38169;&#35823;&#37197;&#32622; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#30340;&#22522;&#26412;&#20803;&#32032;&#26159; <acronym class="acronym">WSDL</acronym> &#30528;&#30524;&#35299;&#20915;&#30340;&#38382;&#39064;&#12290;<acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#21253;&#21547;&#26381;&#21153; <acronym class="acronym">URL</acronym> &#21644;&#21629;&#21517;&#31354;&#38388;&#65292;&#25152;&#20197;&#20320;&#24212;&#35813;&#19981;&#20250;&#22312;&#36825;&#37324;&#29359;&#38169;&#12290;&#20294;&#26159;&#65292;&#36824;&#26377;&#20854;&#20182;&#21487;&#33021;&#20986;&#38169;&#30340;&#22320;&#26041;&#12290;</p><div class="example"><a name="d0e31878"></a><p class="title"><b>&#20363;&nbsp;12.16.&nbsp;&#20197;&#38169;&#35823;&#21442;&#25968;&#35843;&#29992;&#26041;&#27861;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">wsdlFile = 'http://www.xmethods.net/sd/2001/TemperatureService.wsdl'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = WSDL.Proxy(wsdlFile)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">temperature = server.getTemp(27502)</span>                                <a name="soap.troubleshooting.2.1"></a>circled_1_delcric
<font color="red">&lt;Fault SOAP-ENV:Server: Exception while handling service request:
services.temperature.TempService.getTemp(int) -- no signature match&gt;   <a name="soap.troubleshooting.2.2"></a>circled_2_delcric
Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in ?
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 453, in __call__
    return self.__r_call(*args, **kw)
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 475, in __r_call
    self.__hd, self.__ma)
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 389, in __call
    raise p
SOAPpy.Types.faultType: &lt;Fault SOAP-ENV:Server: Exception while handling service request:
services.temperature.TempService.getTemp(int) -- no signature match&gt;</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.troubleshooting.2.1">circled_1_delcric</a> </dt><dd>&#20320;&#30475;&#20986;&#38169;&#35823;&#20102;&#21527;&#65311;&#36825;&#26159;&#19968;&#20010;&#19981;&#26131;&#23519;&#35273;&#30340;&#38169;&#35823;&#65306;&#20320;&#22312;&#20351;&#29992;&#25972;&#25968;&#32780;&#19981;&#26159;&#23383;&#31526;&#20018;&#26469;&#35843;&#29992; <code class="function">server.getTemp</code> &#12290;&#33258;&#30465; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#19981;&#38590;&#21457;&#29616;&#65292;<code class="function">getTemp()</code> &#36825;&#20010; <acronym class="acronym">SOAP</acronym> &#20989;&#25968;&#25509;&#21463;&#19968;&#20010;&#21442;&#25968; <code class="varname">zipcode</code>&#65292;&#36825;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#21442;&#25968;&#12290;<code class="classname">WSDL.Proxy</code> <span class="emphasis"><em>&#19981;</em></span> &#20250;&#20026;&#20320;&#24378;&#21046;&#36716;&#25442;&#25968;&#25454;&#31867;&#22411;&#65307;&#20320;&#38656;&#35201;&#26681;&#25454;&#26381;&#21153;&#22120;&#38656;&#35201;&#30340;&#25968;&#25454;&#31867;&#22411;&#20256;&#36882;&#25968;&#25454;&#12290;</dd><dt><a href="#soap.troubleshooting.2.2">circled_2_delcric</a> </dt><dd>&#21448;&#26159;&#36825;&#26679;&#65292;&#26381;&#21153;&#22120;&#20256;&#22238;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#65292;&#20320;&#33021;&#20174; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#20449;&#24687;&#20013;&#30475;&#20986;&#31471;&#20522;&#65306;&#20320;&#22312;&#20351;&#29992;&#25972;&#25968;&#31867;&#22411;&#30340;&#21442;&#25968;&#35843;&#29992; <code class="function">getTemp</code> &#20989;&#25968;&#65292;&#20294;&#21364;&#27809;&#26377;&#19968;&#20010;&#20197;&#27492;&#21629;&#21517;&#30340;&#20989;&#25968;&#25509;&#25910;&#25972;&#25968;&#21442;&#25968;&#12290;&#29702;&#35770;&#19978;&#35762;&#65292;<acronym class="acronym">SOAP</acronym> &#20801;&#35768;&#20320;&#37325;&#36733; (<span class="emphasis"><em>overload</em></span>) &#20989;&#25968;&#65292;&#20063;&#23601;&#26159;&#21487;&#20197;&#22312;&#21516;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#20013;&#23384;&#22312;&#21516;&#21517;&#20989;&#25968;&#65292;&#24182;&#19988;&#21442;&#25968;&#20010;&#25968;&#20063;&#30456;&#21516;&#65292;&#20294;&#26159;&#21442;&#25968;&#30340;&#25968;&#25454;&#31867;&#22411;&#19981;&#21516;&#12290;&#36825;&#23601;&#26159;&#25968;&#25454;&#31867;&#22411;&#24517;&#39035;&#21305;&#37197;&#30340;&#21407;&#22240;&#65292;&#20063;&#35828;&#26126;&#20102;&#20026;&#20160;&#20040; <code class="classname">WSDL.Proxy</code> &#19981;&#24378;&#21046;&#22320;&#20026;&#20320;&#25913;&#21464;&#25968;&#25454;&#31867;&#22411;&#12290;&#22914;&#26524;&#30495;&#30340;&#24378;&#21046;&#25913;&#21464;&#20102;&#25968;&#25454;&#31867;&#22411;&#65292;&#21457;&#29983;&#36825;&#26679;&#30340;&#38169;&#35823;&#26102;&#65292;&#35843;&#29992;&#30340;&#21487;&#33021;&#26159;&#21478;&#22806;&#19968;&#20010;&#19981;&#30456;&#24178;&#30340;&#20989;&#25968;&#12290;&#30475;&#26469;&#20135;&#29983;&#36825;&#26679;&#30340;&#38169;&#35823;&#26159;&#20214;&#24184;&#36816;&#30340;&#20107;&#12290;&#23545;&#20110;&#25968;&#25454;&#31867;&#22411;&#22810;&#21152;&#27880;&#24847;&#20250;&#35753;&#20107;&#24773;&#31616;&#21333;&#24456;&#22810;&#65292;&#19968;&#26086;&#25630;&#38169;&#20102;&#25968;&#25454;&#31867;&#22411;&#20415;&#31435;&#21051;&#20250;&#21457;&#29983;&#38169;&#35823;&#12290;</dd></dl></div></div></div><br class="example-break"><p><span class="application">Python</span> &#25152;&#26399;&#24453;&#30340;&#36820;&#22238;&#20540;&#20010;&#25968;&#19982;&#36828;&#31243;&#20989;&#25968;&#30340;&#23454;&#38469;&#36820;&#22238;&#20540;&#20010;&#25968;&#19981;&#21516;&#26159;&#21478;&#19968;&#31181;&#21487;&#33021;&#30340;&#38169;&#35823;&#12290;</p><div class="example"><a name="d0e31958"></a><p class="title"><b>&#20363;&nbsp;12.17.&nbsp;&#35843;&#29992;&#26102;&#26041;&#27861;&#25152;&#26399;&#24453;&#30340;&#36820;&#22238;&#20540;&#20010;&#25968;&#38169;&#35823;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">wsdlFile = 'http://www.xmethods.net/sd/2001/TemperatureService.wsdl'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = WSDL.Proxy(wsdlFile)</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">(city, temperature) = server.getTemp(27502)</span>  <a name="soap.troubleshooting.3.1"></a>circled_1_delcric
<font color="red">Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in ?
TypeError: unpack non-sequence</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.troubleshooting.3.1">circled_1_delcric</a> </dt><dd>&#20320;&#30475;&#20986;&#38169;&#35823;&#20102;&#21527;&#65311;<code class="function">server.getTemp</code> &#21482;&#36820;&#22238;&#19968;&#20010;&#28014;&#28857;&#20540;&#65292;&#20294;&#20320;&#20889;&#30340;&#20195;&#30721;&#21364;&#26399;&#24453;&#30528;&#33719;&#24471;&#20004;&#20010;&#20540;&#65292;&#24182;&#25226;&#23427;&#20204;&#36171;&#20540;&#32473;&#19981;&#21516;&#30340;&#20004;&#20010;&#21464;&#37327;&#12290;&#27880;&#24847;&#36825;&#19981;&#26159;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#12290;&#23601;&#36828;&#31243;&#26381;&#21153;&#22120;&#32780;&#35328;&#27809;&#26377;&#21457;&#29983;&#20219;&#20309;&#38169;&#35823;&#12290;&#38169;&#35823;&#21457;&#29983;&#22312;&#23436;&#25104; <acronym class="acronym">SOAP</acronym> &#20132;&#21106;<span class="emphasis"><em>&#20043;&#21518;</em></span>&#12290;<code class="classname">WSDL.Proxy</code> &#36820;&#22238;&#19968;&#20010;&#28014;&#28857;&#25968;&#65292;&#20320;&#26412;&#22320;&#30340; <span class="application">Python</span> &#35299;&#37322;&#22120;&#35797;&#22270;&#23558;&#36825;&#20010;&#28014;&#28857;&#25968;&#20998;&#25104;&#20004;&#20010;&#21464;&#37327;&#12290;&#30001;&#20110;&#20989;&#25968;&#21482;&#36820;&#22238;&#20102;&#19968;&#20010;&#20540;&#65292;&#20320;&#22312;&#35797;&#22270;&#20998;&#21106;&#23427;&#26102;&#25152;&#33719;&#24471;&#30340;&#26159;&#19968;&#20010; <span class="application">Python</span> &#24322;&#24120;&#65292;&#32780;&#19981;&#26159; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040; Google &#32593;&#32476;&#26381;&#21153;&#26041;&#38754;&#21448;&#22914;&#20309;&#21602;&#65311;&#25105;&#26366;&#32463;&#29359;&#36807;&#30340;&#26368;&#24120;&#35265;&#30340;&#38169;&#35823;&#26159;&#24536;&#35760;&#27491;&#30830;&#35774;&#32622;&#24212;&#29992;&#35768;&#21487;&#35777;&#12290;</p><div class="example"><a name="d0e32013"></a><p class="title"><b>&#20363;&nbsp;12.18.&nbsp;&#35843;&#29992;&#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#24212;&#29992;&#29305;&#23450;&#30340;&#38169;&#35823;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">from SOAPpy import WSDL</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">server = WSDL.Proxy(r'/path/to/local/GoogleSearch.wsdl')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">results = server.doGoogleSearch('foo', 'mark', 0, 10, False, "",</span> <a name="soap.troubleshooting.4.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">False, "", "utf-8", "utf-8")</span>
<font color="red">&lt;Fault SOAP-ENV:Server:                                              <a name="soap.troubleshooting.4.2"></a>circled_2_delcric
 Exception from service object: Invalid authorization key: foo:
 &lt;SOAPpy.Types.structType detail at 14164616&gt;:
 {'stackTrace':
  'com.google.soap.search.GoogleSearchFault: Invalid authorization key: foo
   at com.google.soap.search.QueryLimits.lookUpAndLoadFromINSIfNeedBe(
     QueryLimits.java:220)
   at com.google.soap.search.QueryLimits.validateKey(QueryLimits.java:127)
   at com.google.soap.search.GoogleSearchService.doPublicMethodChecks(
     GoogleSearchService.java:825)
   at com.google.soap.search.GoogleSearchService.doGoogleSearch(
     GoogleSearchService.java:121)
   at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.apache.soap.server.RPCRouter.invoke(RPCRouter.java:146)
   at org.apache.soap.providers.RPCJavaProvider.invoke(
     RPCJavaProvider.java:129)
   at org.apache.soap.server.http.RPCRouterServlet.doPost(
     RPCRouterServlet.java:288)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at com.google.gse.HttpConnection.runServlet(HttpConnection.java:237)
   at com.google.gse.HttpConnection.run(HttpConnection.java:195)
   at com.google.gse.DispatchQueue$WorkerThread.run(DispatchQueue.java:201)
Caused by: com.google.soap.search.UserKeyInvalidException: Key was of wrong size.
   at com.google.soap.search.UserKey.&lt;init&gt;(UserKey.java:59)
   at com.google.soap.search.QueryLimits.lookUpAndLoadFromINSIfNeedBe(
     QueryLimits.java:217)
   ... 14 more
'}&gt;
Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in ?
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 453, in __call__
    return self.__r_call(*args, **kw)
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 475, in __r_call
    self.__hd, self.__ma)
  File "c:\python23\Lib\site-packages\SOAPpy\Client.py", line 389, in __call
    raise p
SOAPpy.Types.faultType: &lt;Fault SOAP-ENV:Server: Exception from service object:
Invalid authorization key: foo:
&lt;SOAPpy.Types.structType detail at 14164616&gt;:
{'stackTrace':
  'com.google.soap.search.GoogleSearchFault: Invalid authorization key: foo
   at com.google.soap.search.QueryLimits.lookUpAndLoadFromINSIfNeedBe(
     QueryLimits.java:220)
   at com.google.soap.search.QueryLimits.validateKey(QueryLimits.java:127)
   at com.google.soap.search.GoogleSearchService.doPublicMethodChecks(
     GoogleSearchService.java:825)
   at com.google.soap.search.GoogleSearchService.doGoogleSearch(
     GoogleSearchService.java:121)
   at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
   at java.lang.reflect.Method.invoke(Unknown Source)
   at org.apache.soap.server.RPCRouter.invoke(RPCRouter.java:146)
   at org.apache.soap.providers.RPCJavaProvider.invoke(
     RPCJavaProvider.java:129)
   at org.apache.soap.server.http.RPCRouterServlet.doPost(
     RPCRouterServlet.java:288)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at com.google.gse.HttpConnection.runServlet(HttpConnection.java:237)
   at com.google.gse.HttpConnection.run(HttpConnection.java:195)
   at com.google.gse.DispatchQueue$WorkerThread.run(DispatchQueue.java:201)
Caused by: com.google.soap.search.UserKeyInvalidException: Key was of wrong size.
   at com.google.soap.search.UserKey.&lt;init&gt;(UserKey.java:59)
   at com.google.soap.search.QueryLimits.lookUpAndLoadFromINSIfNeedBe(
     QueryLimits.java:217)
   ... 14 more
'}&gt;</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soap.troubleshooting.4.1">circled_1_delcric</a> </dt><dd>&#20320;&#30475;&#20986;&#38169;&#35823;&#20102;&#21527;&#65311;&#35843;&#29992;&#30340;&#35821;&#27861;&#65292;&#21442;&#25968;&#20010;&#25968;&#20197;&#21450;&#25968;&#25454;&#31867;&#22411;&#37117;&#27809;&#26377;&#38169;&#35823;&#12290;&#36825;&#20010;&#38382;&#39064;&#26159;&#24212;&#29992;&#29305;&#23450;&#30340;&#65306;&#31532;&#19968;&#20010;&#21442;&#25968;&#24212;&#35813;&#26159;&#25105;&#30340;&#24212;&#29992;&#35768;&#21487;&#35777;&#65292;&#20294; <code class="literal">foo</code> &#19981;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340; Google &#35768;&#21487;&#35777;&#12290;</dd><dt><a href="#soap.troubleshooting.4.2">circled_2_delcric</a> </dt><dd>Google &#26381;&#21153;&#22120;&#36820;&#22238;&#30340;&#26159;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#21644;&#19968;&#22823;&#20018;&#29305;&#21035;&#38271;&#30340;&#38169;&#35823;&#20449;&#24687;&#65292;&#20854;&#20013;&#21253;&#21547;&#20102;&#23436;&#25972;&#30340; Java &#22534;&#26632;&#36319;&#36394;&#12290;&#35760;&#20303;<span class="emphasis"><em>&#25152;&#26377;</em></span> &#30340; <acronym class="acronym">SOAP</acronym> &#38169;&#35823;&#37117;&#34987;&#26631;&#31034;&#20026; <acronym class="acronym">SOAP</acronym> Faults: errors in configuration (&#35774;&#32622;&#38169;&#35823;), errors in function arguments (&#20989;&#25968;&#21442;&#25968;&#38169;&#35823;)&#65292;&#25110;&#32773;&#26159;&#24212;&#29992;&#29305;&#23450;&#30340;&#38169;&#35823; (&#36825;&#37324;&#23601;&#26159;) &#31561;&#31561;&#12290;&#22312;&#20854;&#20013;&#22475;&#34255;&#30340;&#33267;&#20851;&#37325;&#35201;&#20449;&#24687;&#26159;&#65306;<code class="literal">Invalid authorization key: foo</code> (&#38750;&#26377;&#25928;&#25480;&#26435;&#35768;&#21487;&#35777;&#65306;foo)&#12290;</dd></dl></div></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>New developments for <span class="application">SOAPpy</span> (<a href="http://www-106.ibm.com/developerworks/webservices/library/ws-pyth17.html">http://www-106.ibm.com/developerworks/webservices/library/ws-pyth17.html</a>) &#19968;&#27493;&#27493;&#36830;&#25509;&#21040;&#21478;&#19968;&#20010;&#19981;&#21517;&#21103;&#20854;&#23454;&#30340; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soap.summary"></a>12.9.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p><acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26159;&#24456;&#22797;&#26434;&#30340;&#65292;&#38596;&#24515;&#21187;&#21187;&#30340;&#23427;&#35797;&#22270;&#28085;&#30422;&#32593;&#32476;&#26381;&#21153;&#30340;&#24456;&#22810;&#19981;&#21516;&#24212;&#29992;&#12290;&#36825;&#19968;&#31456;&#25105;&#20204;&#25509;&#35302;&#20102;&#23427;&#30340;&#19968;&#20010;&#31616;&#21333;&#24212;&#29992;&#12290;</p></div><div class="highlights"><p>&#22312;&#24320;&#22987;&#19979;&#19968;&#31456;&#30340;&#23398;&#20064;&#20043;&#21069;&#65292;&#30830;&#20445;&#20320;&#33021;&#33258;&#22914;&#22320;&#20570;&#22914;&#19979;&#24037;&#20316;&#65306;</p><div class="itemizedlist"><ul><li>&#36830;&#25509;&#21040; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#22120;&#24182;&#35843;&#29992;&#36828;&#31243;&#26041;&#27861;</li><li>&#36890;&#36807; <acronym class="acronym">WSDL</acronym> &#25991;&#20214;&#33258;&#30465;&#36828;&#31243;&#26041;&#27861;</li><li>&#26377;&#25928;&#25490;&#38500; <acronym class="acronym">SOAP</acronym> &#35843;&#29992;&#20013;&#30340;&#38169;&#35823;</li><li>&#25490;&#38500;&#24120;&#35265;&#30340; <acronym class="acronym">SOAP</acronym> &#30456;&#20851;&#38169;&#35823;</li></ul></div></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="roman"></a>&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.intro"></a>13.1.&nbsp;&#32599;&#39532;&#25968;&#23383;&#31243;&#24207;&#20171;&#32461; II</h2></div></div></div><div class="abstract"><p>&#22312;&#21069;&#38754;&#30340;&#31456;&#33410;&#20013;&#65292;&#36890;&#36807;&#38405;&#35835;&#20195;&#30721;&#65292;&#20320;&#36805;&#36895;"<span class="quote">&#28145;&#20837;</span>"&#65292;&#20197;&#26368;&#24555;&#30340;&#36895;&#24230;&#29702;&#35299;&#20102;&#21508;&#20010;&#31243;&#24207;&#12290;&#26082;&#28982;&#20320;&#24050;&#23545; <span class="application">Python</span> &#26377;&#20102;&#19968;&#23450;&#30340;&#20102;&#35299;&#65292;&#37027;&#20040;&#25509;&#19979;&#26469;&#35753;&#25105;&#20204;&#30475;&#30475;&#31243;&#24207;&#24320;&#21457;<span class="emphasis"><em>&#20043;&#21069;</em></span> &#30340;&#24037;&#20316;&#12290;</p></div><p>&#22312;&#25509;&#19979;&#26469;&#30340;&#20960;&#31456;&#20013;&#65292;&#20320;&#23558;&#20250;&#32534;&#20889;&#12289;&#35843;&#35797;&#21644;&#20248;&#21270;&#19968;&#31995;&#21015;&#24037;&#20855;&#20989;&#25968;&#26469;&#36827;&#34892;&#32599;&#39532;&#25968;&#23383;&#21644;&#38463;&#25289;&#20271;&#25968;&#23383;&#20043;&#38388;&#30340;&#36716;&#25442;&#12290;&#20320;&#24050;&#20174;<a class="xref" href="#re.roman" title="7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;">&#31532;&nbsp;7.3&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;&#8221;</a>&#20013;&#33719;&#30693;&#26500;&#36896;&#21644;&#39564;&#35777;&#32599;&#39532;&#25968;&#23383;&#30340;&#26426;&#21046;&#65292;&#29616;&#22312;&#25105;&#20204;&#35201;&#20570;&#30340;&#20107;&#26159;&#36864;&#21518;&#19968;&#27493;&#21435;&#24605;&#32771;&#22914;&#20309;&#23558;&#36825;&#20123;&#26426;&#21046;&#25193;&#23637;&#21040;&#19968;&#20010;&#21452;&#21521;&#36716;&#25442;&#30340;&#24037;&#20855;&#12290;</p><p><a class="link" href="#re.roman" title="7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;">&#32599;&#39532;&#25968;&#23383;&#30340;&#35268;&#21017;</a>&#26377;&#22914;&#19979;&#19968;&#20123;&#26377;&#36259;&#30340;&#29305;&#28857;&#65306;</p><div class="orderedlist"><ol type="1"><li>&#19968;&#20010;&#29305;&#23450;&#25968;&#23383;&#20197;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#26102;&#21482;&#26377;&#21333;&#19968;&#26041;&#24335;&#12290;</li><li>&#21453;&#20043;&#20134;&#28982;&#65306;&#19968;&#20010;&#26377;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#30340;&#25968;&#20063;&#21482;&#23545;&#24212;&#19968;&#20010;&#38463;&#25289;&#20271;&#25968;&#23383;&#34920;&#31034;&#12290;(&#20063;&#23601;&#26159;&#35828;&#36716;&#25442;&#25104;&#38463;&#25289;&#20271;&#25968;&#23383;&#34920;&#31034;&#21482;&#26377;&#19968;&#31181;&#26041;&#27861;&#12290;)</li><li>&#25105;&#20204;&#30740;&#31350;&#30340;&#26159; <code class="literal">1</code> &#21644; <code class="literal">3999</code> &#20043;&#38388;&#30340;&#25968;&#23383;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#12290;(&#32599;&#39532;&#25968;&#23383;&#26377;&#24456;&#22810;&#26041;&#27861;&#29992;&#20197;&#35760;&#24405;&#26356;&#22823;&#30340;&#25968;&#65292;&#20363;&#22914;&#22312;&#25968;&#23383;&#19978;&#21152;&#32447;&#34920;&#31034;<code class="literal">1000</code>&#20493;&#30340;&#25968;&#65292;&#20294;&#20320;&#19981;&#24517;&#21435;&#29702;&#20250;&#36825;&#20123;&#12290;&#23601;&#26412;&#31456;&#32780;&#35328;&#65292;&#25105;&#20204;&#22993;&#19988;&#25226;&#32599;&#39532;&#25968;&#23383;&#38480;&#23450;&#22312; <code class="literal">1</code> &#21040; <code class="literal">3999</code> &#20043;&#38388;)&#12290;</li><li>&#32599;&#39532;&#25968;&#23383;&#26080;&#27861;&#34920;&#31034; <code class="constant">0</code>&#12290;(&#20196;&#20154;&#35815;&#24322;&#65292;&#21476;&#32599;&#39532;&#31455;&#28982;&#27809;&#26377; <code class="constant">0</code> &#36825;&#20010;&#25968;&#23383;&#30340;&#27010;&#24565;&#12290;&#25968;&#23383;&#26159;&#20026;&#25968;&#25968;&#26381;&#21153;&#30340;&#65292;&#27809;&#26377;&#24590;&#20040;&#25968;&#21602;&#65311;)</li><li>&#32599;&#39532;&#25968;&#23383;&#19981;&#33021;&#34920;&#31034;&#36127;&#25968;&#12290;</li><li>&#32599;&#39532;&#25968;&#23383;&#26080;&#27861;&#34920;&#31034;&#20998;&#25968;&#21644;&#38750;&#25972;&#25968;&#12290;</li></ol></div><p>&#22522;&#20110;&#22914;&#19978;&#25152;&#36848;&#65292;&#20320;&#23558;&#22914;&#20309;&#26500;&#36896;&#32599;&#39532;&#25968;&#23383;&#36716;&#25442;&#20989;&#25968;&#21602;&#65311;</p><div class="orderedlist"><a name="roman.requirements"></a><p class="title"><b><code class="filename">roman.py</code> &#21151;&#33021;&#38656;&#27714;</b></p><ol type="1"><li><code class="function">toRoman</code> &#24212;&#35813;&#33021;&#36820;&#22238; <code class="constant">1</code> &#21040; <code class="literal">3999</code> &#20013;&#20219;&#24847;&#25968;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#12290;</li><li><code class="function">toRoman</code> &#22312;&#36935;&#21040; <code class="constant">1</code> &#21040; <code class="literal">3999</code> &#20043;&#22806;&#30340;&#25968;&#23383;&#26102;&#24212;&#35813;&#22833;&#36133;&#12290;</li><li><code class="function">toRoman</code> &#22312;&#36935;&#21040;&#38750;&#25972;&#25968;&#26102;&#24212;&#35813;&#22833;&#36133;&#12290;</li><li><code class="function">fromRoman</code> &#24212;&#35813;&#33021;&#23558;&#32473;&#23450;&#30340;&#26377;&#25928;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#36716;&#25442;&#20026;&#38463;&#25289;&#20271;&#25968;&#23383;&#34920;&#31034;&#12290;</li><li><code class="function">fromRoman</code> &#22312;&#36935;&#21040;&#26080;&#25928;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#26102;&#24212;&#35813;&#22833;&#36133;&#12290;</li><li>&#23558;&#19968;&#20010;&#25968;&#36716;&#25442;&#20026;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#65292;&#20877;&#36716;&#25442;&#22238;&#38463;&#25289;&#20271;&#25968;&#23383;&#34920;&#31034;&#21518;&#24212;&#35813;&#21644;&#26368;&#21021;&#30340;&#25968;&#30456;&#21516;&#12290;&#22240;&#27492;&#65292;<code class="literal">fromRoman(toRoman(n)) == n </code>&#23545;&#20110; <code class="literal">1..3999</code> &#20043;&#38388;&#25152;&#26377; <code class="varname">n</code> &#37117;&#36866;&#29992;&#12290;</li><li><code class="function">toRoman</code> &#36820;&#22238;&#30340;&#32599;&#39532;&#25968;&#23383;&#24212;&#35813;&#20351;&#29992;&#22823;&#20889;&#23383;&#27597;&#12290;</li><li><code class="function">fromRoman</code> &#24212;&#35813;&#21482;&#25509;&#21463;&#22823;&#20889;&#32599;&#39532;&#25968;&#23383; (&#20063;&#23601;&#26159;&#35828;&#32473;&#23450;&#23567;&#20889;&#23383;&#27597;&#36827;&#34892;&#36716;&#25442;&#26102;&#24212;&#35813;&#22833;&#36133;)&#12290;</li></ol></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>&#36825;&#20010;&#31449;&#28857; (<a href="http://www.wilkiecollins.demon.co.uk/roman/front.htm">http://www.wilkiecollins.demon.co.uk/roman/front.htm</a>) &#26377;&#20851;&#20110;&#32599;&#39532;&#25968;&#23383;&#26356;&#22810;&#30340;&#20869;&#23481;&#65292;&#21253;&#25324;&#32599;&#39532;&#20154;&#22914;&#20309;&#20351;&#29992;&#32599;&#39532;&#25968;&#23383;&#30340;&#36855;&#20154; &#21382;&#21490; (<a href="http://www.wilkiecollins.demon.co.uk/roman/intro.htm">http://www.wilkiecollins.demon.co.uk/roman/intro.htm</a>) (&#31616;&#35328;&#20043;&#65306;&#20805;&#28385;&#20598;&#28982;&#24615;&#21644;&#21453;&#22797;&#26080;&#24120;)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.divein"></a>13.2.&nbsp;&#28145;&#20837;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312;&#20320;&#24050;&#32463;&#23450;&#20041;&#20102;&#20320;&#30340;&#36716;&#25442;&#31243;&#24207;&#25152;&#24212;&#26377;&#30340;&#21151;&#33021;&#65292;&#19979;&#38754;&#19968;&#27493;&#20250;&#26377;&#28857;&#20799;&#20986;&#20046;&#20320;&#30340;&#24847;&#26009;&#65306;&#20320;&#23558;&#35201;&#24320;&#21457;&#19968;&#20010;&#27979;&#35797;&#32452;&#20214; (test suite) &#26469;&#27979;&#35797;&#20320;&#26410;&#26469;&#30340;&#20989;&#25968;&#20197;&#30830;&#20445;&#23427;&#20204;&#24037;&#20316;&#27491;&#24120;&#12290;&#27809;&#38169;&#65306;&#20320;&#23558;&#20026;&#36824;&#26410;&#24320;&#21457;&#30340;&#31243;&#24207;&#24320;&#21457;&#27979;&#35797;&#20195;&#30721;&#12290;</p></div><p>&#36825;&#23601;&#26159;&#25152;&#35859;&#30340;&#21333;&#20803;&#27979;&#35797;&#65292;&#22240;&#20026;&#36825;&#20004;&#20010;&#36716;&#25442;&#20989;&#25968;&#21487;&#20197;&#34987;&#24403;&#20316;&#19968;&#20010;&#21333;&#20803;&#26469;&#24320;&#21457;&#21644;&#27979;&#35797;&#65292;&#19981;&#29992;&#32771;&#34385;&#23427;&#20204;&#21487;&#33021;&#20170;&#21518;&#25104;&#20026;&#19968;&#20010;&#22823;&#31243;&#24207;&#30340;&#19968;&#37096;&#20998;&#12290;<span class="application">Python</span> &#26377;&#19968;&#20010;&#21333;&#20803;&#27979;&#35797;&#26694;&#26550;&#65292;&#34987;&#24688;&#22914;&#20854;&#20998;&#22320;&#31216;&#20316; <code class="filename">unittest</code> &#27169;&#22359;&#12290;</p><div class="note"><blockquote><b class="title"><a name="note.unittest">&#27880;&#24847;: &#20320;&#26377; <code class="filename">unittest</code> &#21527;&#65311;</a></b><br><span class="application">Python</span> 2.1 &#21644;&#20043;&#21518;&#30340;&#29256;&#26412;&#24050;&#32463;&#21253;&#21547;&#20102; <code class="filename">unittest</code>&#12290;<span class="application">Python</span> 2.0 &#29992;&#25143;&#21017;&#21487;&#20197;&#20174; <code class="systemitem">pyunit.sourceforge.net</code> (<a href="http://pyunit.sourceforge.net/">http://pyunit.sourceforge.net/</a>)&#19979;&#36733;&#12290;</blockquote></div><p>&#21333;&#20803;&#27979;&#35797;&#26159;&#20197;&#27979;&#35797;&#20026;&#26680;&#24515;&#24320;&#21457;&#31574;&#30053;&#30340;&#37325;&#35201;&#32452;&#25104;&#37096;&#20998;&#12290;&#22914;&#26524;&#20320;&#35201;&#20889;&#21333;&#20803;&#27979;&#35797;&#20195;&#30721;&#65292;&#23613;&#26089; (&#26368;&#22909;&#26159;&#22312;&#34987;&#27979;&#35797;&#20195;&#30721;&#24320;&#21457;&#20043;&#21069;) &#24320;&#21457;&#24182;&#26681;&#25454;&#20195;&#30721;&#24320;&#21457;&#21644;&#38656;&#27714;&#30340;&#21464;&#21270;&#19981;&#26029;&#26356;&#26032;&#26159;&#24456;&#37325;&#35201;&#30340;&#12290;&#21333;&#20803;&#27979;&#35797;&#19981;&#33021;&#21462;&#20195;&#26356;&#39640;&#23618;&#38754;&#30340;&#21151;&#33021;&#21644;&#31995;&#32479;&#27979;&#35797;&#65292;&#20294;&#22312;&#24320;&#21457;&#30340;&#27599;&#20010;&#38454;&#27573;&#37117;&#24456;&#37325;&#35201;&#65306;</p><div class="itemizedlist"><ul><li>&#20195;&#30721;&#24320;&#21457;&#20043;&#21069;&#65292;&#24378;&#36843;&#20320;&#20197;&#26377;&#25928;&#30340;&#26041;&#24335;&#32771;&#34385;&#38656;&#27714;&#30340;&#32454;&#33410;&#12290;</li><li>&#20195;&#30721;&#24320;&#21457;&#20013;&#65292;&#38450;&#27490;&#36807;&#24230;&#24320;&#21457;&#12290;&#36890;&#36807;&#20102;&#25152;&#26377;&#27979;&#35797;&#29992;&#20363;&#65292;&#31243;&#24207;&#30340;&#24320;&#21457;&#23601;&#23436;&#25104;&#20102;&#12290;</li><li>&#37325;&#26500;&#20195;&#30721;&#26102;&#65292;&#30830;&#20445;&#26032;&#29256;&#21644;&#26087;&#29256;&#21151;&#33021;&#19968;&#33268;&#12290;</li><li>&#32500;&#25252;&#20195;&#30721;&#26102;&#65292;&#24403;&#20320;&#30340;&#20195;&#30721;&#26356;&#25913;&#23548;&#33268;&#21035;&#20154;&#20195;&#30721;&#20986;&#38382;&#39064;&#26102;&#24110;&#20320;&#30041;&#20303;&#38754;&#23376;&#12290;("<span class="quote">&#20294;&#26159;<span class="emphasis"><em>&#20808;&#29983;</em></span>&#65292;&#25105;&#26816;&#20837; (check in) &#20195;&#30721;&#26102;&#25152;&#26377;&#30340;&#21333;&#20803;&#27979;&#35797;&#37117;&#36890;&#36807;&#20102;&#8230;&#8230;</span>")</li><li>&#22312;&#22242;&#38431;&#24320;&#21457;&#26102;&#65292;&#21487;&#20197;&#20351;&#20320;&#26377;&#20449;&#24515;&#65292;&#20445;&#35777;&#33258;&#24049;&#25552;&#20132;&#30340;&#20195;&#30721;&#19981;&#20250;&#30772;&#22351;&#20854;&#20182;&#20154;&#30340;&#20195;&#30721;&#65292;&#22240;&#20026;&#20320;&#21487;&#20197; &#20808;&#36816;&#34892;&#20854;&#20182;&#20154;&#30340;&#21333;&#20803;&#27979;&#35797;&#20195;&#30721;&#12290;(&#25105;&#22312;&#8220;&#20195;&#30721;&#39118;&#26292;&#8221;&#20013;&#35265;&#36807;&#36825;&#31181;&#20107;&#24773;&#12290;&#19968;&#20010;&#22242;&#38431;&#23558;&#20219;&#21153;&#25286;&#20998;&#65292;&#27599;&#20010;&#20154;&#37117;&#26681;&#25454;&#33258;&#24049;&#37027;&#37096;&#20998;&#30340;&#38656;&#27714;&#24320;&#21457;&#21333;&#20803;&#27979;&#35797;&#65292;&#28982;&#21518;&#19982;&#20854;&#20182;&#25104;&#21592;&#20849;&#20139;&#12290;&#27809;&#26377;&#20154;&#20250;&#20986;&#22826;&#22823;&#30340;&#20559;&#24046;&#32780;&#23548;&#33268;&#20195;&#30721;&#26080;&#27861;&#38598;&#25104;&#12290;) </li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.romantest"></a>13.3.&nbsp;<code class="filename">romantest.py</code> &#20171;&#32461;</h2></div></div></div><div class="abstract"><p>&#36825;&#26159;&#23558;&#34987;&#24320;&#21457;&#24182;&#20445;&#23384;&#20026; <code class="filename">roman.py</code> &#30340;&#32599;&#39532;&#25968;&#23383;&#36716;&#25442;&#31243;&#24207;&#30340;&#23436;&#25972;&#27979;&#35797;&#32452;&#20214; (test suite)&#12290;&#24456;&#38590;&#31435;&#21051;&#30475;&#20986;&#23427;&#20204;&#26159;&#22914;&#20309;&#21327;&#21516;&#24037;&#20316;&#30340;&#65292;&#20284;&#20046;&#25152;&#26377;&#31867;&#25110;&#32773;&#26041;&#27861;&#20043;&#38388;&#37117;&#27809;&#26377;&#20851;&#31995;&#12290;&#36825;&#26159;&#26377;&#21407;&#22240;&#30340;&#65292;&#32780;&#19988;&#20320;&#24456;&#24555;&#23601;&#20250;&#26126;&#20102;&#12290;</p></div><div class="example"><a name="d0e32342"></a><p class="title"><b>&#20363;&nbsp;13.1.&nbsp;<code class="filename">romantest.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Unit test for roman.py"""

import roman
import unittest

class KnownValues(unittest.TestCase):                          
    knownValues = ( (1, 'I'),
                    (2, 'II'),
                    (3, 'III'),
                    (4, 'IV'),
                    (5, 'V'),
                    (6, 'VI'),
                    (7, 'VII'),
                    (8, 'VIII'),
                    (9, 'IX'),
                    (10, 'X'),
                    (50, 'L'),
                    (100, 'C'),
                    (500, 'D'),
                    (1000, 'M'),
                    (31, 'XXXI'),
                    (148, 'CXLVIII'),
                    (294, 'CCXCIV'),
                    (312, 'CCCXII'),
                    (421, 'CDXXI'),
                    (528, 'DXXVIII'),
                    (621, 'DCXXI'),
                    (782, 'DCCLXXXII'),
                    (870, 'DCCCLXX'),
                    (941, 'CMXLI'),
                    (1043, 'MXLIII'),
                    (1110, 'MCX'),
                    (1226, 'MCCXXVI'),
                    (1301, 'MCCCI'),
                    (1485, 'MCDLXXXV'),
                    (1509, 'MDIX'),
                    (1607, 'MDCVII'),
                    (1754, 'MDCCLIV'),
                    (1832, 'MDCCCXXXII'),
                    (1993, 'MCMXCIII'),
                    (2074, 'MMLXXIV'),
                    (2152, 'MMCLII'),
                    (2212, 'MMCCXII'),
                    (2343, 'MMCCCXLIII'),
                    (2499, 'MMCDXCIX'),
                    (2574, 'MMDLXXIV'),
                    (2646, 'MMDCXLVI'),
                    (2723, 'MMDCCXXIII'),
                    (2892, 'MMDCCCXCII'),
                    (2975, 'MMCMLXXV'),
                    (3051, 'MMMLI'),
                    (3185, 'MMMCLXXXV'),
                    (3250, 'MMMCCL'),
                    (3313, 'MMMCCCXIII'),
                    (3408, 'MMMCDVIII'),
                    (3501, 'MMMDI'),
                    (3610, 'MMMDCX'),
                    (3743, 'MMMDCCXLIII'),
                    (3844, 'MMMDCCCXLIV'),
                    (3888, 'MMMDCCCLXXXVIII'),
                    (3940, 'MMMCMXL'),
                    (3999, 'MMMCMXCIX'))                       

    def testToRomanKnownValues(self):                          
        """toRoman should give known result with known input"""
        for integer, numeral in self.knownValues:              
            result = roman.toRoman(integer)                    
            self.assertEqual(numeral, result)                  

    def testFromRomanKnownValues(self):                          
        """fromRoman should give known result with known input"""
        for integer, numeral in self.knownValues:                
            result = roman.fromRoman(numeral)                    
            self.assertEqual(integer, result)                    

class ToRomanBadInput(unittest.TestCase):                            
    def testTooLarge(self):                                          
        """toRoman should fail with large input"""                   
        self.assertRaises(roman.OutOfRangeError, roman.toRoman, 4000)

    def testZero(self):                                              
        """toRoman should fail with 0 input"""                       
        self.assertRaises(roman.OutOfRangeError, roman.toRoman, 0)   

    def testNegative(self):                                          
        """toRoman should fail with negative input"""                
        self.assertRaises(roman.OutOfRangeError, roman.toRoman, -1)  

    def testNonInteger(self):                                        
        """toRoman should fail with non-integer input"""             
        self.assertRaises(roman.NotIntegerError, roman.toRoman, 0.5) 

class FromRomanBadInput(unittest.TestCase):                                      
    def testTooManyRepeatedNumerals(self):                                       
        """fromRoman should fail with too many repeated numerals"""              
        for s in ('MMMM', 'DD', 'CCCC', 'LL', 'XXXX', 'VV', 'IIII'):             
            self.assertRaises(roman.InvalidRomanNumeralError, roman.fromRoman, s)

    def testRepeatedPairs(self):                                                 
        """fromRoman should fail with repeated pairs of numerals"""              
        for s in ('CMCM', 'CDCD', 'XCXC', 'XLXL', 'IXIX', 'IVIV'):               
            self.assertRaises(roman.InvalidRomanNumeralError, roman.fromRoman, s)

    def testMalformedAntecedent(self):                                           
        """fromRoman should fail with malformed antecedents"""                   
        for s in ('IIMXCC', 'VX', 'DCM', 'CMM', 'IXIV',
                  'MCMC', 'XCX', 'IVI', 'LM', 'LD', 'LC'):                       
            self.assertRaises(roman.InvalidRomanNumeralError, roman.fromRoman, s)

class SanityCheck(unittest.TestCase):        
    def testSanity(self):                    
        """fromRoman(toRoman(n))==n for all n"""
        for integer in range(1, 4000):       
            numeral = roman.toRoman(integer) 
            result = roman.fromRoman(numeral)
            self.assertEqual(integer, result)

class CaseCheck(unittest.TestCase):                   
    def testToRomanCase(self):                        
        """toRoman should always return uppercase"""  
        for integer in range(1, 4000):                
            numeral = roman.toRoman(integer)          
            self.assertEqual(numeral, numeral.upper())

    def testFromRomanCase(self):                      
        """fromRoman should only accept uppercase input"""
        for integer in range(1, 4000):                
            numeral = roman.toRoman(integer)          
            roman.fromRoman(numeral.upper())          
            self.assertRaises(roman.InvalidRomanNumeralError,
                              roman.fromRoman, numeral.lower())

if __name__ == "__main__":
    unittest.main()   </pre></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li> <span class="application">PyUnit</span> &#20027;&#39029; (<a href="http://pyunit.sourceforge.net/">http://pyunit.sourceforge.net/</a>) &#23545;&#20110;&#20351;&#29992; <code class="filename">unittest</code> &#26694;&#26550; (<a href="http://pyunit.sourceforge.net/pyunit.html">http://pyunit.sourceforge.net/pyunit.html</a>) &#20197;&#21450;&#26412;&#31456;&#27809;&#33021;&#28085;&#30422;&#30340;&#39640;&#32423;&#29305;&#24615;&#26377;&#28145;&#20837;&#30340;&#35752;&#35770;&#12290;</li><li> <span class="application">PyUnit</span> <acronym class="acronym">FAQ</acronym> (<a href="http://pyunit.sourceforge.net/pyunit.html">http://pyunit.sourceforge.net/pyunit.html</a>) &#35299;&#37322;&#20102; &#20026;&#20160;&#20040;&#27979;&#35797;&#29992;&#20363;&#35201;&#21644;&#34987;&#27979;&#35797;&#20195;&#30721;&#20998;&#24320;&#23384;&#25918; (<a href="http://pyunit.sourceforge.net/pyunit.html#WHERE">http://pyunit.sourceforge.net/pyunit.html#WHERE</a>) &#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102; <code class="filename">unittest</code> (<a href="http://www.python.org/doc/current/lib/module-unittest.html">http://www.python.org/doc/current/lib/module-unittest.html</a>) &#27169;&#22359;&#12290;</li><li>ExtremeProgramming.org (<a href="http://www.extremeprogramming.org/">http://www.extremeprogramming.org/</a>) &#35752;&#35770; &#20320;&#20026;&#20160;&#20040;&#38656;&#35201;&#32534;&#20889;&#21333;&#20803;&#27979;&#35797; (<a href="http://www.extremeprogramming.org/rules/unittests.html">http://www.extremeprogramming.org/rules/unittests.html</a>)&#12290;</li><li>The Portland Pattern Repository (<a href="http://www.c2.com/cgi/wiki">http://www.c2.com/cgi/wiki</a>) &#26377;&#19968;&#20010;&#25345;&#32493;&#30340; &#21333;&#20803;&#27979;&#35797; (<a href="http://www.c2.com/cgi/wiki?UnitTests">http://www.c2.com/cgi/wiki?UnitTests</a>) &#35752;&#35770;&#65292;&#21253;&#25324;&#20102;&#19968;&#20010; &#26631;&#20934;&#30340;&#23450;&#20041; (<a href="http://www.c2.com/cgi/wiki?StandardDefinitionOfUnitTest">http://www.c2.com/cgi/wiki?StandardDefinitionOfUnitTest</a>)&#65292;&#20026;&#20160;&#20040;&#20320;&#38656;&#35201; &#39318;&#20808;&#24320;&#21457;&#21333;&#20803;&#27979;&#35797;&#20195;&#30721; (<a href="http://www.c2.com/cgi/wiki?CodeUnitTestFirst">http://www.c2.com/cgi/wiki?CodeUnitTestFirst</a>) &#20197;&#21450;&#21478;&#22806;&#19968;&#20123;&#28145;&#23618;&#27425; &#26696;&#20363; (<a href="http://www.c2.com/cgi/wiki?UnitTestTrial">http://www.c2.com/cgi/wiki?UnitTestTrial</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.success"></a>13.4.&nbsp;&#27491;&#38754;&#27979;&#35797; (Testing for success)</h2></div></div></div><div class="abstract"><p>&#21333;&#20803;&#27979;&#35797;&#30340;&#22522;&#30784;&#26159;&#26500;&#24314;&#29420;&#31435;&#30340;&#27979;&#35797;&#29992;&#20363; (test case)&#12290;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#21482;&#22238;&#31572;&#19968;&#20010;&#20851;&#20110;&#34987;&#27979;&#35797;&#20195;&#30721;&#30340;&#38382;&#39064;&#12290;</p></div><p>&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#24212;&#35813;&#20570;&#21040;&#65306;</p><div class="itemizedlist"><ul><li>&#23436;&#20840;&#29420;&#31435;&#36816;&#34892;&#65292;&#19981;&#38656;&#35201;&#20154;&#24037;&#36755;&#20837;&#12290;&#21333;&#20803;&#27979;&#35797;&#24212;&#35813;&#26159;&#33258;&#21160;&#30340;&#12290;</li><li>&#21487;&#20197;&#33258;&#24049;&#21028;&#26029;&#34987;&#27979;&#35797;&#20989;&#25968;&#26159;&#36890;&#36807;&#36824;&#26159;&#22833;&#36133;&#65292;&#19981;&#38656;&#35201;&#20154;&#24037;&#24178;&#39044;&#32467;&#26524;&#12290;</li><li>&#29420;&#31435;&#36816;&#34892;&#65292;&#21487;&#20197;&#19982;&#20854;&#20182;&#27979;&#35797;&#29992;&#20363;&#38548;&#31163; (&#23613;&#31649;&#23427;&#20204;&#21487;&#33021;&#27979;&#35797;&#30528;&#21516;&#19968;&#20010;&#20989;&#25968;)&#12290;&#27599;&#20010;&#27979;&#35797;&#29992;&#20363;&#26159;&#19968;&#20010;&#23396;&#23707;&#12290;</li></ul></div><p>&#22522;&#20110;&#22914;&#19978;&#21407;&#21017;&#65292;&#35753;&#25105;&#20204;&#26500;&#24314;&#31532;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#12290;&#24212;&#31526;&#21512;&#22914;&#19979;<a class="link" href="#roman.requirements" title="roman.py &#21151;&#33021;&#38656;&#27714;">&#35201;&#27714;</a>&#65306;</p><div class="orderedlist"><ol type="1"><li><code class="function">toRoman</code> &#24212;&#35813;&#20026;&#25152;&#26377; <code class="constant">1</code> &#21040; <code class="literal">3999</code> &#30340;&#25972;&#25968;&#36820;&#22238;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#12290;</li></ol></div><div class="example"><a name="roman.testtoromanknownvalues.example"></a><p class="title"><b>&#20363;&nbsp;13.2.&nbsp;<code class="function">testToRomanKnownValues</code></b></p><div class="example-contents"><pre class="programlisting">
class KnownValues(unittest.TestCase):                           <a name="roman.success.1.0"></a>circled_1_delcric
    knownValues = ( (1, 'I'),
                    (2, 'II'),
                    (3, 'III'),
                    (4, 'IV'),
                    (5, 'V'),
                    (6, 'VI'),
                    (7, 'VII'),
                    (8, 'VIII'),
                    (9, 'IX'),
                    (10, 'X'),
                    (50, 'L'),
                    (100, 'C'),
                    (500, 'D'),
                    (1000, 'M'),
                    (31, 'XXXI'),
                    (148, 'CXLVIII'),
                    (294, 'CCXCIV'),
                    (312, 'CCCXII'),
                    (421, 'CDXXI'),
                    (528, 'DXXVIII'),
                    (621, 'DCXXI'),
                    (782, 'DCCLXXXII'),
                    (870, 'DCCCLXX'),
                    (941, 'CMXLI'),
                    (1043, 'MXLIII'),
                    (1110, 'MCX'),
                    (1226, 'MCCXXVI'),
                    (1301, 'MCCCI'),
                    (1485, 'MCDLXXXV'),
                    (1509, 'MDIX'),
                    (1607, 'MDCVII'),
                    (1754, 'MDCCLIV'),
                    (1832, 'MDCCCXXXII'),
                    (1993, 'MCMXCIII'),
                    (2074, 'MMLXXIV'),
                    (2152, 'MMCLII'),
                    (2212, 'MMCCXII'),
                    (2343, 'MMCCCXLIII'),
                    (2499, 'MMCDXCIX'),
                    (2574, 'MMDLXXIV'),
                    (2646, 'MMDCXLVI'),
                    (2723, 'MMDCCXXIII'),
                    (2892, 'MMDCCCXCII'),
                    (2975, 'MMCMLXXV'),
                    (3051, 'MMMLI'),
                    (3185, 'MMMCLXXXV'),
                    (3250, 'MMMCCL'),
                    (3313, 'MMMCCCXIII'),
                    (3408, 'MMMCDVIII'),
                    (3501, 'MMMDI'),
                    (3610, 'MMMDCX'),
                    (3743, 'MMMDCCXLIII'),
                    (3844, 'MMMDCCCXLIV'),
                    (3888, 'MMMDCCCLXXXVIII'),
                    (3940, 'MMMCMXL'),
                    (3999, 'MMMCMXCIX'))                        <a name="roman.success.1.1"></a>circled_2_delcric

    def testToRomanKnownValues(self):                           <a name="roman.success.1.2"></a>circled_3_delcric
        """toRoman should give known result with known input"""
        for integer, numeral in self.knownValues:              
            result = roman.toRoman(integer)                     <a name="roman.success.1.3"></a>circled_4_delcric <a name="roman.success.1.4"></a>circled_5_delcric
            self.assertEqual(numeral, result)                   <a name="roman.success.1.5"></a>circled_6_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.success.1.0">circled_1_delcric</a> </dt><dd>&#32534;&#20889;&#27979;&#35797;&#29992;&#20363;&#30340;&#31532;&#19968;&#27493;&#23601;&#26159;&#32487;&#25215; <code class="filename">unittest</code> &#27169;&#22359;&#20013;&#30340; <code class="classname">TestCase</code> &#31867;&#65292;&#23427;&#25552;&#20379;&#20102;&#24456;&#22810;&#21487;&#20197;&#29992;&#22312;&#20320;&#30340;&#27979;&#35797;&#29992;&#20363;&#20013;&#26469;&#27979;&#35797;&#29305;&#23450;&#24773;&#20917;&#30340;&#26377;&#29992;&#26041;&#27861;&#12290;</dd><dt><a href="#roman.success.1.1">circled_2_delcric</a> </dt><dd>&#36825;&#26159;&#25105;&#25163;&#24037;&#36716;&#25442;&#30340;&#19968;&#20010; integer/numeral &#23545;&#21015;&#34920;&#12290;&#23427;&#21253;&#21547;&#20102;&#26368;&#23567;&#30340;&#21313;&#20010;&#25968;&#12289;&#26368;&#22823;&#30340;&#25968;&#12289;&#27599;&#20010;&#21333;&#23383;&#31526;&#32599;&#39532;&#25968;&#23383;&#23545;&#24212;&#30340;&#25968;&#65292;&#20197;&#21450;&#20854;&#20182;&#38543;&#26426;&#25361;&#36873;&#30340;&#26377;&#25928;&#25968;&#26679;&#26412;&#12290;&#21333;&#20803;&#27979;&#35797;&#30340;&#20851;&#38190;&#19981;&#22312;&#20110;&#25152;&#26377;&#21487;&#33021;&#30340;&#36755;&#20837;&#65292;&#32780;&#26159;&#19968;&#20010;&#26377;&#20195;&#34920;&#24615;&#30340;&#26679;&#26412;&#12290;</dd><dt><a href="#roman.success.1.2">circled_3_delcric</a> </dt><dd>&#27599;&#20010;&#29420;&#31435;&#27979;&#35797;&#26412;&#36523;&#37117;&#26159;&#19968;&#20010;&#26041;&#27861;&#65292;&#26082;&#19981;&#38656;&#35201;&#21442;&#25968;&#20063;&#19981;&#36820;&#22238;&#20219;&#20309;&#20540;&#12290;&#22914;&#26524;&#35813;&#26041;&#27861;&#27491;&#24120;&#36864;&#20986;&#27809;&#26377;&#24341;&#21457;&#24322;&#24120;&#65292;&#27979;&#35797;&#34987;&#35748;&#20026;&#36890;&#36807;&#65307;&#22914;&#26524;&#27979;&#35797;&#24341;&#21457;&#24322;&#24120;&#65292;&#27979;&#35797;&#34987;&#35748;&#20026;&#22833;&#36133;&#12290;</dd><dt><a href="#roman.success.1.3">circled_4_delcric</a> </dt><dd>&#36825;&#37324;&#20320;&#30495;&#27491;&#35843;&#29992;&#20102; <code class="function">toRoman</code> &#20989;&#25968;&#12290;(&#24403;&#28982;&#65292;&#20989;&#25968;&#36824;&#27809;&#26377;&#32534;&#20889;&#65292;&#20294;&#19968;&#26086;&#34987;&#32534;&#20889;&#65292;&#36825;&#37324;&#20415;&#26159;&#35843;&#29992;&#20043;&#22788;&#12290;) &#27880;&#24847;&#20320;&#22312;&#36825;&#37324;&#20026; <code class="function">toRoman</code> &#20989;&#25968;&#23450;&#20041;&#20102; <acronym class="acronym">API</acronym> &#65306;&#23427;&#24517;&#39035;&#25509;&#21463;&#25972;&#25968; (&#24453;&#36716;&#25442;&#30340;&#25968;) &#24182;&#36820;&#22238;&#19968;&#20010;&#23383;&#31526;&#20018; (&#23545;&#24212;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;)&#65292;&#22914;&#26524; <acronym class="acronym">API</acronym> &#19981;&#26159;&#36825;&#26679;&#65292;&#27979;&#35797;&#23558;&#22833;&#36133;&#12290;</dd><dt><a href="#roman.success.1.4">circled_5_delcric</a> </dt><dd>&#21516;&#26679;&#20540;&#24471;&#27880;&#24847;&#65292;&#20320;&#22312;&#35843;&#29992; <code class="function">toRoman</code> &#26102;&#27809;&#26377;&#35797;&#22270;&#25429;&#25417;&#20219;&#20309;&#21487;&#33021;&#21457;&#29983;&#30340;&#24322;&#24120;&#12290;&#36825;&#27491;&#26159;&#25105;&#20204;&#25152;&#24076;&#26395;&#30340;&#12290;&#20197;&#26377;&#25928;&#36755;&#20837;&#35843;&#29992; <code class="function">toRoman</code> &#19981;&#20250;&#24341;&#21457;&#20219;&#20309;&#24322;&#24120;&#65292;&#32780;&#20320;&#30475;&#21040;&#30340;&#36825;&#20123;&#36755;&#20837;&#37117;&#26159;&#26377;&#25928;&#30340;&#12290;&#22914;&#26524; <code class="function">toRoman</code> &#24341;&#21457;&#20102;&#24322;&#24120;&#65292;&#21017;&#27979;&#35797;&#22833;&#36133;&#12290;</dd><dt><a href="#roman.success.1.5">circled_6_delcric</a> </dt><dd>&#20551;&#35774; <code class="function">toRoman</code> &#20989;&#25968;&#34987;&#27491;&#30830;&#32534;&#20889;&#65292;&#27491;&#30830;&#35843;&#29992;&#65292;&#36816;&#34892;&#25104;&#21151;&#24182;&#36820;&#22238;&#19968;&#20010;&#20540;&#65292;&#26368;&#21518;&#19968;&#27493;&#20415;&#26159;&#26816;&#26597;&#36825;&#20010;&#36820;&#22238;&#20540;<span class="emphasis"><em>&#27491;&#30830;</em></span> &#19982;&#21542;&#12290;&#36825;&#26159;&#19968;&#20010;&#24120;&#35265;&#30340;&#38382;&#39064;&#65292;<code class="classname">TestCase</code> &#31867;&#25552;&#20379;&#20102;&#19968;&#20010;&#26041;&#27861;&#65306;<code class="function">assertEqual</code>&#65292;&#26469;&#27979;&#35797;&#20004;&#20010;&#20540;&#26159;&#21542;&#30456;&#31561;&#12290;&#22914;&#26524; <code class="function">toRoman</code> &#36820;&#22238;&#30340;&#32467;&#26524; (<code class="varname">value</code>) &#19981;&#31561;&#20110;&#25105;&#20204;&#39044;&#26399;&#30340;&#20540; (<code class="varname">numeral</code>)&#65292;<code class="function">assertEqual</code> &#23558;&#20250;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#65292;&#27979;&#35797;&#20063;&#23601;&#27492;&#22833;&#36133;&#12290;&#22914;&#26524;&#20004;&#20010;&#20540;&#30456;&#31561;&#65292;<code class="function">assertEqual</code> &#20160;&#20040;&#20063;&#19981;&#20570;&#12290;&#22914;&#26524;&#27599;&#20010;&#20174; <code class="function">toRoman</code> &#36820;&#22238;&#30340;&#20540;&#37117;&#31561;&#20110;&#39044;&#26399;&#20540;&#65292;<code class="function">assertEqual</code> &#20415;&#19981;&#20250;&#24341;&#21457;&#24322;&#24120;&#65292;&#20110;&#26159; <code class="function">testToRomanKnownValues</code> &#26368;&#32456;&#27491;&#24120;&#36864;&#20986;&#65292;&#36825;&#24847;&#21619;&#30528; <code class="function">toRoman</code> &#36890;&#36807;&#20102;&#35813;&#27979;&#35797;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.failure"></a>13.5.&nbsp;&#36127;&#38754;&#27979;&#35797; (Testing for failure)</h2></div></div></div><div class="abstract"><p>&#20351;&#29992;&#26377;&#25928;&#36755;&#20837;&#30830;&#20445;&#20989;&#25968;&#25104;&#21151;&#36890;&#36807;&#27979;&#35797;&#36824;&#19981;&#22815;&#65292;&#20320;&#36824;&#38656;&#35201;&#27979;&#35797;&#26080;&#25928;&#36755;&#20837;&#23548;&#33268;&#20989;&#25968;&#22833;&#36133;&#30340;&#24773;&#24418;&#12290;&#20294;&#24182;&#19981;&#26159;&#20219;&#20309;&#22833;&#36133;&#37117;&#21487;&#20197;&#65292;&#24517;&#39035;&#22914;&#20320;&#39044;&#26399;&#22320;&#22833;&#36133;&#12290;</p></div><p>&#36824;&#35760;&#24471; <code class="function">toRoman</code> &#30340;<a class="link" href="#roman.requirements" title="roman.py &#21151;&#33021;&#38656;&#27714;">&#20854;&#20182;&#35201;&#27714;</a>&#21543;&#65306;</p><div class="orderedlist"><ol start="2" type="1"><li><code class="function">toRoman</code> &#22312;&#36755;&#20837;&#20540;&#20026; <code class="constant">1</code> &#21040; <code class="literal">3999</code> &#20043;&#22806;&#26102;&#22833;&#36133;&#12290;</li><li><code class="function">toRoman</code> &#22312;&#36755;&#20837;&#20540;&#20026;&#38750;&#25972;&#25968;&#26102;&#22833;&#36133;&#12290;</li></ol></div><p>&#22312; <span class="application">Python</span> &#20013;&#65292;&#20989;&#25968;&#20197;&#24341;&#21457;<a class="link" href="#fileinfo.exception" title="6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;">&#24322;&#24120;</a>&#30340;&#26041;&#24335;&#34920;&#31034;&#22833;&#36133;&#12290;<code class="filename">unittest</code> &#27169;&#22359;&#25552;&#20379;&#20102;&#29992;&#20110;&#27979;&#35797;&#20989;&#25968;&#26159;&#21542;&#22312;&#32473;&#23450;&#26080;&#25928;&#36755;&#20837;&#26102;&#24341;&#21457;&#29305;&#23450;&#24322;&#24120;&#30340;&#26041;&#27861;&#12290;</p><div class="example"><a name="roman.tobadinput.example"></a><p class="title"><b>&#20363;&nbsp;13.3.&nbsp;&#27979;&#35797; <code class="function">toRoman</code> &#30340;&#26080;&#25928;&#36755;&#20837;</b></p><div class="example-contents"><pre class="programlisting">
class ToRomanBadInput(unittest.TestCase):                            
    def testTooLarge(self):                                          
        """toRoman should fail with large input"""                   
        self.assertRaises(roman.OutOfRangeError, roman.toRoman, 4000) <a name="roman.failure.1.1"></a>circled_1_delcric

    def testZero(self):                                              
        """toRoman should fail with 0 input"""                       
        self.assertRaises(roman.OutOfRangeError, roman.toRoman, 0)    <a name="roman.failure.1.2"></a>circled_2_delcric

    def testNegative(self):                                          
        """toRoman should fail with negative input"""                
        self.assertRaises(roman.OutOfRangeError, roman.toRoman, -1)  

    def testNonInteger(self):                                        
        """toRoman should fail with non-integer input"""             
        self.assertRaises(roman.NotIntegerError, roman.toRoman, 0.5)  <a name="roman.failure.1.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.failure.1.1">circled_1_delcric</a> </dt><dd><code class="filename">unittest</code> &#27169;&#22359;&#20013;&#30340; <code class="classname">TestCase</code> &#31867;&#25552;&#20379;&#20102; <code class="function">assertRaises</code> &#26041;&#27861;&#65292;&#23427;&#25509;&#21463;&#36825;&#20960;&#20010;&#21442;&#25968;&#65306;&#39044;&#26399;&#30340;&#24322;&#24120;&#12289;&#27979;&#35797;&#30340;&#20989;&#25968;&#65292;&#20197;&#21450;&#20256;&#36882;&#32473;&#20989;&#25968;&#30340;&#21442;&#25968;&#12290;(&#22914;&#26524;&#34987;&#27979;&#35797;&#20989;&#25968;&#26377;&#19981;&#27490;&#19968;&#20010;&#21442;&#25968;&#65292;&#25226;&#23427;&#20204;&#25353;&#39034;&#24207;&#20840;&#37096;&#20256;&#36882;&#32473; <code class="function">assertRaises</code> &#65292;&#23427;&#20250;&#25226;&#36825;&#20123;&#21442;&#25968;&#20256;&#32473;&#34987;&#27979;&#30340;&#20989;&#25968;&#12290;) &#29305;&#21035;&#27880;&#24847;&#36825;&#37324;&#30340;&#25805;&#20316;&#65306;&#19981;&#26159;&#30452;&#25509;&#35843;&#29992; <code class="function">toRoman</code> &#20877;&#25163;&#24037;&#26597;&#30475;&#26159;&#21542;&#24341;&#21457;&#29305;&#23450;&#24322;&#24120; (&#20351;&#29992; <a class="link" href="#fileinfo.exception" title="6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;"><code class="literal">try...except</code> &#22359;</a>&#25429;&#25417;&#24322;&#24120;)&#65292;<code class="function">assertRaises</code> &#20026;&#25105;&#20204;&#23553;&#35013;&#20102;&#36825;&#20123;&#12290;&#25152;&#26377;&#20320;&#35201;&#20570;&#30340;&#23601;&#26159;&#25226;&#24322;&#24120; (<code class="errorcode">roman.OutOfRangeError</code>)&#12289;&#20989;&#25968; (<code class="function">toRoman</code>) &#20197;&#21450; <code class="function">toRoman</code> &#30340;&#21442;&#25968; (<code class="literal">4000</code>) &#20256;&#36882;&#32473; <code class="function">assertRaises</code> &#65292;&#23427;&#20250;&#35843;&#29992; <code class="function">toRoman</code> &#26597;&#30475;&#26159;&#21542;&#24341;&#21457; <code class="errorcode">roman.OutOfRangeError</code> &#24322;&#24120;&#12290;(&#36824;&#24212;&#27880;&#24847;&#21040;&#20320;&#26159;&#25226; <code class="function">toRoman</code> &#20989;&#25968;&#26412;&#36523;&#24403;&#20316;&#19968;&#20010;&#21442;&#25968;&#65292;&#32780;&#19981;&#26159;&#35843;&#29992;&#23427;&#65292;&#20256;&#36882;&#23427;&#30340;&#26102;&#20505;&#20063;&#19981;&#26159;&#25226;&#23427;&#30340;&#21517;&#23383;&#20316;&#20026;&#19968;&#20010;&#23383;&#31526;&#20018;&#12290;&#25105;&#25552;&#21040;&#36807;&#21527;&#65311;&#26080;&#35770;&#26159;&#20989;&#25968;&#36824;&#26159;&#24322;&#24120;&#65292;<a class="link" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;"> <span class="application">Python</span> &#20013;&#19975;&#29289;&#30342;&#23545;&#35937;</a>)&#12290;</dd><dt><a href="#roman.failure.1.2">circled_2_delcric</a> </dt><dd>&#19982;&#27979;&#35797;&#36807;&#22823;&#30340;&#25968;&#30456;&#20276;&#30340;&#20415;&#26159;&#27979;&#35797;&#36807;&#23567;&#30340;&#25968;&#12290;&#35760;&#20303;&#65292;&#32599;&#39532;&#25968;&#23383;&#19981;&#33021;&#34920;&#31034; <code class="constant">0</code> &#21644;&#36127;&#25968;&#65292;&#25152;&#20197;&#20320;&#35201;&#20998;&#21035;&#32534;&#20889;&#27979;&#35797;&#29992;&#20363; ( <code class="function">testZero</code> &#21644; <code class="function">testNegative</code>)&#12290;&#22312; <code class="function">testZero</code> &#20013;&#65292;&#20320;&#27979;&#35797; <code class="function">toRoman</code> &#35843;&#29992; <code class="constant">0</code> &#24341;&#21457;&#30340; <code class="errorcode">roman.OutOfRangeError</code> &#24322;&#24120;&#65292;&#22914;&#26524;<span class="emphasis"><em>&#27809;&#33021;</em></span> &#24341;&#21457; <code class="errorcode">roman.OutOfRangeError</code> (&#19981;&#35770;&#26159;&#36820;&#22238;&#20102;&#19968;&#20010;&#20540;&#36824;&#26159;&#24341;&#21457;&#20102;&#20854;&#20182;&#24322;&#24120;)&#65292;&#21017;&#27979;&#35797;&#22833;&#36133;&#12290;</dd><dt><a href="#roman.failure.1.3">circled_3_delcric</a> </dt><dd><a class="link" href="#roman.requirements" title="roman.py &#21151;&#33021;&#38656;&#27714;">&#35201;&#27714; #3</a>&#65306;<code class="function">toRoman</code> &#19981;&#33021;&#25509;&#21463;&#38750;&#25972;&#25968;&#36755;&#20837;&#65292;&#25152;&#20197;&#36825;&#37324;&#20320;&#27979;&#35797; <code class="function">toRoman</code> &#22312;&#36755;&#20837; <code class="literal">0.5</code> &#26102;&#24341;&#21457; <code class="errorcode">roman.NotIntegerError</code> &#24322;&#24120;&#12290;&#22914;&#26524; <code class="function">toRoman</code> &#27809;&#26377;&#24341;&#21457; <code class="errorcode">roman.NotIntegerError</code> &#24322;&#24120;&#65292;&#21017;&#27979;&#35797;&#22833;&#36133;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#25509;&#19979;&#26469;&#30340;&#20004;&#20010;<a class="link" href="#roman.requirements" title="roman.py &#21151;&#33021;&#38656;&#27714;">&#35201;&#27714;</a>&#19982;&#21069;&#19977;&#20010;&#31867;&#20284;&#65292;&#19981;&#21516;&#28857;&#26159;&#20182;&#20204;&#25152;&#38024;&#23545;&#30340;&#26159; <code class="function">fromRoman</code> &#32780;&#19981;&#26159; <code class="function">toRoman</code>&#65306;</p><div class="orderedlist"><ol start="4" type="1"><li><code class="function">fromRoman</code> &#24212;&#35813;&#33021;&#23558;&#36755;&#20837;&#30340;&#26377;&#25928;&#32599;&#39532;&#25968;&#23383;&#36716;&#25442;&#20026;&#30456;&#24212;&#30340;&#38463;&#25289;&#20271;&#25968;&#23383;&#34920;&#31034;&#12290;</li><li><code class="function">fromRoman</code> &#22312;&#36755;&#20837;&#26080;&#25928;&#32599;&#39532;&#25968;&#23383;&#26102;&#24212;&#35813;&#22833;&#36133;&#12290;</li></ol></div><p>&#35201;&#27714; #4 &#19982;<a class="link" href="#roman.testtoromanknownvalues.example" title="&#20363;&nbsp;13.2.&nbsp;testToRomanKnownValues">&#35201;&#27714; #1</a> &#30340;&#22788;&#29702;&#26041;&#27861;&#30456;&#21516;&#65292;&#21363;&#27979;&#35797;&#19968;&#20010;&#24050;&#30693;&#26679;&#26412;&#20013;&#30340;&#19968;&#20010;&#20010;&#25968;&#23383;&#23545;&#12290;&#35201;&#27714; #5 &#19982; #2 &#21644; #3&#30340;&#22788;&#29702;&#26041;&#27861;&#30456;&#21516;&#65292;&#21363;&#36890;&#36807;&#26080;&#25928;&#36755;&#20837;&#30830;&#35748; <code class="function">fromRoman</code> &#24341;&#21457;&#24688;&#24403;&#30340;&#24322;&#24120;&#12290;</p><div class="example"><a name="roman.frombadinput.example"></a><p class="title"><b>&#20363;&nbsp;13.4.&nbsp;&#27979;&#35797; <code class="function">fromRoman</code> &#30340;&#26080;&#25928;&#36755;&#20837;</b></p><div class="example-contents"><pre class="programlisting">
class FromRomanBadInput(unittest.TestCase):                                      
    def testTooManyRepeatedNumerals(self):                                       
        """fromRoman should fail with too many repeated numerals"""              
        for s in ('MMMM', 'DD', 'CCCC', 'LL', 'XXXX', 'VV', 'IIII'):             
            self.assertRaises(roman.InvalidRomanNumeralError, roman.fromRoman, s) <a name="roman.failure.2.1"></a>circled_1_delcric

    def testRepeatedPairs(self):                                                 
        """fromRoman should fail with repeated pairs of numerals"""              
        for s in ('CMCM', 'CDCD', 'XCXC', 'XLXL', 'IXIX', 'IVIV'):               
            self.assertRaises(roman.InvalidRomanNumeralError, roman.fromRoman, s)

    def testMalformedAntecedent(self):                                           
        """fromRoman should fail with malformed antecedents"""                   
        for s in ('IIMXCC', 'VX', 'DCM', 'CMM', 'IXIV',
                  'MCMC', 'XCX', 'IVI', 'LM', 'LD', 'LC'):                       
            self.assertRaises(roman.InvalidRomanNumeralError, roman.fromRoman, s)</pre><div class="calloutlist"><dl compact><dt><a href="#roman.failure.2.1">circled_1_delcric</a> </dt><dd>&#27809;&#20160;&#20040;&#26032;&#40092;&#30340;&#65292;&#19982;&#27979;&#35797; <code class="function">toRoman</code> &#26080;&#25928;&#36755;&#20837;&#26102;&#30456;&#21516;&#30340;&#27169;&#24335;&#65292;&#21482;&#26159;&#20320;&#26377;&#20102;&#19968;&#20010;&#26032;&#30340;&#24322;&#24120;&#65306;<code class="errorcode">roman.InvalidRomanNumeralError</code>&#12290;<code class="filename">roman.py</code> &#20013;&#19968;&#20849;&#35201;&#23450;&#20041;&#19977;&#20010;&#24322;&#24120; (&#21478;&#22806;&#30340;&#20004;&#20010;&#26159; <code class="errorcode">roman.OutOfRangeError</code> &#21644; <code class="errorcode">roman.NotIntegerError</code>)&#12290;&#31245;&#21518;&#20320;&#22312;&#24320;&#22987;&#32534;&#20889; <code class="filename">roman.py</code> &#26102;&#23558;&#20250;&#30693;&#36947;&#22914;&#20309;&#23450;&#20041;&#36825;&#20123;&#24322;&#24120;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.sanity"></a>13.6.&nbsp;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)</h2></div></div></div><div class="abstract"><p>&#20320;&#32463;&#24120;&#20250;&#21457;&#29616;&#19968;&#32452;&#20195;&#30721;&#20013;&#21253;&#21547;&#20114;&#36870;&#30340;&#36716;&#25442;&#20989;&#25968;&#65292;&#19968;&#20010;&#25226; A &#36716;&#25442;&#20026; B &#65292;&#21478;&#19968;&#20010;&#25226; B &#36716;&#25442;&#20026; A&#12290;&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#21019;&#24314;"<span class="quote">&#23436;&#22791;&#24615;&#26816;&#27979;</span>"&#21487;&#20197;&#20351;&#20320;&#22312;&#30001; A &#36716; B &#20877;&#36716; A &#30340;&#36807;&#31243;&#20013;&#19981;&#20250;&#20986;&#29616;&#20002;&#22833;&#31934;&#24230;&#25110;&#21462;&#25972;&#31561;&#38169;&#35823;&#12290;</p></div><p>&#32771;&#34385;&#36825;&#20010;<a class="link" href="#roman.requirements" title="roman.py &#21151;&#33021;&#38656;&#27714;">&#35201;&#27714;</a>&#65306;</p><div class="orderedlist"><ol start="6" type="1"><li>&#22914;&#26524;&#20320;&#32473;&#23450;&#19968;&#20010;&#25968;&#65292;&#25226;&#23427;&#36716;&#21270;&#20026;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#65292;&#28982;&#21518;&#20877;&#36716;&#25442;&#22238;&#38463;&#25289;&#20271;&#25968;&#23383;&#34920;&#31034;&#65292;&#20320;&#25152;&#24471;&#21040;&#30340;&#24212;&#35813;&#26159;&#26368;&#21021;&#32473;&#23450;&#30340;&#37027;&#20010;&#25968;&#12290;&#22240;&#27492;&#65292;&#23545;&#20110; <code class="literal">1..3999</code> &#20013;&#30340;<code class="varname">n</code>&#65292;<code class="literal">fromRoman(toRoman(n)) == n</code> &#24635;&#25104;&#31435;&#12290;</li></ol></div><div class="example"><a name="roman.sanity.example"></a><p class="title"><b>&#20363;&nbsp;13.5.&nbsp;&#20197; <code class="function">toRoman</code> &#27979;&#35797; <code class="function">fromRoman</code> &#30340;&#36755;&#20986;</b></p><div class="example-contents"><pre class="programlisting">
class SanityCheck(unittest.TestCase):        
    def testSanity(self):                    
        """fromRoman(toRoman(n))==n for all n"""
        for integer in range(1, 4000):        <a name="roman.sanity.1.1"></a>circled_1_delcric <a name="roman.sanity.1.2"></a>circled_2_delcric
            numeral = roman.toRoman(integer) 
            result = roman.fromRoman(numeral)
            self.assertEqual(integer, result) <a name="roman.sanity.1.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.sanity.1.1">circled_1_delcric</a> </dt><dd>&#20320;&#24050;&#32463;&#35265;&#21040;&#36807; <a class="link" href="#odbchelper.multiassign.range" title="&#20363;&nbsp;3.20.&nbsp;&#36830;&#32493;&#20540;&#36171;&#20540;"><code class="function">range</code> &#20989;&#25968;</a>&#65292;&#20294;&#36825;&#37324;&#23427;&#20197;&#20004;&#20010;&#21442;&#25968;&#34987;&#35843;&#29992;&#65292;&#36820;&#22238;&#20102;&#20174;&#31532;&#19968;&#20010;&#21442;&#25968; (<code class="constant">1</code>) &#24320;&#22987;&#21040;<span class="emphasis"><em>&#20294;&#19981;&#21253;&#25324;</em></span> &#31532;&#20108;&#20010;&#21442;&#25968; (<code class="literal">4000</code>) &#30340;&#25972;&#25968;&#21015;&#34920;&#12290;&#22240;&#27492;&#65292;<code class="literal">1..3999</code> &#23601;&#26159;&#20934;&#22791;&#36716;&#25442;&#20026;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#30340;&#26377;&#25928;&#20540;&#21015;&#34920;&#12290;</dd><dt><a href="#roman.sanity.1.2">circled_2_delcric</a> </dt><dd>&#25105;&#24819;&#25552;&#19968;&#19979;&#65292;&#36825;&#37324;&#30340; <code class="varname">integer</code> &#24182;&#19981;&#26159;&#19968;&#20010; <span class="application">Python</span> &#20851;&#38190;&#23383;&#65292;&#32780;&#21482;&#26159;&#27809;&#26377;&#20160;&#20040;&#29305;&#21035;&#30340;&#21464;&#37327;&#21517;&#12290;</dd><dt><a href="#roman.sanity.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#37324;&#30340;&#27979;&#35797;&#36923;&#36753;&#26174;&#32780;&#26131;&#35265;&#65306;&#25226;&#19968;&#20010;&#25968; (<code class="varname">integer</code>) &#36716;&#25442;&#20026;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#30340;&#25968; (<code class="varname">numeral</code>)&#65292;&#28982;&#21518;&#20877;&#36716;&#25442;&#22238;&#26469; (<code class="varname">result</code>) &#24182;&#30830;&#20445;&#26368;&#21518;&#30340;&#32467;&#26524;&#21644;&#26368;&#21021;&#30340;&#25968;&#26159;&#21516;&#19968;&#20010;&#25968;&#12290;&#22914;&#26524;&#19981;&#26159;&#65292;<code class="function">assertEqual</code> &#20415;&#20250;&#24341;&#21457;&#24322;&#24120;&#65292;&#27979;&#35797;&#20063;&#20415;&#31435;&#21051;&#22833;&#36133;&#12290;&#22914;&#26524;&#25152;&#26377;&#30340;&#32467;&#26524;&#37117;&#21644;&#21021;&#22987;&#25968;&#19968;&#33268;&#65292;<code class="function">assertEqual</code> &#23558;&#20250;&#20445;&#25345;&#27785;&#40664;&#65292;&#25972;&#20010; <code class="function">testSanity</code> &#26041;&#27861;&#23558;&#20250;&#26368;&#32456;&#20063;&#20445;&#25345;&#27785;&#40664;&#65292;&#27979;&#35797;&#21017;&#23558;&#20250;&#34987;&#35748;&#23450;&#20026;&#36890;&#36807;&#12290;</dd></dl></div></div></div><br class="example-break"><p><a class="link" href="#roman.requirements" title="roman.py &#21151;&#33021;&#38656;&#27714;">&#26368;&#21518;&#20004;&#20010;&#35201;&#27714;</a>&#21644;&#20854;&#20182;&#30340;&#35201;&#27714;&#19981;&#21516;&#65292;&#20284;&#20046;&#26082;&#27494;&#26029;&#32780;&#21448;&#24494;&#19981;&#36275;&#36947;&#65306;</p><div class="orderedlist"><ol start="7" type="1"><li><code class="function">toRoman</code> &#36820;&#22238;&#30340;&#32599;&#39532;&#25968;&#23383;&#24212;&#35813;&#20351;&#29992;&#22823;&#20889;&#23383;&#27597;&#12290;</li><li><code class="function">fromRoman</code> &#24212;&#35813;&#21482;&#25509;&#21463;&#22823;&#20889;&#32599;&#39532;&#25968;&#23383; (&#20063;&#23601;&#26159;&#35828;&#32473;&#23450;&#23567;&#20889;&#23383;&#27597;&#36827;&#34892;&#36716;&#25442;&#26102;&#24212;&#35813;&#22833;&#36133;)&#12290;</li></ol></div><p>&#20107;&#23454;&#19978;&#65292;&#23427;&#20204;&#30830;&#23454;&#26377;&#28857;&#27494;&#26029;&#65292;&#35692;&#22914;&#20320;&#23436;&#20840;&#21487;&#20197;&#35753; <code class="function">fromRoman</code> &#25509;&#21463;&#23567;&#20889;&#21644;&#22823;&#23567;&#20889;&#28151;&#21512;&#30340;&#36755;&#20837;&#65307;&#20294;&#20182;&#20204;&#20063;&#19981;&#26159;&#23436;&#20840;&#27494;&#26029;&#65307;&#22914;&#26524; <code class="function">toRoman</code> &#24635;&#26159;&#36820;&#22238;&#22823;&#20889;&#30340;&#36755;&#20986;&#65292;&#37027;&#20040; <code class="function">fromRoman</code> &#33267;&#23569;&#24212;&#35813;&#25509;&#21463;&#22823;&#20889;&#23383;&#27597;&#36755;&#20837;&#65292;&#19981;&#28982; "<span class="quote">&#23436;&#22791;&#24615;&#26816;&#27979;</span>" (&#35201;&#27714; #6) &#23601;&#20250;&#22833;&#36133;&#12290;&#19981;&#31649;&#24590;&#20040;&#35828;&#65292;<span class="emphasis"><em>&#21482;</em></span> &#25509;&#21463;&#22823;&#20889;&#36755;&#20837;&#36824;&#26159;&#27494;&#26029;&#30340;&#65292;&#20294;&#23601;&#20687;&#27599;&#20010;&#31995;&#32479;&#37117;&#20250;&#21578;&#35785;&#20320;&#30340;&#37027;&#26679;&#65292;&#22823;&#23567;&#20889;&#24635;&#20250;&#20986;&#38382;&#39064;&#65292;&#22240;&#27492;&#20107;&#20808;&#35268;&#23450;&#36825;&#19968;&#28857;&#36824;&#26159;&#26377;&#24517;&#35201;&#30340;&#12290;&#26082;&#28982;&#26377;&#24517;&#35201;&#35268;&#23450;&#65292;&#37027;&#20040;&#20063;&#23601;&#26377;&#24517;&#35201;&#27979;&#35797;&#12290;</p><div class="example"><a name="d0e32914"></a><p class="title"><b>&#20363;&nbsp;13.6.&nbsp;&#22823;&#23567;&#20889;&#27979;&#35797;</b></p><div class="example-contents"><pre class="programlisting">
class CaseCheck(unittest.TestCase):                   
    def testToRomanCase(self):                        
        """toRoman should always return uppercase"""  
        for integer in range(1, 4000):                
            numeral = roman.toRoman(integer)          
            self.assertEqual(numeral, numeral.upper())         <a name="roman.sanity.2.1"></a>circled_1_delcric

    def testFromRomanCase(self):                      
        """fromRoman should only accept uppercase input"""
        for integer in range(1, 4000):                
            numeral = roman.toRoman(integer)          
            roman.fromRoman(numeral.upper())                   <a name="roman.sanity.2.2"></a>circled_2_delcric <a name="roman.sanity.2.3"></a>circled_3_delcric
            self.assertRaises(roman.InvalidRomanNumeralError,
                              roman.fromRoman, numeral.lower())   <a name="roman.sanity.2.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.sanity.2.1">circled_1_delcric</a> </dt><dd>&#20851;&#20110;&#36825;&#20010;&#27979;&#35797;&#29992;&#20363;&#26368;&#26377;&#36259;&#30340;&#19968;&#28857;&#19981;&#22312;&#20110;&#23427;&#27979;&#35797;&#20102;&#20160;&#20040;&#65292;&#32780;&#26159;&#23427;&#19981;&#27979;&#35797;&#20160;&#20040;&#12290;&#23427;&#19981;&#20250;&#27979;&#35797; <code class="function">toRoman</code> &#30340;&#36820;&#22238;&#20540;&#26159;&#21542;<a class="link" href="#roman.testtoromanknownvalues.example" title="&#20363;&nbsp;13.2.&nbsp;testToRomanKnownValues">&#27491;&#30830;</a>&#25110;&#32773;<a class="link" href="#roman.sanity.example" title="&#20363;&nbsp;13.5.&nbsp;&#20197; toRoman &#27979;&#35797; fromRoman &#30340;&#36755;&#20986;">&#19968;&#33268;</a>&#65307;&#36825;&#20123;&#38382;&#39064;&#30001;&#20854;&#20182;&#27979;&#35797;&#29992;&#20363;&#26469;&#22238;&#31572;&#12290;&#25972;&#20010;&#27979;&#35797;&#29992;&#20363;&#20165;&#20165;&#27979;&#35797;&#22823;&#20889;&#38382;&#39064;&#12290;&#20320;&#20063;&#35768;&#35273;&#24471;&#24212;&#35813;&#23558;&#23427;&#24182;&#20837;&#21040;<a class="link" href="#roman.sanity.example" title="&#20363;&nbsp;13.5.&nbsp;&#20197; toRoman &#27979;&#35797; fromRoman &#30340;&#36755;&#20986;">&#23436;&#22791;&#24615;&#27979;&#35797;</a>&#65292;&#27605;&#31455;&#37117;&#35201;&#36941;&#21382;&#25972;&#20010;&#36755;&#20837;&#20540;&#33539;&#22260;&#24182;&#35843;&#29992; <code class="function">toRoman</code>&#12290;<sup>[<a name="d0e32945" href="#ftn.d0e32945" class="footnote">11</a>]</sup>&#20294;&#26159;&#36825;&#26679;&#23558;&#20250;&#36829;&#32972;&#19968;&#26465;<a class="link" href="#roman.success" title="13.4.&nbsp;&#27491;&#38754;&#27979;&#35797; (Testing for success)">&#22522;&#26412;&#35268;&#21017;</a>&#65306;&#27599;&#20010;&#27979;&#35797;&#29992;&#20363;&#21482;&#22238;&#31572;&#19968;&#20010;&#38382;&#39064;&#12290;&#35797;&#24819;&#19968;&#19979;&#65292;&#20320;&#23558;&#36825;&#20010;&#27979;&#35797;&#24182;&#20837;&#21040;&#23436;&#22791;&#24615;&#27979;&#35797;&#20013;&#65292;&#28982;&#21518;&#36935;&#21040;&#20102;&#27979;&#35797;&#22833;&#36133;&#12290;&#20320;&#36824;&#38656;&#35201;&#36827;&#19968;&#27493;&#20998;&#26512;&#20197;&#20415;&#21028;&#23450;&#27979;&#35797;&#29992;&#20363;&#30340;&#21738;&#37096;&#20998;&#20986;&#20102;&#38382;&#39064;&#12290;&#22914;&#26524;&#20320;&#38656;&#35201;&#20998;&#26512;&#26041;&#33021;&#25214;&#20986;&#38382;&#39064;&#25152;&#22312;&#65292;&#26080;&#30097;&#20320;&#30340;&#27979;&#35797;&#29992;&#20363;&#22312;&#35774;&#35745;&#19978;&#20986;&#20102;&#38382;&#39064;&#12290;</dd><dt><a href="#roman.sanity.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#26377;&#19968;&#20010;&#21644;&#21069;&#38754;&#30456;&#20284;&#30340;&#24773;&#20917;&#65306;&#23613;&#31649; "<span class="quote">&#20320;&#30693;&#36947;</span>" <code class="function">toRoman</code> &#24635;&#26159;&#36820;&#22238;&#22823;&#20889;&#23383;&#27597;&#65292;&#20320;&#36824;&#26159;&#38656;&#35201;&#25226;&#36820;&#22238;&#20540;&#26174;&#24335;&#22320;&#36716;&#25442;&#25104;&#22823;&#20889;&#23383;&#27597;&#21518;&#20877;&#20256;&#36882;&#32473;&#21482;&#25509;&#21463;&#22823;&#20889;&#30340; <code class="function">fromRoman</code> &#36827;&#34892;&#27979;&#35797;&#12290;&#20026;&#20160;&#20040;&#65311;&#22240;&#20026; <code class="function">toRoman</code> &#21482;&#36820;&#22238;&#22823;&#20889;&#23383;&#27597;&#26159;&#19968;&#20010;&#29420;&#31435;&#30340;&#38656;&#27714;&#12290;&#22914;&#26524;&#20320;&#25913;&#21464;&#20102;&#36825;&#20010;&#38656;&#27714;&#65292;&#20363;&#22914;&#25913;&#25104;&#24635;&#26159;&#36820;&#22238;&#23567;&#20889;&#23383;&#27597;&#65292;&#37027;&#20040; <code class="function">testToRomanCase</code> &#27979;&#35797;&#29992;&#20363;&#20063;&#24212;&#20316;&#20986;&#35843;&#25972;&#65292;&#20294;&#36825;&#20010;&#27979;&#35797;&#29992;&#20363;&#24212;&#35813;&#20173;&#33021;&#36890;&#36807;&#12290;&#36825;&#26159;&#21478;&#22806;&#19968;&#20010;<a class="link" href="#roman.success" title="13.4.&nbsp;&#27491;&#38754;&#27979;&#35797; (Testing for success)">&#22522;&#26412;&#35268;&#21017;</a>&#65306;&#27599;&#20010;&#27979;&#35797;&#29992;&#20363;&#24517;&#39035;&#21487;&#20197;&#19982;&#20854;&#20182;&#27979;&#35797;&#29992;&#20363;&#38548;&#31163;&#24037;&#20316;&#65292;&#27599;&#20010;&#27979;&#35797;&#29992;&#20363;&#26159;&#19968;&#20010;&#8220;&#23396;&#23707;&#8221;&#12290;</dd><dt><a href="#roman.sanity.2.3">circled_3_delcric</a> </dt><dd>&#27880;&#24847;&#20320;&#24182;&#27809;&#26377;&#20351;&#29992; <code class="function">fromRoman</code> &#30340;&#36820;&#22238;&#20540;&#12290;&#36825;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340; <span class="application">Python</span> &#35821;&#27861;&#65306;&#22914;&#26524;&#19968;&#20010;&#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#20540;&#65292;&#20294;&#27809;&#26377;&#34987;&#20351;&#29992;&#65292;<span class="application">Python</span> &#20250;&#30452;&#25509;&#25226;&#36825;&#20010;&#36820;&#22238;&#20540;&#25172;&#25481;&#12290;&#36825;&#27491;&#26159;&#20320;&#25152;&#24076;&#26395;&#30340;&#65292;&#36825;&#20010;&#27979;&#35797;&#29992;&#20363;&#24182;&#19981;&#23545;&#36820;&#22238;&#20540;&#36827;&#34892;&#27979;&#35797;&#65292;&#21482;&#26159;&#27979;&#35797; <code class="function">fromRoman</code> &#25509;&#21463;&#22823;&#20889;&#23383;&#27597;&#32780;&#19981;&#24341;&#21457;&#24322;&#24120;&#12290;</dd><dt><a href="#roman.sanity.2.4">circled_4_delcric</a> </dt><dd>&#36825;&#34892;&#26377;&#28857;&#22797;&#26434;&#65292;&#20294;&#26159;&#23427;&#19982; <code class="classname">ToRomanBadInput</code> &#21644; <code class="classname">FromRomanBadInput</code> &#27979;&#35797;&#24456;&#30456;&#20284;&#12290;
&#20320;&#22312;&#27979;&#35797;&#20197;&#29305;&#23450;&#20540; (<code class="literal">numeral.lower()</code>&#65292;&#24490;&#29615;&#20013;&#30446;&#21069;&#32599;&#39532;&#25968;&#23383;&#30340;&#23567;&#20889;&#29256;) &#35843;&#29992;&#29305;&#23450;&#20989;&#25968; (<code class="function">roman.fromRoman</code>) &#20250;&#30830;&#23454;&#24341;&#21457;&#29305;&#23450;&#30340;&#24322;&#24120; (<code class="literal">roman.InvalidRomanNumeralError</code>)&#12290;&#22914;&#26524; (&#22312;&#24490;&#29615;&#20013;&#30340;&#27599;&#19968;&#27425;) &#30830;&#23454;&#22914;&#27492;&#65292;&#27979;&#35797;&#36890;&#36807;&#65307;&#22914;&#26524;&#26377;&#19968;&#27425;&#19981;&#26159;&#36825;&#26679; (&#27604;&#22914;&#24341;&#21457;&#21478;&#22806;&#30340;&#24322;&#24120;&#25110;&#32773;&#19981;&#24341;&#21457;&#24322;&#24120;)&#65292;&#27979;&#35797;&#22833;&#36133;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22312;&#19979;&#19968;&#31456;&#20013;&#65292;&#20320;&#23558;&#30475;&#21040;&#22914;&#20309;&#32534;&#20889;&#21487;&#20197;&#36890;&#36807;&#36825;&#20123;&#27979;&#35797;&#30340;&#20195;&#30721;&#12290;</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e32945" href="#d0e32945" class="para">11</a>] </sup>"<span class="quote">&#38500;&#20102;&#35825;&#24785;&#20160;&#20040;&#25105;&#37117;&#33021;&#25239;&#25298;&#12290; (I can resist everything except temptation.)</span>"&#8213;&#8213;Oscar Wilde</p></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="roman1.5"></a>&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.stage1"></a>14.1.&nbsp;<code class="filename">roman.py</code>, &#31532; 1 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#21040;&#30446;&#21069;&#20026;&#27490;&#65292;&#21333;&#20803;&#27979;&#35797;&#24050;&#32463;&#23436;&#25104;&#65292;&#26159;&#26102;&#20505;&#24320;&#22987;&#32534;&#20889;&#34987;&#21333;&#20803;&#27979;&#35797;&#27979;&#35797;&#30340;&#20195;&#30721;&#20102;&#12290;&#20320;&#23558;&#20998;&#38454;&#27573;&#22320;&#23436;&#25104;&#36825;&#20010;&#24037;&#20316;&#65292;&#22240;&#27492;&#24320;&#22987;&#26102;&#25152;&#26377;&#30340;&#21333;&#20803;&#27979;&#35797;&#37117;&#26159;&#22833;&#36133;&#30340;&#65292;&#20294;&#22312;&#36880;&#27493;&#23436;&#25104; <code class="filename">roman.py</code> &#30340;&#21516;&#26102;&#20320;&#20250;&#30475;&#21040;&#23427;&#20204;&#19968;&#20010;&#20010;&#22320;&#36890;&#36807;&#27979;&#35797;&#12290;</p></div><div class="example"><a name="d0e33028"></a><p class="title"><b>&#20363;&nbsp;14.1.&nbsp;<code class="filename">roman1.py</code></b></p><div class="example-contents"><p>&#36825;&#20010;&#31243;&#24207;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage1/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Convert to and from Roman numerals"""

#Define exceptions
class RomanError(Exception): pass                <a name="roman.stage1.1.1"></a>circled_1_delcric
class OutOfRangeError(RomanError): pass          <a name="roman.stage1.1.2"></a>circled_2_delcric
class NotIntegerError(RomanError): pass
class InvalidRomanNumeralError(RomanError): pass <a name="roman.stage1.1.3"></a>circled_3_delcric

def toRoman(n):
    """convert integer to Roman numeral"""
    pass                                         <a name="roman.stage1.1.4"></a>circled_4_delcric

def fromRoman(s):
    """convert Roman numeral to integer"""
    pass
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage1.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#23601;&#26159;&#22914;&#20309;&#23450;&#20041;&#20320;&#33258;&#24049;&#30340; <span class="application">Python</span> &#24322;&#24120;&#12290;&#24322;&#24120; (Exception) &#20063;&#26159;&#31867;&#65292;&#36890;&#36807;&#32487;&#25215;&#24050;&#26377;&#30340;&#24322;&#24120;&#65292;&#20320;&#21487;&#20197;&#21019;&#24314;&#33258;&#23450;&#20041;&#30340;&#24322;&#24120;&#12290;&#24378;&#28872;&#24314;&#35758; (&#20294;&#19981;&#26159;&#24517;&#39035;) &#20320;&#32487;&#25215; <code class="errorcode">Exception</code> &#26469;&#23450;&#20041;&#33258;&#24049;&#30340;&#24322;&#24120;&#65292;&#22240;&#20026;&#23427;&#26159;&#25152;&#26377;&#20869;&#24314;&#24322;&#24120;&#30340;&#22522;&#31867;&#12290;&#36825;&#37324;&#25105;&#23450;&#20041;&#20102; <code class="errorcode">RomanError</code> (&#20174; <code class="errorcode">Exception</code> &#32487;&#25215;&#32780;&#26469;) &#20316;&#20026;&#25105;&#25152;&#26377;&#33258;&#23450;&#20041;&#24322;&#24120;&#30340;&#22522;&#31867;&#12290;&#36825;&#26159;&#19968;&#20010;&#39118;&#26684;&#38382;&#39064;&#65292;&#25105;&#20063;&#21487;&#20197;&#30452;&#25509;&#20174; <code class="errorcode">Exception</code> &#32487;&#25215;&#24314;&#31435;&#27599;&#19968;&#20010;&#33258;&#23450;&#20041;&#24322;&#24120;&#12290;</dd><dt><a href="#roman.stage1.1.2">circled_2_delcric</a> </dt><dd><code class="errorcode">OutOfRangeError</code> &#21644; <code class="errorcode">NotIntegerError</code> &#24322;&#24120;&#23558;&#20250;&#26368;&#32456;&#34987;&#29992;&#20110; <code class="function">toRoman</code> &#20197;&#26631;&#31034;&#19981;&#21516;&#31867;&#22411;&#30340;&#26080;&#25928;&#36755;&#20837;&#65292;&#26356;&#20855;&#20307;&#32780;&#35328;&#23601;&#26159; <a class="link" href="#roman.tobadinput.example" title="&#20363;&nbsp;13.3.&nbsp;&#27979;&#35797; toRoman &#30340;&#26080;&#25928;&#36755;&#20837;"><code class="classname">ToRomanBadInput</code></a> &#27979;&#35797;&#30340;&#37027;&#20123;&#12290;</dd><dt><a href="#roman.stage1.1.3">circled_3_delcric</a> </dt><dd><code class="errorcode">InvalidRomanNumeralError</code> &#23558;&#34987;&#26368;&#32456;&#29992;&#20110; <code class="function">fromRoman</code> &#20197;&#26631;&#31034;&#26080;&#25928;&#36755;&#20837;&#65292;&#20855;&#20307;&#32780;&#35328;&#23601;&#26159; <a class="link" href="#roman.frombadinput.example" title="&#20363;&nbsp;13.4.&nbsp;&#27979;&#35797; fromRoman &#30340;&#26080;&#25928;&#36755;&#20837;"><code class="classname">FromRomanBadInput</code></a>&#27979;&#35797;&#30340;&#37027;&#20123;&#12290;</dd><dt><a href="#roman.stage1.1.4">circled_4_delcric</a> </dt><dd>&#22312;&#36825;&#19968;&#27493;&#20013;&#20320;&#21482;&#26159;&#24819;&#23450;&#20041;&#27599;&#20010;&#20989;&#25968;&#30340; <acronym class="acronym">API</acronym> &#65292;&#32780;&#19981;&#24819;&#20855;&#20307;&#23454;&#29616;&#23427;&#20204;&#65292;&#22240;&#27492;&#20320;&#20197; <span class="application">Python</span> &#20851;&#38190;&#23383; <a class="link" href="#fileinfo.class.simplest" title="&#20363;&nbsp;5.3.&nbsp;&#26368;&#31616;&#21333;&#30340; Python &#31867;"><code class="literal">pass</code></a> &#22993;&#19988;&#24102;&#36807;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37325;&#35201;&#30340;&#26102;&#21051;&#21040;&#20102; (&#35831;&#25171;&#36215;&#40723;&#26469;)&#65306;&#20320;&#32456;&#20110;&#35201;&#23545;&#36825;&#20010;&#31616;&#38475;&#30340;&#23567;&#27169;&#22359;&#24320;&#22987;&#36816;&#34892;&#21333;&#20803;&#27979;&#35797;&#20102;&#12290;&#30446;&#21069;&#32780;&#35328;&#65292;&#27599;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#37117;&#24212;&#35813;&#22833;&#36133;&#12290;&#20107;&#23454;&#19978;&#65292;&#20219;&#20309;&#27979;&#35797;&#29992;&#20363;&#22312;&#27492;&#26102;&#36890;&#36807;&#65292;&#20320;&#37117;&#24212;&#35813;&#22238;&#22836;&#30475;&#30475; <code class="filename">romantest.py</code> &#65292;&#20180;&#32454;&#24819;&#24819;&#20026;&#20160;&#20040;&#20320;&#20889;&#30340;&#27979;&#35797;&#20195;&#30721;&#22914;&#27492;&#27809;&#29992;&#65292;&#20197;&#33267;&#20110;&#36830;&#20160;&#20040;&#37117;&#19981;&#20316;&#30340;&#20989;&#25968;&#37117;&#33021;&#36890;&#36807;&#27979;&#35797;&#12290;</p><p>&#29992;&#21629;&#20196;&#34892;&#36873;&#39033; <code class="option">-v</code> &#36816;&#34892; <code class="filename">romantest1.py</code> &#21487;&#20197;&#24471;&#21040;&#26356;&#35814;&#32454;&#30340;&#36755;&#20986;&#20449;&#24687;&#65292;&#36825;&#26679;&#20320;&#23601;&#21487;&#20197;&#30475;&#21040;&#27599;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#30340;&#20855;&#20307;&#36816;&#34892;&#24773;&#20917;&#12290;&#22914;&#26524;&#24184;&#36816;&#65292;&#20320;&#30340;&#32467;&#26524;&#24212;&#35813;&#26159;&#36825;&#26679;&#30340;&#65306;</p><div class="example"><a name="roman.stage1.output"></a><p class="title"><b>&#20363;&nbsp;14.2.&nbsp;&#20197; <code class="filename">romantest1.py</code> &#27979;&#35797; <code class="filename">roman1.py</code> &#30340;&#36755;&#20986;</b></p><div class="example-contents"><pre class="screen"><font color="teal">fromRoman should only accept uppercase input ... ERROR
toRoman should always return uppercase ... ERROR
fromRoman should fail with malformed antecedents ... FAIL
fromRoman should fail with repeated pairs of numerals ... FAIL
fromRoman should fail with too many repeated numerals ... FAIL
fromRoman should give known result with known input ... FAIL
toRoman should give known result with known input ... FAIL
fromRoman(toRoman(n))==n for all n ... FAIL
toRoman should fail with non-integer input ... FAIL
toRoman should fail with negative input ... FAIL
toRoman should fail with large input ... FAIL
toRoman should fail with 0 input ... FAIL

======================================================================
ERROR: fromRoman should only accept uppercase input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 154, in testFromRomanCase
    roman1.fromRoman(numeral.upper())
AttributeError: 'None' object has no attribute 'upper'</font><font color="teal">
======================================================================
ERROR: toRoman should always return uppercase
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 148, in testToRomanCase
    self.assertEqual(numeral, numeral.upper())
AttributeError: 'None' object has no attribute 'upper'</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with malformed antecedents
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 133, in testMalformedAntecedent
    self.assertRaises(roman1.InvalidRomanNumeralError, roman1.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with repeated pairs of numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 127, in testRepeatedPairs
    self.assertRaises(roman1.InvalidRomanNumeralError, roman1.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with too many repeated numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 122, in testTooManyRepeatedNumerals
    self.assertRaises(roman1.InvalidRomanNumeralError, roman1.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should give known result with known input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 99, in testFromRomanKnownValues
    self.assertEqual(integer, result)
  File "c:\python21\lib\unittest.py", line 273, in failUnlessEqual
    raise self.failureException, (msg or '%s != %s' % (first, second))
AssertionError: 1 != None</font><font color="teal">
======================================================================
FAIL: toRoman should give known result with known input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 93, in testToRomanKnownValues
    self.assertEqual(numeral, result)
  File "c:\python21\lib\unittest.py", line 273, in failUnlessEqual
    raise self.failureException, (msg or '%s != %s' % (first, second))
AssertionError: I != None</font><font color="teal">
======================================================================
FAIL: fromRoman(toRoman(n))==n for all n
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 141, in testSanity
    self.assertEqual(integer, result)
  File "c:\python21\lib\unittest.py", line 273, in failUnlessEqual
    raise self.failureException, (msg or '%s != %s' % (first, second))
AssertionError: 1 != None</font><font color="teal">
======================================================================
FAIL: toRoman should fail with non-integer input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 116, in testNonInteger
    self.assertRaises(roman1.NotIntegerError, roman1.toRoman, 0.5)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: NotIntegerError</font><font color="teal">
======================================================================
FAIL: toRoman should fail with negative input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 112, in testNegative
    self.assertRaises(roman1.OutOfRangeError, roman1.toRoman, -1)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: OutOfRangeError</font><font color="teal">
======================================================================
FAIL: toRoman should fail with large input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 104, in testTooLarge
    self.assertRaises(roman1.OutOfRangeError, roman1.toRoman, 4000)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: OutOfRangeError</font><font color="teal">
======================================================================
FAIL: toRoman should fail with 0 input                                 </font><a name="roman.stage1.2.1"></a>circled_1_delcric<font color="teal">
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage1\romantest1.py", line 108, in testZero
    self.assertRaises(roman1.OutOfRangeError, roman1.toRoman, 0)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: OutOfRangeError                                        </font><a name="roman.stage1.2.2"></a>circled_2_delcric<font color="teal">
----------------------------------------------------------------------
Ran 12 tests in 0.040s                                                 </font><a name="roman.stage1.2.3"></a>circled_3_delcric<font color="teal">

FAILED (failures=10, errors=2)                                         </font><a name="roman.stage1.2.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage1.2.1">circled_1_delcric</a> </dt><dd>&#36816;&#34892;&#33050;&#26412;&#23558;&#20250;&#25191;&#34892; <code class="function">unittest.main()</code>&#65292;&#30001;&#23427;&#26469;&#25191;&#34892;&#27599;&#20010;&#27979;&#35797;&#29992;&#20363;&#65292;&#20063;&#23601;&#26159;&#27599;&#20010;&#22312; <code class="filename">romantest.py</code> &#20013;&#23450;&#20041;&#30340;&#26041;&#27861;&#12290;&#23545;&#20110;&#27599;&#20010;&#27979;&#35797;&#29992;&#20363;&#65292;&#26080;&#35770;&#27979;&#35797;&#36890;&#36807;&#19982;&#21542;&#65292;&#37117;&#20250;&#36755;&#20986;&#36825;&#20010;&#26041;&#27861;&#30340; <code class="literal">doc string</code>&#12290;&#24847;&#26009;&#20043;&#20013;&#65292;&#27809;&#26377;&#36890;&#36807;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#12290;</dd><dt><a href="#roman.stage1.2.2">circled_2_delcric</a> </dt><dd>&#23545;&#20110;&#27599;&#20010;&#22833;&#36133;&#30340;&#27979;&#35797;&#29992;&#20363;&#65292;<code class="filename">unittest</code> &#26174;&#31034;&#30340;&#36319;&#36394;&#20449;&#24687;&#21578;&#35785;&#25105;&#20204;&#37117;&#21457;&#29983;&#20102;&#20160;&#20040;&#12290;&#23601;&#27492;&#22788;&#32780;&#35328;&#65292;&#35843;&#29992; <code class="function">assertRaises</code> (&#20063;&#31216;&#20316; <code class="function">failUnlessRaises</code>) &#24341;&#21457;&#20102;&#19968;&#20010; <code class="errorcode">AssertionError</code> &#24322;&#24120;&#65292;&#22240;&#20026;&#26399;&#24453; <code class="function">toRoman</code> &#25152;&#24341;&#21457;&#30340; <code class="errorcode">OutOfRangeError</code> &#24322;&#24120;&#27809;&#26377;&#20986;&#29616;&#12290;</dd><dt><a href="#roman.stage1.2.3">circled_3_delcric</a> </dt><dd>&#22312;&#36825;&#20123;&#32454;&#33410;&#21518;&#38754;&#65292;<code class="filename">unittest</code> &#32473;&#20986;&#20102;&#19968;&#20010;&#20851;&#20110;&#34987;&#25191;&#34892;&#27979;&#35797;&#30340;&#20010;&#25968;&#21644;&#33457;&#36153;&#26102;&#38388;&#30340;&#24635;&#32467;&#12290;</dd><dt><a href="#roman.stage1.2.4">circled_4_delcric</a> </dt><dd>&#24635;&#32780;&#35328;&#20043;&#65292;&#30001;&#20110;&#33267;&#23569;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#27809;&#26377;&#36890;&#36807;&#65292;&#21333;&#20803;&#27979;&#35797;&#22833;&#36133;&#20102;&#12290;&#24403;&#26576;&#20010;&#27979;&#35797;&#29992;&#20363;&#27809;&#33021;&#36890;&#36807;&#26102;&#65292;<code class="filename">unittest</code> &#20250;&#21306;&#20998;&#26159;&#22833;&#36133; (failures) &#36824;&#26159;&#38169;&#35823; (errors)&#12290;&#22833;&#36133;&#26159;&#25351;&#35843;&#29992; <code class="function">assertXYZ</code> &#26041;&#27861;&#65292;&#27604;&#22914; <code class="function">assertEqual</code> &#25110;&#32773; <code class="function">assertRaises</code> &#26102;&#65292;&#26029;&#35328;&#30340;&#24773;&#20917;&#27809;&#26377;&#21457;&#29983;&#25110;&#39044;&#26399;&#30340;&#24322;&#24120;&#27809;&#26377;&#34987;&#24341;&#21457;&#12290;&#32780;&#38169;&#35823;&#26159;&#25351;&#20320;&#27979;&#35797;&#30340;&#20195;&#30721;&#25110;&#21333;&#20803;&#27979;&#35797;&#26412;&#36523;&#21457;&#29983;&#20102;&#26576;&#31181;&#24322;&#24120;&#12290;&#20363;&#22914;&#65306;<code class="function">testFromRomanCase</code> &#26041;&#27861; ("<span class="quote"><code class="function">fromRoman</code> &#21482;&#25509;&#21463;&#22823;&#20889;&#36755;&#20837;</span>") &#23601;&#26159;&#19968;&#20010;&#38169;&#35823;&#65292;&#22240;&#20026;&#35843;&#29992; <code class="function">numeral.upper()</code> &#24341;&#21457;&#20102;&#19968;&#20010; <code class="errorcode">AttributeError</code> &#24322;&#24120;&#65292;&#22240;&#20026; <code class="function">toRoman</code> &#30340;&#36820;&#22238;&#20540;&#19981;&#26159;&#26399;&#26395;&#30340;&#23383;&#31526;&#20018;&#31867;&#22411;&#12290;&#20294;&#26159;&#65292;<code class="function">testZero</code> ("<span class="quote"><code class="function">toRoman</code> &#24212;&#35813;&#22312;&#36755;&#20837; 0 &#26102;&#22833;&#36133;</span>") &#26159;&#19968;&#20010;&#22833;&#36133;&#65292;&#22240;&#20026;&#35843;&#29992; <code class="function">fromRoman</code> &#27809;&#26377;&#24341;&#21457;&#19968;&#20010; <code class="function">assertRaises</code> &#26399;&#24453;&#30340;&#24322;&#24120;&#65306;<code class="errorcode">InvalidRomanNumeral</code>&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.stage2"></a>14.2.&nbsp;<code class="filename">roman.py</code>, &#31532; 2 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312;&#20320;&#26377;&#20102; <code class="filename">roman</code> &#27169;&#22359;&#30340;&#22823;&#27010;&#26694;&#26550;&#65292;&#21040;&#20102;&#24320;&#22987;&#20889;&#20195;&#30721;&#20197;&#36890;&#36807;&#27979;&#35797;&#30340;&#26102;&#20505;&#20102;&#12290;</p></div><div class="example"><a name="roman.stage2.example"></a><p class="title"><b>&#20363;&nbsp;14.3.&nbsp;<code class="filename">roman2.py</code></b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#20174; <code class="filename">py/roman/stage2/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Convert to and from Roman numerals"""

#Define exceptions
class RomanError(Exception): pass
class OutOfRangeError(RomanError): pass
class NotIntegerError(RomanError): pass
class InvalidRomanNumeralError(RomanError): pass

#Define digit mapping
romanNumeralMap = (('M',  1000), <a name="roman.stage2.1.1"></a>circled_1_delcric
                   ('CM', 900),
                   ('D',  500),
                   ('CD', 400),
                   ('C',  100),
                   ('XC', 90),
                   ('L',  50),
                   ('XL', 40),
                   ('X',  10),
                   ('IX', 9),
                   ('V',  5),
                   ('IV', 4),
                   ('I',  1))

def toRoman(n):
    """convert integer to Roman numeral"""
    result = ""
    for numeral, integer in romanNumeralMap:
        while n &gt;= integer:      <a name="roman.stage2.1.2"></a>circled_2_delcric
            result += numeral
            n -= integer
    return result

def fromRoman(s):
    """convert Roman numeral to integer"""
    pass
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage2.1.1">circled_1_delcric</a> </dt><dd><code class="varname">romanNumeralMap</code> &#26159;&#19968;&#20010;&#29992;&#26469;&#23450;&#20041;&#19977;&#20010;&#20869;&#23481;&#30340;&#20803;&#32452;&#30340;&#20803;&#32452;&#65306;<div class="orderedlist"><ol type="1"><li>&#20195;&#34920;&#22823;&#37096;&#20998;&#32599;&#39532;&#25968;&#23383;&#30340;&#23383;&#31526;&#12290;&#27880;&#24847;&#19981;&#21482;&#26159;&#21333;&#23383;&#31526;&#30340;&#32599;&#39532;&#25968;&#23383;&#65292;&#20320;&#21516;&#26679;&#22312;&#36825;&#37324;&#23450;&#20041;&#35832;&#22914; <code class="literal">CM</code> ("<span class="quote">&#27604;&#19968;&#21315;&#23569;&#19968;&#30334;&#65292;&#21363; 900</span>") &#30340;&#21452;&#23383;&#31526;&#65292;&#36825;&#21487;&#20197;&#35753;&#31245;&#21518;&#32534;&#20889;&#30340; <code class="function">toRoman</code> &#31616;&#21333;&#19968;&#20123;&#12290;</li><li>&#32599;&#39532;&#25968;&#23383;&#30340;&#39034;&#24207;&#12290;&#23427;&#20204;&#26159;&#20197;&#38477;&#24207;&#25490;&#21015;&#30340;&#65292;&#20174;<code class="literal">M</code> &#19968;&#36335;&#21040; <code class="literal">I</code>&#12290;</li><li>&#27599;&#20010;&#32599;&#39532;&#25968;&#23383;&#25152;&#23545;&#24212;&#30340;&#25968;&#20540;&#12290;&#27599;&#20010;&#20869;&#37096;&#30340;&#20803;&#32452;&#37117;&#26159;&#19968;&#20010; <code class="literal"> (<em class="replaceable">numeral</em>&#65292;<em class="replaceable">value</em>)</code> &#25968;&#20540;&#23545;&#12290;</li></ol></div></dd><dt><a href="#roman.stage2.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#37324;&#20415;&#26174;&#31034;&#20986;&#20320;&#20016;&#23500;&#30340;&#25968;&#25454;&#32467;&#26500;&#24102;&#26469;&#30340;&#20248;&#21183;&#65292;&#20320;&#19981;&#38656;&#35201;&#20160;&#20040;&#29305;&#23450;&#30340;&#36923;&#36753;&#22788;&#29702;&#20943;&#27861;&#35268;&#21017;&#12290;&#20320;&#21482;&#38656;&#35201;&#36890;&#36807;&#25628;&#23547; <code class="varname">romanNumeralMap</code> &#23547;&#25214;&#19981;&#22823;&#20110;&#36755;&#20837;&#25968;&#20540;&#30340;&#26368;&#22823;&#23545;&#24212;&#25972;&#25968;&#21363;&#21487;&#12290;&#21482;&#35201;&#25214;&#21040;&#65292;&#23601;&#22312;&#32467;&#26524;&#30340;&#32467;&#23614;&#25226;&#36825;&#20010;&#25972;&#25968;&#23545;&#24212;&#30340;&#32599;&#39532;&#23383;&#31526;&#28155;&#21152;&#21040;&#36755;&#20986;&#32467;&#26524;&#30340;&#26411;&#23614;&#65292;&#20174;&#36755;&#20837;&#20540;&#20013;&#20943;&#21435;&#36825;&#20010;&#25972;&#25968;&#65292;&#19968;&#36941;&#36941;&#36825;&#26679;&#32487;&#32493;&#19979;&#21435;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e33360"></a><p class="title"><b>&#20363;&nbsp;14.4.&nbsp;<code class="function">toRoman</code> &#22914;&#20309;&#24037;&#20316;</b></p><div class="example-contents"><p>&#22914;&#26524;&#20320;&#19981;&#26126;&#20102; <code class="function">toRoman</code> &#22914;&#20309;&#24037;&#20316;&#65292;&#22312; <code class="literal">while</code> &#24490;&#29615;&#30340;&#32467;&#23614;&#28155;&#21152;&#19968;&#20010; <code class="function">print</code> &#35821;&#21477;&#65306;</p><pre class="programlisting">
        while n &gt;= integer:
            result += numeral
            n -= integer
            print 'subtracting', integer, 'from input, adding', numeral, 'to output'</pre><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import roman2</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">roman2.toRoman(1424)</span>
<font color="teal">subtracting 1000 from input, adding M to output
subtracting 400 from input, adding CD to output
subtracting 10 from input, adding X to output
subtracting 10 from input, adding X to output
subtracting 4 from input, adding IV to output
'MCDXXIV'</font>
</pre></div></div><br class="example-break"><p>&#30475;&#26469; <code class="function">toRoman</code> &#21487;&#20197;&#36816;&#36716;&#20102;&#65292;&#33267;&#23569;&#25163;&#24037;&#27979;&#35797;&#21487;&#20197;&#12290;&#20294;&#33021;&#36890;&#36807;&#21333;&#20803;&#27979;&#35797;&#21527;&#65311;&#21834;&#21704;&#65292;&#19981;&#65292;&#19981;&#23436;&#20840;&#21487;&#20197;&#12290;</p><div class="example"><a name="d0e33398"></a><p class="title"><b>&#20363;&nbsp;14.5.&nbsp;&#20197; <code class="filename">romantest2.py</code> &#27979;&#35797; <code class="filename">roman2.py</code> &#30340;&#36755;&#20986;</b></p><div class="example-contents"><p>&#35201;&#35760;&#24471;&#29992; <code class="literal">-v</code> &#21629;&#20196;&#34892;&#36873;&#39033;&#36816;&#34892; <code class="filename">romantest2.py</code> &#24320;&#21551;&#35814;&#32454;&#20449;&#24687;&#27169;&#24335;&#12290;</p><pre class="screen"><font color="teal">fromRoman should only accept uppercase input ... FAIL
toRoman should always return uppercase ... ok                  </font><a name="roman.stage2.2.1"></a>circled_1_delcric<font color="teal">
fromRoman should fail with malformed antecedents ... FAIL
fromRoman should fail with repeated pairs of numerals ... FAIL
fromRoman should fail with too many repeated numerals ... FAIL
fromRoman should give known result with known input ... FAIL
toRoman should give known result with known input ... ok       </font><a name="roman.stage2.2.2"></a>circled_2_delcric<font color="teal">
fromRoman(toRoman(n))==n for all n ... FAIL
toRoman should fail with non-integer input ... FAIL            </font><a name="roman.stage2.2.3"></a>circled_3_delcric<font color="teal">
toRoman should fail with negative input ... FAIL
toRoman should fail with large input ... FAIL
toRoman should fail with 0 input ... FAIL</font></pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage2.2.1">circled_1_delcric</a> </dt><dd>&#20107;&#23454;&#19978;&#65292;<code class="function">toRoman</code> &#30340;&#36820;&#22238;&#20540;&#24635;&#26159;&#22823;&#20889;&#30340;&#65292;&#22240;&#20026; <code class="varname">romanNumeralMap</code> &#23450;&#20041;&#30340;&#32599;&#39532;&#23383;&#31526;&#37117;&#26159;&#20197;&#22823;&#20889;&#23383;&#27597;&#34920;&#31034;&#30340;&#12290;&#22240;&#27492;&#36825;&#20010;&#27979;&#35797;&#24050;&#32463;&#36890;&#36807;&#20102;&#12290;</dd><dt><a href="#roman.stage2.2.2">circled_2_delcric</a> </dt><dd>&#22909;&#28040;&#24687;&#26469;&#20102;&#65306;&#36825;&#20010;&#29256;&#26412;&#30340; <code class="function">toRoman</code> &#20989;&#25968;&#33021;&#22815;&#36890;&#36807;<a class="link" href="#roman.testtoromanknownvalues.example" title="&#20363;&nbsp;13.2.&nbsp;testToRomanKnownValues">&#24050;&#30693;&#20540;&#27979;&#35797;</a>&#12290;&#35760;&#20303;&#65292;&#36825;&#24182;&#19981;&#33021;&#35777;&#26126;&#23436;&#20840;&#27809;&#38382;&#39064;&#65292;&#20294;&#33267;&#23569;&#36890;&#36807;&#27979;&#35797;&#22810;&#31181;&#26377;&#25928;&#36755;&#20837;&#32771;&#39564;&#20102;&#36825;&#20010;&#20989;&#25968;&#65306;&#21253;&#25324;&#27599;&#20010;&#21333;&#19968;&#23383;&#31526;&#30340;&#32599;&#39532;&#25968;&#23383;&#65292;&#21487;&#33021;&#30340;&#26368;&#22823;&#36755;&#20837; (<code class="literal">3999</code>)&#65292;&#20197;&#21450;&#21487;&#33021;&#30340;&#26368;&#38271;&#30340;&#32599;&#39532;&#25968;&#23383; (&#23545;&#24212;&#20110; <code class="literal">3888</code>)&#12290;&#20174;&#36825;&#28857;&#26469;&#30475;&#65292;&#20320;&#26377;&#29702;&#30001;&#30456;&#20449;&#36825;&#20010;&#20989;&#25968;&#23545;&#20110;&#20219;&#20309;&#26377;&#25928;&#36755;&#20837;&#37117;&#19981;&#20250;&#20986;&#38382;&#39064;&#12290;</dd><dt><a href="#roman.stage2.2.3">circled_3_delcric</a> </dt><dd>&#20294;&#26159;&#65292;&#20989;&#25968;&#36824;&#27809;&#21150;&#27861;&#22788;&#29702;&#26080;&#25928;&#36755;&#20837;&#65292;&#27599;&#20010;<a class="link" href="#roman.tobadinput.example" title="&#20363;&nbsp;13.3.&nbsp;&#27979;&#35797; toRoman &#30340;&#26080;&#25928;&#36755;&#20837;">&#26080;&#25928;&#36755;&#20837;&#27979;&#35797;</a>&#37117;&#22833;&#36133;&#20102;&#12290;&#36825;&#24456;&#22909;&#29702;&#35299;&#65292;&#22240;&#20026;&#20320;&#36824;&#27809;&#26377;&#23545;&#26080;&#25928;&#36755;&#20837;&#36827;&#34892;&#26816;&#26597;&#65292;&#27979;&#35797;&#29992;&#20363;&#24076;&#26395;&#25429;&#25417;&#21040;&#29305;&#23450;&#30340;&#24322;&#24120; (&#36890;&#36807; <code class="function">assertRaises</code>)&#65292;&#32780;&#20320;&#26681;&#26412;&#27809;&#26377;&#35753;&#36825;&#20123;&#24322;&#24120;&#24341;&#21457;&#12290;&#36825;&#26159;&#20320;&#19979;&#19968;&#38454;&#27573;&#30340;&#24037;&#20316;&#12290;</dd></dl></div><p>&#19979;&#38754;&#26159;&#21333;&#20803;&#27979;&#35797;&#32467;&#26524;&#30340;&#21097;&#20313;&#37096;&#20998;&#65292;&#21015;&#20986;&#20102;&#25152;&#26377;&#22833;&#36133;&#30340;&#35814;&#32454;&#20449;&#24687;&#65292;&#20320;&#24050;&#32463;&#35753;&#23427;&#38477;&#21040;&#20102; 10 &#20010;&#12290;</p><pre class="screen"><font color="teal">
======================================================================
FAIL: fromRoman should only accept uppercase input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 156, in testFromRomanCase
    roman2.fromRoman, numeral.lower())
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with malformed antecedents
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 133, in testMalformedAntecedent
    self.assertRaises(roman2.InvalidRomanNumeralError, roman2.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with repeated pairs of numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 127, in testRepeatedPairs
    self.assertRaises(roman2.InvalidRomanNumeralError, roman2.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with too many repeated numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 122, in testTooManyRepeatedNumerals
    self.assertRaises(roman2.InvalidRomanNumeralError, roman2.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should give known result with known input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 99, in testFromRomanKnownValues
    self.assertEqual(integer, result)
  File "c:\python21\lib\unittest.py", line 273, in failUnlessEqual
    raise self.failureException, (msg or '%s != %s' % (first, second))
AssertionError: 1 != None</font><font color="teal">
======================================================================
FAIL: fromRoman(toRoman(n))==n for all n
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 141, in testSanity
    self.assertEqual(integer, result)
  File "c:\python21\lib\unittest.py", line 273, in failUnlessEqual
    raise self.failureException, (msg or '%s != %s' % (first, second))
AssertionError: 1 != None</font><font color="teal">
======================================================================
FAIL: toRoman should fail with non-integer input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 116, in testNonInteger
    self.assertRaises(roman2.NotIntegerError, roman2.toRoman, 0.5)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: NotIntegerError</font><font color="teal">
======================================================================
FAIL: toRoman should fail with negative input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 112, in testNegative
    self.assertRaises(roman2.OutOfRangeError, roman2.toRoman, -1)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: OutOfRangeError</font><font color="teal">
======================================================================
FAIL: toRoman should fail with large input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 104, in testTooLarge
    self.assertRaises(roman2.OutOfRangeError, roman2.toRoman, 4000)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: OutOfRangeError</font><font color="teal">
======================================================================
FAIL: toRoman should fail with 0 input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage2\romantest2.py", line 108, in testZero
    self.assertRaises(roman2.OutOfRangeError, roman2.toRoman, 0)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: OutOfRangeError</font><font color="teal">
----------------------------------------------------------------------
Ran 12 tests in 0.320s

FAILED (failures=10)</font></pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.stage3"></a>14.3.&nbsp;<code class="filename">roman.py</code>, &#31532; 3 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312; <code class="function">toRoman</code> &#23545;&#20110;&#26377;&#25928;&#30340;&#36755;&#20837; (<code class="literal">1</code> &#21040; <code class="literal">3999</code> &#25972;&#25968;) &#24050;&#33021;&#27491;&#30830;&#24037;&#20316;&#65292;&#26159;&#27491;&#30830;&#22788;&#29702;&#37027;&#20123;&#26080;&#25928;&#36755;&#20837; (&#20219;&#20309;&#20854;&#20182;&#36755;&#20837;) &#30340;&#26102;&#20505;&#20102;&#12290;</p></div><div class="example"><a name="d0e33525"></a><p class="title"><b>&#20363;&nbsp;14.6.&nbsp;<code class="filename">roman3.py</code></b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage3/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Convert to and from Roman numerals"""

#Define exceptions
class RomanError(Exception): pass
class OutOfRangeError(RomanError): pass
class NotIntegerError(RomanError): pass
class InvalidRomanNumeralError(RomanError): pass

#Define digit mapping
romanNumeralMap = (('M',  1000),
                   ('CM', 900),
                   ('D',  500),
                   ('CD', 400),
                   ('C',  100),
                   ('XC', 90),
                   ('L',  50),
                   ('XL', 40),
                   ('X',  10),
                   ('IX', 9),
                   ('V',  5),
                   ('IV', 4),
                   ('I',  1))

def toRoman(n):
    """convert integer to Roman numeral"""
    if not (0 &lt; n &lt; 4000):                                             <a name="roman.stage3.1.1"></a>circled_1_delcric
        raise OutOfRangeError, "number out of range (must be 1..3999)" <a name="roman.stage3.1.2"></a>circled_2_delcric
    if int(n) &lt;&gt; n:                                                    <a name="roman.stage3.1.3"></a>circled_3_delcric
        raise NotIntegerError, "non-integers can not be converted"

    result = ""                                                        <a name="roman.stage3.1.4"></a>circled_4_delcric
    for numeral, integer in romanNumeralMap:
        while n &gt;= integer:
            result += numeral
            n -= integer
    return result

def fromRoman(s):
    """convert Roman numeral to integer"""
    pass
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage3.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#20889;&#27861;&#24456; Pythonic&#65306;&#19968;&#27425;&#36827;&#34892;&#22810;&#20010;&#27604;&#36739;&#12290;&#36825;&#31561;&#20215;&#20110;<code class="literal">if not ((0 &lt; n) and (n &lt; 4000))</code>&#65292;&#20294;&#26159;&#26356;&#23481;&#26131;&#35753;&#20154;&#29702;&#35299;&#12290;&#36825;&#26159;&#22312;&#36827;&#34892;&#33539;&#22260;&#26816;&#26597;&#65292;&#21487;&#20197;&#23558;&#36807;&#22823;&#30340;&#25968;&#12289;&#36127;&#25968;&#21644;&#38646;&#26597;&#20986;&#26469;&#12290;</dd><dt><a href="#roman.stage3.1.2">circled_2_delcric</a> </dt><dd>&#20320;&#20351;&#29992; <code class="literal">raise</code> &#35821;&#21477;&#24341;&#21457;&#33258;&#24049;&#30340;&#24322;&#24120;&#12290;&#20320;&#21487;&#20197;&#24341;&#21457;&#20219;&#20309;&#20869;&#24314;&#24322;&#24120;&#25110;&#32773;&#24050;&#23450;&#20041;&#30340;&#33258;&#23450;&#20041;&#24322;&#24120;&#12290;&#31532;&#20108;&#20010;&#21442;&#25968;&#26159;&#21487;&#36873;&#30340;&#65292;&#22914;&#26524;&#32473;&#23450;&#65292;&#21017;&#20250;&#22312;&#24322;&#24120;&#26410;&#34987;&#22788;&#29702;&#26102;&#26174;&#31034;&#20110;&#36861;&#36394;&#20449;&#24687; (trackback) &#20043;&#20013;&#12290;</dd><dt><a href="#roman.stage3.1.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010;&#38750;&#25972;&#25968;&#26816;&#26597;&#12290;&#38750;&#25972;&#25968;&#26080;&#27861;&#36716;&#21270;&#20026;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#12290;</dd><dt><a href="#roman.stage3.1.4">circled_4_delcric</a> </dt><dd>&#20989;&#25968;&#30340;&#20854;&#20182;&#37096;&#20998;&#26410;&#34987;&#26356;&#25913;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e33568"></a><p class="title"><b>&#20363;&nbsp;14.7.&nbsp;&#35266;&#23519; <code class="function">toRoman</code> &#22914;&#20309;&#22788;&#29702;&#26080;&#25928;&#36755;&#20837;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import roman3</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">roman3.toRoman(4000)</span>
<font color="red">Traceback (most recent call last):
  File "&lt;interactive input&gt;", line 1, in ?
  File "roman3.py", line 27, in toRoman
    raise OutOfRangeError, "number out of range (must be 1..3999)"
OutOfRangeError: number out of range (must be 1..3999)</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">roman3.toRoman(1.5)</span>
<font color="red">Traceback (most recent call last):
  File "&lt;interactive input&gt;", line 1, in ?
  File "roman3.py", line 29, in toRoman
    raise NotIntegerError, "non-integers can not be converted"
NotIntegerError: non-integers can not be converted</font>
</pre></div></div><br class="example-break"><div class="example"><a name="d0e33597"></a><p class="title"><b>&#20363;&nbsp;14.8.&nbsp;&#29992; <code class="filename">romantest3.py</code> &#27979;&#35797; <code class="filename">roman3.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">fromRoman should only accept uppercase input ... FAIL
toRoman should always return uppercase ... ok
fromRoman should fail with malformed antecedents ... FAIL
fromRoman should fail with repeated pairs of numerals ... FAIL
fromRoman should fail with too many repeated numerals ... FAIL
fromRoman should give known result with known input ... FAIL
toRoman should give known result with known input ... ok </font><a name="roman.stage3.2.1"></a>circled_1_delcric<font color="teal">
fromRoman(toRoman(n))==n for all n ... FAIL
toRoman should fail with non-integer input ... ok        </font><a name="roman.stage3.2.2"></a>circled_2_delcric<font color="teal">
toRoman should fail with negative input ... ok           </font><a name="roman.stage3.2.3"></a>circled_3_delcric<font color="teal">
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok</font></pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage3.2.1">circled_1_delcric</a> </dt><dd><code class="function">toRoman</code> &#20173;&#28982;&#33021;&#36890;&#36807;<a class="link" href="#roman.testtoromanknownvalues.example" title="&#20363;&nbsp;13.2.&nbsp;testToRomanKnownValues">&#24050;&#30693;&#20540;&#27979;&#35797;</a>&#65292;&#36825;&#24456;&#20196;&#20154;&#40723;&#33310;&#12290;&#25152;&#26377;<a class="link" href="#roman.stage2" title="14.2.&nbsp;roman.py, &#31532; 2 &#38454;&#27573;">&#31532; 2 &#38454;&#27573;</a>&#36890;&#36807;&#30340;&#27979;&#35797;&#20173;&#28982;&#33021;&#36890;&#36807;&#65292;&#36825;&#35828;&#26126;&#26032;&#30340;&#20195;&#30721;&#27809;&#26377;&#23545;&#21407;&#26377;&#20195;&#30721;&#26500;&#25104;&#20219;&#20309;&#36127;&#38754;&#24433;&#21709;&#12290;</dd><dt><a href="#roman.stage3.2.2">circled_2_delcric</a> </dt><dd>&#26356;&#20196;&#20154;&#25391;&#22859;&#30340;&#26159;&#25152;&#26377;&#30340;<a class="link" href="#roman.tobadinput.example" title="&#20363;&nbsp;13.3.&nbsp;&#27979;&#35797; toRoman &#30340;&#26080;&#25928;&#36755;&#20837;">&#26080;&#25928;&#36755;&#20837;&#27979;&#35797;</a>&#29616;&#22312;&#37117;&#36890;&#36807;&#20102;&#12290;<code class="function">testNonInteger</code> &#36825;&#20010;&#27979;&#35797;&#33021;&#22815;&#36890;&#36807;&#26159;&#22240;&#20026;&#26377;&#20102; <code class="literal">int(n) &lt;&gt; n</code> &#26816;&#26597;&#12290;&#24403;&#19968;&#20010;&#38750;&#25972;&#25968;&#20256;&#36882;&#32473; <code class="function">toRoman</code> &#26102;&#65292;<code class="literal">int(n) &lt;&gt; n</code> &#26816;&#26597;&#20986;&#38382;&#39064;&#24182;&#24341;&#21457; <code class="errorcode">NotIntegerError</code> &#24322;&#24120;&#65292;&#36825;&#27491;&#26159; <code class="function">testNonInteger</code> &#25152;&#26399;&#24453;&#30340;&#12290;</dd><dt><a href="#roman.stage3.2.3">circled_3_delcric</a> </dt><dd><code class="function">testNegative</code> &#36825;&#20010;&#27979;&#35797;&#33021;&#22815;&#36890;&#36807;&#26159;&#22240;&#20026; <code class="literal">not (0 &lt; n &lt; 4000)</code> &#26816;&#26597;&#24341;&#21457;&#20102; <code class="function">testNegative</code> &#26399;&#24453;&#30340; <code class="errorcode">OutOfRangeError</code> &#24322;&#24120;&#12290;</dd></dl></div><pre class="screen"><font color="teal">
======================================================================
FAIL: fromRoman should only accept uppercase input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage3\romantest3.py", line 156, in testFromRomanCase
    roman3.fromRoman, numeral.lower())
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with malformed antecedents
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage3\romantest3.py", line 133, in testMalformedAntecedent
    self.assertRaises(roman3.InvalidRomanNumeralError, roman3.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with repeated pairs of numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage3\romantest3.py", line 127, in testRepeatedPairs
    self.assertRaises(roman3.InvalidRomanNumeralError, roman3.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with too many repeated numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage3\romantest3.py", line 122, in testTooManyRepeatedNumerals
    self.assertRaises(roman3.InvalidRomanNumeralError, roman3.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should give known result with known input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage3\romantest3.py", line 99, in testFromRomanKnownValues
    self.assertEqual(integer, result)
  File "c:\python21\lib\unittest.py", line 273, in failUnlessEqual
    raise self.failureException, (msg or '%s != %s' % (first, second))
AssertionError: 1 != None</font><font color="teal">
======================================================================
FAIL: fromRoman(toRoman(n))==n for all n
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage3\romantest3.py", line 141, in testSanity
    self.assertEqual(integer, result)
  File "c:\python21\lib\unittest.py", line 273, in failUnlessEqual
    raise self.failureException, (msg or '%s != %s' % (first, second))
AssertionError: 1 != None</font><font color="teal">
----------------------------------------------------------------------
Ran 12 tests in 0.401s

FAILED (failures=6)</font> <a name="roman.stage3.3.1"></a>circled_1_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage3.3.1">circled_1_delcric</a> </dt><dd>&#20320;&#24050;&#23558;&#22833;&#36133;&#38477;&#33267; 6 &#20010;&#65292;&#32780;&#19988;&#23427;&#20204;&#37117;&#26159;&#20851;&#20110; <code class="function">fromRoman</code> &#30340;&#65306;&#24050;&#30693;&#20540;&#27979;&#35797;&#12289;&#19977;&#20010;&#29420;&#31435;&#30340;&#26080;&#25928;&#36755;&#20837;&#27979;&#35797;&#65292;&#22823;&#23567;&#20889;&#26816;&#26597;&#21644;&#23436;&#22791;&#24615;&#26816;&#26597;&#12290;&#36825;&#24847;&#21619;&#30528; <code class="function">toRoman</code> &#36890;&#36807;&#20102;&#25152;&#26377;&#21487;&#20197;&#29420;&#31435;&#36890;&#36807;&#30340;&#27979;&#35797; (&#23436;&#22791;&#24615;&#27979;&#35797;&#20063;&#27979;&#35797;&#23427;&#65292;&#20294;&#38656;&#35201; <code class="function">fromRoman</code> &#32534;&#20889;&#21518;&#19968;&#36215;&#27979;&#35797;)&#12290;&#36825;&#23601;&#26159;&#35828;&#65292;&#20320;&#24212;&#35813;&#20572;&#27490;&#23545; <code class="function">toRoman</code> &#30340;&#20195;&#30721;&#32534;&#20889;&#12290;&#19981;&#24517;&#20877;&#25512;&#25970;&#65292;&#19981;&#24517;&#20877;&#20570;&#39069;&#22806;&#30340;&#26816;&#26597; "<span class="quote">&#24688;&#21040;&#22909;&#22788;</span>"&#12290;&#20572;&#19979;&#26469;&#21543;&#65281;&#29616;&#22312;&#65292;&#21035;&#20877;&#25970;&#38190;&#30424;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="d0e33716">&#27880;&#24847;: &#30693;&#36947;&#20160;&#20040;&#26102;&#20505;&#20572;&#27490;&#32534;&#20889;&#20195;&#30721;</a></b><br>&#20840;&#38754;&#30340;&#21333;&#20803;&#27979;&#35797;&#33021;&#22815;&#21578;&#35785;&#20320;&#30340;&#26368;&#37325;&#35201;&#30340;&#20107;&#24773;&#26159;&#20160;&#20040;&#26102;&#20505;&#20572;&#27490;&#32534;&#20889;&#20195;&#30721;&#12290;&#24403;&#19968;&#20010;&#20989;&#25968;&#30340;&#25152;&#26377;&#21333;&#20803;&#27979;&#35797;&#37117;&#36890;&#36807;&#20102;&#65292;&#20572;&#27490;&#32534;&#20889;&#36825;&#20010;&#20989;&#25968;&#12290;&#19968;&#26086;&#25972;&#20010;&#27169;&#22359;&#30340;&#21333;&#20803;&#27979;&#35797;&#36890;&#36807;&#20102;&#65292;&#20572;&#27490;&#32534;&#20889;&#36825;&#20010;&#27169;&#22359;&#12290;</blockquote></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.stage4"></a>14.4.&nbsp;<code class="filename">roman.py</code>, &#31532; 4 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312; <code class="function">toRoman</code> &#23436;&#25104;&#20102;&#65292;&#26159;&#24320;&#22987;&#32534;&#20889; <code class="function">fromRoman</code> &#30340;&#26102;&#20505;&#20102;&#12290;&#24863;&#35874;&#37027;&#20010;&#23558;&#27599;&#20010;&#32599;&#39532;&#25968;&#23383;&#21644;&#23545;&#24212;&#25972;&#25968;&#20851;&#36830;&#30340;&#23436;&#32654;&#25968;&#25454;&#32467;&#26500;&#65292;&#36825;&#20010;&#24037;&#20316;&#19981;&#27604; <code class="function">toRoman</code> &#20989;&#25968;&#22797;&#26434;&#12290;</p></div><div class="example"><a name="d0e33740"></a><p class="title"><b>&#20363;&nbsp;14.9.&nbsp;<code class="filename">roman4.py</code></b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage4/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Convert to and from Roman numerals"""

#Define exceptions
class RomanError(Exception): pass
class OutOfRangeError(RomanError): pass
class NotIntegerError(RomanError): pass
class InvalidRomanNumeralError(RomanError): pass

#Define digit mapping
romanNumeralMap = (('M',  1000),
                   ('CM', 900),
                   ('D',  500),
                   ('CD', 400),
                   ('C',  100),
                   ('XC', 90),
                   ('L',  50),
                   ('XL', 40),
                   ('X',  10),
                   ('IX', 9),
                   ('V',  5),
                   ('IV', 4),
                   ('I',  1))

# toRoman function omitted for clarity (it hasn't changed)

def fromRoman(s):
    """convert Roman numeral to integer"""
    result = 0
    index = 0
    for numeral, integer in romanNumeralMap:
        while s[index:index+len(numeral)] == numeral: <a name="roman.stage4.1.1"></a>circled_1_delcric
            result += integer
            index += len(numeral)
    return result
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage4.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#21644; <a class="link" href="#roman.stage2.example" title="&#20363;&nbsp;14.3.&nbsp;roman2.py"><code class="function">toRoman</code></a> &#30340;&#24037;&#20316;&#27169;&#24335;&#24456;&#30456;&#20284;&#12290;&#20320;&#36941;&#21382;&#25972;&#20010;&#32599;&#39532;&#25968;&#23383;&#25968;&#25454;&#32467;&#26500; (&#19968;&#20010;&#20803;&#32452;&#30340;&#20803;&#32452;)&#65292;&#19982;&#21069;&#38754;&#19981;&#21516;&#30340;&#26159;&#19981;&#21435;&#19968;&#20010;&#20010;&#25628;&#23547;&#26368;&#22823;&#30340;&#25972;&#25968;&#65292;&#32780;&#26159;&#25628;&#23547; "<span class="quote">&#26368;&#22823;&#30340;</span>"&#32599;&#39532;&#25968;&#23383;&#23383;&#31526;&#20018;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e33769"></a><p class="title"><b>&#20363;&nbsp;14.10.&nbsp;<code class="function">fromRoman</code> &#22914;&#20309;&#24037;&#20316;</b></p><div class="example-contents"><p>&#22914;&#26524;&#20320;&#19981;&#28165;&#26970; <code class="function">fromRoman</code> &#22914;&#20309;&#24037;&#20316;&#65292;&#22312; <code class="literal">while</code> &#32467;&#23614;&#22788;&#28155;&#21152;&#19968;&#20010; <code class="function">print</code> &#35821;&#21477;&#65306;</p><pre class="programlisting">
        while s[index:index+len(numeral)] == numeral:
            result += integer
            index += len(numeral)
            print 'found', numeral, 'of length', len(numeral), ', adding', integer</pre><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import roman4</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">roman4.fromRoman('MCMLXXII')</span>
<font color="teal">found M , of length 1, adding 1000
found CM , of length 2, adding 900
found L , of length 1, adding 50
found X , of length 1, adding 10
found X , of length 1, adding 10
found I , of length 1, adding 1
found I , of length 1, adding 1
1972</font></pre></div></div><br class="example-break"><div class="example"><a name="d0e33801"></a><p class="title"><b>&#20363;&nbsp;14.11.&nbsp;&#29992; <code class="filename">romantest4.py</code> &#27979;&#35797; <code class="filename">roman4.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">fromRoman should only accept uppercase input ... FAIL
toRoman should always return uppercase ... ok
fromRoman should fail with malformed antecedents ... FAIL
fromRoman should fail with repeated pairs of numerals ... FAIL
fromRoman should fail with too many repeated numerals ... FAIL
fromRoman should give known result with known input ... ok </font><a name="roman.stage4.2.1"></a>circled_1_delcric<font color="teal">
toRoman should give known result with known input ... ok
fromRoman(toRoman(n))==n for all n ... ok                  </font><a name="roman.stage4.2.2"></a>circled_2_delcric<font color="teal">
toRoman should fail with non-integer input ... ok
toRoman should fail with negative input ... ok
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok</font></pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage4.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#20799;&#26377;&#20004;&#20010;&#20196;&#20154;&#28608;&#21160;&#30340;&#28040;&#24687;&#12290;&#19968;&#20010;&#26159; <code class="function">fromRoman</code> &#23545;&#20110;&#25152;&#26377;&#26377;&#25928;&#36755;&#20837;&#36816;&#36716;&#27491;&#24120;&#65292;&#33267;&#23569;&#23545;&#20110;&#20320;&#27979;&#35797;&#30340;<a class="link" href="#roman.testtoromanknownvalues.example" title="&#20363;&nbsp;13.2.&nbsp;testToRomanKnownValues">&#24050;&#30693;&#20540;</a>&#26159;&#36825;&#26679;&#12290;</dd><dt><a href="#roman.stage4.2.2">circled_2_delcric</a> </dt><dd>&#31532;&#20108;&#20010;&#22909;&#28040;&#24687;&#26159;&#65292;<a class="link" href="#roman.sanity.example" title="&#20363;&nbsp;13.5.&nbsp;&#20197; toRoman &#27979;&#35797; fromRoman &#30340;&#36755;&#20986;">&#23436;&#22791;&#24615;&#27979;&#35797;</a>&#20063;&#36890;&#36807;&#20102;&#12290;&#19982;&#24050;&#30693;&#20540;&#27979;&#35797;&#30340;&#36890;&#36807;&#19968;&#36215;&#26469;&#30475;&#65292;&#20320;&#26377;&#29702;&#30001;&#30456;&#20449; <code class="function">toRoman</code> &#21644; <code class="function">fromRoman</code> &#23545;&#20110;&#25152;&#26377;&#26377;&#25928;&#36755;&#20837;&#20540;&#24037;&#20316;&#27491;&#24120;&#12290;(&#23578;&#19981;&#33021;&#23436;&#20840;&#30456;&#20449;&#65292;&#29702;&#35770;&#19978;&#23384;&#22312;&#36825;&#31181;&#21487;&#33021;&#24615;&#65306;<code class="function">toRoman</code> &#23384;&#22312;&#38169;&#35823;&#32780;&#23548;&#33268;&#19968;&#20123;&#29305;&#23450;&#36755;&#20837;&#20250;&#20135;&#29983;&#38169;&#35823;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#65292;<span class="emphasis"><em>&#24182;&#19988;</em></span> <code class="function">fromRoman</code> &#20063;&#23384;&#22312;&#30456;&#24212;&#30340;&#38169;&#35823;&#65292;&#25226; <code class="function">toRoman</code> &#38169;&#35823;&#20135;&#29983;&#30340;&#36825;&#20123;&#32599;&#39532;&#25968;&#23383;&#38169;&#35823;&#22320;&#36716;&#25442;&#20026;&#26368;&#21021;&#30340;&#25972;&#25968;&#12290;&#21462;&#20915;&#20110;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#21644;&#20320;&#30340;&#35201;&#27714;&#65292;&#20320;&#25110;&#35768;&#38656;&#35201;&#32771;&#34385;&#36825;&#20010;&#21487;&#33021;&#24615;&#12290;&#22914;&#26524;&#26159;&#36825;&#26679;&#65292;&#32534;&#20889;&#26356;&#20840;&#38754;&#30340;&#27979;&#35797;&#29992;&#20363;&#30452;&#21040;&#35299;&#20915;&#36825;&#20010;&#38382;&#39064;&#12290;)</dd></dl></div><pre class="screen"><font color="teal">
======================================================================
FAIL: fromRoman should only accept uppercase input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage4\romantest4.py", line 156, in testFromRomanCase
    roman4.fromRoman, numeral.lower())
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with malformed antecedents
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage4\romantest4.py", line 133, in testMalformedAntecedent
    self.assertRaises(roman4.InvalidRomanNumeralError, roman4.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with repeated pairs of numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage4\romantest4.py", line 127, in testRepeatedPairs
    self.assertRaises(roman4.InvalidRomanNumeralError, roman4.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
======================================================================
FAIL: fromRoman should fail with too many repeated numerals
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage4\romantest4.py", line 122, in testTooManyRepeatedNumerals
    self.assertRaises(roman4.InvalidRomanNumeralError, roman4.fromRoman, s)
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
----------------------------------------------------------------------
Ran 12 tests in 1.222s

FAILED (failures=4)</font></pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.stage5"></a>14.5.&nbsp;<code class="filename">roman.py</code>, &#31532; 5 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312; <code class="function">fromRoman</code> &#23545;&#20110;&#26377;&#25928;&#36755;&#20837;&#33021;&#22815;&#27491;&#24120;&#24037;&#20316;&#20102;&#65292;&#26159;&#25581;&#24320;&#26368;&#21518;&#19968;&#20010;&#35868;&#24213;&#30340;&#26102;&#20505;&#20102;&#65306;&#20351;&#23427;&#27491;&#24120;&#24037;&#20316;&#20110;&#26080;&#25928;&#36755;&#20837;&#30340;&#24773;&#20917;&#19979;&#12290;&#36825;&#24847;&#21619;&#30528;&#35201;&#25214;&#20986;&#19968;&#20010;&#26041;&#27861;&#26816;&#26597;&#19968;&#20010;&#23383;&#31526;&#20018;&#26159;&#19981;&#26159;&#26377;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#12290;&#36825;&#27604; <code class="function">toRoman</code> &#20013;<a class="link" href="#roman.stage3" title="14.3.&nbsp;roman.py, &#31532; 3 &#38454;&#27573;">&#39564;&#35777;&#26377;&#25928;&#30340;&#25968;&#23383;&#36755;&#20837;</a>&#22256;&#38590;&#65292;&#20294;&#26159;&#20320;&#21487;&#20197;&#20351;&#29992;&#19968;&#20010;&#24378;&#22823;&#30340;&#24037;&#20855;&#65306;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;</p></div><p>&#22914;&#26524;&#20320;&#19981;&#29087;&#24713;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#24182;&#19988;&#27809;&#26377;&#35835;&#36807; <a class="xref" href="#re" title="&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;7&nbsp;&#31456; <i>&#27491;&#21017;&#34920;&#36798;&#24335;</i></a>&#65292;&#29616;&#22312;&#26159;&#35813;&#22909;&#22909;&#35835;&#35835;&#30340;&#26102;&#20505;&#20102;&#12290;</p><p>&#22914;&#20320;&#22312; <a class="xref" href="#re.roman" title="7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;">&#31532;&nbsp;7.3&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;&#8221;</a>&#20013;&#25152;&#35265;&#21040;&#30340;&#65292;&#26500;&#24314;&#32599;&#39532;&#25968;&#23383;&#26377;&#20960;&#20010;&#31616;&#21333;&#30340;&#35268;&#21017;&#65306;&#20351;&#29992;&#23383;&#27597; <code class="literal">M</code>, <code class="literal">D</code>, <code class="literal">C</code>, <code class="literal">L</code>, <code class="literal">X</code>, <code class="literal">V</code> &#21644; <code class="literal">I</code>&#12290;&#35753;&#25105;&#20204;&#22238;&#39038;&#19968;&#19979;&#65306;</p><div class="orderedlist"><ol type="1"><li>&#23383;&#31526;&#26159;&#34987;&#8220;&#21152;&#8221;&#22312;&#19968;&#36215;&#30340;&#65306;<code class="literal">I</code> &#26159; <code class="constant">1</code>&#65292;<code class="literal">II</code> &#26159; <code class="literal">2</code>&#65292;<code class="literal">III</code> &#26159; <code class="literal">3</code>&#12290;<code class="literal">VI</code> &#26159; <code class="literal">6</code> (&#30475;&#19978;&#21435;&#23601;&#26159; "<span class="quote"><code class="literal">5</code> &#21152; <code class="literal">1</code></span>")&#65292;<code class="literal">VII</code> &#26159; <code class="literal">7</code>&#65292;<code class="literal">VIII</code> &#26159; <code class="literal">8</code>&#12290;</li><li>&#36825;&#20123;&#23383;&#31526; (<code class="literal">I</code>, <code class="literal">X</code>, <code class="literal">C</code> &#21644; <code class="literal">M</code>) &#26368;&#22810;&#21487;&#20197;&#37325;&#22797;&#19977;&#27425;&#12290;&#23545;&#20110; <code class="literal">4</code>&#65292;&#20320;&#21017;&#38656;&#35201;&#21033;&#29992;&#19979;&#19968;&#20010;&#33021;&#22815;&#34987;5&#25972;&#38500;&#30340;&#23383;&#31526;&#36827;&#34892;&#20943;&#25805;&#20316;&#24471;&#21040;&#12290;&#20320;&#19981;&#33021;&#25226; <code class="literal">4</code> &#34920;&#31034;&#20026; <code class="literal">IIII</code> &#32780;&#24212;&#35813;&#34920;&#31034;&#20026; <code class="literal">IV</code> ("<span class="quote">&#27604; <code class="literal">5</code> &#23567; <code class="literal">1</code> </span>")&#12290;<code class="literal">40</code> &#21017;&#34987;&#20889;&#20316; <code class="literal">XL</code> ("<span class="quote">&#27604; <code class="literal">50</code> &#23567; <code class="literal">10</code></span>")&#65292;<code class="literal">41</code> &#34920;&#31034;&#20026; <code class="literal">XLI</code>&#65292;<code class="literal">42</code> &#34920;&#31034;&#20026; <code class="literal">XLII</code>&#65292;<code class="literal">43</code> &#34920;&#31034;&#20026; <code class="literal">XLIII</code>&#65292;<code class="literal">44</code> &#34920;&#31034;&#20026; <code class="literal">XLIV</code> ("<span class="quote">&#27604;<code class="literal">50</code>&#23567;<code class="literal">10</code>&#65292;&#21152;&#19978; <code class="literal">5</code> &#23567; <code class="literal">1</code></span>")&#12290;</li><li>&#31867;&#20284;&#22320;&#65292;&#23545;&#20110;&#25968;&#23383; <code class="literal">9</code>&#65292;&#20320;&#24517;&#39035;&#21033;&#29992;&#19979;&#19968;&#20010;&#33021;&#22815;&#34987;10&#25972;&#38500;&#30340;&#23383;&#31526;&#36827;&#34892;&#20943;&#25805;&#20316;&#24471;&#21040;&#65306;<code class="literal">8</code> &#26159; <code class="literal">VIII</code>&#65292;&#32780; <code class="literal">9</code> &#26159; <code class="literal">IX</code> ("<span class="quote">&#27604; <code class="literal">10</code> &#23567; <code class="literal">1</code></span>")&#65292;&#32780;&#19981;&#26159; <code class="literal">VIIII</code> (&#30001;&#20110; <code class="literal">I</code> &#19981;&#33021;&#37325;&#22797;&#22235;&#27425;)&#12290;<code class="literal">90</code> &#34920;&#31034;&#20026; <code class="literal">XC</code>&#65292;<code class="literal">900</code> &#34920;&#31034;&#20026; <code class="literal">CM</code>&#12290;</li><li>&#21547;&#20116;&#30340;&#23383;&#31526;&#19981;&#33021;&#34987;&#37325;&#22797;&#65306;<code class="literal">10</code> &#24212;&#35813;&#34920;&#31034;&#20026; <code class="literal">X</code>&#65292;&#32780;&#19981;&#20250;&#26159; <code class="literal">VV</code>&#12290;<code class="literal">100</code> &#24212;&#35813;&#34920;&#31034;&#20026; <code class="literal">C</code>&#65292;&#32780;&#19981;&#26159; <code class="literal">LL</code>&#12290;</li><li>&#32599;&#39532;&#25968;&#23383;&#19968;&#33324;&#20174;&#39640;&#20301;&#21040;&#20302;&#20301;&#20070;&#20889;&#65292;&#20174;&#24038;&#21040;&#21491;&#38405;&#35835;&#65292;&#22240;&#27492;&#19981;&#21516;&#39034;&#24207;&#30340;&#23383;&#31526;&#24847;&#20041;&#22823;&#19981;&#30456;&#21516;&#12290;<code class="literal">DC</code> &#26159; <code class="literal">600</code>&#65292;<code class="literal">CD</code> &#26159;&#23436;&#20840;&#21478;&#22806;&#19968;&#20010;&#25968; (<code class="literal">400</code>&#65292;"<span class="quote">&#27604; <code class="literal">500</code> &#23569; <code class="literal">100</code></span>")&#12290;<code class="literal">CI</code> &#26159; <code class="literal">101</code>&#65292;&#32780; <code class="literal">IC</code> &#26681;&#26412;&#23601;&#19981;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383; (&#22240;&#20026;&#20320;&#26080;&#27861;&#20174;<code class="literal">100</code>&#30452;&#25509;&#20943;<code class="literal">1</code>&#65292;&#24212;&#35813;&#20889;&#25104; <code class="literal">XCIX</code>&#65292;&#24847;&#24605;&#26159; "<span class="quote">&#27604; <code class="literal">100</code> &#23569; <code class="literal">10</code>&#65292;&#28982;&#21518;&#21152;&#19978;&#25968;&#23383; <code class="literal">9</code>&#65292;&#20063;&#23601;&#26159;&#27604; <code class="literal">10</code> &#23569; <code class="literal">1</code></span>")&#12290;</li></ol></div><div class="example"><a name="d0e34178"></a><p class="title"><b>&#20363;&nbsp;14.12.&nbsp;<code class="filename">roman5.py</code></b></p><div class="example-contents"><p>&#36825;&#20010;&#31243;&#24207;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340;<code class="filename">py/roman/stage5/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Convert to and from Roman numerals"""
import re

#Define exceptions
class RomanError(Exception): pass
class OutOfRangeError(RomanError): pass
class NotIntegerError(RomanError): pass
class InvalidRomanNumeralError(RomanError): pass

#Define digit mapping
romanNumeralMap = (('M',  1000),
                   ('CM', 900),
                   ('D',  500),
                   ('CD', 400),
                   ('C',  100),
                   ('XC', 90),
                   ('L',  50),
                   ('XL', 40),
                   ('X',  10),
                   ('IX', 9),
                   ('V',  5),
                   ('IV', 4),
                   ('I',  1))

def toRoman(n):
    """convert integer to Roman numeral"""
    if not (0 &lt; n &lt; 4000):
        raise OutOfRangeError, "number out of range (must be 1..3999)"
    if int(n) &lt;&gt; n:
        raise NotIntegerError, "non-integers can not be converted"

    result = ""
    for numeral, integer in romanNumeralMap:
        while n &gt;= integer:
            result += numeral
            n -= integer
    return result

#Define pattern to detect valid Roman numerals
romanNumeralPattern = '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$' <a name="roman.stage5.3.1"></a>circled_1_delcric

def fromRoman(s):
    """convert Roman numeral to integer"""
    if not re.search(romanNumeralPattern, s):                                    <a name="roman.stage5.3.2"></a>circled_2_delcric
        raise InvalidRomanNumeralError, 'Invalid Roman numeral: %s' % s

    result = 0
    index = 0
    for numeral, integer in romanNumeralMap:
        while s[index:index+len(numeral)] == numeral:
            result += integer
            index += len(numeral)
    return result
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage5.3.1">circled_1_delcric</a> </dt><dd>&#36825;&#21482;&#26159; <a class="xref" href="#re.roman" title="7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;">&#31532;&nbsp;7.3&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;&#8221;</a> &#20013;&#35752;&#35770;&#30340;&#21305;&#37197;&#27169;&#29256;&#30340;&#32487;&#32493;&#12290;&#21313;&#20301;&#19978;&#21487;&#33021;&#26159;<code class="literal">XC</code> (<code class="literal">90</code>)&#65292;<code class="literal">XL</code> (<code class="literal">40</code>)&#65292;&#25110;&#32773;&#21487;&#33021;&#26159; <code class="literal">L</code> &#21518;&#38754;&#36319;&#30528; 0 &#21040; 3 &#20010; <code class="literal">X</code> &#23383;&#31526;&#12290;&#20010;&#20301;&#21017;&#21487;&#33021;&#26159; <code class="literal">IX</code> (<code class="literal">9</code>)&#65292;<code class="literal">IV</code> (<code class="literal">4</code>)&#65292;&#25110;&#32773;&#26159;&#19968;&#20010;&#21487;&#33021;&#26159; <code class="literal">V</code> &#21518;&#38754;&#36319;&#30528; 0 &#21040; 3 &#20010; <code class="literal">I</code> &#23383;&#31526;&#12290;</dd><dt><a href="#roman.stage5.3.2">circled_2_delcric</a> </dt><dd>&#25226;&#25152;&#26377;&#30340;&#36923;&#36753;&#32534;&#30721;&#25104;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#26816;&#26597;&#26080;&#25928;&#32599;&#39532;&#23383;&#31526;&#30340;&#20195;&#30721;&#23601;&#24456;&#31616;&#21333;&#20102;&#12290;&#22914;&#26524; <code class="function">re.search</code> &#36820;&#22238;&#19968;&#20010;&#23545;&#35937;&#21017;&#34920;&#31034;&#21305;&#37197;&#20102;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#36755;&#20837;&#26159;&#26377;&#25928;&#30340;&#65292;&#21542;&#21017;&#36755;&#20837;&#26080;&#25928;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#37324;&#20320;&#21487;&#33021;&#20250;&#24576;&#30097;&#65292;&#36825;&#20010;&#38754;&#30446;&#21487;&#24974;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#26159;&#21542;&#30495;&#33021;&#26597;&#20986;&#38169;&#35823;&#30340;&#32599;&#39532;&#23383;&#31526;&#34920;&#31034;&#12290;&#27809;&#20851;&#31995;&#65292;&#19981;&#24517;&#23436;&#20840;&#21548;&#25105;&#30340;&#65292;&#19981;&#22952;&#30475;&#30475;&#19979;&#38754;&#30340;&#32467;&#26524;&#65306;</p><div class="example"><a name="d0e34248"></a><p class="title"><b>&#20363;&nbsp;14.13.&nbsp;&#29992; <code class="filename">romantest5.py</code> &#27979;&#35797; <code class="filename">roman5.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">
fromRoman should only accept uppercase input ... ok          </font><a name="roman.stage5.4.1"></a>circled_1_delcric<font color="teal">
toRoman should always return uppercase ... ok
fromRoman should fail with malformed antecedents ... ok      </font><a name="roman.stage5.4.2"></a>circled_2_delcric<font color="teal">
fromRoman should fail with repeated pairs of numerals ... ok </font><a name="roman.stage5.4.3"></a>circled_3_delcric<font color="teal">
fromRoman should fail with too many repeated numerals ... ok
fromRoman should give known result with known input ... ok
toRoman should give known result with known input ... ok
fromRoman(toRoman(n))==n for all n ... ok
toRoman should fail with non-integer input ... ok
toRoman should fail with negative input ... ok
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok

----------------------------------------------------------------------
Ran 12 tests in 2.864s

OK                                                           </font><a name="roman.stage5.4.4"></a>circled_4_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.stage5.4.1">circled_1_delcric</a> </dt><dd>&#26377;&#20214;&#20107;&#25105;&#26410;&#26366;&#35762;&#36807;&#65292;&#37027;&#23601;&#26159;&#40664;&#35748;&#24773;&#20917;&#19979;&#27491;&#21017;&#34920;&#36798;&#24335;&#22823;&#23567;&#20889;&#25935;&#24863;&#12290;&#30001;&#20110;&#27491;&#21017;&#34920;&#36798;&#24335; <code class="varname">romanNumeralPattern</code> &#26159;&#20197;&#22823;&#20889;&#23383;&#27597;&#26500;&#36896;&#30340;&#65292;<code class="function">re.search</code> &#23558;&#25298;&#32477;&#19981;&#20840;&#37096;&#26159;&#22823;&#20889;&#23383;&#27597;&#26500;&#25104;&#30340;&#36755;&#20837;&#12290;&#22240;&#27492;&#22823;&#20889;&#36755;&#20837;&#30340;&#26816;&#26597;&#23601;&#36890;&#36807;&#20102;&#12290;</dd><dt><a href="#roman.stage5.4.2">circled_2_delcric</a> </dt><dd>&#26356;&#37325;&#35201;&#30340;&#26159;&#65292;&#26080;&#25928;&#36755;&#20837;&#27979;&#35797;&#20063;&#36890;&#36807;&#20102;&#12290;&#20363;&#22914;&#65292;&#19978;&#38754;&#36825;&#20010;&#29992;&#20363;&#27979;&#35797;&#20102; <code class="literal">MCMC</code> &#20043;&#31867;&#30340;&#24773;&#24418;&#12290;&#27491;&#22914;&#20320;&#25152;&#35265;&#65292;&#36825;&#19981;&#21305;&#37197;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#22240;&#27492; <code class="function">fromRoman</code> &#24341;&#21457;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#27491;&#22312;&#31561;&#24453;&#30340; <code class="errorcode">InvalidRomanNumeralError</code> &#24322;&#24120;&#65292;&#25152;&#20197;&#27979;&#35797;&#36890;&#36807;&#20102;&#12290;</dd><dt><a href="#roman.stage5.4.3">circled_3_delcric</a> </dt><dd>&#20107;&#23454;&#19978;&#65292;&#25152;&#26377;&#30340;&#26080;&#25928;&#36755;&#20837;&#27979;&#35797;&#37117;&#36890;&#36807;&#20102;&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#25429;&#25417;&#20102;&#20320;&#22312;&#32534;&#20889;&#27979;&#35797;&#29992;&#20363;&#26102;&#25152;&#33021;&#39044;&#35265;&#30340;&#25152;&#26377;&#24773;&#20917;&#12290;</dd><dt><a href="#roman.stage5.4.4">circled_4_delcric</a> </dt><dd>&#26368;&#32456;&#36814;&#26469;&#20102; "<span class="quote"><code class="literal">OK</code></span>"&#36825;&#20010;&#24179;&#28129;&#30340;&#8220;&#24180;&#24230;&#22823;&#22870;&#8221;&#65292;&#25152;&#26377;&#27979;&#35797;&#37117;&#36890;&#36807;&#21518; <code class="filename">unittest</code> &#27169;&#22359;&#23601;&#20250;&#36755;&#20986;&#23427;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="d0e34305">&#27880;&#24847;: &#25152;&#26377;&#27979;&#35797;&#37117;&#36890;&#36807;&#21518;&#20570;&#20160;&#20040;&#21602;&#65311;</a></b><br>&#24403;&#25152;&#26377;&#27979;&#35797;&#37117;&#36890;&#36807;&#20102;&#65292;&#20572;&#27490;&#32534;&#31243;&#12290;</blockquote></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="roman2"></a>&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.bugs"></a>15.1.&nbsp;&#22788;&#29702; bugs</h2></div></div></div><div class="abstract"><p>&#23613;&#31649;&#20320;&#24456;&#21162;&#21147;&#22320;&#32534;&#20889;&#20840;&#38754;&#30340;&#21333;&#20803;&#27979;&#35797;&#65292;&#20294;&#26159; bug &#36824;&#26159;&#20250;&#20986;&#29616;&#12290;&#25105;&#25152;&#35828;&#30340; "<span class="quote">bug</span>" &#26159;&#20160;&#20040;&#21602;&#65311;Bug &#26159;&#20320;&#36824;&#27809;&#26377;&#32534;&#20889;&#30340;&#27979;&#35797;&#29992;&#20363;&#12290;</p></div><div class="example"><a name="d0e34327"></a><p class="title"><b>&#20363;&nbsp;15.1.&nbsp;&#20851;&#20110; Bug</b></p><div class="example-contents"><pre class="screen"><code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import roman5</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">roman5.fromRoman("")</span> <a name="roman.bugs.1.1"></a>circled_1_delcric
<font color="teal">0</font></pre><div class="calloutlist"><dl compact><dt><a href="#roman.bugs.1.1">circled_1_delcric</a> </dt><dd>&#22312;&#21069;&#38754;&#30340;<a class="link" href="#roman.stage5" title="14.5.&nbsp;roman.py, &#31532; 5 &#38454;&#27573;">&#31456;&#33410;&#20013;</a>&#20320;&#27880;&#24847;&#21040;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#20250;&#21305;&#37197;&#19978;&#37027;&#20010;&#26816;&#26597;&#32599;&#39532;&#25968;&#23383;&#26377;&#25928;&#24615;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#20102;&#21527;&#65311;&#23545;&#20110;&#26368;&#32456;&#29256;&#26412;&#20013;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#36825;&#19968;&#28857;&#20173;&#28982;&#27809;&#26377;&#25913;&#21464;&#12290;&#36825;&#23601;&#26159;&#19968;&#20010; Bug &#65292;&#20320;&#24076;&#26395;&#31354;&#23383;&#31526;&#20018;&#33021;&#22815;&#20687;&#20854;&#20182;&#26080;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#19968;&#26679;&#24341;&#21457; <code class="errorcode">InvalidRomanNumeralError</code> &#24322;&#24120;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22312;&#37325;&#29616;&#36825;&#20010; Bug &#24182;&#20462;&#25913;&#23427;&#20043;&#21069;&#20320;&#24212;&#35813;&#32534;&#20889;&#19968;&#20010;&#20250;&#22833;&#36133;&#30340;&#27979;&#35797;&#29992;&#20363;&#26469;&#35828;&#26126;&#23427;&#12290;</p><div class="example"><a name="d0e34357"></a><p class="title"><b>&#20363;&nbsp;15.2.&nbsp;&#27979;&#35797; bug (<code class="filename">romantest61.py</code>)</b></p><div class="example-contents"><pre class="programlisting">
class FromRomanBadInput(unittest.TestCase):                                      

    # previous test cases omitted for clarity (they haven't changed)

    def testBlank(self):
        """fromRoman should fail with blank string"""
        self.assertRaises(roman.InvalidRomanNumeralError, roman.fromRoman, "") <a name="roman.bugs.2.1"></a>circled_1_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.bugs.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#37324;&#24456;&#31616;&#21333;&#12290;&#20197;&#31354;&#23383;&#31526;&#20018;&#35843;&#29992; <code class="function">fromRoman</code> &#24182;&#30830;&#20445;&#23427;&#20250;&#24341;&#21457;&#19968;&#20010; <code class="errorcode">InvalidRomanNumeralError</code> &#24322;&#24120;&#12290;&#38590;&#28857;&#22312;&#20110;&#25214;&#20986; Bug&#65292;&#26082;&#28982;&#20320;&#24050;&#32463;&#30693;&#36947;&#23427;&#20102;&#65292;&#27979;&#35797;&#23601;&#31616;&#21333;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22240;&#20026;&#20320;&#30340;&#20195;&#30721;&#23384;&#22312;&#19968;&#20010; Bug&#65292;&#24182;&#19988;&#20320;&#32534;&#20889;&#20102;&#27979;&#35797;&#36825;&#20010; Bug &#30340;&#27979;&#35797;&#29992;&#20363;&#65292;&#25152;&#20197;&#27979;&#35797;&#29992;&#20363;&#23558;&#20250;&#22833;&#36133;&#65306;</p><div class="example"><a name="d0e34379"></a><p class="title"><b>&#20363;&nbsp;15.3.&nbsp;&#29992; <code class="filename">romantest61.py</code> &#27979;&#35797; <code class="filename">roman61.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">fromRoman should only accept uppercase input ... ok
toRoman should always return uppercase ... ok
fromRoman should fail with blank string ... FAIL
fromRoman should fail with malformed antecedents ... ok
fromRoman should fail with repeated pairs of numerals ... ok
fromRoman should fail with too many repeated numerals ... ok
fromRoman should give known result with known input ... ok
toRoman should give known result with known input ... ok
fromRoman(toRoman(n))==n for all n ... ok
toRoman should fail with non-integer input ... ok
toRoman should fail with negative input ... ok
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok

======================================================================
FAIL: fromRoman should fail with blank string
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage6\romantest61.py", line 137, in testBlank
    self.assertRaises(roman61.InvalidRomanNumeralError, roman61.fromRoman, "")
  File "c:\python21\lib\unittest.py", line 266, in failUnlessRaises
    raise self.failureException, excName
AssertionError: InvalidRomanNumeralError</font><font color="teal">
----------------------------------------------------------------------
Ran 13 tests in 2.864s

FAILED (failures=1)</font></pre></div></div><br class="example-break"><p><span class="emphasis"><em>&#29616;&#22312;</em></span> &#20320;&#21487;&#20197;&#20462;&#25913;&#36825;&#20010; Bug&#20102;&#12290;</p><div class="example"><a name="d0e34399"></a><p class="title"><b>&#20363;&nbsp;15.4.&nbsp;&#20462;&#25913; Bug (<code class="filename">roman62.py</code>)</b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage6/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><pre class="programlisting">
def fromRoman(s):
    """convert Roman numeral to integer"""
    if not s: <a name="roman.bugs.4.1"></a>circled_1_delcric
        raise InvalidRomanNumeralError, 'Input can not be blank'
    if not re.search(romanNumeralPattern, s):
        raise InvalidRomanNumeralError, 'Invalid Roman numeral: %s' % s

    result = 0
    index = 0
    for numeral, integer in romanNumeralMap:
        while s[index:index+len(numeral)] == numeral:
            result += integer
            index += len(numeral)
    return result
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.bugs.4.1">circled_1_delcric</a> </dt><dd>&#21482;&#38656;&#35201;&#20004;&#34892;&#20195;&#30721;&#65306;&#19968;&#34892;&#30452;&#25509;&#26816;&#26597;&#31354;&#23383;&#31526;&#20018;&#21644;&#19968;&#34892; <code class="literal">raise</code> &#35821;&#21477;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e34421"></a><p class="title"><b>&#20363;&nbsp;15.5.&nbsp;&#29992; <code class="filename">romantest62.py</code> &#27979;&#35797; <code class="filename">roman62.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">fromRoman should only accept uppercase input ... ok
toRoman should always return uppercase ... ok
fromRoman should fail with blank string ... ok </font><a name="roman.bugs.5.1"></a>circled_1_delcric<font color="teal">
fromRoman should fail with malformed antecedents ... ok
fromRoman should fail with repeated pairs of numerals ... ok
fromRoman should fail with too many repeated numerals ... ok
fromRoman should give known result with known input ... ok
toRoman should give known result with known input ... ok
fromRoman(toRoman(n))==n for all n ... ok
toRoman should fail with non-integer input ... ok
toRoman should fail with negative input ... ok
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok

----------------------------------------------------------------------
Ran 13 tests in 2.834s

OK</font> <a name="roman.bugs.5.2"></a>circled_2_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.bugs.5.1">circled_1_delcric</a> </dt><dd>&#31354;&#23383;&#31526;&#20018;&#27979;&#35797;&#29992;&#20363;&#29616;&#22312;&#36890;&#36807;&#20102;&#65292;&#35828;&#26126; Bug &#34987;&#20462;&#27491;&#20102;&#12290;</dd><dt><a href="#roman.bugs.5.2">circled_2_delcric</a> </dt><dd>&#25152;&#26377;&#20854;&#20182;&#27979;&#35797;&#29992;&#20363;&#20381;&#28982;&#36890;&#36807;&#65292;&#35777;&#26126;&#36825;&#20010; Bug &#20462;&#27491;&#27809;&#26377;&#24433;&#21709;&#21040;&#20854;&#20182;&#37096;&#20998;&#12290;&#19981;&#38656;&#35201;&#20877;&#32534;&#31243;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#26679;&#32534;&#31243;&#65292;&#24182;&#27809;&#26377;&#20196; Bug &#20462;&#27491;&#21464;&#24471;&#31616;&#21333;&#12290;&#31616;&#21333;&#30340; Bug (&#23601;&#20687;&#36825;&#19968;&#20010;) &#38656;&#35201;&#31616;&#21333;&#30340;&#27979;&#35797;&#29992;&#20363;&#65292;&#22797;&#26434; Bug &#21017;&#38656;&#35201;&#22797;&#26434;&#30340;&#27979;&#35797;&#29992;&#20363;&#12290;&#20197;&#27979;&#35797;&#20026;&#26680;&#24515;&#30340;&#27675;&#22260;<span class="emphasis"><em>&#22909;&#20687;</em></span> &#24310;&#38271;&#20102;&#20462;&#27491; Bug &#30340;&#26102;&#38388;&#65292;&#22240;&#20026;&#20320;&#38656;&#35201;&#20808;&#36148;&#20999;&#22320;&#25551;&#36848;&#20986; Bug (&#32534;&#20889;&#27979;&#35797;&#29992;&#20363;) &#28982;&#21518;&#25165;&#21435;&#20462;&#27491;&#23427;&#12290;&#22914;&#26524;&#27979;&#35797;&#29992;&#20363;&#27809;&#33021;&#27491;&#30830;&#36890;&#36807;&#65292;&#20320;&#38656;&#35201;&#24605;&#37327;&#36825;&#20010;&#20462;&#25913;&#38169;&#20102;&#36824;&#26159;&#27979;&#35797;&#29992;&#20363;&#26412;&#36523;&#20986;&#29616;&#20102; Bug&#12290;&#26080;&#35770;&#22914;&#20309;&#65292;&#20174;&#38271;&#36828;&#19978;&#35762;&#65292;&#36825;&#26679;&#22312;&#27979;&#35797;&#20195;&#30721;&#21644;&#20195;&#30721;&#20043;&#38388;&#30340;&#21453;&#22797;&#26159;&#20540;&#24471;&#30340;&#65292;&#22240;&#20026;&#36825;&#26679;&#20250;&#20351; Bug &#22312;&#31532;&#19968;&#26102;&#38388;&#23601;&#34987;&#20462;&#27491;&#30340;&#21487;&#33021;&#24615;&#22823;&#22823;&#25552;&#39640;&#12290;&#32780;&#19988;&#19981;&#35770;&#22914;&#20309;&#26356;&#25913;&#65292;&#20320;&#37117;&#21487;&#20197;&#36731;&#26131;&#22320;&#37325;&#26032;&#36816;&#34892;<span class="emphasis"><em>&#25152;&#26377;</em></span> &#27979;&#35797;&#29992;&#20363;&#65292;&#26032;&#20195;&#30721;&#30772;&#22351;&#32769;&#20195;&#30721;&#30340;&#26426;&#20250;&#20063;&#21464;&#24471;&#24494;&#20046;&#20854;&#24494;&#12290;&#20170;&#22825;&#30340;&#21333;&#20803;&#27979;&#35797;&#23601;&#26159;&#26126;&#22825;&#30340;&#22238;&#24402;&#27979;&#35797; (regression test)&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.change"></a>15.2.&nbsp;&#24212;&#23545;&#38656;&#27714;&#21464;&#21270;</h2></div></div></div><div class="abstract"><p>&#23613;&#31649;&#20320;&#31469;&#23613;&#21162;&#21147;&#22320;&#20998;&#26512;&#20320;&#30340;&#23458;&#25143;&#65292;&#24182;&#28857;&#28783;&#29100;&#27833;&#22320;&#25552;&#28860;&#20986;&#31934;&#30830;&#30340;&#38656;&#27714;&#65292;&#20294;&#38656;&#27714;&#36824;&#26159;&#20250;&#26159;&#19981;&#26029;&#21464;&#21270;&#12290;&#22823;&#37096;&#20998;&#23458;&#25143;&#22312;&#30475;&#21040;&#20135;&#21697;&#21069;&#19981;&#30693;&#36947;&#20182;&#20204;&#24819;&#35201;&#20160;&#20040;&#12290;&#21363;&#20415;&#30693;&#36947;&#65292;&#20063;&#19981;&#25797;&#20110;&#31934;&#30830;&#34920;&#36848;&#20986;&#20182;&#20204;&#30340;&#26377;&#25928;&#38656;&#27714;&#12290;&#21363;&#20415;&#33021;&#34920;&#36848;&#20986;&#26469;&#65292;&#20182;&#20204;&#22312;&#19979;&#19968;&#20010;&#29256;&#26412;&#19968;&#23450;&#20250;&#35201;&#27714;&#26356;&#22810;&#30340;&#21151;&#33021;&#12290;&#22240;&#27492;&#20320;&#38656;&#35201;&#20570;&#22909;&#26356;&#26032;&#27979;&#35797;&#29992;&#20363;&#30340;&#20934;&#22791;&#20197;&#24212;&#23545;&#38656;&#27714;&#30340;&#25913;&#21464;&#12290;</p></div><p>&#20551;&#35774;&#20320;&#24819;&#35201;&#25193;&#23637;&#32599;&#39532;&#25968;&#23383;&#36716;&#25442;&#20989;&#25968;&#30340;&#33539;&#22260;&#12290;&#36824;&#35760;&#24471;<a class="link" href="#roman.divein" title="13.2.&nbsp;&#28145;&#20837;">&#27809;&#26377;&#21738;&#20010;&#23383;&#31526;&#21487;&#20197;&#37325;&#22797;&#19977;&#36941;&#20197;&#19978;</a>&#36825;&#26465;&#35268;&#21017;&#21527;&#65311;&#21571;&#65292;&#29616;&#22312;&#32599;&#39532;&#20154;&#24076;&#26395;&#32473;&#36825;&#26465;&#35268;&#21017;&#26469;&#20010;&#20363;&#22806;&#65292;&#29992;&#36830;&#32493;&#20986;&#29616; 4 &#20010; <code class="literal">M</code> &#23383;&#31526;&#26469;&#34920;&#31034; <code class="literal">4000</code>&#12290;&#22914;&#26524;&#36825;&#26679;&#25913;&#20102;&#65292;&#20320;&#23601;&#21487;&#20197;&#25226;&#36716;&#25442;&#33539;&#22260;&#20174; <code class="literal">1..3999</code> &#25193;&#23637;&#21040; <code class="literal">1..4999</code>&#12290;&#20294;&#20320;&#20808;&#35201;&#23545;&#27979;&#35797;&#29992;&#20363;&#36827;&#34892;&#20462;&#25913;&#12290;</p><div class="example"><a name="d0e34478"></a><p class="title"><b>&#20363;&nbsp;15.6.&nbsp;&#20462;&#25913;&#27979;&#35797;&#29992;&#20363;&#20197;&#36866;&#24212;&#26032;&#38656;&#27714; (<code class="filename">romantest71.py</code>)</b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage7/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
import roman71
import unittest

class KnownValues(unittest.TestCase):
    knownValues = ( (1, 'I'),
                    (2, 'II'),
                    (3, 'III'),
                    (4, 'IV'),
                    (5, 'V'),
                    (6, 'VI'),
                    (7, 'VII'),
                    (8, 'VIII'),
                    (9, 'IX'),
                    (10, 'X'),
                    (50, 'L'),
                    (100, 'C'),
                    (500, 'D'),
                    (1000, 'M'),
                    (31, 'XXXI'),
                    (148, 'CXLVIII'),
                    (294, 'CCXCIV'),
                    (312, 'CCCXII'),
                    (421, 'CDXXI'),
                    (528, 'DXXVIII'),
                    (621, 'DCXXI'),
                    (782, 'DCCLXXXII'),
                    (870, 'DCCCLXX'),
                    (941, 'CMXLI'),
                    (1043, 'MXLIII'),
                    (1110, 'MCX'),
                    (1226, 'MCCXXVI'),
                    (1301, 'MCCCI'),
                    (1485, 'MCDLXXXV'),
                    (1509, 'MDIX'),
                    (1607, 'MDCVII'),
                    (1754, 'MDCCLIV'),
                    (1832, 'MDCCCXXXII'),
                    (1993, 'MCMXCIII'),
                    (2074, 'MMLXXIV'),
                    (2152, 'MMCLII'),
                    (2212, 'MMCCXII'),
                    (2343, 'MMCCCXLIII'),
                    (2499, 'MMCDXCIX'),
                    (2574, 'MMDLXXIV'),
                    (2646, 'MMDCXLVI'),
                    (2723, 'MMDCCXXIII'),
                    (2892, 'MMDCCCXCII'),
                    (2975, 'MMCMLXXV'),
                    (3051, 'MMMLI'),
                    (3185, 'MMMCLXXXV'),
                    (3250, 'MMMCCL'),
                    (3313, 'MMMCCCXIII'),
                    (3408, 'MMMCDVIII'),
                    (3501, 'MMMDI'),
                    (3610, 'MMMDCX'),
                    (3743, 'MMMDCCXLIII'),
                    (3844, 'MMMDCCCXLIV'),
                    (3888, 'MMMDCCCLXXXVIII'),
                    (3940, 'MMMCMXL'),
                    (3999, 'MMMCMXCIX'),
                    (4000, 'MMMM'),                                       <a name="roman.change.1.1"></a>circled_1_delcric
                    (4500, 'MMMMD'),
                    (4888, 'MMMMDCCCLXXXVIII'),
                    (4999, 'MMMMCMXCIX'))

    def testToRomanKnownValues(self):
        """toRoman should give known result with known input"""
        for integer, numeral in self.knownValues:
            result = roman71.toRoman(integer)
            self.assertEqual(numeral, result)

    def testFromRomanKnownValues(self):
        """fromRoman should give known result with known input"""
        for integer, numeral in self.knownValues:
            result = roman71.fromRoman(numeral)
            self.assertEqual(integer, result)

class ToRomanBadInput(unittest.TestCase):
    def testTooLarge(self):
        """toRoman should fail with large input"""
        self.assertRaises(roman71.OutOfRangeError, roman71.toRoman, 5000) <a name="roman.change.1.2"></a>circled_2_delcric

    def testZero(self):
        """toRoman should fail with 0 input"""
        self.assertRaises(roman71.OutOfRangeError, roman71.toRoman, 0)

    def testNegative(self):
        """toRoman should fail with negative input"""
        self.assertRaises(roman71.OutOfRangeError, roman71.toRoman, -1)

    def testNonInteger(self):
        """toRoman should fail with non-integer input"""
        self.assertRaises(roman71.NotIntegerError, roman71.toRoman, 0.5)

class FromRomanBadInput(unittest.TestCase):
    def testTooManyRepeatedNumerals(self):
        """fromRoman should fail with too many repeated numerals"""
        for s in ('MMMMM', 'DD', 'CCCC', 'LL', 'XXXX', 'VV', 'IIII'):     <a name="roman.change.1.3"></a>circled_3_delcric
            self.assertRaises(roman71.InvalidRomanNumeralError, roman71.fromRoman, s)

    def testRepeatedPairs(self):
        """fromRoman should fail with repeated pairs of numerals"""
        for s in ('CMCM', 'CDCD', 'XCXC', 'XLXL', 'IXIX', 'IVIV'):
            self.assertRaises(roman71.InvalidRomanNumeralError, roman71.fromRoman, s)

    def testMalformedAntecedent(self):
        """fromRoman should fail with malformed antecedents"""
        for s in ('IIMXCC', 'VX', 'DCM', 'CMM', 'IXIV',
                  'MCMC', 'XCX', 'IVI', 'LM', 'LD', 'LC'):
            self.assertRaises(roman71.InvalidRomanNumeralError, roman71.fromRoman, s)

    def testBlank(self):
        """fromRoman should fail with blank string"""
        self.assertRaises(roman71.InvalidRomanNumeralError, roman71.fromRoman, "")

class SanityCheck(unittest.TestCase):
    def testSanity(self):
        """fromRoman(toRoman(n))==n for all n"""
        for integer in range(1, 5000):                                    <a name="roman.change.1.4"></a>circled_4_delcric
            numeral = roman71.toRoman(integer)
            result = roman71.fromRoman(numeral)
            self.assertEqual(integer, result)

class CaseCheck(unittest.TestCase):
    def testToRomanCase(self):
        """toRoman should always return uppercase"""
        for integer in range(1, 5000):
            numeral = roman71.toRoman(integer)
            self.assertEqual(numeral, numeral.upper())

    def testFromRomanCase(self):
        """fromRoman should only accept uppercase input"""
        for integer in range(1, 5000):
            numeral = roman71.toRoman(integer)
            roman71.fromRoman(numeral.upper())
            self.assertRaises(roman71.InvalidRomanNumeralError,
                              roman71.fromRoman, numeral.lower())

if __name__ == "__main__":
    unittest.main()
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.change.1.1">circled_1_delcric</a> </dt><dd>&#21407;&#26469;&#30340;&#24050;&#30693;&#20540;&#27809;&#26377;&#25913;&#21464; (&#23427;&#20204;&#20173;&#28982;&#26159;&#21512;&#29702;&#30340;&#27979;&#35797;&#20540;) &#20294;&#20320;&#38656;&#35201;&#28155;&#21152;&#20960;&#20010;&#22823;&#20110; <code class="literal">4000</code> &#30340;&#20540;&#12290;&#36825;&#37324;&#25105;&#28155;&#21152;&#20102; <code class="literal">4000</code> (&#26368;&#30701;&#30340;&#19968;&#20010;)&#65292;<code class="literal">4500</code> (&#27425;&#30701;&#30340;&#19968;&#20010;)&#65292;<code class="literal">4888</code> (&#26368;&#38271;&#30340;&#19968;&#20010;) &#21644; <code class="literal">4999</code> (&#20540;&#26368;&#22823;&#30340;&#19968;&#20010;)&#12290;</dd><dt><a href="#roman.change.1.2">circled_2_delcric</a> </dt><dd>"<span class="quote">&#26368;&#22823;&#36755;&#20837;</span>"&#30340;&#23450;&#20041;&#25913;&#21464;&#20102;&#12290;&#20197;&#21069;&#26159;&#20197; <code class="literal">4000</code> &#35843;&#29992; <code class="function">toRoman</code> &#24182;&#26399;&#24453;&#19968;&#20010;&#38169;&#35823;&#65307;&#32780;&#29616;&#22312; <code class="literal">4000-4999</code> &#25104;&#20026;&#20102;&#26377;&#25928;&#36755;&#20837;&#65292;&#38656;&#35201;&#23558;&#36825;&#20010;&#26368;&#22823;&#36755;&#20837;&#25552;&#21319;&#33267; <code class="literal">5000</code>&#12290;</dd><dt><a href="#roman.change.1.3">circled_3_delcric</a> </dt><dd>"<span class="quote">&#36807;&#22810;&#23383;&#31526;&#37325;&#22797;</span>" &#30340;&#23450;&#20041;&#20063;&#25913;&#21464;&#20102;&#12290;&#36825;&#20010;&#27979;&#35797;&#20197;&#21069;&#26159;&#20197; <code class="literal">'MMMM'</code> &#35843;&#29992; <code class="function">fromRoman</code> &#24182;&#26399;&#24453;&#19968;&#20010;&#38169;&#35823;&#65307;&#32780;&#29616;&#22312; <code class="literal">MMMM</code> &#34987;&#35748;&#20026;&#26159;&#19968;&#20010;&#26377;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#65292;&#38656;&#35201;&#23558;&#36825;&#20010;&#8220;&#36807;&#22810;&#23383;&#31526;&#37325;&#22797;&#8221;&#25913;&#20026; <code class="literal">'MMMMM'</code>&#12290;</dd><dt><a href="#roman.change.1.4">circled_4_delcric</a> </dt><dd>&#23436;&#22791;&#27979;&#35797;&#21644;&#22823;&#23567;&#20889;&#27979;&#35797;&#21407;&#26469;&#22312; <code class="constant">1</code> &#21040; <code class="literal">3999</code> &#33539;&#22260;&#20869;&#24490;&#29615;&#12290;&#29616;&#22312;&#33539;&#22260;&#25193;&#23637;&#20102;&#65292;&#36825;&#20010; <code class="literal">for</code> &#24490;&#29615;&#38656;&#35201;&#23558;&#33539;&#22260;&#20063;&#25552;&#21319;&#33267; <code class="literal">4999</code>&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#20320;&#30340;&#27979;&#35797;&#29992;&#20363;&#21644;&#26032;&#38656;&#27714;&#20445;&#25345;&#19968;&#33268;&#20102;&#65292;&#20294;&#26159;&#20320;&#30340;&#31243;&#24207;&#20195;&#30721;&#36824;&#27809;&#26377;&#65292;&#22240;&#27492;&#20960;&#20010;&#27979;&#35797;&#29992;&#20363;&#30340;&#22833;&#36133;&#26159;&#24847;&#26009;&#20043;&#20013;&#30340;&#20107;&#12290;</p><div class="example"><a name="d0e34574"></a><p class="title"><b>&#20363;&nbsp;15.7.&nbsp;&#29992; <code class="filename">romantest71.py</code> &#27979;&#35797; <code class="filename">roman71.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">
fromRoman should only accept uppercase input ... ERROR        </font><a name="roman.change.2.1"></a>circled_1_delcric<font color="teal">
toRoman should always return uppercase ... ERROR
fromRoman should fail with blank string ... ok
fromRoman should fail with malformed antecedents ... ok
fromRoman should fail with repeated pairs of numerals ... ok
fromRoman should fail with too many repeated numerals ... ok
fromRoman should give known result with known input ... ERROR </font><a name="roman.change.2.2"></a>circled_2_delcric<font color="teal">
toRoman should give known result with known input ... ERROR   </font><a name="roman.change.2.3"></a>circled_3_delcric<font color="teal">
fromRoman(toRoman(n))==n for all n ... ERROR                  </font><a name="roman.change.2.4"></a>circled_4_delcric<font color="teal">
toRoman should fail with non-integer input ... ok
toRoman should fail with negative input ... ok
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok
</font></pre><div class="calloutlist"><dl compact><dt><a href="#roman.change.2.1">circled_1_delcric</a> </dt><dd>&#25105;&#20204;&#30340;&#22823;&#23567;&#20889;&#26816;&#26597;&#26159;&#22240;&#20026;&#24490;&#29615;&#33539;&#22260;&#26159; <code class="constant">1</code> &#21040; <code class="literal">4999</code>&#65292;&#32780; <code class="function">toRoman</code> &#21482;&#25509;&#21463; <code class="constant">1</code> &#21040; <code class="literal">3999</code> &#20043;&#38388;&#30340;&#25968;&#65292;&#22240;&#27492;&#27979;&#35797;&#24490;&#29615;&#21040; <code class="literal">4000</code> &#23601;&#20250;&#22833;&#36133;&#12290;</dd><dt><a href="#roman.change.2.2">circled_2_delcric</a> </dt><dd><code class="function">fromRoman</code> &#30340;&#24050;&#30693;&#20540;&#27979;&#35797;&#22312;&#36935;&#21040; <code class="literal">'MMMM'</code> &#23601;&#20250;&#22833;&#36133;&#65292;&#22240;&#20026; <code class="function">fromRoman</code> &#36824;&#35748;&#20026;&#36825;&#26159;&#19968;&#20010;&#26080;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#34920;&#31034;&#12290;</dd><dt><a href="#roman.change.2.3">circled_3_delcric</a> </dt><dd><code class="function">toRoman</code> &#30340;&#24050;&#30693;&#20540;&#27979;&#35797;&#22312;&#36935;&#21040; <code class="literal">4000</code> &#23601;&#20250;&#22833;&#36133;&#65292;&#22240;&#20026; <code class="function">toRoman</code> &#20173;&#26087;&#35748;&#20026;&#36825;&#36229;&#20986;&#20102;&#26377;&#25928;&#20540;&#33539;&#22260;&#12290;</dd><dt><a href="#roman.change.2.4">circled_4_delcric</a> </dt><dd>&#23436;&#22791;&#27979;&#35797;&#22312;&#36935;&#21040; <code class="literal">4000</code> &#20063;&#20250;&#22833;&#36133;&#65292;&#22240;&#20026; <code class="function">toRoman</code> &#20063;&#20250;&#35748;&#20026;&#36825;&#36229;&#20986;&#20102;&#26377;&#25928;&#20540;&#33539;&#22260;&#12290;</dd></dl></div><pre class="screen"><font color="teal">
======================================================================
ERROR: fromRoman should only accept uppercase input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage7\romantest71.py", line 161, in testFromRomanCase
    numeral = roman71.toRoman(integer)
  File "roman71.py", line 28, in toRoman
    raise OutOfRangeError, "number out of range (must be 1..3999)"
OutOfRangeError: number out of range (must be 1..3999)</font><font color="teal">
======================================================================
ERROR: toRoman should always return uppercase
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage7\romantest71.py", line 155, in testToRomanCase
    numeral = roman71.toRoman(integer)
  File "roman71.py", line 28, in toRoman
    raise OutOfRangeError, "number out of range (must be 1..3999)"
OutOfRangeError: number out of range (must be 1..3999)</font><font color="teal">
======================================================================
ERROR: fromRoman should give known result with known input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage7\romantest71.py", line 102, in testFromRomanKnownValues
    result = roman71.fromRoman(numeral)
  File "roman71.py", line 47, in fromRoman
    raise InvalidRomanNumeralError, 'Invalid Roman numeral: %s' % s
InvalidRomanNumeralError: Invalid Roman numeral: MMMM</font><font color="teal">
======================================================================
ERROR: toRoman should give known result with known input
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage7\romantest71.py", line 96, in testToRomanKnownValues
    result = roman71.toRoman(integer)
  File "roman71.py", line 28, in toRoman
    raise OutOfRangeError, "number out of range (must be 1..3999)"
OutOfRangeError: number out of range (must be 1..3999)</font><font color="teal">
======================================================================
ERROR: fromRoman(toRoman(n))==n for all n
----------------------------------------------------------------------
</font><font color="red">Traceback (most recent call last):
  File "C:\docbook\dip\py\roman\stage7\romantest71.py", line 147, in testSanity
    numeral = roman71.toRoman(integer)
  File "roman71.py", line 28, in toRoman
    raise OutOfRangeError, "number out of range (must be 1..3999)"
OutOfRangeError: number out of range (must be 1..3999)</font><font color="teal">
----------------------------------------------------------------------
Ran 13 tests in 2.213s

FAILED (errors=5)</font></pre></div></div><br class="example-break"><p>&#26082;&#28982;&#26032;&#30340;&#38656;&#27714;&#23548;&#33268;&#20102;&#27979;&#35797;&#29992;&#20363;&#30340;&#22833;&#36133;&#65292;&#20320;&#35813;&#32771;&#34385;&#20462;&#25913;&#20195;&#30721;&#20197;&#20415;&#23427;&#33021;&#20877;&#27425;&#36890;&#36807;&#27979;&#35797;&#29992;&#20363;&#12290;(&#22312;&#20320;&#24320;&#22987;&#32534;&#20889;&#21333;&#20803;&#27979;&#35797;&#26102;&#35201;&#20064;&#24815;&#19968;&#20214;&#20107;&#65306;&#34987;&#27979;&#35797;&#20195;&#30721;&#27704;&#36828;&#19981;&#20250;&#22312;&#32534;&#20889;&#27979;&#35797;&#29992;&#20363;"<span class="quote">&#20043;&#21069;</span>"&#32534;&#20889;&#12290;&#27491;&#22240;&#20026;&#22914;&#27492;&#65292;&#20320;&#36824;&#26377;&#19968;&#20123;&#24037;&#20316;&#35201;&#20570;&#65292;&#19968;&#26086;&#21487;&#20197;&#36890;&#36807;&#25152;&#26377;&#30340;&#27979;&#35797;&#29992;&#20363;&#65292;&#20572;&#27490;&#32534;&#30721;&#12290;)</p><div class="example"><a name="d0e34679"></a><p class="title"><b>&#20363;&nbsp;15.8.&nbsp;&#20026;&#26032;&#30340;&#38656;&#27714;&#32534;&#20889;&#20195;&#30721; (<code class="filename">roman72.py</code>)</b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage7/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><pre class="programlisting">
"""Convert to and from Roman numerals"""
import re

#Define exceptions
class RomanError(Exception): pass
class OutOfRangeError(RomanError): pass
class NotIntegerError(RomanError): pass
class InvalidRomanNumeralError(RomanError): pass

#Define digit mapping
romanNumeralMap = (('M',  1000),
                   ('CM', 900),
                   ('D',  500),
                   ('CD', 400),
                   ('C',  100),
                   ('XC', 90),
                   ('L',  50),
                   ('XL', 40),
                   ('X',  10),
                   ('IX', 9),
                   ('V',  5),
                   ('IV', 4),
                   ('I',  1))

def toRoman(n):
    """convert integer to Roman numeral"""
    if not (0 &lt; n &lt; 5000):                                                         <a name="roman.change.3.1"></a>circled_1_delcric
        raise OutOfRangeError, "number out of range (must be 1..4999)"
    if int(n) &lt;&gt; n:
        raise NotIntegerError, "non-integers can not be converted"

    result = ""
    for numeral, integer in romanNumeralMap:
        while n &gt;= integer:
            result += numeral
            n -= integer
    return result

#Define pattern to detect valid Roman numerals
romanNumeralPattern = '^M?M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$' <a name="roman.change.3.2"></a>circled_2_delcric

def fromRoman(s):
    """convert Roman numeral to integer"""
    if not s:
        raise InvalidRomanNumeralError, 'Input can not be blank'
    if not re.search(romanNumeralPattern, s):
        raise InvalidRomanNumeralError, 'Invalid Roman numeral: %s' % s

    result = 0
    index = 0
    for numeral, integer in romanNumeralMap:
        while s[index:index+len(numeral)] == numeral:
            result += integer
            index += len(numeral)
    return result
</pre></div></div><br class="example-break"><div class="calloutlist"><dl compact><dt><a href="#roman.change.3.1">circled_1_delcric</a> </dt><dd><code class="function">toRoman</code> &#21482;&#38656;&#35201;&#22312;&#21462;&#20540;&#33539;&#22260;&#26816;&#26597;&#19968;&#22788;&#20570;&#20010;&#23567;&#25913;&#21160;&#12290;&#23558;&#21407;&#26469;&#30340; <code class="literal">0 &lt; n &lt; 4000</code>&#65292;&#26356;&#25913;&#20026;&#29616;&#22312;&#30340;&#26816;&#26597; <code class="literal">0 &lt; n &lt; 5000</code>&#12290;&#20320;&#36824;&#35201;&#26356;&#25913;&#20320; <code class="literal">raise</code> &#30340;&#38169;&#35823;&#20449;&#24687;&#20197;&#21453;&#26144;&#25509;&#21463;&#26032;&#21462;&#20540;&#33539;&#22260; (<code class="literal">1..4999</code> &#32780;&#19981;&#20877;&#26159; <code class="literal">1..3999</code>)&#12290;&#20320;&#19981;&#38656;&#35201;&#25913;&#21464;&#20989;&#25968;&#30340;&#20854;&#20182;&#37096;&#20998;&#65292;&#23427;&#20204;&#24050;&#32463;&#36866;&#29992;&#20110;&#26032;&#30340;&#24773;&#20917;&#12290;(&#23427;&#20204;&#20250;&#27427;&#28982;&#22320;&#20026;&#26032;&#30340; 1000 &#28155;&#21152; <code class="literal">'M'</code>&#65292;&#20197; <code class="literal">4000</code> &#20026;&#20363;&#65292;&#20989;&#25968;&#20250;&#36820;&#22238; <code class="literal">'MMMM'</code> &#12290;&#20043;&#21069;&#27809;&#33021;&#36825;&#26679;&#20570;&#26159;&#22240;&#20026;&#21040;&#33539;&#22260;&#26816;&#26597;&#26102;&#23601;&#34987;&#20572;&#20102;&#19979;&#26469;&#12290;)</dd><dt><a href="#roman.change.3.2">circled_2_delcric</a> </dt><dd>&#20320;&#23545; <code class="function">fromRoman</code> &#20063;&#19981;&#38656;&#35201;&#20570;&#36807;&#22810;&#30340;&#20462;&#25913;&#12290;&#21807;&#19968;&#30340;&#20462;&#25913;&#23601;&#22312; <code class="varname">romanNumeralPattern</code>&#65306;&#22914;&#26524;&#20320;&#27880;&#24847;&#30340;&#35805;&#65292;&#20320;&#20250;&#21457;&#29616;&#20320;&#21482;&#38656;&#22312;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#31532;&#19968;&#37096;&#20998;&#22686;&#21152;&#19968;&#20010;&#21487;&#36873;&#30340; <code class="literal">M</code> &#12290;&#36825;&#23601;&#20801;&#35768;&#26368;&#22810; 4 &#20010; <code class="literal">M</code> &#23383;&#31526;&#32780;&#19981;&#20877;&#26159; 3 &#20010;&#65292;&#24847;&#21619;&#30528;&#20320;&#20801;&#35768;&#20195;&#34920; <code class="literal">4999</code> &#32780;&#19981;&#21482;&#26159; <code class="literal">3999</code> &#30340;&#32599;&#39532;&#25968;&#23383;&#12290;<code class="function">fromRoman</code> &#20989;&#25968;&#26412;&#36523;&#26159;&#26222;&#36941;&#36866;&#29992;&#30340;&#65292;&#23427;&#24182;&#19981;&#22312;&#24847;&#23383;&#31526;&#34987;&#22810;&#23569;&#27425;&#30340;&#37325;&#22797;&#65292;&#21482;&#26159;&#26681;&#25454;&#37325;&#22797;&#30340;&#32599;&#39532;&#23383;&#31526;&#23545;&#24212;&#30340;&#25968;&#20540;&#36827;&#34892;&#32047;&#21152;&#12290;&#20197;&#21069;&#27809;&#33021;&#22788;&#29702; <code class="literal">'MMMM'</code> &#26159;&#22240;&#20026;&#20320;&#36890;&#36807;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#26816;&#26597;&#24378;&#34892;&#20572;&#27490;&#20102;&#12290;</dd></dl></div><p>&#20320;&#21487;&#33021;&#20250;&#24576;&#30097;&#21482;&#38656;&#36825;&#20004;&#22788;&#23567;&#25913;&#21160;&#12290;&#22079;&#65292;&#19981;&#30456;&#20449;&#25105;&#30340;&#35805;&#65292;&#20320;&#33258;&#24049;&#30475;&#30475;&#21543;&#65306;</p><div class="example"><a name="roman.roman72.output"></a><p class="title"><b>&#20363;&nbsp;15.9.&nbsp;&#29992; <code class="filename">romantest72.py</code> &#27979;&#35797; <code class="filename">roman72.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">fromRoman should only accept uppercase input ... ok
toRoman should always return uppercase ... ok
fromRoman should fail with blank string ... ok
fromRoman should fail with malformed antecedents ... ok
fromRoman should fail with repeated pairs of numerals ... ok
fromRoman should fail with too many repeated numerals ... ok
fromRoman should give known result with known input ... ok
toRoman should give known result with known input ... ok
fromRoman(toRoman(n))==n for all n ... ok
toRoman should fail with non-integer input ... ok
toRoman should fail with negative input ... ok
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok

----------------------------------------------------------------------
Ran 13 tests in 3.685s

OK</font> <a name="roman.change.4.1"></a>circled_1_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.change.4.1">circled_1_delcric</a> </dt><dd>&#25152;&#26377;&#30340;&#27979;&#35797;&#29992;&#20363;&#37117;&#36890;&#36807;&#20102;&#65292;&#20572;&#27490;&#32534;&#20889;&#20195;&#30721;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#20840;&#38754;&#30340;&#21333;&#20803;&#27979;&#35797;&#24847;&#21619;&#30528;&#19981;&#24517;&#20381;&#36182;&#20110;&#31243;&#24207;&#21592;&#30340;&#19968;&#38754;&#20043;&#35789;&#65306;"<span class="quote">&#30456;&#20449;&#25105;&#65281;</span>"</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.refactoring"></a>15.3.&nbsp;&#37325;&#26500;</h2></div></div></div><div class="abstract"><p>&#20840;&#38754;&#30340;&#21333;&#20803;&#27979;&#35797;&#24102;&#26469;&#30340;&#26368;&#22823;&#22909;&#22788;&#19981;&#26159;&#20320;&#30340;&#20840;&#37096;&#27979;&#35797;&#29992;&#20363;&#26368;&#32456;&#36890;&#36807;&#26102;&#30340;&#25104;&#23601;&#24863;&#65307;&#20063;&#19981;&#26159;&#34987;&#36131;&#24618;&#30772;&#22351;&#20102;&#21035;&#20154;&#30340;&#20195;&#30721;&#26102;&#33021;&#22815;<span class="emphasis"><em>&#35777;&#26126;</em></span> &#33258;&#24049;&#30340;&#33258;&#20449;&#12290;&#26368;&#22823;&#30340;&#22909;&#22788;&#26159;&#21333;&#20803;&#27979;&#35797;&#32473;&#20102;&#20320;&#33258;&#30001;&#21435;&#26080;&#24773;&#22320;&#37325;&#26500;&#12290;</p></div><p>&#37325;&#26500;&#26159;&#22312;&#21487;&#36816;&#34892;&#20195;&#30721;&#30340;&#22522;&#30784;&#19978;&#20351;&#20043;&#24037;&#20316;&#24471;&#26356;&#22909;&#30340;&#36807;&#31243;&#12290;&#36890;&#24120;&#65292;"<span class="quote">&#26356;&#22909;</span>"&#24847;&#21619;&#30528;"<span class="quote">&#26356;&#24555;</span>"&#65292;&#20063;&#21487;&#33021;&#24847;&#21619;&#30528; "<span class="quote">&#20351;&#29992;&#26356;&#23569;&#30340;&#20869;&#23384;</span>"&#65292;&#25110;&#32773; "<span class="quote">&#20351;&#29992;&#26356;&#23569;&#30340;&#30913;&#30424;&#31354;&#38388;</span>"&#65292;&#25110;&#32773;&#20165;&#20165;&#26159;"<span class="quote">&#26356;&#20248;&#38597;&#30340;&#20195;&#30721;</span>"&#12290;&#19981;&#31649;&#23545;&#20320;&#65292;&#23545;&#20320;&#30340;&#39033;&#30446;&#24847;&#21619;&#20160;&#20040;&#65292;&#22312;&#20320;&#30340;&#29615;&#22659;&#20013;&#65292;&#37325;&#26500;&#23545;&#20219;&#20309;&#31243;&#24207;&#30340;&#38271;&#26399;&#33391;&#24615;&#36816;&#36716;&#37117;&#26159;&#37325;&#35201;&#30340;&#12290;</p><p>&#36825;&#37324;&#65292;"<span class="quote">&#26356;&#22909;</span>" &#24847;&#21619;&#30528; "<span class="quote">&#26356;&#24555;</span>"&#12290;&#26356;&#20855;&#20307;&#22320;&#35828;&#65292;<code class="function">fromRoman</code> &#20989;&#25968;&#21487;&#20197;&#26356;&#24555;&#65292;&#20851;&#38190;&#22312;&#20110;&#37027;&#20010;&#19985;&#38475;&#30340;&#12289;&#29992;&#20110;&#39564;&#35777;&#32599;&#39532;&#25968;&#23383;&#26377;&#25928;&#24615;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#23581;&#35797;&#19981;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#21435;&#35299;&#20915;&#26159;&#19981;&#20540;&#24471;&#30340; (&#36825;&#26679;&#20570;&#24456;&#38590;&#65292;&#32780;&#19988;&#21487;&#33021;&#20063;&#24555;&#19981;&#20102;&#22810;&#23569;)&#65292;&#20294;&#21487;&#20197;&#36890;&#36807;&#39044;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;&#20351;&#20989;&#25968;&#25552;&#36895;&#12290;</p><div class="example"><a name="d0e34816"></a><p class="title"><b>&#20363;&nbsp;15.10.&nbsp;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import re</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">pattern = '^M?M?M?$'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search(pattern, 'M')</span>               <a name="roman.refactoring.1.1"></a>circled_1_delcric
<font color="teal">&lt;SRE_Match object at 01090490&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">compiledPattern = re.compile(pattern)</span> <a name="roman.refactoring.1.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">compiledPattern</span>
<font color="teal">&lt;SRE_Pattern object at 00F06E28&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">dir(compiledPattern)</span>                  <a name="roman.refactoring.1.3"></a>circled_3_delcric
<font color="teal">['findall', 'match', 'scanner', 'search', 'split', 'sub', 'subn']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">compiledPattern.search('M')</span>           <a name="roman.refactoring.1.4"></a>circled_4_delcric
<font color="teal">&lt;SRE_Match object at 01104928&gt;</font></pre><div class="calloutlist"><dl compact><dt><a href="#roman.refactoring.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#26159;&#20320;&#30475;&#21040;&#36807;&#30340; <code class="function">re.search</code> &#35821;&#27861;&#12290;&#25226;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20316;&#20026;&#23383;&#31526;&#20018; (<code class="varname">pattern</code>) &#24182;&#29992;&#36825;&#20010;&#23383;&#31526;&#20018;&#26469;&#21305;&#37197; (<code class="literal">'M'</code>)&#12290;&#22914;&#26524;&#33021;&#22815;&#21305;&#37197;&#65292;&#20989;&#25968;&#36820;&#22238; &#19968;&#20010; match &#23545;&#35937;&#65292;&#21487;&#20197;&#29992;&#26469;&#30830;&#23450;&#21305;&#37197;&#30340;&#37096;&#20998;&#21644;&#22914;&#20309;&#21305;&#37197;&#30340;&#12290;</dd><dt><a href="#roman.refactoring.1.2">circled_2_delcric</a> </dt><dd>&#36825;&#37324;&#26159;&#19968;&#20010;&#26032;&#30340;&#35821;&#27861;&#65306;<code class="function">re.compile</code> &#25226;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20316;&#20026;&#23383;&#31526;&#20018;&#21442;&#25968;&#25509;&#21463;&#24182;&#36820;&#22238;&#19968;&#20010; pattern &#23545;&#35937;&#12290;&#27880;&#24847;&#36825;&#37324;&#27809;&#21435;&#21305;&#37197;&#23383;&#31526;&#20018;&#12290;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#20197;&#29305;&#23450;&#23383;&#31526;&#20018; (<code class="literal">'M'</code>) &#36827;&#34892;&#21305;&#37197;&#19981;&#26159;&#19968;&#22238;&#20107;&#65292;&#25152;&#29301;&#25199;&#30340;&#21482;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#26412;&#36523;&#12290;</dd><dt><a href="#roman.refactoring.1.3">circled_3_delcric</a> </dt><dd><code class="function">re.compile</code> &#36820;&#22238;&#30340;&#24050;&#32534;&#35793;&#30340; pattern &#23545;&#35937;&#26377;&#20960;&#20010;&#20540;&#24471;&#20851;&#27880;&#30340;&#21151;&#33021;&#65306;&#21253;&#25324;&#20102;&#20960;&#20010; <code class="filename">re</code> &#27169;&#22359;&#30452;&#25509;&#25552;&#20379;&#30340;&#21151;&#33021; (&#27604;&#22914;&#65306;<code class="function">search</code> &#21644; <code class="function">sub</code>)&#12290;</dd><dt><a href="#roman.refactoring.1.4">circled_4_delcric</a> </dt><dd>&#29992; <code class="literal">'M'</code> &#20316;&#21442;&#25968;&#26469;&#35843;&#29992;&#24050;&#32534;&#35793;&#30340; pattern &#23545;&#35937;&#30340; <code class="function">search</code> &#20989;&#25968;&#19982;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#23383;&#31526;&#20018; <code class="literal">'M'</code> &#35843;&#29992; <code class="function">re.search</code> &#21487;&#20197;&#24471;&#21040;&#30456;&#21516;&#30340;&#32467;&#26524;&#65292;&#21482;&#26159;&#24555;&#20102;&#24456;&#22810;&#12290; (&#20107;&#23454;&#19978;&#65292;<code class="function">re.search</code> &#20989;&#25968;&#20165;&#20165;&#23558;&#27491;&#21017;&#34920;&#36798;&#24335;&#32534;&#35793;&#65292;&#28982;&#21518;&#20026;&#20320;&#35843;&#29992;&#32534;&#35793;&#21518;&#30340; pattern &#23545;&#35937;&#30340; <code class="function">search</code> &#26041;&#27861;&#12290;)</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="d0e34932">&#27880;&#24847;: &#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;</a></b><br>&#22312;&#38656;&#35201;&#22810;&#27425;&#20351;&#29992;&#21516;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#24773;&#20917;&#19979;&#65292;&#24212;&#35813;&#23558;&#23427;&#36827;&#34892;&#32534;&#35793;&#20197;&#33719;&#24471;&#19968;&#20010; pattern &#23545;&#35937;&#65292;&#28982;&#21518;&#30452;&#25509;&#35843;&#29992;&#36825;&#20010; pattern &#23545;&#35937;&#30340;&#26041;&#27861;&#12290;</blockquote></div><div class="example"><a name="d0e34937"></a><p class="title"><b>&#20363;&nbsp;15.11.&nbsp;<code class="filename">roman81.py</code> &#20013;&#24050;&#32534;&#35793;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;</b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage8/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
# toRoman and rest of module omitted for clarity

romanNumeralPattern = \
    re.compile('^M?M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$') <a name="roman.refactoring.2.1"></a>circled_1_delcric

def fromRoman(s):
    """convert Roman numeral to integer"""
    if not s:
        raise InvalidRomanNumeralError, 'Input can not be blank'
    if not romanNumeralPattern.search(s):                                    <a name="roman.refactoring.2.2"></a>circled_2_delcric
        raise InvalidRomanNumeralError, 'Invalid Roman numeral: %s' % s

    result = 0
    index = 0
    for numeral, integer in romanNumeralMap:
        while s[index:index+len(numeral)] == numeral:
            result += integer
            index += len(numeral)
    return result
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.refactoring.2.1">circled_1_delcric</a> </dt><dd>&#30475;&#36215;&#26469;&#24456;&#30456;&#20284;&#65292;&#20294;&#23454;&#36136;&#21364;&#26377;&#24456;&#22823;&#25913;&#21464;&#12290;<code class="varname">romanNumeralPattern</code> &#19981;&#20877;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#20102;&#65292;&#32780;&#26159;&#19968;&#20010;&#30001; <code class="function">re.compile</code> &#36820;&#22238;&#30340; pattern &#23545;&#35937;&#12290;</dd><dt><a href="#roman.refactoring.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#24847;&#21619;&#30528;&#20320;&#21487;&#20197;&#30452;&#25509;&#35843;&#29992; <code class="varname">romanNumeralPattern</code> &#30340;&#26041;&#27861;&#12290;&#36825;&#27604;&#27599;&#27425;&#35843;&#29992; <code class="function">re.search</code> &#35201;&#24555;&#24456;&#22810;&#12290;&#27169;&#22359;&#34987;&#39318;&#27425;&#23548;&#20837; (import) &#20043;&#26102;&#65292;&#27491;&#21017;&#34920;&#36798;&#24335;&#34987;&#19968;&#27425;&#32534;&#35793;&#24182;&#23384;&#20648;&#20110; <code class="varname">romanNumeralPattern</code>&#12290;&#20043;&#21518;&#27599;&#27425;&#35843;&#29992; <code class="function">fromRoman</code> &#26102;&#65292;&#20320;&#21487;&#20197;&#31435;&#21051;&#20197;&#27491;&#21017;&#34920;&#36798;&#24335;&#21305;&#37197;&#36755;&#20837;&#30340;&#23383;&#31526;&#20018;&#65292;&#32780;&#19981;&#38656;&#35201;&#22312;&#37325;&#22797;&#32972;&#21518;&#30340;&#36825;&#20123;&#32534;&#35793;&#30340;&#24037;&#20316;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#37027;&#20040;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;&#21487;&#20197;&#25552;&#36895;&#22810;&#23569;&#21602;&#65311;&#20320;&#33258;&#24049;&#26469;&#30475;&#21543;&#65306;</p><div class="example"><a name="roman.stage8.1.output"></a><p class="title"><b>&#20363;&nbsp;15.12.&nbsp;&#29992; <code class="filename">romantest81.py</code> &#27979;&#35797; <code class="filename">roman81.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">.............          </font><a name="roman.refactoring.3.1"></a>circled_1_delcric<font color="teal">
----------------------------------------------------------------------
Ran 13 tests in 3.385s </font><a name="roman.refactoring.3.2"></a>circled_2_delcric<font color="teal">

OK</font>                     <a name="roman.refactoring.3.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.refactoring.3.1">circled_1_delcric</a> </dt><dd>&#26377;&#19968;&#28857;&#35828;&#26126;&#19968;&#19979;&#65306;&#36825;&#37324;&#65292;&#25105;&#22312;&#36816;&#34892;&#21333;&#20803;&#27979;&#35797;&#26102;<span class="emphasis"><em>&#27809;&#26377;</em></span> &#20351;&#29992; <code class="option">-v</code> &#36873;&#39033;&#65292;&#22240;&#27492;&#36755;&#20986;&#30340;&#20063;&#19981;&#20877;&#26159;&#27599;&#20010;&#27979;&#35797;&#23436;&#25972;&#30340; <code class="literal">doc string</code>&#65292;&#32780;&#26159;&#29992;&#19968;&#20010;&#22278;&#28857;&#26469;&#34920;&#31034;&#27599;&#20010;&#36890;&#36807;&#30340;&#27979;&#35797;&#12290;(&#22833;&#36133;&#30340;&#27979;&#35797;&#26631;&#29992; <code class="literal">F</code> &#34920;&#31034;&#65292;&#21457;&#29983;&#38169;&#35823;&#21017;&#29992; <code class="literal">E</code> &#34920;&#31034;&#65292;&#20320;&#20173;&#26087;&#21487;&#20197;&#33719;&#24471;&#22833;&#36133;&#21644;&#38169;&#35823;&#30340;&#23436;&#25972;&#36861;&#36394;&#20449;&#24687;&#20197;&#20415;&#26597;&#25214;&#38382;&#39064;&#25152;&#22312;&#12290;)</dd><dt><a href="#roman.refactoring.3.2">circled_2_delcric</a> </dt><dd>&#36816;&#34892; <code class="literal">13</code> &#20010;&#27979;&#35797;&#32791;&#26102; <code class="literal">3.385</code> &#31186;&#65292;&#19982;&#20043;&#30456;&#27604;&#26159;&#27809;&#26377;&#39044;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;&#26102;&#30340; <code class="literal">3.685&#31186;</code>&#12290;&#36825;&#26159;&#19968;&#20010; <code class="literal">8%</code> &#30340;&#25972;&#20307;&#25552;&#36895;&#65292;&#35760;&#20303;&#21333;&#20803;&#27979;&#35797;&#30340;&#22823;&#37327;&#26102;&#38388;&#23454;&#38469;&#19978;&#33457;&#22312;&#20570;&#20854;&#20182;&#24037;&#20316;&#19978;&#12290;(&#25105;&#21333;&#29420;&#27979;&#35797;&#20102;&#27491;&#21017;&#34920;&#36798;&#24335;&#37096;&#20998;&#30340;&#32791;&#26102;&#65292;&#19981;&#32771;&#34385;&#21333;&#20803;&#27979;&#35797;&#30340;&#20854;&#20182;&#29615;&#33410;&#65292;&#27491;&#21017;&#34920;&#36798;&#24335;&#32534;&#35793;&#21487;&#20197;&#35753;&#21305;&#37197; <code class="function">search</code> &#24179;&#22343;&#25552;&#36895; <code class="literal">54%</code>&#12290;)&#23567;&#23567;&#20462;&#25913;&#36824;&#30495;&#26159;&#20540;&#24471;&#12290;</dd><dt><a href="#roman.refactoring.3.3">circled_3_delcric</a> </dt><dd>&#23545;&#20102;&#65292;&#19981;&#24517;&#39038;&#34385;&#20160;&#20040;&#65292;&#39044;&#20808;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;&#24182;&#27809;&#26377;&#30772;&#22351;&#20160;&#20040;&#65292;&#20320;&#21018;&#21018;&#35777;&#23454;&#36825;&#19968;&#28857;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#25105;&#36824;&#24819;&#20570;&#21478;&#22806;&#19968;&#20010;&#24615;&#33021;&#20248;&#21270;&#24037;&#20316;&#12290;&#23601;&#27491;&#21017;&#34920;&#36798;&#24335;&#35821;&#27861;&#30340;&#22797;&#26434;&#24615;&#32780;&#35328;&#65292;&#36890;&#24120;&#26377;&#19981;&#27490;&#19968;&#31181;&#26041;&#27861;&#26469;&#26500;&#36896;&#30456;&#21516;&#30340;&#34920;&#36798;&#24335;&#26159;&#19981;&#20250;&#20196;&#20154;&#24778;&#35766;&#30340;&#12290;&#22312; comp.lang.python (<a href="http://groups.google.com/groups?group=comp.lang.python">http://groups.google.com/groups?group=comp.lang.python</a>) &#19978;&#23545;&#35813;&#27169;&#22359;&#36827;&#34892;&#19968;&#20123;&#35752;&#35770;&#21518;&#65292;&#26377;&#20154;&#24314;&#35758;&#25105;&#20351;&#29992; <code class="literal">{<em class="replaceable">m</em>,<em class="replaceable">n</em>}</code> &#35821;&#27861;&#26469;&#26597;&#25214;&#21487;&#36873;&#37325;&#22797;&#23383;&#31526;&#12290;</p><div class="example"><a name="d0e35062"></a><p class="title"><b>&#20363;&nbsp;15.13.&nbsp;<code class="filename">roman82.py</code></b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage8/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
# rest of program omitted for clarity

#old version
#romanNumeralPattern = \
#   re.compile('^M?M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$')

#new version
romanNumeralPattern = \
    re.compile('^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$') <a name="roman.refactoring.4.1"></a>circled_1_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.refactoring.4.1">circled_1_delcric</a> </dt><dd>&#20320;&#24050;&#32463;&#23558; <code class="literal">M?M?M?M?</code> &#26367;&#25442;&#20026; <code class="literal">M{0,4}</code>&#12290;&#23427;&#20204;&#30340;&#21547;&#20041;&#30456;&#21516;&#65306;"<span class="quote">&#21305;&#37197; 0 &#21040; 4 &#20010; <code class="literal">M</code> &#23383;&#31526;</span>"&#12290;&#31867;&#20284;&#22320;&#65292;<code class="literal">C?C?C?</code> &#25913;&#25104;&#20102; <code class="literal">C{0,3}</code> ("<span class="quote">&#21305;&#37197; 0 &#21040; 3 &#20010; <code class="literal">C</code> &#23383;&#31526;</span>") &#25509;&#19979;&#26469;&#30340; <code class="literal">X</code> &#21644; <code class="literal">I</code> &#20063;&#19968;&#26679;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#26679;&#30340;&#27491;&#21017;&#34920;&#36798;&#31616;&#30701;&#19968;&#20123; (&#34429;&#28982;&#21487;&#35835;&#24615;&#19981;&#22826;&#22909;)&#12290;&#26680;&#24515;&#38382;&#39064;&#26159;&#65292;&#26159;&#21542;&#33021;&#21152;&#24555;&#36895;&#24230;&#65311;</p><div class="example"><a name="d0e35116"></a><p class="title"><b>&#20363;&nbsp;15.14.&nbsp;&#20197; <code class="filename">romantest82.py</code> &#27979;&#35797; <code class="filename">roman82.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">.............
----------------------------------------------------------------------
Ran 13 tests in 3.315s </font><a name="roman.refactoring.5.1"></a>circled_1_delcric<font color="teal">

OK</font>                     <a name="roman.refactoring.5.2"></a>circled_2_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.refactoring.5.1">circled_1_delcric</a> </dt><dd>&#24635;&#20307;&#32780;&#35328;&#65292;&#36825;&#31181;&#27491;&#21017;&#34920;&#36798;&#20351;&#21333;&#20803;&#27979;&#35797;&#25552;&#36895; 2%&#12290;&#36825;&#19981;&#22826;&#20196;&#20154;&#25391;&#22859;&#65292;&#20294;&#35760;&#20303; <code class="function">search</code> &#20989;&#25968;&#21482;&#26159;&#25972;&#20307;&#21333;&#20803;&#27979;&#35797;&#30340;&#19968;&#20010;&#23567;&#37096;&#20998;&#65292;&#24456;&#22810;&#26102;&#38388;&#33457;&#22312;&#20102;&#20854;&#20182;&#26041;&#38754;&#12290;(&#25105;&#21478;&#22806;&#30340;&#27979;&#35797;&#34920;&#26126;&#36825;&#20010;&#24212;&#29992;&#20102;&#26032;&#35821;&#27861;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#20351; <code class="function">search</code> &#20989;&#25968;&#25552;&#36895; <code class="literal">11%</code> &#12290;) &#36890;&#36807;&#39044;&#20808;&#32534;&#35793;&#21644;&#20351;&#29992;&#26032;&#35821;&#27861;&#37325;&#20889;&#21487;&#20197;&#20351;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#24615;&#33021;&#25552;&#21319;&#36229;&#36807; <code class="literal">60%</code>&#65292;&#20196;&#21333;&#20803;&#27979;&#35797;&#30340;&#25972;&#20307;&#24615;&#33021;&#25552;&#21319;&#36229;&#36807; <code class="literal">10%</code>&#12290;</dd><dt><a href="#roman.refactoring.5.2">circled_2_delcric</a> </dt><dd>&#27604;&#20219;&#20309;&#30340;&#24615;&#33021;&#25552;&#21319;&#26356;&#37325;&#35201;&#30340;&#26159;&#27169;&#22359;&#20173;&#28982;&#36816;&#36716;&#23436;&#22909;&#12290;&#36825;&#20415;&#26159;&#25105;&#26089;&#20808;&#25552;&#21040;&#30340;&#33258;&#30001;&#65306;&#33258;&#30001;&#22320;&#35843;&#25972;&#12289;&#20462;&#25913;&#25110;&#32773;&#37325;&#20889;&#20219;&#20309;&#37096;&#20998;&#24182;&#19988;&#20445;&#35777;&#22312;&#27492;&#36807;&#31243;&#20013;&#27809;&#26377;&#25226;&#20107;&#24773;&#25630;&#24471;&#19968;&#22242;&#31967;&#12290;&#36825;&#24182;&#19981;&#26159;&#32473;&#26080;&#20241;&#27490;&#22320;&#20026;&#20102;&#35843;&#25972;&#20195;&#30721;&#32780;&#35843;&#25972;&#20195;&#30721;&#20197;&#35768;&#21487;&#65307;&#20320;&#26377;&#24456;&#20999;&#23454;&#30340;&#30446;&#26631; ("<span class="quote">&#35753; <code class="function">fromRoman</code> &#26356;&#24555;</span>")&#65292;&#32780;&#19988;&#20320;&#21487;&#20197;&#23454;&#29616;&#36825;&#20010;&#30446;&#26631;&#65292;&#19981;&#20250;&#22240;&#20026;&#32771;&#34385;&#22312;&#25913;&#21160;&#36807;&#31243;&#20013;&#26159;&#21542;&#20250;&#24341;&#20837;&#26032;&#30340; Bug &#32780;&#26377;&#25152;&#36831;&#30097;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36824;&#26377;&#21478;&#22806;&#19968;&#20010;&#25105;&#24819;&#20570;&#30340;&#35843;&#25972;&#65292;&#25105;&#20445;&#35777;&#36825;&#26159;&#26368;&#21518;&#19968;&#20010;&#65292;&#20043;&#21518;&#25105;&#20250;&#20572;&#19979;&#26469;&#65292;&#35753;&#36825;&#20010;&#27169;&#22359;&#27463;&#27463;&#12290;&#23601;&#20687;&#20320;&#22810;&#27425;&#30475;&#21040;&#30340;&#65292;&#27491;&#21017;&#34920;&#36798;&#24335;&#36234;&#26214;&#28073;&#38590;&#25026;&#36234;&#24555;&#65292;&#25105;&#21487;&#19981;&#24819;&#22312;&#20845;&#20010;&#26376;&#20869;&#20877;&#22238;&#22836;&#35797;&#22270;&#32500;&#25252;&#23427;&#12290;&#26159;&#21568;&#65281;&#27979;&#35797;&#29992;&#20363;&#36890;&#36807;&#20102;&#65292;&#25105;&#20415;&#30693;&#36947;&#23427;&#24037;&#20316;&#27491;&#24120;&#65292;&#20294;&#22914;&#26524;&#25105;&#25630;&#19981;&#25026;&#23427;&#26159;<span class="emphasis"><em>&#22914;&#20309;</em></span> &#24037;&#20316;&#30340;&#65292;&#28155;&#21152;&#26032;&#21151;&#33021;&#12289;&#20462;&#27491;&#26032; Bug&#65292;&#25110;&#32773;&#32500;&#25252;&#23427;&#37117;&#23558;&#21464;&#24471;&#24456;&#22256;&#38590;&#12290;&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#re.verbose" title="7.5.&nbsp;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;7.5&nbsp;&#33410; &#8220;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#8221;</a> &#30475;&#21040;&#30340;&#65292;<span class="application">Python</span> &#25552;&#20379;&#20102;&#36880;&#34892;&#27880;&#37322;&#20320;&#30340;&#36923;&#36753;&#30340;&#26041;&#27861;&#12290;</p><div class="example"><a name="d0e35171"></a><p class="title"><b>&#20363;&nbsp;15.15.&nbsp;<code class="filename">roman83.py</code></b></p><div class="example-contents"><p>&#35813;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage8/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
# rest of program omitted for clarity

#old version
#romanNumeralPattern = \
#   re.compile('^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$')

#new version
romanNumeralPattern = re.compile('''
    ^                   # beginning of string
    M{0,4}              # thousands - 0 to 4 M's
    (CM|CD|D?C{0,3})    # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
                        #            or 500-800 (D, followed by 0 to 3 C's)
    (XC|XL|L?X{0,3})    # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
                        #        or 50-80 (L, followed by 0 to 3 X's)
    (IX|IV|V?I{0,3})    # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
                        #        or 5-8 (V, followed by 0 to 3 I's)
    $                   # end of string
    ''', re.VERBOSE) <a name="roman.refactoring.6.1"></a>circled_1_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#roman.refactoring.6.1">circled_1_delcric</a> </dt><dd><code class="function">re.compile</code> &#20989;&#25968;&#30340;&#31532;&#20108;&#20010;&#21442;&#25968;&#26159;&#21487;&#36873;&#30340;&#65292;&#36825;&#20010;&#21442;&#25968;&#36890;&#36807;&#19968;&#20010;&#25110;&#19968;&#32452;&#26631;&#24535; (flag) &#26469;&#25511;&#21046;&#39044;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#36873;&#39033;&#12290;&#36825;&#37324;&#20320;&#25351;&#23450;&#20102; <code class="literal">re.VERBOSE</code> &#36873;&#39033;&#65292;&#21578;&#35785; <span class="application">Python</span> &#27491;&#21017;&#34920;&#36798;&#24335;&#37324;&#26377;&#20869;&#32852;&#27880;&#37322;&#12290;&#27880;&#37322;&#21644;&#23427;&#20204;&#21608;&#22260;&#30340;&#31354;&#30333;<span class="emphasis"><em>&#19981;</em></span> &#20250;&#34987;&#35748;&#20570;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#19968;&#37096;&#20998;&#65292;&#22312;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;&#26102; <code class="function">re.compile</code> &#20989;&#25968;&#20250;&#24573;&#30053;&#23427;&#20204;&#12290;&#36825;&#20010;&#26032; "<span class="quote">verbose</span>" &#29256;&#26412;&#19982;&#32769;&#29256;&#26412;&#23436;&#20840;&#19968;&#26679;&#65292;&#21482;&#26159;&#26356;&#20855;&#21487;&#35835;&#24615;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e35210"></a><p class="title"><b>&#20363;&nbsp;15.16.&nbsp;&#29992; <code class="filename">romantest83.py</code> &#27979;&#35797; <code class="filename">roman83.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen"><font color="teal">.............
----------------------------------------------------------------------
Ran 13 tests in 3.315s </font><a name="roman.refactoring.7.1"></a>circled_1_delcric<font color="teal">

OK</font>                     <a name="roman.refactoring.7.2"></a>circled_2_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#roman.refactoring.7.1">circled_1_delcric</a> </dt><dd>&#26032; "<span class="quote">verbose</span>" &#29256;&#26412;&#21644;&#32769;&#29256;&#26412;&#30340;&#36816;&#34892;&#36895;&#24230;&#19968;&#26679;&#12290;&#20107;&#23454;&#19978;&#65292;&#32534;&#35793;&#30340; pattern &#23545;&#35937;&#20063;&#19968;&#26679;&#65292;&#22240;&#20026; <code class="function">re.compile</code> &#20989;&#25968;&#20250;&#21076;&#38500;&#25481;&#25152;&#26377;&#20320;&#28155;&#21152;&#30340;&#20869;&#23481;&#12290;</dd><dt><a href="#roman.refactoring.7.2">circled_2_delcric</a> </dt><dd>&#26032; "<span class="quote">verbose</span>" &#29256;&#26412;&#21487;&#20197;&#36890;&#36807;&#25152;&#26377;&#32769;&#29256;&#26412;&#36890;&#36807;&#30340;&#27979;&#35797;&#12290;&#20160;&#20040;&#37117;&#27809;&#26377;&#25913;&#21464;&#65292;&#20294;&#22312;&#20845;&#20010;&#26376;&#21518;&#37325;&#35835;&#35813;&#27169;&#22359;&#30340;&#31243;&#24207;&#21592;&#21364;&#26377;&#20102;&#29702;&#35299;&#21151;&#33021;&#22914;&#20309;&#23454;&#29616;&#30340;&#26426;&#20250;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.postscript"></a>15.4.&nbsp;&#21518;&#35760;</h2></div></div></div><div class="abstract"><p>&#32874;&#26126;&#30340;&#35835;&#32773;&#22312;&#23398;&#20064;<a class="link" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#21069;&#19968;&#33410;</a>&#26102;&#24819;&#24471;&#20250;&#26356;&#28145;&#20837;&#19968;&#23618;&#12290;&#29616;&#22312;&#20889;&#30340;&#36825;&#20010;&#31243;&#24207;&#20013;&#26368;&#20196;&#20154;&#22836;&#30171;&#30340;&#24615;&#33021;&#36127;&#25285;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#20294;&#23427;&#26159;&#24517;&#38656;&#30340;&#65292;&#22240;&#20026;&#27809;&#26377;&#20854;&#23427;&#26041;&#27861;&#26469;&#35782;&#21035;&#32599;&#39532;&#25968;&#23383;&#12290;&#20294;&#26159;&#65292;&#23427;&#20204;&#21482;&#26377; 5000 &#20010;&#65292;&#20026;&#20160;&#20040;&#19981;&#19968;&#27425;&#24615;&#22320;&#26500;&#24314;&#19968;&#20010;&#26597;&#35810;&#34920;&#26469;&#35835;&#21462;&#65311;&#19981;&#24517;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#20984;&#29616;&#20102;&#36825;&#20010;&#20027;&#24847;&#30340;&#22909;&#22788;&#12290;&#20320;&#24314;&#31435;&#20102;&#25972;&#25968;&#21040;&#32599;&#39532;&#25968;&#23383;&#26597;&#35810;&#34920;&#30340;&#26102;&#20505;&#65292;&#32599;&#39532;&#25968;&#23383;&#21040;&#25972;&#25968;&#30340;&#36870;&#21521;&#26597;&#35810;&#34920;&#20063;&#26500;&#24314;&#20102;&#12290;</p></div><p>&#26356;&#22823;&#30340;&#22909;&#22788;&#22312;&#20110;&#65292;&#20320;&#24050;&#32463;&#25317;&#26377;&#19968;&#25972;&#22871;&#23436;&#20840;&#30340;&#21333;&#20803;&#27979;&#35797;&#12290;&#20320;&#20462;&#25913;&#20102;&#22810;&#21322;&#30340;&#20195;&#30721;&#65292;&#20294;&#21333;&#20803;&#27979;&#35797;&#36824;&#26159;&#19968;&#26679;&#30340;&#65292;&#22240;&#27492;&#20320;&#21487;&#20197;&#30830;&#23450;&#20320;&#30340;&#26032;&#20195;&#30721;&#19982;&#26469;&#30340;&#20195;&#30721;&#19968;&#26679;&#21487;&#20197;&#27491;&#24120;&#24037;&#20316;&#12290;</p><div class="example"><a name="d0e35256"></a><p class="title"><b>&#20363;&nbsp;15.17.&nbsp;<code class="filename">roman9.py</code></b></p><div class="example-contents"><p>&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#22312;&#20363;&#23376;&#30446;&#24405;&#19979;&#30340; <code class="filename">py/roman/stage9/</code> &#30446;&#24405;&#20013;&#25214;&#21040;&#12290;</p><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
#Define exceptions
class RomanError(Exception): pass
class OutOfRangeError(RomanError): pass
class NotIntegerError(RomanError): pass
class InvalidRomanNumeralError(RomanError): pass

#Roman numerals must be less than 5000
MAX_ROMAN_NUMERAL = 4999

#Define digit mapping
romanNumeralMap = (('M',  1000),
                   ('CM', 900),
                   ('D',  500),
                   ('CD', 400),
                   ('C',  100),
                   ('XC', 90),
                   ('L',  50),
                   ('XL', 40),
                   ('X',  10),
                   ('IX', 9),
                   ('V',  5),
                   ('IV', 4),
                   ('I',  1))

#Create tables for fast conversion of roman numerals.
#See fillLookupTables() below.
toRomanTable = [ None ]  # Skip an index since Roman numerals have no zero
fromRomanTable = {}

def toRoman(n):
    """convert integer to Roman numeral"""
    if not (0 &lt; n &lt;= MAX_ROMAN_NUMERAL):
        raise OutOfRangeError, "number out of range (must be 1..%s)" % MAX_ROMAN_NUMERAL
    if int(n) &lt;&gt; n:
        raise NotIntegerError, "non-integers can not be converted"
    return toRomanTable[n]

def fromRoman(s):
    """convert Roman numeral to integer"""
    if not s:
        raise InvalidRomanNumeralError, "Input can not be blank"
    if not fromRomanTable.has_key(s):
        raise InvalidRomanNumeralError, "Invalid Roman numeral: %s" % s
    return fromRomanTable[s]

def toRomanDynamic(n):
    """convert integer to Roman numeral using dynamic programming"""
    result = ""
    for numeral, integer in romanNumeralMap:
        if n &gt;= integer:
            result = numeral
            n -= integer
            break
    if n &gt; 0:
        result += toRomanTable[n]
    return result

def fillLookupTables():
    """compute all the possible roman numerals"""
    #Save the values in two global tables to convert to and from integers.
    for integer in range(1, MAX_ROMAN_NUMERAL + 1):
        romanNumber = toRomanDynamic(integer)
        toRomanTable.append(romanNumber)
        fromRomanTable[romanNumber] = integer

fillLookupTables()
</pre></div></div><br class="example-break"><p>&#36825;&#26679;&#26377;&#22810;&#24555;&#21602;&#65311;</p><div class="example"><a name="d0e35274"></a><p class="title"><b>&#20363;&nbsp;15.18.&nbsp;&#29992; <code class="filename">romantest9.py</code> &#27979;&#35797; <code class="filename">roman9.py</code> &#30340;&#32467;&#26524;</b></p><div class="example-contents"><pre class="screen">
<font color="teal">
.............
----------------------------------------------------------------------
Ran 13 tests in 0.791s

OK
</font>
</pre></div></div><br class="example-break"><p>&#36824;&#35760;&#24471;&#21527;&#65311;&#20320;&#21407;&#26377;&#29256;&#26412;&#30340;&#26368;&#24555;&#36895;&#24230;&#26159; 13 &#20010;&#27979;&#35797;&#32791;&#26102; 3.315 &#31186;&#12290;&#24403;&#28982;&#65292;&#36825;&#26679;&#30340;&#27604;&#36739;&#19981;&#23436;&#20840;&#20844;&#24179;&#65292;&#22240;&#20026;&#36825;&#20010;&#26032;&#29256;&#26412;&#38656;&#35201;&#26356;&#38271;&#30340;&#26102;&#38388;&#26469;&#23548;&#20837; (&#24403;&#23427;&#22635;&#20805;&#26597;&#35810;&#34920;&#26102;)&#12290;&#20294;&#26159;&#23548;&#20837;&#21482;&#38656;&#19968;&#27425;&#65292;&#22312;&#36816;&#34892;&#36807;&#31243;&#20013;&#21487;&#20197;&#24573;&#30053;&#12290;</p><p>&#36825;&#20010;&#37325;&#26500;&#30340;&#25925;&#20107;&#30340;&#23507;&#24847;&#26159;&#20160;&#20040;&#65311;</p><div class="itemizedlist"><ul><li>&#31616;&#27905;&#26159;&#32654;&#24503;&#12290;</li><li>&#29305;&#21035;&#26159;&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#26102;&#12290;</li><li>&#24182;&#19988;&#21333;&#20803;&#27979;&#35797;&#32473;&#20102;&#20320;&#22823;&#35268;&#27169;&#37325;&#26500;&#30340;&#20449;&#24515;&#8230;&#8230;&#21363;&#20351;&#21407;&#26377;&#30340;&#20195;&#30721;&#19981;&#26159;&#20320;&#20889;&#30340;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="roman.summary"></a>15.5.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#21333;&#20803;&#27979;&#35797;&#26159;&#19968;&#20010;&#24378;&#22823;&#30340;&#27010;&#24565;&#65292;&#20351;&#29992;&#24471;&#24403;&#30340;&#35805;&#26082;&#21487;&#20197;&#20943;&#23569;&#32500;&#25252;&#25104;&#26412;&#21448;&#21487;&#20197;&#22686;&#21152;&#38271;&#26399;&#39033;&#30446;&#30340;&#28789;&#27963;&#24615;&#12290;&#21516;&#26679;&#37325;&#35201;&#30340;&#26159;&#35201;&#24847;&#35782;&#21040;&#21333;&#20803;&#27979;&#35797;&#24182;&#19981;&#26159;&#8220;&#28789;&#20025;&#22937;&#33647;&#8221;&#65292;&#20063;&#19981;&#26159;&#8220;&#38134;&#24377;&#8221;&#12290;&#32534;&#20889;&#22909;&#30340;&#27979;&#35797;&#29992;&#20363;&#24456;&#22256;&#38590;&#65292;&#20445;&#25345;&#20854;&#26356;&#26032;&#26356;&#38656;&#35201;&#30952;&#32451; (&#29305;&#21035;&#26159;&#24403;&#39038;&#23458;&#23545;&#20462;&#22797;&#20005;&#37325;&#30340; Bug &#22823;&#21628;&#23567;&#21483;&#20043;&#26102;)&#12290;&#21333;&#20803;&#27979;&#35797;&#19981;&#26159;&#20854;&#23427;&#24418;&#24335;&#27979;&#35797;&#30340;&#26367;&#20195;&#21697;&#65292;&#27604;&#22914;&#35828;&#21151;&#33021;&#24615;&#27979;&#35797;&#12289;&#38598;&#25104;&#27979;&#35797;&#20197;&#21450;&#21487;&#29992;&#24615;&#27979;&#35797;&#12290;&#20294;&#23427;&#20999;&#23454;&#21487;&#34892;&#19988;&#21151;&#25928;&#26126;&#26174;&#65292;&#19968;&#26086;&#30456;&#35782;&#65292;&#20320;&#20250;&#21453;&#38382;&#20026;&#20160;&#20040;&#20197;&#24448;&#27809;&#26377;&#24212;&#29992;&#23427;&#12290;</p></div><p>&#36825;&#19968;&#31456;&#28085;&#30422;&#20102;&#24456;&#22810;&#20869;&#23481;&#65292;&#26377;&#24456;&#22810;&#37117;&#19981;&#26159; <span class="application">Python</span> &#25152;&#29305;&#26377;&#30340;&#12290;&#24456;&#22810;&#35821;&#35328;&#37117;&#26377;&#21333;&#20803;&#27979;&#35797;&#26694;&#26550;&#65292;&#37117;&#35201;&#27714;&#20320;&#29702;&#35299;&#30456;&#21516;&#30340;&#22522;&#26412;&#27010;&#24565;&#65306;</p><div class="highlights"><div class="itemizedlist"><ul><li>&#27979;&#35797;&#29992;&#20363;&#30340;&#35774;&#35745;&#26041;&#38024;&#26159;&#30446;&#30340;&#21333;&#19968;&#12289;&#21487;&#20197;&#33258;&#21160;&#36816;&#34892;&#12289;&#20114;&#19981;&#24178;&#25200;&#12290;</li><li>&#22312;&#34987;&#27979;&#35797;&#20195;&#30721;&#32534;&#20889;<span class="emphasis"><em>&#20043;&#21069;</em></span> &#32534;&#20889;&#27979;&#35797;&#29992;&#20363;&#12290;</li><li>&#32534;&#20889;&#27979;&#35797;<a class="link" href="#roman.success" title="13.4.&nbsp;&#27491;&#38754;&#27979;&#35797; (Testing for success)">&#26377;&#25928;&#36755;&#20837;&#30340;&#27979;&#35797;&#29992;&#20363;</a>&#24182;&#26816;&#26597;&#27491;&#30830;&#30340;&#32467;&#26524;&#12290;</li><li>&#32534;&#20889;&#27979;&#35797;<a class="link" href="#roman.failure" title="13.5.&nbsp;&#36127;&#38754;&#27979;&#35797; (Testing for failure)">&#26080;&#25928;&#36755;&#20837;&#30340;&#27979;&#35797;&#29992;&#20363;</a>&#24182;&#26816;&#26597;&#27491;&#30830;&#30340;&#22833;&#36133;&#12290;</li><li>&#20026;<a class="link" href="#roman.bugs" title="15.1.&nbsp;&#22788;&#29702; bugs">&#25551;&#36848; Bug</a> &#25110;<a class="link" href="#roman.change" title="15.2.&nbsp;&#24212;&#23545;&#38656;&#27714;&#21464;&#21270;">&#21453;&#26144;&#26032;&#38656;&#27714;</a>&#32780;&#32534;&#20889;&#21644;&#21319;&#32423;&#27979;&#35797;&#29992;&#20363;&#12290;</li><li>&#20026;&#25913;&#36827;&#24615;&#33021;&#12289;&#21487;&#20280;&#32553;&#24615;&#12289;&#21487;&#35835;&#24615;&#12289;&#21487;&#32500;&#25252;&#24615;&#21644;&#20219;&#20309;&#32570;&#23569;&#30340;&#29305;&#24615;&#32780;&#26080;&#24773;&#22320;<a class="link" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#37325;&#26500;</a>&#12290;</li></ul></div></div><p>&#21478;&#22806;&#65292;&#20320;&#24212;&#35813;&#33021;&#22815;&#33258;&#22914;&#22320;&#20570;&#21040;&#22914;&#19979; <span class="application">Python</span> &#30340;&#29305;&#26377;&#24037;&#20316;&#65306;</p><div class="highlights"><div class="itemizedlist"><ul><li>&#32487;&#25215; <a class="link" href="#roman.testtoromanknownvalues.example" title="&#20363;&nbsp;13.2.&nbsp;testToRomanKnownValues"> <code class="literal">unittest.TestCase</code></a> &#29983;&#25104;&#23376;&#31867;&#24182;&#20026;&#27599;&#20010;&#21333;&#29420;&#30340;&#27979;&#35797;&#29992;&#20363;&#32534;&#20889;&#26041;&#27861;&#12290;</li><li>&#20351;&#29992; <a class="link" href="#roman.testtoromanknownvalues.example" title="&#20363;&nbsp;13.2.&nbsp;testToRomanKnownValues"><code class="function">assertEqual</code></a> &#26816;&#26597;&#24050;&#30693;&#32467;&#26524;&#30340;&#36820;&#22238;&#12290;</li><li>&#20351;&#29992; <a class="link" href="#roman.tobadinput.example" title="&#20363;&nbsp;13.3.&nbsp;&#27979;&#35797; toRoman &#30340;&#26080;&#25928;&#36755;&#20837;"><code class="function">assertRaises</code></a> &#26816;&#26597;&#20989;&#25968;&#26159;&#21542;&#24341;&#21457;&#24050;&#30693;&#24322;&#24120;&#12290;</li><li>&#22312; <code class="literal">if __name__</code> &#23376;&#21477;&#20013;&#35843;&#29992; <a class="link" href="#roman.stage1.output" title="&#20363;&nbsp;14.2.&nbsp;&#20197; romantest1.py &#27979;&#35797; roman1.py &#30340;&#36755;&#20986;"><code class="literal">unittest.main()</code></a> &#26469;&#19968;&#27425;&#24615;&#36816;&#34892;&#25152;&#26377;&#27979;&#35797;&#29992;&#20363;&#12290;</li><li>&#20197;<a class="link" href="#roman.stage1.output" title="&#20363;&nbsp;14.2.&nbsp;&#20197; romantest1.py &#27979;&#35797; roman1.py &#30340;&#36755;&#20986;">&#35814;&#32454; (verbose) </a>&#25110;&#32773;<a class="link" href="#roman.stage8.1.output" title="&#20363;&nbsp;15.12.&nbsp;&#29992; romantest81.py &#27979;&#35797; roman81.py &#30340;&#32467;&#26524;">&#26222;&#36890; (regular) </a>&#27169;&#24335;&#36816;&#34892;&#21333;&#20803;&#27979;&#35797;</li></ul></div></div><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>XProgramming.com (<a href="http://www.xprogramming.com/">http://www.xprogramming.com/</a>) &#26377;&#22810;&#31181;&#35821;&#35328;&#30340; &#21333;&#20803;&#27979;&#35797;&#26694;&#26550; (<a href="http://www.xprogramming.com/software.htm">http://www.xprogramming.com/software.htm</a>) &#30340;&#19979;&#36733;&#38142;&#25509;&#12290;</li></ul></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="regression"></a>&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.divein"></a>16.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>&#22312; <a class="xref" href="#roman" title="&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;">&#31532;&nbsp;13&nbsp;&#31456; <i>&#21333;&#20803;&#27979;&#35797;</i></a> &#20013;&#65292;&#20320;&#23398;&#20250;&#20102;&#21333;&#20803;&#27979;&#35797;&#30340;&#21746;&#23398;&#12290;&#22312; <a class="xref" href="#roman1.5" title="&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;">&#31532;&nbsp;14&nbsp;&#31456; <i>&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</i></a>  &#20013;&#20320;&#27493;&#20837;&#20102; <span class="application">Python</span> &#22522;&#26412;&#30340;&#21333;&#20803;&#27979;&#35797;&#25805;&#20316;&#65292;&#22312; <a class="xref" href="#roman2" title="&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;">&#31532;&nbsp;15&nbsp;&#31456; <i>&#37325;&#26500;</i></a> &#37096;&#20998;&#65292;&#20320;&#30475;&#21040;&#21333;&#20803;&#27979;&#35797;&#22914;&#20309;&#20196;&#22823;&#35268;&#27169;&#37325;&#26500;&#21464;&#24471;&#23481;&#26131;&#12290;&#26412;&#31456;&#23558;&#22312;&#36825;&#20123;&#31243;&#24207;&#26679;&#20363;&#30340;&#22522;&#30784;&#19978;&#65292;&#38598;&#20013;&#20851;&#27880;&#20110;&#36229;&#36234;&#21333;&#20803;&#27979;&#35797;&#26412;&#36523;&#30340;&#26356;&#39640;&#32423;&#30340; <span class="application">Python</span> &#29305;&#26377;&#25216;&#26415;&#12290;</p></div><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#20316;&#20026;&#31616;&#21333;&#22238;&#24402;&#27979;&#35797; (regression test) &#26694;&#26550;&#36816;&#34892;&#30340;&#23436;&#25972; <span class="application">Python</span> &#31243;&#24207;&#12290;&#23427;&#23558;&#20320;&#21069;&#38754;&#32534;&#20889;&#30340;&#21333;&#29420;&#21333;&#20803;&#27979;&#35797;&#27169;&#22359;&#32452;&#32455;&#22312;&#19968;&#36215;&#25104;&#20026;&#19968;&#20010;&#27979;&#35797;&#22871;&#20214;&#24182;&#19968;&#27425;&#24615;&#36816;&#34892;&#12290;&#23454;&#38469;&#19978;&#36825;&#26159;&#26412;&#20070;&#30340;&#26500;&#24314;&#20195;&#30721;&#30340;&#19968;&#37096;&#20998;&#65307;&#25105;&#20026;&#20960;&#20010;&#26679;&#20363;&#31243;&#24207;&#37117;&#32534;&#20889;&#20102;&#21333;&#20803;&#27979;&#35797; (&#19981;&#26159;&#21482;&#26377; <a class="xref" href="#roman" title="&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;">&#31532;&nbsp;13&nbsp;&#31456; <i>&#21333;&#20803;&#27979;&#35797;</i></a> &#20013;&#30340; <code class="filename">roman.py</code> &#27169;&#22359;)&#65292;&#25105;&#30340;&#33258;&#21160;&#26500;&#24314;&#20195;&#30721;&#30340;&#31532;&#19968;&#20010;&#24037;&#20316;&#20415;&#26159;&#30830;&#20445;&#25105;&#25152;&#26377;&#30340;&#20363;&#23376;&#21487;&#20197;&#27491;&#24120;&#24037;&#20316;&#12290;&#22914;&#26524;&#22238;&#24402;&#27979;&#35797;&#31243;&#24207;&#22833;&#36133;&#65292;&#26500;&#24314;&#36807;&#31243;&#24403;&#21363;&#32456;&#27490;&#12290;&#25105;&#21487;&#19981;&#24819;&#22240;&#20026;&#21457;&#24067;&#20102;&#19981;&#33021;&#24037;&#20316;&#30340;&#26679;&#20363;&#31243;&#24207;&#32780;&#35753;&#20320;&#22312;&#19979;&#36733;&#20182;&#20204;&#21518;&#22352;&#22312;&#26174;&#31034;&#22120;&#21069;&#25235;&#32819;&#25376;&#33134;&#22320;&#20026;&#31243;&#24207;&#19981;&#33021;&#36816;&#36716;&#32780;&#28902;&#24700;&#12290;</p><div class="example"><a name="d0e35447"></a><p class="title"><b>&#20363;&nbsp;16.1.&nbsp;<code class="filename">regression.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
"""Regression testing framework

This module will search for scripts in the same directory named
XYZtest.py.  Each such script should be a test suite that tests a
module through PyUnit.  (As of Python 2.1, PyUnit is included in
the standard library as "unittest".)  This script will aggregate all
found test suites into one big test suite and run them all at once.
"""

import sys, os, re, unittest

def regressionTest():
    path = os.path.abspath(os.path.dirname(sys.argv[0]))   
    files = os.listdir(path)                               
    test = re.compile("test\.py$", re.IGNORECASE)          
    files = filter(test.search, files)                     
    filenameToModuleName = lambda f: os.path.splitext(f)[0]
    moduleNames = map(filenameToModuleName, files)         
    modules = map(__import__, moduleNames)                 
    load = unittest.defaultTestLoader.loadTestsFromModule  
    return unittest.TestSuite(map(load, modules))          

if __name__ == "__main__":                   
    unittest.main(defaultTest="regressionTest")
</pre></div></div><br class="example-break"><p>&#25226;&#36825;&#27573;&#20195;&#30721;&#25918;&#22312;&#26412;&#20070;&#20854;&#20182;&#26679;&#20363;&#20195;&#30721;&#30456;&#21516;&#30340;&#30446;&#24405;&#19979;&#36816;&#34892;&#20043;&#65292;<code class="filename"><em class="replaceable"><code>module</code></em>test.py</code> &#20013;&#30340;&#25152;&#26377;&#21333;&#20803;&#27979;&#35797;&#23558;&#34987;&#25214;&#21040;&#24182;&#19968;&#36215;&#34987;&#36816;&#34892;&#12290;</p><div class="example"><a name="d0e35465"></a><p class="title"><b>&#20363;&nbsp;16.2.&nbsp;<code class="filename">regression.py</code> &#30340;&#26679;&#20363;&#36755;&#20986;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">[you@localhost py]$ </code><span class="userinput">python regression.py -v</span>
<font color="teal">help should fail with no object ... ok                             </font><a name="regression.divein.1.1"></a>circled_1_delcric<font color="teal">
help should return known result for apihelper ... ok
help should honor collapse argument ... ok
help should honor spacing argument ... ok
buildConnectionString should fail with list input ... ok           </font><a name="regression.divein.1.2"></a>circled_2_delcric<font color="teal">
buildConnectionString should fail with string input ... ok
buildConnectionString should fail with tuple input ... ok
buildConnectionString handles empty dictionary ... ok
buildConnectionString returns known result with known input ... ok
fromRoman should only accept uppercase input ... ok                </font><a name="regression.divein.1.3"></a>circled_3_delcric<font color="teal">
toRoman should always return uppercase ... ok
fromRoman should fail with blank string ... ok
fromRoman should fail with malformed antecedents ... ok
fromRoman should fail with repeated pairs of numerals ... ok
fromRoman should fail with too many repeated numerals ... ok
fromRoman should give known result with known input ... ok
toRoman should give known result with known input ... ok
fromRoman(toRoman(n))==n for all n ... ok
toRoman should fail with non-integer input ... ok
toRoman should fail with negative input ... ok
toRoman should fail with large input ... ok
toRoman should fail with 0 input ... ok
kgp a ref test ... ok
kgp b ref test ... ok
kgp c ref test ... ok
kgp d ref test ... ok
kgp e ref test ... ok
kgp f ref test ... ok
kgp g ref test ... ok

----------------------------------------------------------------------
Ran 29 tests in 2.799s

OK</font></pre><div class="calloutlist"><dl compact><dt><a href="#regression.divein.1.1">circled_1_delcric</a> </dt><dd>&#21069;&#20116;&#20010;&#27979;&#35797;&#26469;&#33258;&#20110; <code class="filename">apihelpertest.py</code>&#65292;&#29992;&#20197;&#27979;&#35797; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#20013;&#30340;&#26679;&#20363;&#20195;&#30721;&#12290;</dd><dt><a href="#regression.divein.1.2">circled_2_delcric</a> </dt><dd>&#25509;&#19979;&#26469;&#30340;&#20116;&#20010;&#27979;&#35797;&#26469;&#33258;&#20110; <code class="filename">odbchelpertest.py</code>&#65292;&#29992;&#20197;&#27979;&#35797; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#20013;&#30340;&#26679;&#20363;&#20195;&#30721;&#12290;</dd><dt><a href="#regression.divein.1.3">circled_3_delcric</a> </dt><dd>&#20854;&#20182;&#30340;&#27979;&#35797;&#26469;&#33258;&#20110; <code class="filename">romantest.py</code>&#65292;&#20320;&#22312; <a class="xref" href="#roman" title="&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;">&#31532;&nbsp;13&nbsp;&#31456; <i>&#21333;&#20803;&#27979;&#35797;</i></a> &#20013;&#28145;&#20837;&#23398;&#20064;&#36807;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.path"></a>16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;</h2></div></div></div><div class="abstract"><p>&#20174;&#21629;&#20196;&#34892;&#36816;&#34892; <span class="application">Python</span> &#20195;&#30721;&#26102;&#65292;&#30693;&#36947;&#25152;&#36816;&#34892;&#20195;&#30721;&#22312;&#30913;&#30424;&#19978;&#30340;&#23384;&#20648;&#20301;&#32622;&#26377;&#26102;&#20505;&#26159;&#26377;&#24517;&#35201;&#30340;&#12290;</p></div><p>&#36825;&#26159;&#19968;&#20010;&#19981;&#37027;&#20040;&#23481;&#26131;&#24819;&#36215;&#65292;&#20294;&#19968;&#24819;&#36215;&#23601;&#24456;&#23481;&#26131;&#35299;&#20915;&#30340;&#23567;&#40635;&#28902;&#12290;&#31572;&#26696;&#26159; <code class="literal">sys.argv</code>&#12290;&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">&#31532;&nbsp;9&nbsp;&#31456; <i><acronym class="acronym">XML</acronym> &#22788;&#29702;</i></a> &#20013;&#30475;&#21040;&#30340;&#65292;&#23427;&#21253;&#21547;&#20102;&#24456;&#22810;&#21629;&#20196;&#34892;&#21442;&#25968;&#12290;&#23427;&#20063;&#21516;&#26679;&#35760;&#24405;&#20102;&#36816;&#34892;&#33050;&#26412;&#30340;&#21517;&#23383;&#65292;&#21644;&#20320;&#35843;&#29992;&#23427;&#26102;&#20351;&#29992;&#30340;&#21629;&#20196;&#19968;&#25720;&#19968;&#26679;&#12290;&#36825;&#20123;&#20449;&#24687;&#36275;&#20197;&#20196;&#25105;&#20204;&#30830;&#23450;&#25991;&#20214;&#30340;&#20301;&#32622;&#12290;</p><div class="example"><a name="d0e35531"></a><p class="title"><b>&#20363;&nbsp;16.3.&nbsp;<code class="filename">fullpath.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
import sys, os

print 'sys.argv[0] =', sys.argv[0]             <a name="regression.path.1.1"></a>circled_1_delcric
pathname = os.path.dirname(sys.argv[0])        <a name="regression.path.1.2"></a>circled_2_delcric
print 'path =', pathname
print 'full path =', os.path.abspath(pathname) <a name="regression.path.1.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#regression.path.1.1">circled_1_delcric</a> </dt><dd>&#26080;&#35770;&#22914;&#20309;&#36816;&#34892;&#19968;&#27573;&#33050;&#26412;&#65292;<code class="literal">sys.argv[0]</code> &#24635;&#26159;&#21253;&#21547;&#33050;&#26412;&#30340;&#21517;&#23383;&#65292;&#21644;&#35843;&#29992;&#26102;&#20351;&#29992;&#30340;&#21629;&#20196;&#19968;&#25720;&#19968;&#26679;&#12290;&#20320;&#24456;&#24555;&#20250;&#21457;&#29616;&#65292;&#23427;&#19981;&#19968;&#23450;&#21253;&#21547;&#20219;&#20309;&#36335;&#24452;&#20449;&#24687;&#12290;</dd><dt><a href="#regression.path.1.2">circled_2_delcric</a> </dt><dd><code class="function">os.path.dirname</code> &#25509;&#21463;&#20316;&#20026;&#23383;&#31526;&#20018;&#20256;&#26469;&#30340;&#25991;&#20214;&#21517;&#24182;&#36820;&#22238;&#36335;&#24452;&#37096;&#20998;&#12290;&#22914;&#26524;&#32473;&#23450;&#30340;&#25991;&#20214;&#21517;&#19981;&#21253;&#21547;&#20219;&#20309;&#36335;&#24452;&#20449;&#24687;&#65292;<code class="function">os.path.dirname</code>  &#36820;&#22238;&#31354;&#23383;&#31526;&#20018;&#12290;</dd><dt><a href="#regression.path.1.3">circled_3_delcric</a> </dt><dd><code class="function">os.path.abspath</code> &#26159;&#36825;&#37324;&#30340;&#20851;&#38190;&#12290;&#23427;&#25509;&#21463;&#30340;&#36335;&#24452;&#21517;&#21487;&#20197;&#26159;&#37096;&#20998;&#30340;&#29978;&#33267;&#26159;&#23436;&#20840;&#31354;&#30333;&#65292;&#20294;&#24635;&#33021;&#36820;&#22238;&#23436;&#25972;&#26377;&#25928;&#30340;&#36335;&#24452;&#21517;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36827;&#19968;&#27493;&#22320;&#35299;&#37322; <code class="function">os.path.abspath</code> &#26159;&#26377;&#24517;&#35201;&#30340;&#12290;&#23427;&#38750;&#24120;&#28789;&#27963;&#65292;&#21487;&#20197;&#25509;&#21463;&#20219;&#20309;&#31867;&#22411;&#30340;&#36335;&#24452;&#21517;&#12290;</p><div class="example"><a name="d0e35572"></a><p class="title"><b>&#20363;&nbsp;16.4.&nbsp;<code class="function">os.path.abspath</code> &#30340;&#36827;&#19968;&#27493;&#35299;&#37322;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import os</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.getcwd()</span>                        <a name="regression.path.2.1"></a>circled_1_delcric
<font color="teal">/home/you</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.abspath('')</span>                <a name="regression.path.2.2"></a>circled_2_delcric
<font color="teal">/home/you</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.abspath('.ssh')</span>            <a name="regression.path.2.3"></a>circled_3_delcric
<font color="teal">/home/you/.ssh</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.abspath('/home/you/.ssh')</span> <a name="regression.path.2.4"></a>circled_4_delcric
<font color="teal">/home/you/.ssh</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os.path.abspath('.ssh/../foo/')</span>    <a name="regression.path.2.5"></a>circled_5_delcric
<font color="teal">/home/you/foo</font></pre><div class="calloutlist"><dl compact><dt><a href="#regression.path.2.1">circled_1_delcric</a> </dt><dd><code class="function">os.getcwd()</code> &#36820;&#22238;&#24403;&#21069;&#30340;&#24037;&#20316;&#36335;&#24452;&#12290;</dd><dt><a href="#regression.path.2.2">circled_2_delcric</a> </dt><dd>&#29992;&#31354;&#23383;&#31526;&#20018;&#35843;&#29992; <code class="function">os.path.abspath</code> &#23558;&#36820;&#22238;&#24403;&#21069;&#30340;&#24037;&#20316;&#36335;&#24452;&#65292;&#19982; <code class="function">os.getcwd()</code>&#30340;&#25928;&#26524;&#30456;&#21516;&#12290;</dd><dt><a href="#regression.path.2.3">circled_3_delcric</a> </dt><dd>&#20197;&#19981;&#23436;&#25972;&#30340;&#36335;&#24452;&#21517;&#35843;&#29992; <code class="function">os.path.abspath</code> &#21487;&#20197;&#26500;&#24314;&#19968;&#20010;&#22522;&#20110;&#24403;&#21069;&#24037;&#20316;&#36335;&#24452;&#19988;&#23436;&#25972;&#26377;&#25928;&#30340;&#36335;&#24452;&#21517;&#12290;</dd><dt><a href="#regression.path.2.4">circled_4_delcric</a> </dt><dd>&#20197;&#23436;&#25972;&#30340;&#36335;&#24452;&#21517;&#35843;&#29992; <code class="function">os.path.abspath</code> &#21017;&#31616;&#21333;&#22320;&#23558;&#20854;&#30452;&#25509;&#36820;&#22238;&#12290;</dd><dt><a href="#regression.path.2.5">circled_5_delcric</a> </dt><dd><code class="function">os.path.abspath</code> &#36824;<span class="emphasis"><em>&#26684;&#24335;&#21270;</em></span> &#36820;&#22238;&#30340;&#36335;&#24452;&#21517;&#12290;&#27880;&#24847;&#36825;&#20010;&#20363;&#23376;&#22312;&#25105;&#26681;&#26412;&#27809;&#26377;&#8216;foo&#8217;&#30446;&#24405;&#26102;&#21516;&#26679;&#22863;&#25928;&#12290;<code class="function">os.path.abspath</code> &#20174;&#19981;&#26816;&#26597;&#20320;&#30340;&#30913;&#30424;&#65292;&#32780;&#20165;&#20165;&#26159;&#23383;&#31526;&#20018;&#25805;&#20316;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="os.path.abspath.exist.note">&#27880;&#24847;: <code class="function">os.path.abspath</code> &#24182;&#19981;&#39564;&#35777;&#36335;&#24452;&#21517;</a></b><br>&#20256;&#36882;&#32473; <code class="function">os.path.abspath</code> &#30340;&#36335;&#24452;&#21517;&#21644;&#25991;&#20214;&#21517;&#21487;&#20197;&#19981;&#23384;&#22312;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="os.path.normpath.note">&#27880;&#24847;: &#26684;&#24335;&#21270;&#36335;&#24452;&#21517;</a></b><br><code class="function">os.path.abspath</code> &#19981;&#20165;&#26500;&#24314;&#23436;&#25972;&#36335;&#24452;&#21517;&#65292;&#36824;&#33021;&#26684;&#24335;&#21270;&#36335;&#24452;&#21517;&#12290;&#36825;&#24847;&#21619;&#30528;&#22914;&#26524;&#20320;&#27491;&#24037;&#20316;&#20110; <code class="filename">/usr/</code> &#30446;&#24405;&#65292;<code class="literal">os.path.abspath('bin/../local/bin')</code> &#23558;&#20250;&#36820;&#22238; <code class="filename">/usr/local/bin</code>&#12290;&#23427;&#25226;&#36335;&#24452;&#21517;&#26684;&#24335;&#21270;&#20026;&#23613;&#21487;&#33021;&#31616;&#21333;&#30340;&#24418;&#24335;&#12290;&#22914;&#26524;&#20320;&#21482;&#26159;&#24076;&#26395;&#31616;&#21333;&#22320;&#36820;&#22238;&#36825;&#26679;&#30340;&#26684;&#24335;&#21270;&#36335;&#24452;&#21517;&#32780;&#19981;&#38656;&#35201;&#23436;&#25972;&#36335;&#24452;&#21517;&#65292;&#21487;&#20197;&#20351;&#29992; <code class="function">os.path.normpath</code>&#12290;</blockquote></div><div class="example"><a name="d0e35700"></a><p class="title"><b>&#20363;&nbsp;16.5.&nbsp;<code class="filename">fullpath.py</code> &#30340;&#26679;&#20363;&#36755;&#20986;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">[you@localhost py]$ </code><span class="userinput">python /home/you/diveintopython/common/py/fullpath.py</span> <a name="regression.path.3.1"></a>circled_1_delcric
<font color="teal">sys.argv[0] = /home/you/diveintopython/common/py/fullpath.py
path = /home/you/diveintopython/common/py
full path = /home/you/diveintopython/common/py</font>
<code class="prompt">[you@localhost diveintopython]$ </code><span class="userinput">python common/py/fullpath.py</span>               <a name="regression.path.3.2"></a>circled_2_delcric
<font color="teal">sys.argv[0] = common/py/fullpath.py
path = common/py
full path = /home/you/diveintopython/common/py</font>
<code class="prompt">[you@localhost diveintopython]$ </code><span class="userinput">cd common/py</span>
<code class="prompt">[you@localhost py]$ </code><span class="userinput">python fullpath.py</span>                                     <a name="regression.path.3.3"></a>circled_3_delcric
<font color="teal">sys.argv[0] = fullpath.py
path = 
full path = /home/you/diveintopython/common/py</font></pre><div class="calloutlist"><dl compact><dt><a href="#regression.path.3.1">circled_1_delcric</a> </dt><dd>&#22312;&#31532;&#19968;&#31181;&#24773;&#20917;&#19979;&#65292;<code class="literal">sys.argv[0]</code> &#21253;&#21547;&#20195;&#30721;&#30340;&#23436;&#25972;&#36335;&#24452;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807; <code class="function">os.path.dirname</code> &#20989;&#25968;&#23558;&#25991;&#20214;&#21517;&#20174;&#20854;&#20013;&#21093;&#31163;&#20986;&#26469;&#24182;&#36820;&#22238;&#23436;&#25972;&#30340;&#36335;&#24452;&#65292;<code class="function">os.path.abspath</code> &#21017;&#26159;&#31616;&#21333;&#22320;&#25226;&#20320;&#20256;&#36882;&#32473;&#23427;&#30340;&#20540;&#36820;&#22238;&#12290;</dd><dt><a href="#regression.path.3.2">circled_2_delcric</a> </dt><dd>&#22914;&#26524;&#33050;&#26412;&#26159;&#20197;&#19981;&#23436;&#25972;&#36335;&#21517;&#34987;&#36816;&#34892;&#30340;&#65292;<code class="literal">sys.argv[0]</code> &#36824;&#26159;&#20250;&#21253;&#21547;&#21629;&#20196;&#34892;&#20013;&#20986;&#29616;&#30340;&#19968;&#20999;&#12290;<code class="function">os.path.dirname</code> &#23558;&#20250;&#32473;&#20320;&#19968;&#20010; (&#30456;&#23545;&#20110;&#24403;&#21069;&#24037;&#20316;&#36335;&#24452;&#30340;) &#19981;&#23436;&#25972;&#30340;&#36335;&#24452;&#21517;&#65292;<code class="function">os.path.abspath</code> &#23558;&#20250;&#20197;&#19981;&#23436;&#25972;&#36335;&#24452;&#21517;&#20026;&#22522;&#30784;&#26500;&#24314;&#19968;&#20010;&#23436;&#25972;&#30340;&#36335;&#24452;&#21517;&#12290;</dd><dt><a href="#regression.path.3.3">circled_3_delcric</a> </dt><dd>&#22914;&#26524;&#27809;&#26377;&#32473;&#23450;&#20219;&#20309;&#36335;&#24452;&#65292;&#32780;&#26159;&#20174;&#24403;&#21069;&#30446;&#24405;&#36816;&#34892;&#33050;&#26412;&#65292;<code class="function">os.path.dirname</code> &#23558;&#31616;&#21333;&#22320;&#36820;&#22238;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#12290;&#30001;&#20110;&#26159;&#20174;&#24403;&#21069;&#30446;&#24405;&#36816;&#34892;&#33050;&#26412;&#65292;<code class="function">os.path.abspath</code> &#23558;&#38024;&#23545;&#32473;&#23450;&#30340;&#31354;&#23383;&#31526;&#20018;&#32473;&#20986;&#20320;&#25152;&#24076;&#26395;&#33719;&#30693;&#30340;&#24403;&#21069;&#30446;&#24405;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="note"><blockquote><b class="title"><a name="os.path.abspath.crossplatform.note">&#27880;&#24847;: <code class="function">os.path.abspath</code> &#26159;&#36328;&#24179;&#21488;&#30340;</a></b><br>&#23601;&#20687; <code class="filename">os</code> &#21644; <code class="filename">os.path</code> &#27169;&#22359;&#30340;&#20854;&#20182;&#20989;&#25968;&#65292;<code class="function">os.path.abspath</code> &#26159;&#36328;&#24179;&#21488;&#30340;&#12290;&#22914;&#26524;&#20320;&#26159;&#22312; Windows (&#20351;&#29992;&#21453;&#26012;&#26464;&#20316;&#20026;&#36335;&#24452;&#31526;&#21495;) &#25110; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> (&#20351;&#29992;&#20882;&#21495;) &#19978;&#36816;&#34892;&#65292;&#23427;&#20204;&#21516;&#26679;&#24037;&#20316;&#65292;&#21482;&#26159;&#23558;&#33719;&#24471;&#19982;&#25105;&#31245;&#26377;&#19981;&#21516;&#30340;&#32467;&#26524;&#12290;<code class="filename">os</code> &#30340;&#25152;&#26377;&#20989;&#25968;&#37117;&#26159;&#36825;&#26679;&#30340;&#12290;</blockquote></div><p><b>&#34917;&#20805;.&nbsp;</b>&#19968;&#20301;&#35835;&#32773;&#23545;&#36825;&#20010;&#32467;&#26524;&#24182;&#19981;&#28385;&#24847;&#65292;&#20182;&#24076;&#26395;&#33021;&#22815;&#20174;&#24403;&#21069;&#36335;&#24452;&#36816;&#34892;&#25152;&#26377;&#21333;&#20803;&#27979;&#35797;&#65292;&#32780;&#19981;&#26159;&#20174; <code class="filename">regression.py</code> &#25152;&#22312;&#30446;&#24405;&#36816;&#34892;&#12290;&#20182;&#24314;&#35758;&#20197;&#19979;&#38754;&#30340;&#20195;&#30721;&#21152;&#20197;&#21462;&#20195;&#65306;</p><div class="example"><a name="regression.path.cwd.example"></a><p class="title"><b>&#20363;&nbsp;16.6.&nbsp;&#22312;&#24403;&#21069;&#30446;&#24405;&#36816;&#34892;&#33050;&#26412;</b></p><div class="example-contents"><pre class="programlisting">import sys, os, re, unittest

def regressionTest():
    path = os.getcwd()       <a name="regression.path.4.1"></a>circled_1_delcric
    sys.path.append(path)    <a name="regression.path.4.2"></a>circled_2_delcric
    files = os.listdir(path) <a name="regression.path.4.3"></a>circled_3_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.path.4.1">circled_1_delcric</a> </dt><dd>&#19981;&#26159;&#23558; <code class="varname">path</code> &#35774;&#32622;&#20026;&#36816;&#34892;&#20195;&#30721;&#25152;&#22312;&#30340;&#36335;&#24452;&#65292;&#32780;&#26159;&#23558;&#23427;&#35774;&#32622;&#20026;&#24403;&#21069;&#30446;&#24405;&#12290;&#21487;&#20197;&#26159;&#20320;&#22312;&#36816;&#34892;&#33050;&#26412;&#20043;&#21069;&#25152;&#22312;&#30340;&#20219;&#20309;&#36335;&#24452;&#65292;&#32780;&#19981;&#38656;&#35201;&#26159;&#36816;&#34892;&#33050;&#26412;&#25152;&#22312;&#30340;&#36335;&#24452;&#12290;(&#22810;&#27425;&#20307;&#21619;&#36825;&#21477;&#35805;&#65292;&#30452;&#21040;&#20320;&#30495;&#27491;&#29702;&#35299;&#20102;&#23427;&#12290;)</dd><dt><a href="#regression.path.4.2">circled_2_delcric</a> </dt><dd>&#23558;&#36825;&#20010;&#30446;&#24405;&#28155;&#21152;&#21040;  <span class="application">Python</span> &#24211;&#25628;&#32034;&#36335;&#24452;&#20013;&#65292;&#20320;&#31245;&#21518;&#21160;&#24577;&#23548;&#20837;&#21333;&#20803;&#27979;&#35797;&#27169;&#22359;&#26102;&#65292;<span class="application">Python</span> &#23601;&#33021;&#25214;&#21040;&#23427;&#20204;&#20102;&#12290;&#22914;&#26524; <code class="varname">path</code> &#23601;&#26159;&#27491;&#22312;&#36816;&#34892;&#20195;&#30721;&#30340;&#23384;&#20648;&#30446;&#24405;&#65292;&#20320;&#23601;&#19981;&#38656;&#35201;&#36825;&#26679;&#20570;&#20102;&#65292;&#22240;&#20026; <span class="application">Python</span> &#24635;&#20250;&#26597;&#25214;&#36825;&#20010;&#30446;&#24405;&#12290;</dd><dt><a href="#regression.path.4.3">circled_3_delcric</a> </dt><dd>&#20989;&#25968;&#30340;&#20854;&#20182;&#37096;&#20998;&#19981;&#21464;&#12290;</dd></dl></div><p>&#36825;&#20010;&#25216;&#26415;&#20801;&#35768;&#20320;&#22312;&#22810;&#20010;&#39033;&#30446;&#20013;&#37325;&#29992; <code class="filename">regression.py</code> &#20195;&#30721;&#12290;&#21482;&#38656;&#35201;&#23558;&#36825;&#20010;&#20195;&#30721;&#25918;&#22312;&#19968;&#20010;&#26222;&#36890;&#30446;&#24405;&#20013;&#65292;&#22312;&#36816;&#34892;&#39033;&#30446;&#21069;&#23558;&#36335;&#24452;&#26356;&#25913;&#20026;&#39033;&#30446;&#30340;&#30446;&#24405;&#12290;&#39033;&#30446;&#20013;&#25152;&#26377;&#30340;&#21333;&#20803;&#27979;&#35797;&#34987;&#25214;&#21040;&#24182;&#36816;&#34892;&#65292;&#32780;&#19981;&#20165;&#20165;&#23616;&#38480;&#20110; <code class="filename">regression.py</code> &#25152;&#22312;&#30446;&#24405;&#30340;&#21333;&#20803;&#27979;&#35797;&#12290;</p></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.filter"></a>16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;</h2></div></div></div><div class="abstract"><p>&#20320;&#24050;&#32463;&#29087;&#35782;&#20102;<a class="link" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#24212;&#29992;&#21015;&#34920;&#35299;&#26512;&#26469;&#36807;&#28388;&#21015;&#34920;</a>&#12290;&#36825;&#37324;&#20171;&#32461;&#30340;&#26159;&#36798;&#21040;&#30456;&#21516;&#25928;&#26524;&#30340;&#21478;&#19968;&#31181;&#20196;&#24456;&#22810;&#20154;&#24863;&#35273;&#28165;&#26224;&#30340;&#23454;&#29616;&#26041;&#27861;&#12290;</p></div><p><span class="application">Python</span> &#26377;&#19968;&#20010;&#20869;&#24314; <code class="function">filter</code> &#20989;&#25968;&#65292;&#23427;&#25509;&#21463;&#20004;&#20010;&#21442;&#25968;&#65306;&#19968;&#20010;&#20989;&#25968;&#21644;&#19968;&#20010;&#21015;&#34920;&#65292;&#36820;&#22238;&#19968;&#20010;&#21015;&#34920;&#12290;<sup>[<a name="d0e35870" href="#ftn.d0e35870" class="footnote">12</a>]</sup>  &#20316;&#20026;&#31532;&#19968;&#20010;&#21442;&#25968;&#20256;&#36882;&#32473; <code class="function">filter</code> &#30340;&#20989;&#25968;&#26412;&#36523;&#24212;&#25509;&#21463;&#19968;&#20010;&#21442;&#25968;&#65292;<code class="function">filter</code> &#36820;&#22238;&#30340;&#21015;&#34920;&#23558;&#20250;&#21253;&#21547;&#34987;&#20256;&#20837;&#21015;&#34920;&#21442;&#25968;&#20256;&#36882;&#32473; <code class="function">filter</code> &#25152;&#26377;&#21487;&#20197;&#20196;&#20989;&#25968;&#36820;&#22238;&#30495; (true) &#30340;&#20803;&#32032;&#12290;</p><p>&#37117;&#26126;&#30333;&#20102;&#21527;&#65311;&#24182;&#27809;&#26377;&#21548;&#36215;&#26469;&#37027;&#20040;&#38590;&#12290;</p><div class="example"><a name="d0e35894"></a><p class="title"><b>&#20363;&nbsp;16.7.&nbsp;<code class="function">filter</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def odd(n):</span>                 <a name="regression.filter.1.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">return n % 2</span>
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = [1, 2, 3, 5, 9, 10, 256, -3]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filter(odd, li)</span>             <a name="regression.filter.1.2"></a>circled_2_delcric
<font color="teal">[1, 3, 5, 9, -3]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[e for e in li if odd(e)]</span>   <a name="regression.filter.1.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filteredList = []</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for n in li:</span>                <a name="regression.filter.1.4"></a>circled_4_delcric
<code class="prompt">...     </code><span class="userinput">if odd(n):</span>
<code class="prompt">...     </code><span class="userinput">    filteredList.append(n)</span>
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filteredList</span>
<font color="teal">[1, 3, 5, 9, -3]</font></pre><div class="calloutlist"><dl compact><dt><a href="#regression.filter.1.1">circled_1_delcric</a> </dt><dd><code class="function">odd</code> &#20351;&#29992;&#20869;&#24314;&#30340;&#21462;&#27169; (mod) &#20989;&#25968; "<span class="quote"><code class="literal">%</code></span>" &#23545;&#20110;&#20026;&#22855;&#25968;&#30340; <code class="varname">n</code> &#36820;&#22238; <code class="constant">1</code>&#65307;&#20026;&#20598;&#25968;&#30340;&#36820;&#22238; <code class="constant">0</code>&#12290;</dd><dt><a href="#regression.filter.1.2">circled_2_delcric</a> </dt><dd><code class="function">filter</code> &#25509;&#21463;&#20004;&#20010;&#21442;&#25968;&#65306;&#19968;&#20010;&#20989;&#25968; (<code class="function">odd</code>) &#21644;&#19968;&#20010;&#21015;&#34920; (<code class="varname">li</code>)&#12290;&#23427;&#20381;&#21015;&#34920;&#24490;&#29615;&#20026;&#27599;&#20010;&#20803;&#32032;&#35843;&#29992; <code class="function">odd</code> &#20989;&#25968;&#12290;&#22914;&#26524; <code class="function">odd</code> &#36820;&#22238;&#30340;&#26159;&#30495; (&#35760;&#20303;&#65292;<span class="application">Python</span> &#35748;&#20026;&#25152;&#26377;&#38750;&#38646;&#20540;&#20026;&#30495;)&#65292;&#21017;&#35813;&#20803;&#32032;&#34987;&#25918;&#22312;&#36820;&#22238;&#21015;&#34920;&#20013;&#65292;&#22914;&#33509;&#19981;&#28982;&#21017;&#34987;&#36807;&#28388;&#25481;&#12290;&#32467;&#26524;&#26159;&#19968;&#20010;&#21482;&#21253;&#21547;&#21407;&#21015;&#34920;&#20013;&#22855;&#25968;&#30340;&#21015;&#34920;&#65292;&#20986;&#29616;&#39034;&#24207;&#21017;&#21644;&#21407;&#21015;&#34920;&#30456;&#21516;&#12290;</dd><dt><a href="#regression.filter.1.3">circled_3_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#36890;&#36807;&#36941;&#21382;&#30340;&#26041;&#24335;&#23436;&#25104;&#30456;&#21516;&#30340;&#24037;&#20316;&#65292;&#27491;&#22914;&#22312; <a class="xref" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#31532;&nbsp;4.5&nbsp;&#33410; &#8220;&#36807;&#28388;&#21015;&#34920;&#8221;</a> &#20013;&#30475;&#21040;&#30340;&#12290;</dd><dt><a href="#regression.filter.1.4">circled_4_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#36890;&#36807; <code class="literal">for</code> &#24490;&#29615;&#30340;&#26041;&#24335;&#23436;&#25104;&#30456;&#21516;&#30340;&#24037;&#20316;&#12290;&#21462;&#20915;&#20110;&#20320;&#30340;&#32534;&#31243;&#32972;&#26223;&#65292;&#36825;&#26679;&#20063;&#35768;&#26356;"<span class="quote">&#30452;&#25509;</span>"&#65292;&#20294;&#26159;&#20687;  <code class="function">filter</code> &#20989;&#25968;&#36825;&#26679;&#30340;&#23454;&#29616;&#26041;&#27861;&#26356;&#28165;&#26224;&#12290;&#19981;&#20294;&#32534;&#20889;&#31616;&#21333;&#65292;&#32780;&#19988;&#26131;&#20110;&#35835;&#25026;&#12290;<code class="literal">for</code> &#24490;&#29615;&#23601;&#22909;&#27604;&#36817;&#36317;&#31163;&#30340;&#32472;&#30011;&#65306;&#20320;&#21487;&#20197;&#30475;&#21040;&#25152;&#26377;&#30340;&#32454;&#33410;&#65292;&#20294;&#26159;&#25110;&#35768;&#20320;&#24212;&#35813;&#33457;&#20960;&#31186;&#26102;&#38388;&#36864;&#21518;&#20960;&#27493;&#30475;&#19968;&#30475;&#22270;&#30011;&#30340;&#20840;&#26223;&#65306;"<span class="quote">&#21834;&#65292;&#20320;&#20165;&#20165;&#26159;&#35201;&#36807;&#28388;&#21015;&#34920;&#65281;</span>"</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e36031"></a><p class="title"><b>&#20363;&nbsp;16.8.&nbsp;<code class="filename">regression.py</code> &#20013;&#30340; <code class="function">filter</code></b></p><div class="example-contents"><pre class="programlisting">
    files = os.listdir(path)                                <a name="regression.filter.2.1"></a>circled_1_delcric
    test = re.compile("test\.py$", re.IGNORECASE)           <a name="regression.filter.2.2"></a>circled_2_delcric
    files = filter(test.search, files)                      <a name="regression.filter.2.3"></a>circled_3_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#regression.filter.2.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#regression.path" title="16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;">&#31532;&nbsp;16.2&nbsp;&#33410; &#8220;&#25214;&#21040;&#36335;&#24452;&#8221;</a> &#20013;&#30475;&#21040;&#30340;&#65292;<code class="varname">path</code> &#21487;&#33021;&#21253;&#25324;&#27491;&#22312;&#36816;&#34892;&#33050;&#26412;&#30340;&#23436;&#20840;&#25110;&#32773;&#37096;&#20998;&#36335;&#24452;&#21517;&#65292;&#25110;&#32773;&#24403;&#33050;&#26412;&#36816;&#34892;&#33258;&#24403;&#21069;&#30446;&#24405;&#26102;&#21253;&#21547;&#19968;&#20010;&#31354;&#30340;&#23383;&#31526;&#20018;&#12290;&#20219;&#20309;&#19968;&#31181;&#24773;&#20917;&#19979;&#65292;<code class="varname">files</code> &#37117;&#20250;&#33719;&#24471;&#27491;&#36816;&#34892;&#33050;&#26412;&#25152;&#22312;&#30446;&#24405;&#30340;&#25991;&#20214;&#21517;&#12290;</dd><dt><a href="#regression.filter.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010;&#39044;&#32534;&#35793;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#31532;&nbsp;15.3&nbsp;&#33410; &#8220;&#37325;&#26500;&#8221;</a>&#20013;&#30475;&#21040;&#30340;&#65292;&#22914;&#26524;&#20320;&#38656;&#35201;&#21453;&#22797;&#20351;&#29992;&#21516;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#20320;&#24212;&#35813;&#32534;&#35793;&#23427;&#24050;&#33719;&#24471;&#26356;&#24555;&#30340;&#24615;&#33021;&#12290;&#32534;&#35793;&#21518;&#30340;&#23545;&#35937;&#23558;&#21547;&#26377;&#25509;&#21463;&#19968;&#20010;&#24453;&#23547;&#25214;&#23383;&#31526;&#20018;&#20316;&#20026;&#21442;&#25968;&#30340; <code class="function">search</code> &#26041;&#27861;&#12290;&#22914;&#26524;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#21305;&#37197;&#23383;&#31526;&#20018;&#65292;<code class="function">search</code> &#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#27491;&#21017;&#34920;&#36798;&#24335;&#21305;&#37197;&#20449;&#24687;&#30340; <code class="classname">Match</code> &#23545;&#35937;&#65307;&#21542;&#21017;&#36820;&#22238; <code class="literal">None</code>&#65292;&#36825;&#26159; <span class="application">Python</span> &#31354; (null) &#20540;&#12290;</dd><dt><a href="#regression.filter.2.3">circled_3_delcric</a> </dt><dd>&#23545;&#20110; <code class="varname">files</code> &#21015;&#34920;&#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#65292;&#20320;&#23558;&#20250;&#35843;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#32534;&#35793;&#23545;&#35937; <code class="varname">test</code> &#30340; <code class="function">search</code> &#26041;&#27861;&#12290;&#22914;&#26524;&#27491;&#21017;&#34920;&#36798;&#21305;&#37197;&#65292;&#26041;&#27861;&#23558;&#20250;&#36820;&#22238;&#19968;&#20010;&#34987; <span class="application">Python</span> &#35748;&#23450;&#20026;&#30495; (true) &#30340;  <code class="classname">Match</code> &#23545;&#35937;&#65307;&#22914;&#26524;&#27491;&#21017;&#34920;&#36798;&#19981;&#21305;&#37197;&#65292;<code class="function">search</code> &#26041;&#27861;&#23558;&#20250;&#36820;&#22238;&#34987;&#35748;&#23450;&#20026;&#20551; (false) &#30340; <code class="literal">None</code>&#65292;&#20803;&#32032;&#23558;&#34987;&#25490;&#38500;&#12290;</dd></dl></div></div></div><br class="example-break"><p><b>&#21382;&#21490;&#27880;&#37322;.&nbsp;</b><span class="application">Python</span> 2.0 &#26089;&#26399;&#30340;&#29256;&#26412;&#19981;&#21253;&#21547; <a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#21015;&#34920;&#35299;&#26512;</a>&#65292;&#22240;&#27492;&#19981;&#33021; <a class="link" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#20197;&#21015;&#34920;&#35299;&#26512;&#26041;&#24335;&#36807;&#28388;</a>&#65292;<code class="function">filter</code> &#20989;&#25968;&#26159;&#24403;&#26102;&#21807;&#19968;&#30340;&#26041;&#27861;&#12290;&#21363;&#20415;&#26159;&#22312;&#24341;&#20837;&#21015;&#34920;&#35299;&#26512;&#30340; 2.0 &#29256;&#65292;&#26377;&#20123;&#20154;&#20173;&#28982;&#38047;&#24773;&#20110;&#32769;&#27966;&#30340; <code class="function">filter</code> (&#21644;&#36825;&#31456;&#31245;&#21518;&#23558;&#35265;&#21040;&#30340;&#23427;&#30340;&#20276;&#20387;&#20989;&#25968; <code class="function">map</code> )&#12290;&#20004;&#31181;&#26041;&#27861;&#24182;&#23384;&#20110;&#19990;&#65292;&#20351;&#29992;&#21738;&#31181;&#26041;&#27861;&#21482;&#26159;&#39118;&#26684;&#38382;&#39064;&#65292;<code class="function">map</code> &#21644; <code class="function">filter</code> &#23558;&#22312;&#26410;&#26469;&#30340;  <span class="application">Python</span> &#29256;&#26412;&#20013;&#34987;&#24223;&#27490;&#30340;&#35752;&#35770;&#23578;&#26080;&#23450;&#35770;&#12290;</p><div class="example"><a name="d0e36132"></a><p class="title"><b>&#20363;&nbsp;16.9.&nbsp;&#20197;&#21015;&#34920;&#35299;&#26512;&#27861;&#36807;&#28388;</b></p><div class="example-contents"><pre class="programlisting">
    files = os.listdir(path)                               
    test = re.compile("test\.py$", re.IGNORECASE)          
    files = [f for f in files if test.search(f)] <a name="regression.filter.3.1"></a>circled_1_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#regression.filter.3.1">circled_1_delcric</a> </dt><dd>&#36825;&#31181;&#26041;&#27861;&#23558;&#23436;&#25104;&#21644; <code class="function">filter</code> &#20989;&#25968;&#23436;&#20840;&#30456;&#21516;&#30340;&#24037;&#20316;&#12290;&#21738;&#31181;&#26041;&#27861;&#26356;&#28165;&#26224;&#23436;&#20840;&#21462;&#20915;&#20110;&#20320;&#33258;&#24049;&#12290;</dd></dl></div></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.map"></a>16.4.&nbsp;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;</h2></div></div></div><div class="abstract"><p>&#20320;&#23545;&#20351;&#29992;<a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#21015;&#34920;&#35299;&#26512;</a>&#26144;&#23556;&#21015;&#34920;&#30340;&#20570;&#27861;&#24050;&#32463;&#29087;&#30693;&#12290;&#21478;&#19968;&#31181;&#26041;&#27861;&#21487;&#20197;&#23436;&#25104;&#21516;&#26679;&#30340;&#24037;&#20316;&#65306;&#20351;&#29992;&#20869;&#24314; <code class="function">map</code> &#20989;&#25968;&#12290;&#23427;&#30340;&#24037;&#20316;&#26426;&#29702;&#21644; <a class="link" href="#regression.filter" title="16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;"><code class="function">filter</code></a> &#20989;&#25968;&#31867;&#20284;&#12290;</p></div><div class="example"><a name="d0e36163"></a><p class="title"><b>&#20363;&nbsp;16.10.&nbsp;<code class="function">map</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def double(n):</span>
<code class="prompt">...     </code>return n*2
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = [1, 2, 3, 5, 9, 10, 256, -3]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">map(double, li)</span>                       <a name="regression.map.1.1"></a>circled_1_delcric
<font color="teal">[2, 4, 6, 10, 18, 20, 512, -6]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">[double(n) for n in li]</span>               <a name="regression.map.1.2"></a>circled_2_delcric
<font color="teal">[2, 4, 6, 10, 18, 20, 512, -6]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">newlist = []</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for n in li:</span>                          <a name="regression.map.1.3"></a>circled_3_delcric
<code class="prompt">...     </code><span class="userinput">newlist.append(double(n))</span>
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">newlist</span>
<font color="teal">[2, 4, 6, 10, 18, 20, 512, -6]</font></pre><div class="calloutlist"><dl compact><dt><a href="#regression.map.1.1">circled_1_delcric</a> </dt><dd><code class="function">map</code> &#25509;&#21463;&#19968;&#20010;&#20989;&#25968;&#21644;&#19968;&#20010;&#21015;&#34920;&#20316;&#20026;&#21442;&#25968;&#65292;<sup>[<a name="d0e36239" href="#ftn.d0e36239" class="footnote">13</a>]</sup> &#24182;&#23545;&#21015;&#34920;&#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#20381;&#27425;&#35843;&#29992;&#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#26032;&#30340;&#21015;&#34920;&#12290;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#20989;&#25968;&#20165;&#20165;&#26159;&#23558;&#27599;&#20010;&#20803;&#32032;&#20056;&#20197; 2&#12290;</dd><dt><a href="#regression.map.1.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992;&#21015;&#34920;&#35299;&#26512;&#30340;&#26041;&#27861;&#20320;&#21487;&#20197;&#20570;&#21040;&#30456;&#21516;&#30340;&#20107;&#24773;&#12290;&#21015;&#34920;&#35299;&#26512;&#26159;&#22312; <span class="application">Python</span> 2.0 &#29256;&#26102;&#34987;&#24341;&#20837;&#30340;&#65307;&#32780; <code class="function">map</code> &#21017;&#21476;&#32769;&#24471;&#22810;&#12290;</dd><dt><a href="#regression.map.1.3">circled_3_delcric</a> </dt><dd>&#20320;&#22914;&#26524;&#22362;&#25345;&#20197; <span class="application">Visual Basic</span> &#31243;&#24207;&#21592;&#33258;&#23621;&#65292;&#36890;&#36807; <code class="literal">for</code> &#24490;&#29615;&#30340;&#26041;&#27861;&#23436;&#25104;&#30456;&#21516;&#30340;&#20219;&#21153;&#20063;&#23436;&#20840;&#21487;&#20197;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e36267"></a><p class="title"><b>&#20363;&nbsp;16.11.&nbsp;<code class="function">map</code> &#19982;&#28151;&#21512;&#25968;&#25454;&#31867;&#22411;&#30340;&#21015;&#34920;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">li = [5, 'a', (2, 'b')]</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">map(double, li)</span>                       <a name="regression.map.2.1"></a>circled_1_delcric
<font color="teal">[10, 'aa', (2, 'b', 2, 'b')]</font></pre><div class="calloutlist"><dl compact><dt><a href="#regression.map.2.1">circled_1_delcric</a> </dt><dd>&#20316;&#20026;&#19968;&#20010;&#26049;&#27880;&#65292;&#25105;&#24819;&#25351;&#20986;&#21482;&#35201;&#25552;&#20379;&#30340;&#37027;&#20010;&#20989;&#25968;&#33021;&#22815;&#27491;&#30830;&#22788;&#29702;&#21508;&#31181;&#25968;&#25454;&#31867;&#22411;&#65292;<code class="function">map</code> &#23545;&#20110;&#28151;&#21512;&#25968;&#25454;&#31867;&#22411;&#21015;&#34920;&#30340;&#22788;&#29702;&#21516;&#26679;&#20986;&#33394;&#12290;&#22312;&#36825;&#37324;&#65292;<code class="function">double</code> &#20989;&#25968;&#20165;&#20165;&#26159;&#23558;&#32473;&#23450;&#21442;&#25968;&#20056;&#20197; 2&#65292;<span class="application">Python</span> &#21017;&#20250;&#26681;&#25454;&#21442;&#25968;&#30340;&#25968;&#25454;&#31867;&#22411;&#20915;&#23450;&#27491;&#30830;&#25805;&#20316;&#30340;&#26041;&#27861;&#12290;&#23545;&#25972;&#25968;&#32780;&#35328;&#65292;&#36825;&#24847;&#21619;&#30528;&#20056; 2&#65307;&#23545;&#23383;&#31526;&#20018;&#32780;&#35328;&#65292;&#24847;&#21619;&#30528;&#25226;&#33258;&#36523;&#21644;&#33258;&#36523;&#36830;&#25509;&#65307;&#23545;&#20110;&#20803;&#32452;&#65292;&#24847;&#21619;&#30528;&#26500;&#24314;&#19968;&#20010;&#21253;&#25324;&#21407;&#22987;&#20803;&#32452;&#20840;&#37096;&#20803;&#32032;&#21644;&#21407;&#22987;&#20803;&#32452;&#32452;&#21512;&#22312;&#19968;&#36215;&#30340;&#26032;&#20803;&#32452;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22909;&#20102;&#65292;&#29609;&#22815;&#20102;&#12290;&#35753;&#25105;&#20204;&#26469;&#30475;&#19968;&#20123;&#30495;&#23454;&#20195;&#30721;&#12290;</p><div class="example"><a name="d0e36303"></a><p class="title"><b>&#20363;&nbsp;16.12.&nbsp;<code class="filename">regression.py</code> &#20013;&#30340; <code class="function">map</code></b></p><div class="example-contents"><pre class="programlisting">
    filenameToModuleName = lambda f: os.path.splitext(f)[0] <a name="regression.map.3.1"></a>circled_1_delcric
    moduleNames = map(filenameToModuleName, files)          <a name="regression.map.3.2"></a>circled_2_delcric</pre><div class="calloutlist"><dl compact><dt><a href="#regression.map.3.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;">&#31532;&nbsp;4.7&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;&#8221;</a> &#20013;&#25152;&#35265;&#65292;<code class="literal">lambda</code> &#23450;&#20041;&#19968;&#20010;&#20869;&#32852;&#20989;&#25968;&#12290;&#20063;&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#splittingpathnames.example" title="&#20363;&nbsp;6.17.&nbsp;&#20998;&#21106;&#36335;&#24452;&#21517;">&#20363;&nbsp;6.17 &#8220;&#20998;&#21106;&#36335;&#24452;&#21517;&#8221;</a> &#20013;&#25152;&#35265;&#65292;<code class="function">os.path.splitext</code> &#25509;&#21463;&#19968;&#20010;&#25991;&#20214;&#21517;&#24182;&#36820;&#22238;&#19968;&#20010;&#20803;&#32452; <code class="literal">(<em class="replaceable">name</em>, <em class="replaceable">extension</em>)</code>&#12290;&#22240;&#27492; <code class="function">filenameToModuleName</code> &#26159;&#19968;&#20010;&#25509;&#21463;&#25991;&#20214;&#21517;&#65292;&#21093;&#31163;&#20986;&#20854;&#25193;&#23637;&#21517;&#65292;&#28982;&#21518;&#21482;&#36820;&#22238;&#25991;&#20214;&#21517;&#31216;&#30340;&#20989;&#25968;&#12290;</dd><dt><a href="#regression.map.3.2">circled_2_delcric</a> </dt><dd>&#35843;&#29992; <code class="function">map</code> &#23558;&#25226; <code class="varname">files</code> &#21015;&#20986;&#30340;&#25152;&#26377;&#25991;&#20214;&#21517;&#20256;&#36882;&#32473; <code class="function">filenameToModuleName</code> &#20989;&#25968;&#65292;&#24182;&#19988;&#36820;&#22238;&#27599;&#20010;&#20989;&#25968;&#35843;&#29992;&#32467;&#26524;&#25152;&#32452;&#25104;&#30340;&#21015;&#34920;&#12290;&#25442;&#21477;&#35805;&#35828;&#65292;&#20320;&#21076;&#38500;&#25481;&#25991;&#20214;&#21517;&#30340;&#25193;&#23637;&#21517;&#65292;&#24182;&#23558;&#21076;&#38500;&#21518;&#30340;&#25991;&#20214;&#21517;&#23384;&#20110; <code class="varname">moduleNames</code> &#20043;&#20013;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22914;&#20320;&#22312;&#26412;&#31456;&#21097;&#20313;&#37096;&#20998;&#23558;&#30475;&#21040;&#30340;&#65292;&#20320;&#21487;&#20197;&#23558;&#36825;&#31181;&#25968;&#25454;&#20013;&#24515;&#24605;&#24819;&#25193;&#23637;&#21040;&#23450;&#20041;&#21644;&#25191;&#34892;&#19968;&#20010;&#23481;&#32435;&#26469;&#33258;&#24456;&#22810;&#21333;&#20010;&#27979;&#35797;&#22871;&#20214;&#30340;&#27979;&#35797;&#30340;&#19968;&#20010;&#27979;&#35797;&#22871;&#20214;&#30340;&#26368;&#32456;&#30446;&#26631;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.datacentric"></a>16.5.&nbsp;&#25968;&#25454;&#20013;&#24515;&#24605;&#24819;&#32534;&#31243;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312;&#30340;&#20320;&#65292;&#21487;&#33021;&#27491;&#25235;&#32819;&#25376;&#33134;&#22320;&#29408;&#24819;&#65292;&#20026;&#20160;&#20040;&#36825;&#26679;&#27604;&#20351;&#29992; <code class="literal">for</code> &#24490;&#29615;&#21644;&#30452;&#25509;&#35843;&#29992;&#20989;&#25968;&#22909;&#12290;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#22909;&#30340;&#38382;&#39064;&#12290;&#36890;&#24120;&#36825;&#26159;&#19968;&#20010;&#31243;&#24207;&#35266;&#38382;&#39064;&#12290;&#20351;&#29992; <code class="function">map</code> &#21644; <code class="function">filter</code> &#24378;&#36843;&#20320;&#22260;&#32469;&#25968;&#25454;&#36827;&#34892;&#24605;&#32771;&#12290;</p></div><p>&#23601;&#27492;&#32780;&#35328;&#65292;&#20320;&#20174;&#27809;&#26377;&#25968;&#25454;&#24320;&#22987;&#65292;&#20320;&#25152;&#20570;&#30340;&#31532;&#19968;&#20214;&#20107;&#26159;<a class="link" href="#regression.path" title="16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;">&#33719;&#24471;&#24403;&#21069;&#33050;&#26412;&#30340;&#30446;&#24405;&#36335;&#24452;</a>&#65292;&#24182;&#33719;&#24471;&#35813;&#30446;&#24405;&#20013;&#30340;&#25991;&#20214;&#21015;&#34920;&#12290;&#36825;&#23601;&#26159;&#20851;&#38190;&#30340;&#19968;&#27493;&#65292;&#20351;&#20320;&#26377;&#20102;&#24453;&#22788;&#29702;&#30340;&#30495;&#23454;&#25968;&#25454;&#65306;&#25991;&#20214;&#21517;&#21015;&#34920;&#12290;</p><p>&#24403;&#28982;&#65292;&#20320;&#30693;&#36947;&#20320;&#24182;&#19981;&#20851;&#24515;&#25152;&#26377;&#30340;&#25991;&#20214;&#65292;&#32780;&#21482;&#20851;&#24515;&#27979;&#35797;&#22871;&#20214;&#12290;&#20320;&#26377;<span class="emphasis"><em>&#22826;&#22810;&#25968;&#25454;</em></span>&#65292;&#22240;&#27492;&#20320;&#38656;&#35201;&#36807;&#28388;(<code class="function">filter</code>)&#25968;&#25454;&#12290;&#20320;&#22914;&#20309;&#30693;&#36947;&#21738;&#20123;&#25968;&#25454;&#24212;&#35813;&#20445;&#30041;&#65311;&#20320;&#38656;&#35201;&#19968;&#20010;&#27979;&#35797;&#26469;&#30830;&#23450;&#65292;&#22240;&#27492;&#20320;&#23450;&#20041;&#19968;&#20010;&#27979;&#35797;&#24182;&#25226;&#23427;&#20256;&#32473; <code class="function">filter</code> &#20989;&#25968;&#12290;&#36825;&#37324;&#20320;&#24212;&#29992;&#20102;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#26469;&#30830;&#23450;&#65292;&#20294;&#26080;&#35770;&#22914;&#20309;&#26500;&#24314;&#27979;&#35797;&#65292;&#21407;&#21017;&#26159;&#19968;&#26679;&#30340;&#12290;</p><p>&#29616;&#22312;&#20320;&#26377;&#20102;&#27599;&#20010;&#27979;&#35797;&#22871;&#20214;&#30340;&#25991;&#20214;&#21517; (&#19988;&#23616;&#38480;&#20110;&#27979;&#35797;&#22871;&#20214;&#65292;&#22240;&#20026;&#25152;&#26377;&#20854;&#20182;&#20869;&#23481;&#37117;&#34987;&#36807;&#28388;&#25481;&#20102;)&#65292;&#20294;&#26159;&#20320;&#36824;&#38656;&#35201;&#20197;&#27169;&#22359;&#21517;&#26469;&#26367;&#20195;&#20043;&#12290;&#20320;&#26377;&#27491;&#30830;&#25968;&#37327;&#30340;&#25968;&#25454;&#65292;&#21482;&#26159;<span class="emphasis"><em>&#26684;&#24335;&#19981;&#27491;&#30830;</em></span>&#12290;&#22240;&#27492;&#65292;&#20320;&#23450;&#20041;&#20102;&#19968;&#20010;&#20989;&#25968;&#26469;&#23558;&#25991;&#20214;&#21517;&#36716;&#25442;&#20026;&#27169;&#22359;&#21517;&#65292;&#24182;&#20351;&#29992;&#36825;&#20010;&#20989;&#25968;&#26144;&#23556;&#25972;&#20010;&#21015;&#34920;&#12290;&#20174;&#19968;&#20010;&#25991;&#20214;&#21517;&#65292;&#20320;&#21487;&#20197;&#33719;&#24471;&#19968;&#20010;&#27169;&#22359;&#21517;&#65292;&#20174;&#19968;&#20010;&#25991;&#20214;&#21517;&#21015;&#34920;&#65292;&#20320;&#21487;&#20197;&#33719;&#24471;&#19968;&#20010;&#27169;&#22359;&#21517;&#21015;&#34920;&#12290;</p><p>&#22914;&#26524;&#19981;&#24212;&#29992; <code class="function">filter</code>&#65292;&#20320;&#20063;&#21487;&#20197;&#20351;&#29992; <code class="literal">for</code> &#24490;&#29615;&#32467;&#21512;&#19968;&#20010; <code class="literal">if</code> &#35821;&#21477;&#30340;&#26041;&#27861;&#12290;<code class="function">map</code> &#30340;&#20351;&#29992;&#21017;&#21487;&#20197;&#30001;&#19968;&#20010; <code class="literal">for</code> &#24490;&#29615;&#21644;&#19968;&#20010;&#20989;&#25968;&#35843;&#29992;&#26469;&#21462;&#20195;&#12290;&#20294;&#26159; <code class="literal">for</code> &#24490;&#29615;&#30475;&#36215;&#26469;&#20687;&#26159;&#20010;&#32321;&#37325;&#30340;&#24037;&#20316;&#12290;&#33267;&#23569;&#65292;&#31616;&#21333;&#35762;&#26159;&#22312;&#28010;&#36153;&#26102;&#38388;&#65292;&#31967;&#31957;&#30340;&#35805;&#36824;&#20250;&#38544;&#22475; Bug&#12290;&#20363;&#22914;&#65292;&#20320;&#38656;&#35201;&#24324;&#28165;&#26970;&#22914;&#20309;&#27979;&#35797;&#36825;&#26679;&#19968;&#20010;&#26465;&#20214;&#65306;"<span class="quote">&#36825;&#20010;&#25991;&#20214;&#26159;&#27979;&#35797;&#22871;&#20214;&#21527;&#65311;</span>"&#36825;&#26159;&#24212;&#29992;&#29305;&#23450;&#30340;&#36923;&#36753;&#65292;&#27809;&#26377;&#21738;&#20010;&#35821;&#35328;&#33021;&#33258;&#21160;&#20026;&#25105;&#20204;&#20889;&#20986;&#20854;&#20195;&#30721;&#12290;&#20294;&#26159;&#19968;&#26086;&#20320;&#25630;&#28165;&#26970;&#20102;&#65292;&#20320;&#36824;&#38656;&#35201;&#36153;&#23613;&#21608;&#25240;&#22320;&#23450;&#20041;&#19968;&#20010;&#26032;&#30340;&#31354;&#21015;&#34920;&#65292;&#20889;&#19968;&#20010;  <code class="literal">for</code> &#24490;&#29615;&#20197;&#21450;&#19968;&#20010; <code class="literal">if</code> &#35821;&#21477;&#24182;&#25163;&#24037;&#22320;&#35843;&#29992; <code class="function">append</code> &#23558;&#31526;&#21512;&#26465;&#20214;&#30340;&#20803;&#32032;&#19968;&#20010;&#20010;&#28155;&#21152;&#21040;&#26032;&#21015;&#34920;&#20013;&#65292;&#28982;&#21518;&#19968;&#36335;&#19978;&#27880;&#24847;&#21306;&#20998;&#21738;&#20010;&#21464;&#37327;&#37324;&#25918;&#30528;&#36807;&#28388;&#21518;&#30340;&#25968;&#25454;&#65292;&#21738;&#20010;&#21464;&#37327;&#37324;&#25918;&#30528;&#26410;&#36807;&#28388;&#30340;&#32769;&#25968;&#25454;&#12290;&#20026;&#20160;&#20040;&#19981;&#30452;&#25509;&#23450;&#20041;&#27979;&#35797;&#26465;&#20214;&#65292;&#28982;&#21518;&#30001; <span class="application">Python</span> &#20026;&#20320;&#23436;&#25104;&#25509;&#19979;&#26469;&#30340;&#24037;&#20316;&#21602;&#65311;</p><p>&#24403;&#28982;&#21862;&#65292;&#20320;&#21487;&#20197;&#23581;&#35797;&#30505;&#19968;&#28857;&#30340;&#20570;&#27861;&#65292;&#21435;&#21024;&#38500;&#21015;&#34920;&#20013;&#30340;&#20803;&#32032;&#32780;&#19981;&#26032;&#24314;&#19968;&#20010;&#21015;&#34920;&#12290;&#20294;&#26159;&#20320;&#20197;&#21069;&#21507;&#36807;&#36825;&#26679;&#30340;&#20111;&#12290;&#35797;&#22270;&#22312;&#24490;&#29615;&#20013;&#25913;&#21464;&#25968;&#25454;&#32467;&#26500;&#26159;&#24456;&#23481;&#26131;&#20986;&#38382;&#39064;&#30340;&#12290;<span class="application">Python</span> &#26159;&#19968;&#20010;&#36825;&#26679;&#24037;&#20316;&#30340;&#35821;&#35328;&#21527;&#65311;&#29992;&#22810;&#38271;&#26102;&#38388;&#20320;&#25165;&#33021;&#25630;&#28165;&#36825;&#19968;&#28857;&#65311;&#20320;&#33021;&#30830;&#23450;&#35760;&#24471;&#20320;&#31532;&#20108;&#27425;&#36825;&#26679;&#23581;&#35797;&#30340;&#23433;&#20840;&#24615;&#65311;&#31243;&#24207;&#21592;&#22312;&#21644;&#36825;&#31867;&#32431;&#25216;&#26415;&#35838;&#39064;&#36739;&#21170;&#30340;&#36807;&#31243;&#20013;&#65292;&#33457;&#36153;&#20102;&#22826;&#22810;&#30340;&#26102;&#38388;&#65292;&#29359;&#20102;&#22826;&#22810;&#30340;&#38169;&#35823;&#65292;&#21364;&#24182;&#27809;&#26377;&#20160;&#20040;&#24847;&#20041;&#12290;&#36825;&#26679;&#24182;&#19981;&#21487;&#33021;&#20196;&#20320;&#30340;&#31243;&#24207;&#26377;&#25152;&#36827;&#27493;&#65292;&#21482;&#19981;&#36807;&#26159;&#36153;&#21147;&#19981;&#35752;&#22909;&#12290;</p><p>&#25105;&#22312;&#31532;&#19968;&#27425;&#23398;&#20064; <span class="application">Python</span> &#26102;&#26159;&#25269;&#35302;&#21015;&#34920;&#35299;&#26512;&#30340;&#65292;&#32780;&#19988;&#25105;&#25239;&#25298; <code class="function">filter</code> &#21644; <code class="function">map</code> &#30340;&#26102;&#38388;&#26356;&#38271;&#12290;&#25105;&#22362;&#25345;&#30528;&#25105;&#26356;&#33392;&#38590;&#30340;&#29983;&#27963;&#65292;&#22266;&#23432;&#30528;&#31867;&#20284;&#20110; <code class="literal">for</code> &#24490;&#29615;&#21644; <code class="literal">if</code> &#35821;&#21477;&#20197;&#21450;&#19968;&#27493;&#27493;&#22320;&#20197;&#20195;&#30721;&#20026;&#20013;&#24515;&#30340;&#32534;&#31243;&#26041;&#24335;&#12290;&#32780;&#19988;&#25105;&#30340; <span class="application">Python</span> &#31243;&#24207;&#30475;&#36215;&#26469;&#24456;&#20687;&#26159; <span class="application">Visual Basic</span> &#31243;&#24207;&#65292;&#32454;&#21270;&#27599;&#19968;&#20010;&#20989;&#25968;&#20013;&#30340;&#27599;&#19968;&#20010;&#25805;&#20316;&#27493;&#39588;&#12290;&#23427;&#20204;&#21364;&#26377;&#30528;&#21516;&#26679;&#30340;&#23567;&#38169;&#35823;&#21644;&#38544;&#34109;&#30340; Bug&#12290;&#36825;&#19968;&#20999;&#20854;&#23454;&#37117;&#27809;&#26377;&#24847;&#20041;&#12290;</p><p>&#35753;&#36825;&#19968;&#20999;&#37117;&#36828;&#21435;&#21543;&#12290;&#36153;&#21147;&#19981;&#35752;&#22909;&#30340;&#32534;&#31243;&#19981;&#37325;&#35201;&#65292;&#25968;&#25454;&#37325;&#35201;&#12290;&#24182;&#19988;&#25968;&#25454;&#24182;&#19981;&#40635;&#28902;&#65292;&#23427;&#20204;&#19981;&#36807;&#23601;&#26159;&#25968;&#25454;&#12290;&#22914;&#26524;&#22810;&#20102;&#65292;&#23601;&#36807;&#28388;&#12290;&#22914;&#26524;&#19981;&#26159;&#25105;&#20204;&#35201;&#30340;&#65292;&#23601;&#26144;&#23556;&#12290;&#32858;&#28966;&#22312;&#25968;&#25454;&#19978;&#65292;&#25682;&#24323;&#36153;&#21147;&#30340;&#21171;&#20316;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.import"></a>16.6.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;</h2></div></div></div><div class="abstract"><p>&#22909;&#20102;&#65292;&#22823;&#36947;&#29702;&#35848;&#22815;&#20102;&#12290;&#35753;&#25105;&#20204;&#35848;&#35848;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;&#21543;&#12290;</p></div><p>&#39318;&#20808;&#65292;&#35753;&#25105;&#20204;&#30475;&#19968;&#30475;&#27491;&#24120;&#30340;&#27169;&#22359;&#23548;&#20837;&#12290;<code class="literal">import <em class="replaceable">module</em></code> &#35821;&#27861;&#26597;&#30475;&#25628;&#32034;&#36335;&#24452;&#65292;&#26681;&#25454;&#32473;&#23450;&#30340;&#21517;&#23383;&#23547;&#25214;&#27169;&#22359;&#24182;&#23548;&#20837;&#23427;&#20204;&#12290;&#20320;&#29978;&#33267;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;&#20197;&#36887;&#21495;&#20998;&#21106;&#21516;&#26102;&#23548;&#20837;&#22810;&#20010;&#27169;&#22359;&#65292;&#26412;&#31456;&#20195;&#30721;&#21069;&#20960;&#34892;&#23601;&#26159;&#36825;&#26679;&#20570;&#30340;&#12290;</p><div class="example"><a name="d0e36476"></a><p class="title"><b>&#20363;&nbsp;16.13.&nbsp;&#21516;&#26102;&#23548;&#20837;&#22810;&#20010;&#27169;&#22359;</b></p><div class="example-contents"><pre class="programlisting">
import sys, os, re, unittest <a name="regression.import.1.1"></a>circled_1_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.import.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#37324;&#21516;&#26102;&#23548;&#20837;&#22235;&#20010;&#27169;&#22359;&#65306;<code class="filename">sys</code> (&#20026;&#31995;&#32479;&#20989;&#25968;&#21644;&#24471;&#21040;&#21629;&#20196;&#34892;&#21442;&#25968;)&#12289;<code class="filename">os</code> (&#20026;&#30446;&#24405;&#21015;&#34920;&#20043;&#31867;&#30340;&#25805;&#20316;&#31995;&#32479;&#20989;&#25968;)&#12289;<code class="filename">re</code> (&#20026;&#27491;&#21017;&#34920;&#36798;&#24335;)&#65292;&#20197;&#21450; <code class="filename">unittest</code> (&#20026;&#21333;&#20803;&#27979;&#35797;)&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#35753;&#25105;&#20204;&#29992;&#21160;&#24577;&#23548;&#20837;&#20570;&#21516;&#26679;&#30340;&#20107;&#12290;</p><div class="example"><a name="d0e36501"></a><p class="title"><b>&#20363;&nbsp;16.14.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys = __import__('sys')</span>           <a name="regression.import.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os = __import__('os')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re = __import__('re')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">unittest = __import__('unittest')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys</span>                               <a name="regression.import.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><font color="teal">&lt;module 'sys' (built-in)&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">os</span>
<code class="prompt">&gt;&gt;&gt; </code><font color="teal">&lt;module 'os' from '/usr/local/lib/python2.2/os.pyc'&gt;</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.import.2.1">circled_1_delcric</a> </dt><dd>&#20869;&#24314; <code class="function">__import__</code> &#20989;&#25968;&#19982; <code class="literal">import</code> &#35821;&#21477;&#30340;&#26082;&#23450;&#30446;&#26631;&#30456;&#21516;&#65292;&#20294;&#23427;&#26159;&#19968;&#20010;&#30495;&#27491;&#30340;&#20989;&#25968;&#65292;&#24182;&#25509;&#21463;&#19968;&#20010;&#23383;&#31526;&#20018;&#21442;&#25968;&#12290;</dd><dt><a href="#regression.import.2.2">circled_2_delcric</a> </dt><dd>&#21464;&#37327; <code class="varname">sys</code> &#29616;&#22312;&#26159; <code class="filename">sys</code> &#27169;&#22359;&#65292;&#21644; <code class="literal">import sys</code> &#30340;&#32467;&#26524;&#23436;&#20840;&#30456;&#21516;&#12290;&#21464;&#37327; <code class="varname">os</code> &#29616;&#22312;&#26159;&#19968;&#20010; <code class="filename">os</code> &#27169;&#22359;&#65292;&#31561;&#31561;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22240;&#27492; <code class="function">__import__</code> &#23548;&#20837;&#19968;&#20010;&#27169;&#22359;&#65292;&#20294;&#26159;&#26159;&#36890;&#36807;&#19968;&#20010;&#23383;&#31526;&#20018;&#21442;&#25968;&#26469;&#20570;&#21040;&#30340;&#12290;&#20381;&#27492;&#22788;&#35762;&#65292;&#20320;&#29992;&#20197;&#23548;&#20837;&#30340;&#20165;&#20165;&#26159;&#19968;&#20010;&#30828;&#32534;&#30721;&#24615;&#30340;&#23383;&#31526;&#20018;&#65292;&#20294;&#23427;&#21487;&#20197;&#26159;&#19968;&#20010;&#21464;&#37327;&#65292;&#25110;&#32773;&#19968;&#20010;&#20989;&#25968;&#35843;&#29992;&#30340;&#32467;&#26524;&#12290;&#24182;&#19988;&#20320;&#25351;&#21521;&#27169;&#22359;&#30340;&#21464;&#37327;&#20063;&#19981;&#24517;&#19982;&#27169;&#22359;&#21517;&#21305;&#37197;&#12290;&#20320;&#21487;&#20197;&#23548;&#20837;&#19968;&#31995;&#21015;&#27169;&#22359;&#24182;&#25226;&#23427;&#20204;&#25351;&#27966;&#32473;&#19968;&#20010;&#21015;&#34920;&#12290;</p><div class="example"><a name="d0e36583"></a><p class="title"><b>&#20363;&nbsp;16.15.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;&#21015;&#34920;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">moduleNames = ['sys', 'os', 're', 'unittest']</span> <a name="regression.import.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">moduleNames</span>
<font color="teal">['sys', 'os', 're', 'unittest']</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">modules = map(__import__, moduleNames)</span>        <a name="regression.import.3.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">modules</span>                                       <a name="regression.import.3.3"></a>circled_3_delcric
<font color="teal">[&lt;module 'sys' (built-in)&gt;,
&lt;module 'os' from 'c:\Python22\lib\os.pyc'&gt;,
&lt;module 're' from 'c:\Python22\lib\re.pyc'&gt;,
&lt;module 'unittest' from 'c:\Python22\lib\unittest.pyc'&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">modules[0].version</span>                            <a name="regression.import.3.4"></a>circled_4_delcric
<font color="teal">'2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import sys</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">sys.version</span>
<font color="teal">'2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.import.3.1">circled_1_delcric</a> </dt><dd><code class="varname">moduleNames</code> &#21482;&#26159;&#19968;&#20010;&#23383;&#31526;&#20018;&#21015;&#34920;&#12290;&#27809;&#20160;&#20040;&#29305;&#21035;&#30340;&#65292;&#21482;&#26159;&#36825;&#20123;&#21517;&#23383;&#21018;&#22909;&#26159;&#20320;&#21487;&#24212;&#38656;&#32780;&#29992;&#30340;&#21487;&#23548;&#20837;&#27169;&#22359;&#21517;&#12290;</dd><dt><a href="#regression.import.3.2">circled_2_delcric</a> </dt><dd>&#31616;&#21333;&#24471;&#20196;&#20154;&#24778;&#22855;&#65292;&#36890;&#36807;&#26144;&#23556; <code class="function">__import__</code> &#23601;&#23454;&#29616;&#20102;&#23548;&#20837;&#12290;&#35760;&#20303;&#65292;&#21015;&#34920; (<code class="varname">moduleNames</code>) &#30340;&#27599;&#20010;&#20803;&#32032;&#23558;&#34987;&#29992;&#26469;&#19968;&#27425;&#27425;&#35843;&#29992;&#20989;&#25968; (<code class="function">__import__</code>) &#24182;&#20197;&#19968;&#20010;&#36820;&#22238;&#20540;&#26500;&#25104;&#30340;&#21015;&#34920;&#20316;&#20026;&#36820;&#22238;&#32467;&#26524;&#12290;</dd><dt><a href="#regression.import.3.3">circled_3_delcric</a> </dt><dd>&#25152;&#20197;&#29616;&#22312;&#20320;&#24050;&#32463;&#30001;&#19968;&#20010;&#23383;&#31526;&#20018;&#21015;&#34920;&#26500;&#24314;&#36215;&#20102;&#19968;&#20010;&#23454;&#38469;&#27169;&#22359;&#30340;&#21015;&#34920;&#12290;(&#20320;&#30340;&#36335;&#24452;&#21487;&#33021;&#19981;&#21516;&#65292;&#36825;&#21462;&#20915;&#20110;&#20320;&#30340;&#25805;&#20316;&#31995;&#32479;&#12289;&#20320;&#23433;&#35013; Python &#30340;&#20301;&#32622;&#12289;&#26376;&#20142;&#27531;&#32570;&#30340;&#31243;&#24230;&#31561;&#31561;&#12290;)</dd><dt><a href="#regression.import.3.4">circled_4_delcric</a> </dt><dd>&#20174;&#36825;&#20123;&#26159;&#30495;&#23454;&#27169;&#22359;&#36825;&#19968;&#28857;&#20986;&#21457;&#65292;&#35753;&#25105;&#20204;&#26469;&#30475;&#19968;&#20123;&#27169;&#22359;&#23646;&#24615;&#12290;&#35760;&#20303;&#65292;<code class="varname">modules[0]</code> <span class="emphasis"><em>&#26159;</em></span>  <code class="filename">sys</code> &#27169;&#22359;&#65292;&#22240;&#27492;&#65292;<code class="varname">modules[0].version</code> <span class="emphasis"><em>&#26159;</em></span> <code class="varname">sys.version</code>&#12290;&#25152;&#26377;&#27169;&#22359;&#30340;&#20854;&#20182;&#23646;&#24615;&#21644;&#26041;&#27861;&#20063;&#37117;&#21487;&#29992;&#12290;<code class="literal">import</code> &#35821;&#21477;&#27809;&#20160;&#20040;&#31070;&#22855;&#30340;&#65292;&#27169;&#22359;&#20063;&#27809;&#20160;&#20040;&#31070;&#22855;&#30340;&#12290;&#27169;&#22359;&#23601;&#26159;&#23545;&#35937;&#65292;&#19968;&#20999;&#37117;&#26159;&#23545;&#35937;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#65292;&#20320;&#24212;&#35813;&#33021;&#22815;&#25226;&#36825;&#19968;&#20999;&#25918;&#22312;&#19968;&#36215;&#65292;&#24182;&#25630;&#28165;&#26970;&#26412;&#31456;&#22823;&#37096;&#20998;&#26679;&#20363;&#20195;&#30721;&#26159;&#20570;&#20160;&#20040;&#30340;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.alltogether"></a>16.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</h2></div></div></div><div class="abstract"><p>&#20320;&#24050;&#32463;&#23398;&#20064;&#20102;&#36275;&#22815;&#30340;&#30693;&#35782;&#65292;&#29616;&#22312;&#26469;&#20998;&#26512;&#26412;&#31456;&#26679;&#20363;&#20195;&#30721;&#30340;&#21069;&#19971;&#34892;&#65306;&#35835;&#21462;&#19968;&#20010;&#30446;&#24405;&#24182;&#20174;&#20013;&#23548;&#20837;&#36873;&#23450;&#30340;&#27169;&#22359;&#12290;</p></div><div class="example"><a name="d0e36698"></a><p class="title"><b>&#20363;&nbsp;16.16.&nbsp;<code class="function">regressionTest</code> &#20989;&#25968;</b></p><div class="example-contents"><pre class="programlisting">
def regressionTest():
    path = os.path.abspath(os.path.dirname(sys.argv[0]))   
    files = os.listdir(path)                               
    test = re.compile("test\.py$", re.IGNORECASE)          
    files = filter(test.search, files)                     
    filenameToModuleName = lambda f: os.path.splitext(f)[0]
    moduleNames = map(filenameToModuleName, files)         
    modules = map(__import__, moduleNames)                 
load = unittest.defaultTestLoader.loadTestsFromModule  
return unittest.TestSuite(map(load, modules))          
</pre></div></div><br class="example-break"><p>&#35753;&#25105;&#20204;&#19968;&#34892;&#34892;&#20132;&#20114;&#22320;&#30475;&#12290;&#20551;&#23450;&#24403;&#21069;&#30446;&#24405;&#26159; <code class="filename">c:\diveintopython\py</code>&#65292;&#20854;&#20013;&#26377;&#21253;&#21547;&#26412;&#31456;&#33050;&#26412;&#22312;&#20869;&#30340;&#26412;&#20070;&#20247;&#22810;&#26679;&#20363;&#12290;&#27491;&#22914;&#22312; <a class="xref" href="#regression.path" title="16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;">&#31532;&nbsp;16.2&nbsp;&#33410; &#8220;&#25214;&#21040;&#36335;&#24452;&#8221;</a> &#20013;&#25152;&#35265;&#65292;&#33050;&#26412;&#30446;&#24405;&#23558;&#23384;&#20110; <code class="varname">path</code> &#21464;&#37327;&#65292;&#22240;&#27492;&#35753;&#25105;&#20204;&#20174;&#36825;&#37324;&#24320;&#22987;&#20197;&#23454;&#25171;&#23454;&#30340;&#20195;&#30721;&#36215;&#27493;&#12290;</p><div class="example"><a name="d0e36715"></a><p class="title"><b>&#20363;&nbsp;16.17.&nbsp;&#27493;&#39588; 1&#65306;&#33719;&#24471;&#25152;&#26377;&#25991;&#20214;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import sys, os, re, unittest</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">path = r'c:\diveintopython\py'</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">files = os.listdir(path)                               </span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">files</span> <a name="regression.alltogether.1.1"></a>circled_1_delcric
<font color="teal">['BaseHTMLProcessor.py', 'LICENSE.txt', 'apihelper.py', 'apihelpertest.py',
'argecho.py', 'autosize.py', 'builddialectexamples.py', 'dialect.py',
'fileinfo.py', 'fullpath.py', 'kgptest.py', 'makerealworddoc.py',
'odbchelper.py', 'odbchelpertest.py', 'parsephone.py', 'piglatin.py',
'plural.py', 'pluraltest.py', 'pyfontify.py', 'regression.py', 'roman.py', 'romantest.py',
'uncurly.py', 'unicode2koi8r.py', 'urllister.py', 'kgp', 'plural', 'roman',
'colorize.py']</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.alltogether.1.1">circled_1_delcric</a> </dt><dd><code class="varname">files</code> &#26159;&#30001;&#33050;&#26412;&#25152;&#22312;&#30446;&#24405;&#30340;&#25152;&#26377;&#25991;&#20214;&#21644;&#30446;&#24405;&#26500;&#25104;&#30340;&#21015;&#34920;&#12290;(&#22914;&#26524;&#20320;&#24050;&#32463;&#36816;&#34892;&#20102;&#20854;&#20013;&#30340;&#19968;&#20123;&#26679;&#20363;&#65292;&#21487;&#33021;&#36824;&#20250;&#30475;&#21040;&#19968;&#20123; <code class="filename">.pyc</code> &#25991;&#20214;&#12290;)</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e36754"></a><p class="title"><b>&#20363;&nbsp;16.18.&nbsp;&#27493;&#39588; 2&#65306;&#25214;&#21040;&#20320;&#20851;&#27880;&#30340;&#22810;&#20010;&#25991;&#20214;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">test = re.compile("test\.py$", re.IGNORECASE)          </span> <a name="regression.alltogether.2.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">files = filter(test.search, files)                     </span> <a name="regression.alltogether.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">files</span>                                                   <a name="regression.alltogether.2.3"></a>circled_3_delcric
<font color="teal">['apihelpertest.py', 'kgptest.py', 'odbchelpertest.py', 'pluraltest.py', 'romantest.py']</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.alltogether.2.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#23558;&#21305;&#37197;&#20197; <code class="literal">test.py</code> &#32467;&#23614;&#30340;&#20219;&#24847;&#23383;&#31526;&#20018;&#12290;&#27880;&#24847;&#65292;&#20320;&#24517;&#39035;&#36716;&#20041;&#36825;&#20010;&#28857;&#21495;&#65292;&#22240;&#20026;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#30340;&#28857;&#21495;&#36890;&#24120;&#24847;&#21619;&#30528; "<span class="quote">&#21305;&#37197;&#20219;&#24847;&#21333;&#23383;&#31526;</span>"&#65292;&#20294;&#26159;&#20320;&#23454;&#38469;&#19978;&#24819;&#21305;&#37197;&#30340;&#20107;&#19968;&#20010;&#30495;&#27491;&#30340;&#28857;&#21495;&#12290;</dd><dt><a href="#regression.alltogether.2.2">circled_2_delcric</a> </dt><dd>&#34987;&#32534;&#35793;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#23601;&#20687;&#19968;&#20010;&#20989;&#25968;&#65292;&#22240;&#27492;&#20320;&#21487;&#20197;&#29992;&#23427;&#26469;&#36807;&#28388;&#25991;&#20214;&#21644;&#30446;&#24405;&#26500;&#25104;&#30340;&#22823;&#21015;&#34920;&#65292;&#25214;&#23547;&#31526;&#21512;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#25152;&#26377;&#20803;&#32032;&#12290;</dd><dt><a href="#regression.alltogether.2.3">circled_3_delcric</a> </dt><dd>&#21097;&#19979;&#30340;&#26159;&#19968;&#20010;&#21333;&#20803;&#27979;&#35797;&#33050;&#26412;&#21015;&#34920;&#65292;&#22240;&#20026;&#21482;&#26377;&#23427;&#20204;&#26159;&#24418;&#22914; <code class="filename">SOMETHINGtest.py</code> &#30340;&#25991;&#20214;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e36802"></a><p class="title"><b>&#20363;&nbsp;16.19.&nbsp;&#27493;&#39588; 3&#65306;&#26144;&#23556;&#25991;&#20214;&#21517;&#21040;&#27169;&#22359;&#21517;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filenameToModuleName = lambda f: os.path.splitext(f)[0]</span> <a name="regression.alltogether.3.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filenameToModuleName('romantest.py')</span>                    <a name="regression.alltogether.3.2"></a>circled_2_delcric
<font color="teal">'romantest'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">filenameToModuleName('odchelpertest.py')</span>
<font color="teal">'odbchelpertest'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">moduleNames = map(filenameToModuleName, files)         </span> <a name="regression.alltogether.3.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">moduleNames</span>                                             <a name="regression.alltogether.3.4"></a>circled_4_delcric
<font color="teal">['apihelpertest', 'kgptest', 'odbchelpertest', 'pluraltest', 'romantest']</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.alltogether.3.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;">&#31532;&nbsp;4.7&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;&#8221;</a> &#20013;&#25152;&#35265;&#65292;<code class="literal">lambda</code> &#24555;&#39184;&#24335;&#22320;&#21019;&#24314;&#20869;&#32852;&#21333;&#34892;&#20989;&#25968;&#12290;&#36825;&#37324;&#24212;&#29992;&#20320;&#22312; <a class="xref" href="#splittingpathnames.example" title="&#20363;&nbsp;6.17.&nbsp;&#20998;&#21106;&#36335;&#24452;&#21517;">&#20363;&nbsp;6.17 &#8220;&#20998;&#21106;&#36335;&#24452;&#21517;&#8221;</a> &#20013;&#24050;&#32463;&#35265;&#36807;&#30340;&#65292;&#26631;&#20934;&#24211;&#30340; <code class="function">os.path.splitext</code> &#23558;&#19968;&#20010;&#24102;&#26377;&#25193;&#23637;&#21517;&#30340;&#25991;&#20214;&#21517;&#36820;&#22238;&#25104;&#21482;&#21253;&#21547;&#25991;&#20214;&#21517;&#31216;&#30340;&#37027;&#37096;&#20998;&#12290;</dd><dt><a href="#regression.alltogether.3.2">circled_2_delcric</a> </dt><dd><code class="varname">filenameToModuleName</code> &#26159;&#19968;&#20010;&#20989;&#25968;&#12290;<code class="literal">lambda</code> &#20989;&#25968;&#24182;&#19981;&#27604;&#20320;&#20197; <code class="literal">def</code> &#35821;&#21477;&#23450;&#20041;&#30340;&#26222;&#36890;&#20989;&#25968;&#31070;&#22855;&#12290;&#20320;&#21487;&#20197;&#22914;&#20854;&#20182;&#20989;&#25968;&#19968;&#26679;&#22320;&#35843;&#29992; <code class="varname">filenameToModuleName</code>&#65292;&#23427;&#20063;&#23558;&#22914;&#20320;&#25152;&#24895;&#65306;&#20174;&#21442;&#25968;&#20013;&#21076;&#38500;&#25193;&#23637;&#21517;&#12290;</dd><dt><a href="#regression.alltogether.3.3">circled_3_delcric</a> </dt><dd>&#29616;&#22312;&#20320;&#21487;&#20197;&#36890;&#36807; <code class="function">map</code> &#25226;&#36825;&#20010;&#20989;&#25968;&#24212;&#29992;&#20110;&#21333;&#20803;&#27979;&#35797;&#25991;&#20214;&#21015;&#34920;&#20013;&#30340;&#27599;&#19968;&#20010;&#25991;&#20214;&#12290;</dd><dt><a href="#regression.alltogether.3.4">circled_4_delcric</a> </dt><dd>&#32467;&#26524;&#24403;&#28982;&#22914;&#20320;&#25152;&#24895;&#65306;&#20197;&#25351;&#20195;&#27169;&#22359;&#30340;&#23383;&#31526;&#20018;&#26500;&#25104;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e36886"></a><p class="title"><b>&#20363;&nbsp;16.20.&nbsp;&#27493;&#39588; 4&#65306;&#26144;&#23556;&#27169;&#22359;&#21517;&#21040;&#27169;&#22359;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">modules = map(__import__, moduleNames)                 </span> <a name="regression.alltogether.4.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">modules</span>                                                 <a name="regression.alltogether.4.2"></a>circled_2_delcric
<font color="teal">[&lt;module 'apihelpertest' from 'apihelpertest.py'&gt;,
&lt;module 'kgptest' from 'kgptest.py'&gt;,
&lt;module 'odbchelpertest' from 'odbchelpertest.py'&gt;,
&lt;module 'pluraltest' from 'pluraltest.py'&gt;,
&lt;module 'romantest' from 'romantest.py'&gt;]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">modules[-1]</span>                                             <a name="regression.alltogether.4.3"></a>circled_3_delcric
<font color="teal">&lt;module 'romantest' from 'romantest.py'&gt;</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.alltogether.4.1">circled_1_delcric</a> </dt><dd>&#27491;&#22914;&#20320;&#22312; <a class="xref" href="#regression.import" title="16.6.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;">&#31532;&nbsp;16.6&nbsp;&#33410; &#8220;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;&#8221;</a> &#20013;&#25152;&#35265;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807; <code class="function">map</code> &#21644; <code class="function">__import__</code> &#30340;&#21327;&#21516;&#24037;&#20316;&#65292;&#23558;&#27169;&#22359;&#21517; (&#23383;&#31526;&#20018;) &#26144;&#23556;&#21040;&#23454;&#38469;&#30340;&#27169;&#22359; (&#20687;&#20854;&#20182;&#27169;&#22359;&#19968;&#26679;&#21487;&#20197;&#34987;&#35843;&#29992;&#21644;&#20351;&#29992;)&#12290;
</dd><dt><a href="#regression.alltogether.4.2">circled_2_delcric</a> </dt><dd><code class="varname">modules</code> &#29616;&#22312;&#26159;&#19968;&#20010;&#27169;&#22359;&#21015;&#34920;&#65292;&#20854;&#20013;&#30340;&#27169;&#22359;&#21644;&#20854;&#20182;&#27169;&#22359;&#19968;&#26679;&#12290;</dd><dt><a href="#regression.alltogether.4.3">circled_3_delcric</a> </dt><dd>&#35813;&#21015;&#34920;&#30340;&#26368;&#21518;&#19968;&#20010;&#27169;&#22359;<span class="emphasis"><em>&#26159;</em></span> <code class="filename">romantest</code> &#27169;&#22359;&#65292;&#21644;&#36890;&#36807; <code class="literal">import romantest</code> &#23548;&#20837;&#30340;&#27169;&#22359;&#23436;&#20840;&#31561;&#20215;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e36947"></a><p class="title"><b>&#20363;&nbsp;16.21.&nbsp;&#27493;&#39588; 5&#65306;&#23558;&#27169;&#22359;&#36733;&#20837;&#27979;&#35797;&#22871;&#20214;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">load = unittest.defaultTestLoader.loadTestsFromModule  </span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">map(load, modules)</span>                     <a name="regression.alltogether.5.1"></a>circled_1_delcric
<font color="teal">[&lt;unittest.TestSuite tests=[
  &lt;unittest.TestSuite tests=[&lt;apihelpertest.BadInput testMethod=testNoObject&gt;]&gt;,
  &lt;unittest.TestSuite tests=[&lt;apihelpertest.KnownValues testMethod=testApiHelper&gt;]&gt;,
  &lt;unittest.TestSuite tests=[
    &lt;apihelpertest.ParamChecks testMethod=testCollapse&gt;, 
    &lt;apihelpertest.ParamChecks testMethod=testSpacing&gt;]&gt;, 
    ...
  ]
]</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">unittest.TestSuite(map(load, modules))</span> <a name="regression.alltogether.5.2"></a>circled_2_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#regression.alltogether.5.1">circled_1_delcric</a> </dt><dd>&#27169;&#22359;&#23545;&#35937;&#30340;&#23384;&#22312;&#65292;&#20351;&#20320;&#19981;&#20294;&#21487;&#20197;&#20687;&#20854;&#20182;&#27169;&#22359;&#19968;&#26679;&#22320;&#20351;&#29992;&#23427;&#20204;&#65307;&#36890;&#36807;&#31867;&#30340;&#23454;&#20363;&#21270;&#21644;&#20989;&#25968;&#30340;&#35843;&#29992;&#65292;&#20320;&#36824;&#21487;&#20197;&#20869;&#30465;&#27169;&#22359;&#65292;&#20174;&#32780;&#24324;&#28165;&#26970;&#24050;&#32463;&#26377;&#20102;&#37027;&#20123;&#31867;&#21644;&#20989;&#25968;&#12290;&#36825;&#27491;&#26159; <code class="function">loadTestsFromModule</code> &#26041;&#27861;&#30340;&#24037;&#20316;&#65306;&#20869;&#30465;&#27599;&#19968;&#20010;&#27169;&#22359;&#24182;&#20026;&#27599;&#20010;&#27169;&#22359;&#36820;&#22238;&#19968;&#20010; <code class="literal">unittest.TestSuite</code> &#23545;&#35937;&#12290;&#27599;&#20010; <code class="literal">TestSuite</code> (&#27979;&#35797;&#22871;&#20214;) &#23545;&#35937;&#37117;&#21253;&#21547;&#19968;&#20010; <code class="literal">TestCase</code> &#23545;&#35937;&#30340;&#21015;&#34920;&#65292;&#27599;&#20010;&#23545;&#35937;&#23545;&#24212;&#30528;&#20320;&#30340;&#27169;&#22359;&#20013;&#30340;&#19968;&#20010;&#27979;&#35797;&#26041;&#27861;&#12290;</dd><dt><a href="#regression.alltogether.5.2">circled_2_delcric</a> </dt><dd>&#26368;&#21518;&#65292;&#20320;&#23558;<code class="literal">TestSuite</code>&#21015;&#34920;&#23553;&#35013;&#25104;&#19968;&#20010;&#26356;&#22823;&#30340;&#27979;&#35797;&#22871;&#20214;&#12290;<code class="filename">unittest</code> &#27169;&#22359;&#20250;&#24456;&#33258;&#22914;&#22320;&#36941;&#21382;&#23884;&#22871;&#20110;&#27979;&#35797;&#22871;&#20214;&#20013;&#30340;&#26641;&#29366;&#32467;&#26500;&#65292;&#26368;&#21518;&#28145;&#20837;&#21040;&#29420;&#31435;&#27979;&#35797;&#26041;&#27861;&#65292;&#19968;&#20010;&#20010;&#21152;&#20197;&#36816;&#34892;&#24182;&#21028;&#26029;&#36890;&#36807;&#25110;&#26159;&#22833;&#36133;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#33258;&#30465;&#36807;&#31243;&#26159; <code class="filename">unittest</code> &#27169;&#22359;&#32463;&#24120;&#20026;&#25105;&#20204;&#20570;&#30340;&#19968;&#39033;&#24037;&#20316;&#12290;&#36824;&#35760;&#24471;&#25105;&#20204;&#30340;&#29420;&#31435;&#27979;&#35797;&#27169;&#22359;&#20165;&#20165;&#35843;&#29992;&#20102;&#30475;&#20284;&#31070;&#22855;&#30340; <code class="literal">unittest.main()</code> &#20989;&#25968;&#23601;&#22823;&#20992;&#38420;&#26023;&#22320;&#23436;&#25104;&#20102;&#20840;&#37096;&#24037;&#20316;&#21527;&#65311;<code class="function">unittest.main()</code> &#23454;&#38469;&#19978;&#21019;&#24314;&#20102;&#19968;&#20010; <code class="literal">unittest.TestProgram</code> &#30340;&#23454;&#20363;&#65292;&#32780;&#36825;&#20010;&#23454;&#20363;&#23454;&#38469;&#19978;&#21019;&#24314;&#20102;&#19968;&#20010; <code class="literal">unittest.defaultTestLoader</code> &#30340;&#23454;&#20363;&#24182;&#20197;&#35843;&#29992;&#23427;&#30340;&#27169;&#22359;&#21551;&#21160;&#23427;&#12290; (&#22914;&#26524;&#20320;&#19981;&#32473;&#20986;&#65292;&#22914;&#20309;&#30693;&#36947;&#35843;&#29992;&#23427;&#30340;&#27169;&#22359;&#26159;&#21738;&#19968;&#20010;&#65311;&#36890;&#36807;&#20351;&#29992;&#21516;&#26679;&#31070;&#22855;&#30340; <code class="literal">__import__('__main__')</code> &#21629;&#20196;&#65292;&#21160;&#24577;&#23548;&#20837;&#27491;&#22312;&#36816;&#34892;&#30340;&#27169;&#22359;&#12290;&#25105;&#21487;&#20197;&#23601; <code class="filename">unittest</code> &#27169;&#22359;&#20013;&#20351;&#29992;&#30340;&#25152;&#26377;&#25216;&#24039;&#21644;&#25216;&#26415;&#20889;&#19968;&#26412;&#20070;&#65292;&#20294;&#37027;&#26679;&#25105;&#23601;&#27809;&#27861;&#20889;&#23436;&#36825;&#26412;&#20102;&#12290;)</p><div class="example"><a name="d0e37022"></a><p class="title"><b>&#20363;&nbsp;16.22.&nbsp;&#27493;&#39588; 6&#65306;&#21578;&#30693; <code class="filename">unittest</code> &#20351;&#29992;&#20320;&#30340;&#27979;&#35797;&#22871;&#20214;</b></p><div class="example-contents"><pre class="programlisting">
if __name__ == "__main__":                   
    unittest.main(defaultTest="regressionTest") <a name="regression.alltogether.6.1"></a>circled_1_delcric
</pre></div></div><br class="example-break"><div class="calloutlist"><dl compact><dt><a href="#regression.alltogether.6.1">circled_1_delcric</a> </dt><dd>&#22312;&#19981;&#20351;&#29992; <code class="filename">unittest</code> &#27169;&#22359;&#26469;&#20026;&#25105;&#20204;&#20570;&#36825;&#19968;&#20999;&#30340;&#31070;&#22855;&#24037;&#20316;&#30340;&#24773;&#20917;&#19979;&#65292;&#20320;&#23454;&#38469;&#19978;&#24050;&#33258;&#24049;&#20570;&#21040;&#20102;&#12290;&#20320;&#24050;&#32463;&#21019;&#24314;&#20102;&#19968;&#20010;&#33258;&#24049;&#23601;&#33021;&#23548;&#20837;&#27169;&#22359;&#12289;&#35843;&#29992; <code class="literal">unittest.defaultTestLoader</code> &#24182;&#23553;&#35013;&#20110;&#19968;&#20010;&#27979;&#35797;&#22871;&#20214;&#30340; <code class="function">regressionTest</code> &#20989;&#25968;&#12290;&#29616;&#22312;&#20320;&#25152;&#35201;&#20570;&#30340;&#19981;&#26159;&#21435;&#23547;&#25214;&#27979;&#35797;&#24182;&#20197;&#36890;&#29992;&#30340;&#26041;&#27861;&#26500;&#24314;&#19968;&#20010;&#27979;&#35797;&#22871;&#20214;&#65292;&#32780;&#26159;&#21578;&#35785; <code class="filename">unittest</code> &#21069;&#38754;&#37027;&#20123;&#65292;&#23427;&#23558;&#35843;&#29992; <code class="function">regressionTest</code> &#20989;&#25968;&#65292;&#32780;&#23427;&#20250;&#36820;&#22238;&#21487;&#20197;&#30452;&#25509;&#20351;&#29992;&#30340; <code class="literal">TestSuite</code>&#12290;</dd></dl></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="regression.summary"></a>16.8.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p><code class="filename">regression.py</code> &#31243;&#24207;&#21450;&#20854;&#36755;&#20986;&#21040;&#29616;&#22312;&#24212;&#35813;&#24456;&#28165;&#26970;&#20102;&#12290;</p></div><p>&#20320;&#29616;&#22312;&#24212;&#35813;&#33021;&#22815;&#24456;&#33258;&#22914;&#22320;&#20570;&#21040;&#22914;&#19979;&#20107;&#24773;&#65306;</p><div class="itemizedlist"><ul><li>&#20174;&#21629;&#20196;&#34892;&#25805;&#20316;<a class="link" href="#regression.path" title="16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;">&#36335;&#24452;&#20449;&#24687;</a>&#12290;</li><li>&#19981;&#20351;&#29992;&#21015;&#34920;&#35299;&#26512;&#65292;<a class="link" href="#regression.filter" title="16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;">&#20351;&#29992; <code class="function">filter</code></a> &#36807;&#28388;&#21015;&#34920;&#12290;</li><li>&#19981;&#20351;&#29992;&#21015;&#34920;&#35299;&#26512;&#65292;<a class="link" href="#regression.map" title="16.4.&nbsp;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;">&#20351;&#29992; <code class="function">map</code></a> &#26144;&#23556;&#21015;&#34920;&#12290;</li><li>&#21160;&#24577;<a class="link" href="#regression.import" title="16.6.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;">&#23548;&#20837;&#27169;&#22359;</a>&#12290;</li></ul></div></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e35870" href="#d0e35870" class="para">12</a>] </sup>&#20174;&#25216;&#26415;&#23618;&#38754;&#19978;&#35762;&#65292;<code class="function">filter</code> &#30340;&#31532;&#20108;&#20010;&#21442;&#25968;&#21487;&#20197;&#26159;&#20219;&#24847;&#30340;&#24207;&#21015;&#65292;&#21253;&#25324;&#21015;&#34920;&#12289;&#20803;&#32452;&#20197;&#21450;&#23450;&#20041;&#20102; <code class="function">__getitem__</code> &#29305;&#27530;&#26041;&#27861;&#32780;&#33021;&#20687;&#21015;&#34920;&#19968;&#26679;&#24037;&#20316;&#30340;&#33258;&#23450;&#20041;&#31867;&#12290;&#22312;&#21487;&#33021;&#24773;&#20917;&#19979;&#65292;<code class="function">filter</code> &#20250;&#36820;&#22238;&#19982;&#36755;&#20837;&#30456;&#21516;&#30340;&#25968;&#25454;&#31867;&#22411;&#65292;&#20063;&#23601;&#26159;&#36807;&#28388;&#19968;&#20010;&#21015;&#34920;&#36820;&#22238;&#19968;&#20010;&#21015;&#34920;&#65292;&#36807;&#28388;&#19968;&#20010;&#20803;&#32452;&#36820;&#22238;&#19968;&#20010;&#20803;&#32452;&#12290;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e36239" href="#d0e36239" class="para">13</a>] </sup>&#21516;&#21069;&#65292;&#25105;&#38656;&#35201;&#25351;&#20986; <code class="function">map</code> &#21487;&#20197;&#25509;&#21463;&#19968;&#20010;&#21015;&#34920;&#12289;&#20803;&#32452;&#65292;&#25110;&#32773;&#19968;&#20010;&#20687;&#24207;&#21015;&#19968;&#26679;&#30340;&#23545;&#35937;&#12290;&#21442;&#35265;&#21069;&#38754;&#30340;&#20851;&#20110; <code class="function">filter</code> &#30340;&#33050;&#27880;&#12290;</p></div></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="plural"></a>&#31532;&nbsp;17&nbsp;&#31456;&nbsp;&#21160;&#24577;&#20989;&#25968;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.divein"></a>17.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>&#25105;&#24819;&#35848;&#35848;&#21517;&#35789;&#22797;&#25968;&#12290;&#36824;&#26377;&#65292;&#36820;&#22238;&#20854;&#23427;&#20989;&#25968;&#30340;&#20989;&#25968;&#65292;&#39640;&#32423;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#29983;&#25104;&#22120; (Generator)&#12290;&#29983;&#25104;&#22120;&#26159; <span class="application">Python</span> 2.3 &#26032;&#24341;&#20837;&#30340;&#12290;&#20294;&#39318;&#20808;&#36824;&#26159;&#35753;&#25105;&#20204;&#20808;&#26469;&#35848;&#35848;&#22914;&#20309;&#29983;&#25104;&#21517;&#35789;&#22797;&#25968;&#12290;</p></div><p>&#22914;&#26524;&#20320;&#36824;&#27809;&#26377;&#30475;&#36807; <a class="xref" href="#re" title="&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;7&nbsp;&#31456; <i>&#27491;&#21017;&#34920;&#36798;&#24335;</i></a>&#65292;&#29616;&#22312;&#26159;&#20010;&#32477;&#20339;&#30340;&#26426;&#20250;&#12290;&#36825;&#31456;&#20013;&#20551;&#23450;&#20320;&#24050;&#29702;&#35299;&#20102;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#22522;&#30784;&#20869;&#23481;&#24182;&#36805;&#36895;&#28145;&#20837;&#26356;&#39640;&#32423;&#30340;&#24212;&#29992;&#12290;</p><p>&#33521;&#35821;&#26159;&#19968;&#20010;&#21560;&#25910;&#24456;&#22810;&#22806;&#26469;&#35821;&#32780;&#20196;&#20154;&#30127;&#25481;&#30340;&#35821;&#35328;&#65292;&#25226;&#21333;&#25968;&#21517;&#35789;&#21464;&#25104;&#22797;&#25968;&#30340;&#35268;&#21017;&#21017;&#26159;&#22797;&#26434;&#32780;&#21448;&#22810;&#21464;&#30340;&#12290;&#26377;&#35268;&#21017;&#65292;&#26377;&#20363;&#22806;&#65292;&#26356;&#26377;&#20363;&#22806;&#30340;&#20363;&#22806;&#12290;</p><p>&#22914;&#26524;&#20320;&#22312;&#33521;&#35821;&#22269;&#23478;&#38271;&#22823;&#25110;&#26159;&#22312;&#27491;&#35268;&#23398;&#26657;&#23398;&#20064;&#20102;&#33521;&#35821;&#65292;&#20320;&#21487;&#33021;&#23545;&#19979;&#38754;&#30340;&#22522;&#26412;&#35268;&#21017;&#24456;&#29087;&#24713;&#65306;</p><div class="orderedlist"><ol type="1"><li>&#22914;&#26524;&#19968;&#20010;&#35789;&#20197; S, X &#25110; Z &#32467;&#23614;&#65292;&#21152; ES&#12290;&#22914; "<span class="quote">Bass</span>" &#21464;&#25104; "<span class="quote">basses</span>"&#65292;"<span class="quote">fax</span>" &#21464;&#25104; "<span class="quote">faxes</span>"&#65292;&#36824;&#26377; "<span class="quote">waltz</span>" &#21464;&#25104; "<span class="quote">waltzes</span>"&#12290;</li><li>&#22914;&#26524;&#19968;&#20010;&#35789;&#20197;&#21457;&#38899;&#30340; H &#32467;&#23614;&#65292;&#21152; ES&#65307;&#33509;&#20197;&#19981;&#21457;&#38899;&#30340; H &#32467;&#23614;&#65292;&#21152; S&#12290;&#20160;&#20040;&#26159;&#21457;&#38899;&#30340; H&#65311;&#21644;&#20854;&#20182;&#23383;&#27597;&#28151;&#21512;&#22312;&#19968;&#36215;&#21457;&#20986;&#19968;&#20010;&#20320;&#21487;&#20197;&#21548;&#21040;&#30340;&#22768;&#38899;&#12290;&#37027;&#20040;&#65292;"<span class="quote">coach</span>" &#21464;&#25104; "<span class="quote">coaches</span>" &#65292;"<span class="quote">rash</span>" &#21464;&#25104; "<span class="quote">rashes</span>"&#65292;&#22240;&#20026;&#22312;&#35835;&#20986;&#26469;&#26102;&#65292;&#20320;&#21487;&#20197;&#21548;&#21040; CH &#21644; SH &#30340;&#22768;&#38899;&#12290;&#20294;&#26159;&#65292;"<span class="quote">cheetah</span>" &#21464;&#25104; "<span class="quote">cheetahs</span>"&#65292;&#22240;&#20026; H &#19981;&#21457;&#38899;&#12290;</li><li>&#22914;&#26524;&#19968;&#20010;&#35789;&#20197;&#21457; I &#38899;&#30340; Y &#32467;&#23614;&#65292;&#25226; Y &#21464;&#25104; IES&#65307;&#22914;&#26524; Y &#19982;&#20803;&#38899;&#25645;&#37197;&#22312;&#19968;&#36215;&#21457;&#20986;&#20854;&#20182;&#22768;&#38899;&#21017;&#21482;&#28155;&#21152; S&#12290;&#22240;&#27492;&#65292;"<span class="quote">vacancy</span>" &#21464;&#25104; "<span class="quote">vacancies</span>"&#65292;&#20294; "<span class="quote">day</span>" &#21464;&#25104; "<span class="quote">days</span>"&#12290;</li><li>&#22914;&#26524;&#19968;&#20999;&#35268;&#21017;&#37117;&#19981;&#36866;&#29992;&#65292;&#23601;&#21482;&#28155;&#21152; S &#24182;&#31048;&#31095;&#19981;&#20250;&#38169;&#12290;</li></ol></div><p>(&#25105;&#30693;&#36947;&#26377;&#24456;&#22810;&#20363;&#22806;&#24773;&#20917;&#65292;&#27604;&#22914;&#65306;"<span class="quote">Man</span>" &#21464;&#25104; "<span class="quote">men</span>"&#65292;"<span class="quote">woman</span>" &#21464;&#25104; "<span class="quote">women</span>"&#65292;&#20294;&#26159;&#65292;"<span class="quote">human</span>" &#21364;&#21464;&#25104; "<span class="quote">humans</span>"&#12290;"<span class="quote">Mouse</span>" &#21464;&#25104; "<span class="quote">mice</span>"&#65292;"<span class="quote">louse</span>" &#21464;&#25104; "<span class="quote">lice</span>"&#65292;&#20294;&#26159;&#65292;"<span class="quote">house</span>" &#21364;&#21464;&#25104; "<span class="quote">houses</span>"&#12290;"<span class="quote">Knife</span>" &#21464;&#25104; "<span class="quote">knives</span>"&#65292;"<span class="quote">wife</span>" &#21464;&#25104; "<span class="quote">wives</span>"&#65292;&#20294;&#26159; "<span class="quote">lowlife</span>" &#21364;&#21464;&#25104; "<span class="quote">lowlifes</span>"&#12290;&#26356;&#19981;&#35201;&#35828;&#37027;&#20123;&#22797;&#25968;&#26681;&#26412;&#23601;&#19981;&#38656;&#35201;&#21464;&#21270;&#30340;&#35789;&#20102;&#65292;&#27604;&#22914; "<span class="quote">sheep</span>", "<span class="quote">deer</span>" &#21644; "<span class="quote">haiku</span>"&#12290;)</p><p>&#20854;&#20182;&#30340;&#35821;&#35328;&#24403;&#28982;&#23436;&#20840;&#19981;&#21516;&#12290;</p><p>&#35753;&#25105;&#20204;&#26469;&#35774;&#35745;&#19968;&#20010;&#22797;&#25968;&#21270;&#21517;&#35789;&#30340;&#27169;&#22359;&#21543;&#65281;&#20174;&#33521;&#35821;&#21517;&#35789;&#24320;&#22987;&#65292;&#20165;&#32771;&#34385;&#19978;&#38754;&#30340;&#22235;&#31181;&#35268;&#21017;&#65292;&#20294;&#26159;&#35760;&#24471;&#20320;&#23558;&#26469;&#38656;&#35201;&#19981;&#26029;&#28155;&#21152;&#35268;&#21017;&#65292;&#26356;&#21487;&#33021;&#26368;&#21518;&#28155;&#21152;&#36827;&#26356;&#22810;&#30340;&#35821;&#35328;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.stage1"></a>17.2.&nbsp;<code class="filename">plural.py</code>, &#31532; 1 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#20320;&#25152;&#38024;&#23545;&#30340;&#21333;&#35789; (&#33267;&#23569;&#22312;&#33521;&#35821;&#20013;) &#26159;&#23383;&#31526;&#20018;&#21644;&#23383;&#31526;&#12290;&#20320;&#36824;&#38656;&#35201;&#35268;&#21017;&#26469;&#25214;&#20986;&#19981;&#21516;&#30340;&#23383;&#31526; (&#23383;&#27597;) &#32452;&#21512;&#65292;&#24182;&#23545;&#23427;&#20204;&#36827;&#34892;&#19981;&#21516;&#30340;&#25805;&#20316;&#12290;&#36825;&#21548;&#36215;&#26469;&#20687;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#24037;&#20316;&#12290;</p></div><div class="example"><a name="d0e37260"></a><p class="title"><b>&#20363;&nbsp;17.1.&nbsp;<code class="filename">plural1.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re

def plural(noun):                            
    if re.search('[sxz]$', noun):             <a name="plural.stage1.1.1"></a>circled_1_delcric
        return re.sub('$', 'es', noun)        <a name="plural.stage1.1.2"></a>circled_2_delcric
    elif re.search('[^aeioudgkprt]h$', noun):
        return re.sub('$', 'es', noun)       
    elif re.search('[^aeiou]y$', noun):      
        return re.sub('y$', 'ies', noun)     
    else:                                    
        return noun + 's'                    
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage1.1.1">circled_1_delcric</a> </dt><dd>&#22909;&#21862;&#65292;&#36825;&#26159;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#20294;&#26159;&#23427;&#20351;&#29992;&#20102;&#20320;&#22312; <a class="xref" href="#re" title="&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;7&nbsp;&#31456; <i>&#27491;&#21017;&#34920;&#36798;&#24335;</i></a> &#20013;&#26410;&#26366;&#35265;&#36807;&#30340;&#35821;&#27861;&#12290;&#26041;&#25324;&#21495;&#30340;&#24847;&#24605;&#26159; "<span class="quote">&#23436;&#20840;&#21305;&#37197;&#36825;&#20123;&#23383;&#31526;&#20013;&#30340;&#19968;&#20010;</span>"&#12290;&#20063;&#23601;&#26159;&#35828;&#65292;<code class="literal">[sxz]</code> &#24847;&#21619;&#30528; "<span class="quote"><code class="literal">s</code>&#65292;&#25110;&#32773; <code class="literal">x</code>&#65292;&#20877;&#25110;&#32773; <code class="literal">z</code></span>"&#65292;&#20294;&#21482;&#26159;&#20854;&#20013;&#30340;&#19968;&#20010;&#12290;<code class="literal">$</code> &#24212;&#35813;&#19981;&#38476;&#29983;&#65292;&#23427;&#24847;&#21619;&#30528;&#21305;&#37197;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;&#20063;&#23601;&#26159;&#35828;&#65292;&#26816;&#26597; <code class="varname">noun</code> &#26159;&#21542;&#20197; <code class="literal">s</code>&#65292;<code class="literal">x</code>&#65292;&#25110;&#32773; <code class="literal">z</code> &#32467;&#23614;&#12290;</dd><dt><a href="#plural.stage1.1.2">circled_2_delcric</a> </dt><dd><code class="function">re.sub</code> &#20989;&#25968;&#36827;&#34892;&#20197;&#27491;&#21017;&#34920;&#36798;&#24335;&#20026;&#22522;&#30784;&#30340;&#26367;&#25442;&#24037;&#20316;&#12290;&#35753;&#25105;&#20204;&#26356;&#20855;&#20307;&#22320;&#30475;&#30475;&#23427;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e37312"></a><p class="title"><b>&#20363;&nbsp;17.2.&nbsp;<code class="function">re.sub</code> &#20171;&#32461;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import re</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search('[abc]', 'Mark')</span>   <a name="plural.stage1.2.1"></a>circled_1_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x001C1FA8&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('[abc]', 'o', 'Mark')</span> <a name="plural.stage1.2.2"></a>circled_2_delcric
<font color="teal">'Mork'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('[abc]', 'o', 'rock')</span> <a name="plural.stage1.2.3"></a>circled_3_delcric
<font color="teal">'rook'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('[abc]', 'o', 'caps')</span> <a name="plural.stage1.2.4"></a>circled_4_delcric
<font color="teal">'oops'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage1.2.1">circled_1_delcric</a> </dt><dd><code class="literal">Mark</code> &#21253;&#21547; <code class="literal">a</code>&#65292;<code class="literal">b</code>&#65292;&#25110;&#32773; <code class="literal">c</code>&#21527;&#65311;&#26159;&#30340;&#65292;&#21547;&#26377; <code class="literal">a</code>&#12290;</dd><dt><a href="#plural.stage1.2.2">circled_2_delcric</a> </dt><dd>&#22909;&#30340;&#65292;&#29616;&#22312;&#25214;&#20986; <code class="literal">a</code>&#65292;<code class="literal">b</code>&#65292;&#25110;&#32773; <code class="literal">c</code> &#24182;&#20197; <code class="literal">o</code> &#21462;&#20195;&#20043;&#12290;<code class="literal">Mark</code> &#23601;&#21464;&#25104; <code class="literal">Mork</code> &#20102;&#12290;</dd><dt><a href="#plural.stage1.2.3">circled_3_delcric</a> </dt><dd>&#21516;&#19968;&#26041;&#27861;&#21487;&#20197;&#23558; <code class="literal">rock</code> &#21464;&#25104; <code class="literal">rook</code>&#12290;</dd><dt><a href="#plural.stage1.2.4">circled_4_delcric</a> </dt><dd>&#20320;&#21487;&#33021;&#35748;&#20026;&#23427;&#21487;&#20197;&#23558; <code class="literal">caps</code> &#21464;&#25104; <code class="literal">oaps</code>&#65292;&#20294;&#20107;&#23454;&#24182;&#38750;&#22914;&#27492;&#12290;<code class="literal">re.sub</code> &#26367;&#25442;<span class="emphasis"><em>&#25152;&#26377;</em></span> &#30340;&#21305;&#37197;&#39033;&#65292;&#24182;&#19981;&#21482;&#26159;&#31532;&#19968;&#20010;&#21305;&#37197;&#39033;&#12290;&#22240;&#27492;&#27491;&#21017;&#34920;&#36798;&#24335;&#23558;&#20250;&#25226; <code class="literal">caps</code> &#21464;&#25104; <code class="literal">oops</code>&#65292;&#22240;&#20026; <code class="literal">c</code> &#21644; <code class="literal">a</code> &#37117;&#34987;&#36716;&#25442;&#20026; <code class="literal">o</code>&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e37442"></a><p class="title"><b>&#20363;&nbsp;17.3.&nbsp;&#22238;&#21040; <code class="filename">plural1.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re

def plural(noun):                            
    if re.search('[sxz]$', noun):            
        return re.sub('$', 'es', noun)        <a name="plural.stage1.3.1"></a>circled_1_delcric
    elif re.search('[^aeioudgkprt]h$', noun): <a name="plural.stage1.3.2"></a>circled_2_delcric
        return re.sub('$', 'es', noun)        <a name="plural.stage1.3.3"></a>circled_3_delcric
    elif re.search('[^aeiou]y$', noun):      
        return re.sub('y$', 'ies', noun)     
    else:                                    
        return noun + 's'                    
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage1.3.1">circled_1_delcric</a> </dt><dd>&#22238;&#21040; <code class="function">plural</code> &#20989;&#25968;&#12290;&#20320;&#22312;&#20570;&#20160;&#20040;&#65311;&#20320;&#22312;&#20197; <code class="literal">es</code> &#21462;&#20195;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;&#25442;&#21477;&#35805;&#35828;&#65292;&#36861;&#21152; <code class="literal">es</code> &#21040;&#23383;&#31526;&#20018;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;&#23383;&#31526;&#20018;&#25340;&#21512;&#20570;&#21040;&#30456;&#21516;&#30340;&#20107;&#65292;&#20363;&#22914; <code class="literal">noun + 'es'</code>&#65292;&#20294;&#26159;&#25105;&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#20570;&#36825;&#19968;&#20999;&#65292;&#26082;&#26159;&#20026;&#20102;&#20445;&#25345;&#19968;&#33268;&#65292;&#20063;&#26159;&#20026;&#20102;&#26412;&#31456;&#31245;&#21518;&#20320;&#20250;&#26126;&#30333;&#30340;&#20854;&#23427;&#21407;&#22240;&#12290;</dd><dt><a href="#plural.stage1.3.2">circled_2_delcric</a> </dt><dd>&#20180;&#32454;&#30475;&#30475;&#65292;&#36825;&#26159;&#21478;&#19968;&#20010;&#26032;&#30340;&#20869;&#23481;&#12290;<code class="literal">^</code> &#26159;&#26041;&#25324;&#21495;&#37324;&#38754;&#30340;&#31532;&#19968;&#20010;&#23383;&#31526;&#65292;&#36825;&#26377;&#29305;&#21035;&#30340;&#21547;&#20041;&#65306;&#21542;&#23450;&#12290;<code class="literal">[^abc]</code> &#24847;&#21619;&#30528; "<span class="quote"> &#38500; <code class="literal">a</code>&#12289; <code class="literal">b</code>&#12289; &#21644; <code class="literal">c</code> <span class="emphasis"><em>&#20197;&#22806;&#30340;</em></span> &#20219;&#24847;&#21333;&#23383;&#31526;</span>"&#12290;&#25152;&#20197;&#65292;<code class="literal">[^aeioudgkprt]</code> &#24847;&#21619;&#30528;&#38500; <code class="literal">a</code>&#12289; <code class="literal">e</code>&#12289; <code class="literal">i</code>&#12289; <code class="literal">o</code>&#12289; <code class="literal">u</code>&#12289; <code class="literal">d</code>&#12289; <code class="literal">g</code>&#12289; <code class="literal">k</code>&#12289; <code class="literal">p</code>&#12289; <code class="literal">r</code> &#21644; <code class="literal">t</code> &#20197;&#22806;&#30340;&#20219;&#24847;&#23383;&#31526;&#12290;&#36825;&#20010;&#23383;&#31526;&#20043;&#21518;&#24212;&#35813;&#36319;&#30528;&#19968;&#20010; <code class="literal">h</code>&#65292;&#28982;&#21518;&#26159;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#12290;&#20320;&#22312;&#23547;&#25214;&#30340;&#26159;&#20197;&#21457;&#38899;&#30340; H &#32467;&#23614;&#30340;&#21333;&#35789;&#12290;</dd><dt><a href="#plural.stage1.3.3">circled_3_delcric</a> </dt><dd>&#36825;&#26159;&#19968;&#20010;&#30456;&#20284;&#30340;&#34920;&#36798;&#65306;&#21305;&#37197; Y &#21069;&#38754;<span class="emphasis"><em>&#19981;&#26159;</em></span> <code class="literal">a</code>&#12289; <code class="literal">e</code>&#12289; <code class="literal">i</code>&#12289; <code class="literal">o</code> &#21644; <code class="literal">u</code>&#65292;&#24182;&#20197;&#36825;&#20010; Y &#32467;&#23614;&#30340;&#21333;&#35789;&#12290;&#20320;&#22312;&#26597;&#25214;&#30340;&#26159;&#20197;&#21457; I &#38899;&#30340; Y &#32467;&#23614;&#30340;&#21333;&#35789;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e37555"></a><p class="title"><b>&#20363;&nbsp;17.4.&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#21542;&#23450;&#30340;&#26356;&#22810;&#24212;&#29992;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import re</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search('[^aeiou]y$', 'vacancy')</span> <a name="plural.stage1.4.1"></a>circled_1_delcric
<font color="teal">&lt;_sre.SRE_Match object at 0x001C1FA8&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search('[^aeiou]y$', 'boy')</span>     <a name="plural.stage1.4.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search('[^aeiou]y$', 'day')</span>
<code class="prompt">&gt;&gt;&gt; </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.search('[^aeiou]y$', 'pita')</span>    <a name="plural.stage1.4.3"></a>circled_3_delcric
<code class="prompt">&gt;&gt;&gt; </code>
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage1.4.1">circled_1_delcric</a> </dt><dd><code class="literal">vacancy</code> &#21305;&#37197;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#22240;&#20026;&#23427;&#20197; <code class="literal">cy</code> &#32467;&#23614;&#65292;&#24182;&#19988; <code class="literal">c</code> &#19981;&#22312; <code class="literal">a</code>&#12289; <code class="literal">e</code>&#12289; <code class="literal">i</code>&#12289; <code class="literal">o</code> &#21644; <code class="literal">u</code> &#20043;&#21015;&#12290;</dd><dt><a href="#plural.stage1.4.2">circled_2_delcric</a> </dt><dd><code class="literal">boy</code> &#19981;&#33021;&#21305;&#37197;&#65292;&#22240;&#20026;&#23427;&#20197; <code class="literal">oy</code> &#32467;&#23614;&#65292;&#24182;&#19988;&#20320;&#29305;&#21035;&#25351;&#20986; <code class="literal">y</code> &#20043;&#21069;&#30340;&#23383;&#31526;&#19981;&#21487;&#20197;&#26159; <code class="literal">o</code>&#12290;<code class="literal">day</code> &#19981;&#33021;&#21305;&#37197;&#26159;&#22240;&#20026;&#20197; <code class="literal">ay</code> &#32467;&#23614;&#12290;</dd><dt><a href="#plural.stage1.4.3">circled_3_delcric</a> </dt><dd><code class="literal">pita</code> &#19981;&#21305;&#37197;&#26159;&#22240;&#20026;&#19981;&#20197; <code class="literal">y</code> &#32467;&#23614;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e37658"></a><p class="title"><b>&#20363;&nbsp;17.5.&nbsp;&#26356;&#22810;&#30340; <code class="function">re.sub</code></b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('y$', 'ies', 'vacancy')</span>              <a name="plural.stage1.5.1"></a>circled_1_delcric
<font color="teal">'vacancies'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('y$', 'ies', 'agency')</span>
<font color="teal">'agencies'</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">re.sub('([^aeiou])y$', r'\1ies', 'vacancy')</span> <a name="plural.stage1.5.2"></a>circled_2_delcric
<font color="teal">'vacancies'</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage1.5.1">circled_1_delcric</a> </dt><dd>&#27491;&#21017;&#34920;&#36798;&#24335;&#25226; <code class="literal">vacancy</code> &#21464;&#20026; <code class="literal">vacancies</code>&#65292;&#25226; <code class="literal">agency</code> &#21464;&#20026; <code class="literal">agencies</code>&#65292;&#36825;&#27491;&#26159;&#20320;&#24819;&#35201;&#30340;&#12290;&#27880;&#24847;&#65292;&#23558; <code class="literal">boy</code> &#21464;&#25104; <code class="literal">boies</code> &#26159;&#21487;&#34892;&#30340;&#65292;&#20294;&#26159;&#27704;&#36828;&#19981;&#20250;&#21457;&#29983;&#65292;&#22240;&#20026; <code class="function">re.search</code> &#39318;&#20808;&#30830;&#23450;&#26159;&#21542;&#24212;&#35813;&#24212;&#29992; <code class="function">re.sub</code>&#12290;</dd><dt><a href="#plural.stage1.5.2">circled_2_delcric</a> </dt><dd>&#39034;&#20415;&#25552;&#19968;&#19979;&#65292;&#21487;&#20197;&#23558;&#20004;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335; (&#19968;&#20010;&#30830;&#23450;&#35268;&#21017;&#36866;&#29992;&#19982;&#21542;&#65292;&#19968;&#20010;&#24212;&#29992;&#35268;&#21017;) &#21512;&#24182;&#22312;&#19968;&#36215;&#25104;&#20026;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#36825;&#20415;&#26159;&#21512;&#24182;&#21518;&#30340;&#26679;&#23376;&#12290;&#23427;&#30340;&#22823;&#37096;&#20998;&#24050;&#32463;&#24456;&#29087;&#24713;&#65306;&#20320;&#24212;&#29992;&#30340;&#26159;&#22312; <a class="xref" href="#re.phone" title="7.6.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;">&#31532;&nbsp;7.6&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;&#8221;</a> &#23398;&#36807;&#30340;&#35760;&#24518;&#32452; (remembered group) &#35760;&#20303; <code class="literal">y</code> &#20043;&#21069;&#30340;&#23383;&#31526;&#12290;&#28982;&#21518;&#20877;&#26367;&#25442;&#23383;&#31526;&#20018;&#65292;&#20320;&#20351;&#29992;&#19968;&#20010;&#26032;&#30340;&#35821;&#27861; <code class="literal">\1</code>&#65292;&#36825;&#24847;&#21619;&#30528;&#65306;"<span class="quote">&#22079;&#65281;&#35760;&#24471;&#21069;&#38754;&#30340;&#31532;&#19968;&#20010;&#32452;&#21527;&#65311;&#25226;&#23427;&#25918;&#36825;&#20799;</span>"&#12290;&#23601;&#27492;&#32780;&#35328;&#65292;&#35760;&#20303;&#20102; <code class="literal">y</code> &#20043;&#21069;&#30340; <code class="literal">c</code> &#65292;&#28982;&#21518;&#20320;&#20570;&#26367;&#25442;&#24037;&#20316;&#65292;&#20320;&#23558; <code class="literal">c</code> &#26367;&#25442;&#21040; <code class="literal">c</code> &#30340;&#20301;&#32622;&#65292;&#24182;&#23558; <code class="literal">ies</code> &#26367;&#25442;&#21040; <code class="literal">y</code> &#30340;&#20301;&#32622;&#12290;(&#22914;&#26524;&#20320;&#26377;&#19981;&#27490;&#19968;&#20010;&#32452;&#21017;&#21487;&#20197;&#20351;&#29992; <code class="literal">\2</code> &#25110;&#32773; <code class="literal">\3</code> &#31561;&#31561;&#12290;)</dd></dl></div></div></div><br class="example-break"><p>&#27491;&#21017;&#34920;&#36798;&#24335;&#26367;&#25442;&#38750;&#24120;&#24378;&#22823;&#65292;&#24182;&#19988; <code class="literal">\1</code> &#35821;&#27861;&#20351;&#20043;&#26356;&#21152;&#24378;&#22823;&#12290;&#20294;&#26159;&#23558;&#25972;&#20010;&#25805;&#20316;&#25918;&#22312;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#20173;&#28982;&#26214;&#28073;&#38590;&#25026;&#65292;&#20063;&#19981;&#33021;&#19982;&#21069;&#38754;&#25551;&#36848;&#30340;&#22797;&#25968;&#35268;&#21017;&#30452;&#25509;&#21628;&#24212;&#12290;&#20320;&#21407;&#26469;&#21015;&#20986;&#30340;&#35268;&#21017;&#65292;&#27604;&#22914; "<span class="quote">&#22914;&#26524;&#21333;&#35789;&#20197; S&#65292;X &#25110;&#32773; Z &#32467;&#23614;&#65292;&#32467;&#23614;&#36861;&#21152; ES</span>"&#12290;&#22914;&#26524;&#20320;&#22312;&#20989;&#25968;&#20013;&#30475;&#21040;&#20004;&#34892;&#20195;&#30721;&#25551;&#36848; "<span class="quote">&#22914;&#26524;&#21333;&#35789;&#20197; S&#65292;X &#25110;&#32773; Z &#32467;&#23614;&#65292;&#32467;&#23614;&#36861;&#21152; ES</span>"&#65292;&#26356;&#21152;&#30452;&#35266;&#20123;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.stage2"></a>17.3.&nbsp;<code class="filename">plural.py</code>, &#31532; 2 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312;&#20320;&#23558;&#22686;&#21152;&#19968;&#20010;&#25277;&#35937;&#36807;&#31243;&#12290;&#20320;&#20174;&#23450;&#20041;&#19968;&#20010;&#35268;&#21017;&#21015;&#34920;&#24320;&#22987;&#65306;&#22914;&#26524;&#36825;&#26679;&#65292;&#23601;&#20570;&#37027;&#20010;&#65292;&#21542;&#21017;&#21028;&#26029;&#19979;&#19968;&#35268;&#21017;&#12290;&#35753;&#25105;&#20204;&#26242;&#26102;&#23558;&#31243;&#24207;&#19968;&#37096;&#20998;&#22797;&#26434;&#21270;&#20197;&#20415;&#20351;&#21478;&#19968;&#37096;&#20998;&#31616;&#21333;&#21270;&#12290;</p></div><div class="example"><a name="d0e37780"></a><p class="title"><b>&#20363;&nbsp;17.6.&nbsp;<code class="filename">plural2.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re

def match_sxz(noun):                          
    return re.search('[sxz]$', noun)          

def apply_sxz(noun):                          
    return re.sub('$', 'es', noun)            

def match_h(noun):                            
    return re.search('[^aeioudgkprt]h$', noun)

def apply_h(noun):                            
    return re.sub('$', 'es', noun)            

def match_y(noun):                            
    return re.search('[^aeiou]y$', noun)      
        
def apply_y(noun):                            
    return re.sub('y$', 'ies', noun)          

def match_default(noun):                      
    return 1                                  
        
def apply_default(noun):                      
    return noun + 's'                         

rules = ((match_sxz, apply_sxz),
         (match_h, apply_h),
         (match_y, apply_y),
         (match_default, apply_default)
         )                                     <a name="plural.stage2.1.1"></a>circled_1_delcric

def plural(noun):                             
    for matchesRule, applyRule in rules:       <a name="plural.stage2.1.2"></a>circled_2_delcric
        if matchesRule(noun):                  <a name="plural.stage2.1.3"></a>circled_3_delcric
            return applyRule(noun)             <a name="plural.stage2.1.4"></a>circled_4_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage2.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#20010;&#29256;&#26412;&#30475;&#36215;&#26469;&#26356;&#21152;&#22797;&#26434; (&#33267;&#23569;&#26159;&#38271;&#20102;)&#65292;&#20294;&#20570;&#30340;&#24037;&#20316;&#27809;&#26377;&#21464;&#21270;&#65306;&#35797;&#22270;&#39034;&#24207;&#21305;&#37197;&#22235;&#31181;&#19981;&#21516;&#35268;&#21017;&#65292;&#24182;&#22312;&#21305;&#37197;&#26102;&#24212;&#29992;&#24688;&#24403;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#19981;&#21516;&#20043;&#22788;&#22312;&#20110;&#65292;&#27599;&#20010;&#29420;&#31435;&#30340;&#21305;&#37197;&#21644;&#24212;&#29992;&#35268;&#21017;&#37117;&#22312;&#33258;&#24049;&#30340;&#20989;&#25968;&#20013;&#23450;&#20041;&#65292;&#24182;&#19988;&#36825;&#20123;&#20989;&#25968;&#21015;&#20110; <code class="varname">rules</code> &#21464;&#37327;&#36825;&#20010;&#20803;&#32452;&#30340;&#20803;&#32452;&#20043;&#20013;&#12290;</dd><dt><a href="#plural.stage2.1.2">circled_2_delcric</a> </dt><dd>&#20351;&#29992;&#19968;&#20010; <code class="literal">for</code> &#24490;&#29615;&#65292;&#20320;&#21487;&#20197;&#26681;&#25454; <code class="varname">rules</code> &#20803;&#32452;&#19968;&#27425;&#24615;&#36827;&#34892;&#21305;&#37197;&#21644;&#24212;&#29992;&#35268;&#21017;&#20004;&#39033;&#24037;&#20316; (&#19968;&#20010;&#21305;&#37197;&#21644;&#19968;&#20010;&#24212;&#29992;)&#12290;<code class="literal">for</code> &#24490;&#29615;&#31532;&#19968;&#36718;&#20013;&#65292;<code class="varname">matchesRule</code> &#23558;&#20351;&#29992; <code class="function">match_sxz</code>&#65292;<code class="varname">applyRule</code> &#23558;&#20351;&#29992; <code class="function">apply_sxz</code>&#65307;&#22312;&#31532;&#20108;&#36718;&#20013; (&#20551;&#35774;&#30495;&#36208;&#21040;&#20102;&#36825;&#20040;&#36828;)&#65292;<code class="varname">matchesRule</code> &#23558;&#34987;&#36171;&#20104; <code class="function">match_h</code>&#65292;<code class="varname">applyRule</code> &#23558;&#34987;&#36171;&#20104; <code class="function">apply_h</code>&#12290;</dd><dt><a href="#plural.stage2.1.3">circled_3_delcric</a> </dt><dd>&#35760;&#20303; <a class="link" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;"><span class="application">Python</span> &#20013;&#30340;&#19968;&#20999;&#37117;&#26159;&#23545;&#35937;</a>&#65292;&#21253;&#25324;&#20989;&#25968;&#12290;<code class="varname">rules</code> &#21253;&#21547;&#20989;&#25968;&#65307;&#19981;&#26159;&#25351;&#20989;&#25968;&#21517;&#65292;&#32780;&#26159;&#25351;&#20989;&#25968;&#26412;&#36523;&#12290;&#24403; <code class="varname">matchesRule</code> &#21644; <code class="varname">applyRule</code> &#22312; <code class="literal">for</code> &#24490;&#29615;&#20013;&#34987;&#36171;&#20540;&#21518;&#65292;&#23427;&#20204;&#23601;&#25104;&#20102;&#20320;&#21487;&#20197;&#35843;&#29992;&#30340;&#30495;&#27491;&#20989;&#25968;&#12290;&#22240;&#27492;&#65292;&#22312; <code class="literal">for</code> &#24490;&#29615;&#31532;&#19968;&#36718;&#20013;&#65292;&#36825;&#23601;&#30456;&#24403;&#20110;&#35843;&#29992; <code class="function">matches_sxz(noun)</code>&#12290;</dd><dt><a href="#plural.stage2.1.4">circled_4_delcric</a> </dt><dd>&#22312; <code class="literal">for</code> &#24490;&#29615;&#31532;&#19968;&#36718;&#20013;&#65292;&#36825;&#23601;&#30456;&#24403;&#20110;&#35843;&#29992; <code class="function">apply_sxz(noun)</code>&#65292;&#31561;&#31561;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#20010;&#25277;&#35937;&#36807;&#31243;&#26377;&#20123;&#20196;&#20154;&#36855;&#24785;&#65292;&#35797;&#30528;&#21078;&#26512;&#20989;&#25968;&#30475;&#30475;&#23454;&#38469;&#30340;&#31561;&#20215;&#20869;&#23481;&#12290;&#36825;&#20010; <code class="literal">for</code> &#24490;&#29615;&#30456;&#24403;&#20110;&#65306;</p><div class="example"><a name="d0e37877"></a><p class="title"><b>&#20363;&nbsp;17.7.&nbsp;&#21078;&#26512; <code class="function">plural</code> &#20989;&#25968;</b></p><div class="example-contents"><pre class="programlisting">
def plural(noun):
    if match_sxz(noun):
        return apply_sxz(noun)
    if match_h(noun):
        return apply_h(noun)
    if match_y(noun):
        return apply_y(noun)
    if match_default(noun):
        return apply_default(noun)
</pre></div></div><br class="example-break"><p>&#36825;&#37324;&#30340;&#22909;&#22788;&#22312;&#20110; <code class="function">plural</code> &#20989;&#25968;&#29616;&#22312;&#34987;&#31616;&#21270;&#20102;&#12290;&#23427;&#20197;&#26222;&#36890;&#30340;&#26041;&#27861;&#21453;&#22797;&#20351;&#29992;&#20854;&#23427;&#22320;&#26041;&#23450;&#20041;&#30340;&#35268;&#21017;&#12290;&#33719;&#24471;&#19968;&#20010;&#21305;&#37197;&#35268;&#21017;&#65292;&#21305;&#37197;&#21527;&#65311;&#35843;&#29992;&#24182;&#24212;&#29992;&#35268;&#21017;&#12290;&#35268;&#21017;&#21487;&#20197;&#22312;&#20219;&#24847;&#22320;&#26041;&#20197;&#20219;&#24847;&#26041;&#27861;&#23450;&#20041;&#65292;<code class="function">plural</code> &#20989;&#25968;&#23545;&#27492;&#24182;&#19981;&#20851;&#24515;&#12290;</p><p>&#29616;&#22312;&#65292;&#28155;&#21152;&#36825;&#20010;&#25277;&#35937;&#36807;&#31243;&#20540;&#24471;&#21527;&#65311;&#21999;&#8230;&#8230;&#36824;&#19981;&#20540;&#12290;&#35753;&#25105;&#20204;&#30475;&#30475;&#22914;&#20309;&#21521;&#20989;&#25968;&#28155;&#21152;&#19968;&#20010;&#26032;&#30340;&#35268;&#21017;&#12290;&#21834;&#21704;&#65292;&#22312;&#20808;&#21069;&#30340;&#33539;&#20363;&#20013;&#65292;&#38656;&#35201;&#21521; <code class="function">plural</code> &#20989;&#25968;&#28155;&#21152;&#19968;&#20010; <code class="literal">if</code> &#35821;&#21477;&#65307;&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#38656;&#35201;&#22686;&#21152;&#20004;&#20010;&#20989;&#25968;&#65306;<code class="function">match_foo</code> &#21644; <code class="function">apply_foo</code>&#65292;&#28982;&#21518;&#26356;&#26032; <code class="varname">rules</code> &#21015;&#34920;&#25351;&#23450;&#22312;&#20160;&#20040;&#30456;&#23545;&#20301;&#32622;&#35843;&#29992;&#36825;&#20010;&#26032;&#21305;&#37197;&#21644;&#26032;&#35268;&#21017;&#24212;&#29992;&#12290;</p><p>&#36825;&#20854;&#23454;&#19981;&#36807;&#26159;&#27493;&#20837;&#19979;&#19968;&#33410;&#30340;&#19968;&#20010;&#22522;&#30707;&#12290;&#35753;&#25105;&#20204;&#32487;&#32493;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.stage3"></a>17.4.&nbsp;<code class="filename">plural.py</code>, &#31532; 3 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#23558;&#27599;&#20010;&#21305;&#37197;&#21644;&#35268;&#21017;&#24212;&#29992;&#20998;&#21035;&#21046;&#20316;&#25104;&#20989;&#25968;&#27809;&#26377;&#24517;&#35201;&#12290;&#20320;&#20174;&#26469;&#19981;&#20250;&#30452;&#25509;&#35843;&#29992;&#23427;&#20204;&#65306;&#20320;&#25226;&#23427;&#20204;&#23450;&#20041;&#20110; <code class="varname">rules</code> &#21015;&#34920;&#20043;&#20013;&#24182;&#20174;&#37027;&#37324;&#35843;&#29992;&#23427;&#20204;&#12290;&#35753;&#25105;&#20204;&#38544;&#21435;&#23427;&#20204;&#30340;&#20989;&#25968;&#21517;&#32780;&#25235;&#20303;&#35268;&#21017;&#23450;&#20041;&#30340;&#20027;&#32447;&#12290;</p></div><div class="example"><a name="d0e37925"></a><p class="title"><b>&#20363;&nbsp;17.8.&nbsp;<code class="filename">plural3.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re

rules = \
  (
    (
     lambda word: re.search('[sxz]$', word),
     lambda word: re.sub('$', 'es', word)
    ),
    (
     lambda word: re.search('[^aeioudgkprt]h$', word),
     lambda word: re.sub('$', 'es', word)
    ),
    (
     lambda word: re.search('[^aeiou]y$', word),
     lambda word: re.sub('y$', 'ies', word)
    ),
    (
     lambda word: re.search('$', word),
     lambda word: re.sub('$', 's', word)
    )
   )                                           <a name="plural.stage3.1.1"></a>circled_1_delcric

def plural(noun):                             
    for matchesRule, applyRule in rules:       <a name="plural.stage3.1.2"></a>circled_2_delcric
        if matchesRule(noun):                 
            return applyRule(noun)            
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage3.1.1">circled_1_delcric</a> </dt><dd>&#36825;&#19982;&#31532; 2 &#38454;&#27573;&#23450;&#20041;&#30340;&#35268;&#21017;&#26159;&#19968;&#26679;&#30340;&#12290;&#24799;&#19968;&#30340;&#21306;&#21035;&#26159;&#19981;&#20877;&#23450;&#20041; <code class="function">match_sxz</code> &#21644; <code class="function">apply_sxz</code> &#20043;&#31867;&#30340;&#20989;&#25968;&#65292;&#32780;&#26159;&#20197; <a class="link" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;">lambda &#20989;&#25968;</a> &#27861;&#23558;&#36825;&#20123;&#20989;&#25968;&#30340;&#20869;&#23481;&#30452;&#25509; "<span class="quote">&#23884;&#20837;</span>" <code class="varname">rules</code> &#21015;&#34920;&#26412;&#36523;&#12290;</dd><dt><a href="#plural.stage3.1.2">circled_2_delcric</a> </dt><dd>&#27880;&#24847; <code class="function">plural</code> &#20989;&#25968;&#23436;&#20840;&#27809;&#26377;&#21464;&#21270;&#65292;&#36824;&#26159;&#21453;&#22797;&#20110;&#19968;&#31995;&#21015;&#30340;&#35268;&#21017;&#20989;&#25968;&#65292;&#26816;&#26597;&#31532;&#19968;&#20010;&#21305;&#37197;&#35268;&#21017;&#65292;&#22914;&#26524;&#36820;&#22238;&#30495;&#21017;&#35843;&#29992;&#31532;&#20108;&#20010;&#24212;&#29992;&#35268;&#21017;&#24182;&#36820;&#22238;&#20540;&#12290;&#21644;&#21069;&#38754;&#19968;&#26679;&#65292;&#32473;&#23450;&#21333;&#35789;&#36820;&#22238;&#21333;&#35789;&#12290;&#21807;&#19968;&#30340;&#21306;&#21035;&#26159;&#35268;&#21017;&#20989;&#25968;&#34987;&#20869;&#23884;&#23450;&#20041;&#65292;&#21270;&#21517;&#20316; lambda &#20989;&#25968;&#12290;&#20294;&#26159; <code class="function">plural</code> &#20989;&#25968;&#24182;&#19981;&#22312;&#20046;&#23427;&#20204;&#26159;&#22914;&#20309;&#23450;&#20041;&#30340;&#65292;&#21482;&#26159;&#25343;&#21040;&#35268;&#21017;&#21015;&#34920;&#65292;&#38381;&#30528;&#30524;&#30555;&#24178;&#27963;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#29616;&#22312;&#28155;&#21152;&#19968;&#26465;&#26032;&#30340;&#35268;&#21017;&#65292;&#25152;&#26377;&#20320;&#35201;&#20570;&#30340;&#23601;&#26159;&#30452;&#25509;&#22312; <code class="varname">rules</code> &#21015;&#34920;&#20043;&#20013;&#23450;&#20041;&#20989;&#25968;&#65306;&#19968;&#20010;&#21305;&#37197;&#35268;&#21017;&#65292;&#19968;&#20010;&#24212;&#29992;&#35268;&#21017;&#12290;&#36825;&#26679;&#20869;&#23884;&#30340;&#35268;&#21017;&#20989;&#25968;&#23450;&#20041;&#26041;&#27861;&#20351;&#24471;&#27809;&#24517;&#35201;&#30340;&#37325;&#22797;&#24456;&#23481;&#26131;&#34987;&#21457;&#29616;&#12290;&#20320;&#26377;&#22235;&#23545;&#20989;&#25968;&#65292;&#23427;&#20204;&#37319;&#29992;&#30456;&#21516;&#30340;&#27169;&#24335;&#12290;&#21305;&#37197;&#20989;&#25968;&#23601;&#26159;&#35843;&#29992; <code class="function">re.search</code>&#65292;&#24212;&#29992;&#20989;&#25968;&#23601;&#26159;&#35843;&#29992; <code class="function">re.sub</code>&#12290;&#35753;&#25105;&#20204;&#25552;&#28860;&#20986;&#36825;&#20123;&#20849;&#21516;&#28857;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.stage4"></a>17.5.&nbsp;<code class="filename">plural.py</code>, &#31532; 4 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#35753;&#25105;&#20204;&#31934;&#28860;&#20986;&#20195;&#30721;&#20013;&#30340;&#37325;&#22797;&#20043;&#22788;&#65292;&#20197;&#20415;&#26356;&#23481;&#26131;&#22320;&#23450;&#20041;&#26032;&#35268;&#21017;&#12290;</p></div><div class="example"><a name="plural.stage4.example.1"></a><p class="title"><b>&#20363;&nbsp;17.9.&nbsp;<code class="filename">plural4.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re

def buildMatchAndApplyFunctions((pattern, search, replace)):  
    matchFunction = lambda word: re.search(pattern, word)      <a name="plural.stage4.1.1"></a>circled_1_delcric
    applyFunction = lambda word: re.sub(search, replace, word) <a name="plural.stage4.1.2"></a>circled_2_delcric
    return (matchFunction, applyFunction)                      <a name="plural.stage4.1.3"></a>circled_3_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage4.1.1">circled_1_delcric</a> </dt><dd><code class="function">buildMatchAndApplyFunctions</code> &#26159;&#19968;&#20010;&#21160;&#24577;&#29983;&#25104;&#20854;&#23427;&#20989;&#25968;&#30340;&#20989;&#25968;&#12290;&#23427;&#23558; <code class="varname">pattern</code>&#65292;<code class="varname">search</code> &#21644; <code class="varname">replace</code> (&#23454;&#38469;&#19978;&#26159;&#19968;&#20010;&#20803;&#32452;&#65292;&#25105;&#20204;&#24456;&#24555;&#23601;&#20250;&#25552;&#21040;&#36825;&#19968;&#28857;)&#65292;&#36890;&#36807;&#20351;&#29992; <code class="literal">lambda</code> &#35821;&#27861;&#26500;&#24314;&#19968;&#20010;&#25509;&#21463;&#21333;&#21442;&#25968; (<code class="varname">word</code>) &#24182;&#20197;&#20256;&#36882;&#32473; <code class="function">buildMatchAndApplyFunctions</code> &#30340; <code class="varname">pattern</code> &#21644;&#20256;&#36882;&#32473;&#26032;&#20989;&#25968;&#30340; <code class="varname">word</code> &#35843;&#29992; <code class="function">re.search</code> &#30340;&#21305;&#37197;&#20989;&#25968;&#65281;&#21703;&#22622;&#65281;</dd><dt><a href="#plural.stage4.1.2">circled_2_delcric</a> </dt><dd>&#26500;&#24314;&#24212;&#29992;&#35268;&#21017;&#20989;&#25968;&#30340;&#26041;&#27861;&#30456;&#21516;&#12290;&#24212;&#29992;&#35268;&#21017;&#20989;&#25968;&#26159;&#19968;&#20010;&#25509;&#21463;&#21333;&#21442;&#25968;&#24182;&#20197;&#20256;&#36882;&#32473; <code class="function">buildMatchAndApplyFunctions</code> &#30340; <code class="varname">search</code> &#21644; <code class="varname">replace</code> &#20197;&#21450;&#20256;&#36882;&#32473;&#36825;&#20010;&#24212;&#29992;&#35268;&#21017;&#20989;&#25968;&#30340; <code class="varname">word</code> &#35843;&#29992; <code class="function">re.sub</code> &#30340;&#20989;&#25968;&#12290;&#22312;&#19968;&#20010;&#21160;&#24577;&#20989;&#25968;&#20013;&#24212;&#29992;&#22806;&#37096;&#21442;&#25968;&#20540;&#30340;&#25216;&#26415;&#34987;&#31216;&#20316;<span class="emphasis"><em>&#38381;&#21512; (closures)</em></span>&#12290;&#20320;&#23454;&#38469;&#19978;&#26159;&#22312;&#24212;&#29992;&#35268;&#21017;&#20989;&#25968;&#20013;&#23450;&#20041;&#24120;&#37327;&#65306;&#23427;&#21482;&#25509;&#21463;&#19968;&#20010;&#21442;&#25968; (<code class="varname">word</code>)&#65292;&#20294;&#29992;&#21040;&#20102;&#23450;&#20041;&#26102;&#35774;&#32622;&#30340;&#20004;&#20010;&#20540; (<code class="varname">search</code> &#21644; <code class="varname">replace</code>)&#12290;</dd><dt><a href="#plural.stage4.1.3">circled_3_delcric</a> </dt><dd>&#26368;&#32456;&#65292;<code class="function">buildMatchAndApplyFunctions</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#21253;&#21547;&#20004;&#20010;&#20540;&#30340;&#20803;&#32452;&#65306;&#20320;&#21018;&#21018;&#21019;&#24314;&#30340;&#20004;&#20010;&#20989;&#25968;&#12290;&#20320;&#22312;&#36825;&#20123;&#20989;&#25968;&#20013;&#23450;&#20041;&#30340;&#24120;&#37327; (<code class="varname">matchFunction</code> &#20013;&#30340; <code class="varname">pattern</code> &#20197;&#21450; <code class="varname">applyFunction</code> &#20013;&#30340; <code class="varname">search</code> &#21644; <code class="varname">replace</code>) &#20445;&#30041;&#22312;&#36825;&#20123;&#20989;&#25968;&#20013;&#65292;&#30001; <code class="function">buildMatchAndApplyFunctions</code> &#19968;&#21516;&#36820;&#22238;&#12290;&#36825;&#31616;&#30452;&#22826;&#37239;&#20102;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22914;&#26524;&#36825;&#22826;&#36153;&#35299; (&#23427;&#24212;&#35813;&#26159;&#36825;&#26679;&#65292;&#36825;&#26159;&#20010;&#24618;&#24322;&#30340;&#19996;&#35199;)&#65292;&#21487;&#33021;&#38656;&#35201;&#36890;&#36807;&#20102;&#35299;&#23427;&#30340;&#20351;&#29992;&#26469;&#25630;&#26126;&#30333;&#12290;</p><div class="example"><a name="d0e38085"></a><p class="title"><b>&#20363;&nbsp;17.10.&nbsp;<code class="filename">plural4.py</code> &#32487;&#32493;</b></p><div class="example-contents"><pre class="programlisting">
patterns = \
  (
    ('[sxz]$', '$', 'es'),
    ('[^aeioudgkprt]h$', '$', 'es'),
    ('(qu|[^aeiou])y$', 'y$', 'ies'),
    ('$', '$', 's')
  )                                                 <a name="plural.stage4.2.1"></a>circled_1_delcric
rules = map(buildMatchAndApplyFunctions, patterns)  <a name="plural.stage4.2.2"></a>circled_2_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage4.2.1">circled_1_delcric</a> </dt><dd>&#25105;&#20204;&#30340;&#22797;&#25968;&#21270;&#35268;&#21017;&#29616;&#22312;&#34987;&#23450;&#20041;&#25104;&#19968;&#32452;&#23383;&#31526;&#20018; (&#19981;&#26159;&#20989;&#25968;)&#12290;&#31532;&#19968;&#20010;&#23383;&#31526;&#20018;&#26159;&#20320;&#22312;&#35843;&#29992; <code class="function">re.search</code> &#26102;&#20351;&#29992;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#65307;&#31532;&#20108;&#20010;&#21644;&#31532;&#19977;&#20010;&#23383;&#31526;&#20018;&#26159;&#20320;&#22312;&#36890;&#36807;&#35843;&#29992; <code class="function">re.sub</code> &#26469;&#24212;&#29992;&#35268;&#21017;&#23558;&#21517;&#35789;&#21464;&#20026;&#22797;&#25968;&#26102;&#20351;&#29992;&#30340;&#25628;&#32034;&#21644;&#26367;&#25442;&#34920;&#36798;&#24335;&#12290;</dd><dt><a href="#plural.stage4.2.2">circled_2_delcric</a> </dt><dd>&#36825;&#24456;&#31070;&#22855;&#12290;&#25226;&#20256;&#36827;&#21435;&#30340; <code class="varname">patterns</code> &#23383;&#31526;&#20018;&#36716;&#25442;&#20026;&#20256;&#22238;&#26469;&#30340;&#20989;&#25968;&#12290;&#22914;&#20309;&#20570;&#21040;&#30340;&#21602;&#65311;&#23558;&#36825;&#20123;&#23383;&#31526;&#20018;&#26144;&#23556;&#32473; <code class="function">buildMatchAndApplyFunctions</code> &#20989;&#25968;&#20043;&#21518;&#65292;&#19977;&#20010;&#23383;&#31526;&#20018;&#21442;&#25968;&#36716;&#25442;&#25104;&#20102;&#20004;&#20010;&#20989;&#25968;&#32452;&#25104;&#30340;&#20803;&#32452;&#12290;&#36825;&#24847;&#21619;&#30528; <code class="varname">rules</code> &#34987;&#36716;&#25442;&#25104;&#20102;&#21069;&#38754;&#33539;&#20363;&#20013;&#30456;&#21516;&#30340;&#20869;&#23481;&#65306;&#30001;&#35768;&#22810;&#35843;&#29992; <code class="function">re.search</code> &#20989;&#25968;&#30340;&#21305;&#37197;&#20989;&#25968;&#21644;&#35843;&#29992; <code class="function">re.sub</code> &#30340;&#35268;&#21017;&#24212;&#29992;&#20989;&#25968;&#26500;&#25104;&#30340;&#20989;&#25968;&#32452;&#32452;&#25104;&#30340;&#19968;&#20010;&#20803;&#32452;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#25105;&#21457;&#35475;&#36825;&#19981;&#26159;&#25105;&#20449;&#21475;&#38604;&#40644;&#65306;<code class="varname">rules</code> &#34987;&#36716;&#25442;&#25104;&#20102;&#21069;&#38754;&#33539;&#20363;&#20013;&#30456;&#21516;&#30340;&#20869;&#23481;&#12290;&#21078;&#26512; <code class="varname">rules</code> &#30340;&#23450;&#20041;&#65292;&#20320;&#30475;&#21040;&#30340;&#26159;&#65306;</p><div class="example"><a name="d0e38132"></a><p class="title"><b>&#20363;&nbsp;17.11.&nbsp;&#21078;&#26512;&#35268;&#21017;&#23450;&#20041;</b></p><div class="example-contents"><pre class="programlisting">
rules = \
  (
    (
     lambda word: re.search('[sxz]$', word),
     lambda word: re.sub('$', 'es', word)
    ),
    (
     lambda word: re.search('[^aeioudgkprt]h$', word),
     lambda word: re.sub('$', 'es', word)
    ),
    (
     lambda word: re.search('[^aeiou]y$', word),
     lambda word: re.sub('y$', 'ies', word)
    ),
    (
     lambda word: re.search('$', word),
     lambda word: re.sub('$', 's', word)
    )
   )                                          
</pre></div></div><br class="example-break"><div class="example"><a name="plural.finishing.up"></a><p class="title"><b>&#20363;&nbsp;17.12.&nbsp;<code class="filename">plural4.py</code> &#30340;&#23436;&#25104;</b></p><div class="example-contents"><pre class="programlisting">
def plural(noun):                                  
    for matchesRule, applyRule in rules:            <a name="plural.stage4.3.1"></a>circled_1_delcric
        if matchesRule(noun):                      
            return applyRule(noun)                 
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage4.3.1">circled_1_delcric</a> </dt><dd>&#30001;&#20110; <code class="varname">rules</code> &#21015;&#34920;&#21644;&#21069;&#38754;&#30340;&#33539;&#20363;&#26159;&#30456;&#21516;&#30340;&#65292;<code class="function">plural</code> &#20989;&#25968;&#27809;&#26377;&#21464;&#21270;&#20063;&#23601;&#19981;&#20196;&#20154;&#35815;&#24322;&#20102;&#12290;&#35760;&#20303;&#65292;&#36825;&#27809;&#20160;&#20040;&#29305;&#21035;&#30340;&#65292;&#25353;&#29031;&#39034;&#24207;&#35843;&#29992;&#19968;&#31995;&#21015;&#20989;&#25968;&#12290;&#19981;&#24517;&#22312;&#24847;&#35268;&#21017;&#26159;&#22914;&#20309;&#23450;&#20041;&#30340;&#12290;&#22312;<a class="link" href="#plural.stage2" title="17.3.&nbsp;plural.py, &#31532; 2 &#38454;&#27573;">&#31532; 2 &#38454;&#27573;</a>&#65292;&#23427;&#20204;&#34987;&#23450;&#20041;&#20026;&#21508;&#20855;&#21517;&#31216;&#30340;&#20989;&#25968;&#12290;&#22312;<a class="link" href="#plural.stage3" title="17.4.&nbsp;plural.py, &#31532; 3 &#38454;&#27573;">&#31532; 3 &#38454;&#27573;</a>&#65292;&#20182;&#20204;&#34987;&#23450;&#20041;&#20026;&#21311;&#21517;&#30340; <code class="literal">lambda</code> &#20989;&#25968;&#12290;&#29616;&#22312;&#31532; 4 &#38454;&#27573;&#65292;&#23427;&#20204;&#36890;&#36807; <code class="function">buildMatchAndApplyFunctions</code> &#26144;&#23556;&#21407;&#22987;&#30340;&#23383;&#31526;&#20018;&#21015;&#34920;&#34987;&#21160;&#24577;&#21019;&#24314;&#12290;&#26080;&#25152;&#35859;&#65292;<code class="function">plural</code> &#20989;&#25968;&#30340;&#24037;&#20316;&#26041;&#27861;&#27809;&#26377;&#21464;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36824;&#19981;&#22815;&#20852;&#22859;&#21543;&#65281;&#25105;&#24517;&#39035;&#25215;&#35748;&#65292;&#22312;&#23450;&#20041; <code class="function">buildMatchAndApplyFunctions</code> &#26102;&#25105;&#36339;&#36807;&#20102;&#19968;&#20010;&#24494;&#22937;&#20043;&#22788;&#12290;&#35753;&#25105;&#20204;&#22238;&#36807;&#22836;&#20877;&#30475;&#19968;&#19979;&#12290;</p><div class="example"><a name="d0e38176"></a><p class="title"><b>&#20363;&nbsp;17.13.&nbsp;&#22238;&#22836;&#30475; <code class="function">buildMatchAndApplyFunctions</code></b></p><div class="example-contents"><pre class="programlisting">
def buildMatchAndApplyFunctions((pattern, search, replace)):   <a name="plural.stage4.4.1"></a>circled_1_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage4.4.1">circled_1_delcric</a> </dt><dd>&#27880;&#24847;&#21040;&#21452;&#25324;&#21495;&#20102;&#21527;&#65311;&#36825;&#20010;&#20989;&#25968;&#24182;&#19981;&#26159;&#30495;&#30340;&#25509;&#21463;&#19977;&#20010;&#21442;&#25968;&#65292;&#23454;&#38469;&#19978;&#21482;&#25509;&#21463;&#19968;&#20010;&#21442;&#25968;&#65306;&#19968;&#20010;&#19977;&#20803;&#32032;&#20803;&#32452;&#12290;&#20294;&#26159;&#22312;&#20989;&#25968;&#34987;&#35843;&#29992;&#26102;&#20803;&#32452;&#34987;&#23637;&#24320;&#20102;&#65292;&#20803;&#32452;&#30340;&#19977;&#20010;&#20803;&#32032;&#20063;&#34987;&#36171;&#20104;&#20102;&#19981;&#21516;&#30340;&#21464;&#37327;&#65306;<code class="varname">pattern</code>, <code class="varname">search</code> &#21644; <code class="varname">replace</code>&#12290;&#20081;&#21527;&#65311;&#35753;&#25105;&#20204;&#22312;&#20351;&#29992;&#20013;&#29702;&#35299;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="d0e38198"></a><p class="title"><b>&#20363;&nbsp;17.14.&nbsp;&#35843;&#29992;&#20989;&#25968;&#26102;&#23637;&#24320;&#20803;&#32452;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def foo((a, b, c)):</span>
<code class="prompt">...     </code><span class="userinput">print c</span>
<code class="prompt">...     </code><span class="userinput">print b</span>
<code class="prompt">...     </code><span class="userinput">print a</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">parameters = ('apple', 'bear', 'catnap')</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">foo(parameters)</span> <a name="plural.stage4.5.1"></a>circled_1_delcric
<font color="teal">catnap</font>
<font color="teal">bear</font>
<font color="teal">apple</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage4.5.1">circled_1_delcric</a> </dt><dd>&#35843;&#29992; <code class="function">foo</code> &#30340;&#27491;&#30830;&#26041;&#27861;&#26159;&#20351;&#29992;&#19968;&#20010;&#19977;&#20803;&#32032;&#20803;&#32452;&#12290;&#20989;&#25968;&#34987;&#35843;&#29992;&#26102;&#65292;&#20803;&#32032;&#34987;&#20998;&#21035;&#36171;&#20104; <code class="function">foo</code> &#20013;&#30340;&#22810;&#20010;&#23616;&#37096;&#21464;&#37327;&#12290;</dd></dl></div><p>&#29616;&#22312;&#65292;&#35753;&#25105;&#20204;&#22238;&#36807;&#22836;&#30475;&#19968;&#30475;&#36825;&#20010;&#20803;&#32452;&#33258;&#21160;&#23637;&#24320;&#25216;&#24039;&#30340;&#24517;&#35201;&#24615;&#12290;<code class="varname">patterns</code> &#26159;&#19968;&#20010;&#20803;&#32452;&#21015;&#34920;&#65292;&#24182;&#19988;&#27599;&#20010;&#20803;&#32452;&#37117;&#26377;&#19977;&#20010;&#20803;&#32032;&#12290;&#35843;&#29992; <code class="literal">map(buildMatchAndApplyFunctions, patterns)</code>&#65292;&#36825;&#24182;<span class="emphasis"><em>&#19981;</em></span> &#24847;&#21619;&#30528;&#26159;&#20197;&#19977;&#20010;&#21442;&#25968;&#35843;&#29992; <code class="function">buildMatchAndApplyFunctions</code>&#12290;&#20351;&#29992; <code class="function">map</code> &#26144;&#23556;&#19968;&#20010;&#21015;&#34920;&#21040;&#20989;&#25968;&#26102;&#65292;&#36890;&#24120;&#20351;&#29992;&#21333;&#21442;&#25968;&#65306;&#21015;&#34920;&#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#12290;&#23601; <code class="varname">patterns</code> &#32780;&#35328;&#65292;&#21015;&#34920;&#30340;&#27599;&#20010;&#20803;&#32032;&#37117;&#26159;&#19968;&#20010;&#20803;&#32452;&#65292;&#25152;&#20197; <code class="function">buildMatchAndApplyFunctions</code> &#24635;&#26159;&#26159;&#20197;&#20803;&#32452;&#26469;&#35843;&#29992;&#65292;&#22312; <code class="function">buildMatchAndApplyFunctions</code> &#20013;&#20351;&#29992;&#20803;&#32452;&#33258;&#21160;&#23637;&#24320;&#25216;&#24039;&#23558;&#20803;&#32032;&#36171;&#20540;&#32473;&#21487;&#20197;&#34987;&#20351;&#29992;&#30340;&#21464;&#37327;&#12290;</p></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.stage5"></a>17.6.&nbsp;<code class="filename">plural.py</code>, &#31532; 5 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#20320;&#24050;&#32463;&#31934;&#28860;&#20102;&#25152;&#26377;&#37325;&#22797;&#20195;&#30721;&#65292;&#20063;&#23613;&#21487;&#33021;&#22320;&#25226;&#22797;&#25968;&#35268;&#21017;&#25552;&#28860;&#21040;&#23450;&#20041;&#19968;&#20010;&#23383;&#31526;&#20018;&#21015;&#34920;&#12290;&#25509;&#19979;&#26469;&#30340;&#27493;&#39588;&#26159;&#25226;&#36825;&#20123;&#23383;&#31526;&#20018;&#25552;&#20986;&#26469;&#25918;&#22312;&#21478;&#22806;&#30340;&#25991;&#20214;&#20013;&#65292;&#20174;&#32780;&#21487;&#20197;&#21644;&#20351;&#29992;&#23427;&#20204;&#30340;&#20195;&#30721;&#20998;&#24320;&#26469;&#32500;&#25252;&#12290;</p></div><p>&#39318;&#20808;&#65292;&#35753;&#25105;&#20204;&#24314;&#31435;&#19968;&#20010;&#21253;&#21547;&#20320;&#38656;&#35201;&#30340;&#25152;&#26377;&#35268;&#21017;&#30340;&#25991;&#26412;&#25991;&#20214;&#12290;&#27809;&#26377;&#20160;&#20040;&#29305;&#21035;&#30340;&#32467;&#26500;&#65292;&#19981;&#36807;&#26159;&#20197;&#31354;&#26684; (&#25110;&#32773;&#21046;&#34920;&#31526;) &#25226;&#23383;&#31526;&#20018;&#21015;&#25104;&#19977;&#21015;&#12290;&#20320;&#25226;&#23427;&#21629;&#21517;&#20026; <code class="filename">rules.en</code>&#65292;"<span class="quote">en</span>" &#26159;&#33521;&#35821;&#30340;&#24847;&#24605;&#12290;&#36825;&#20123;&#26159;&#33521;&#35821;&#21517;&#35789;&#22797;&#25968;&#30340;&#35268;&#21017;&#65292;&#20320;&#20197;&#21518;&#21487;&#20197;&#20026;&#20854;&#23427;&#35821;&#35328;&#28155;&#21152;&#35268;&#21017;&#25991;&#20214;&#12290;</p><div class="example"><a name="d0e38298"></a><p class="title"><b>&#20363;&nbsp;17.15.&nbsp;<code class="filename">rules.en</code></b></p><div class="example-contents"><pre class="programlisting">
[sxz]$                  $               es
[^aeioudgkprt]h$        $               es
[^aeiou]y$              y$              ies
$                       $               s
</pre></div></div><br class="example-break"><p>&#29616;&#22312;&#26469;&#30475;&#30475;&#22914;&#20309;&#20351;&#29992;&#35268;&#21017;&#25991;&#20214;&#12290;</p><div class="example"><a name="d0e38306"></a><p class="title"><b>&#20363;&nbsp;17.16.&nbsp;<code class="filename">plural5.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re
import string                                                                     

def buildRule((pattern, search, replace)):                                        
    return lambda word: re.search(pattern, word) and re.sub(search, replace, word) <a name="plural.stage5.1.1"></a>circled_1_delcric

def plural(noun, language='en'):                             <a name="plural.stage5.1.2"></a>circled_2_delcric
    lines = file('rules.%s' % language).readlines()          <a name="plural.stage5.1.3"></a>circled_3_delcric
    patterns = map(string.split, lines)                      <a name="plural.stage5.1.4"></a>circled_4_delcric
    rules = map(buildRule, patterns)                         <a name="plural.stage5.1.5"></a>circled_5_delcric
    for rule in rules:                                      
        result = rule(noun)                                  <a name="plural.stage5.1.6"></a>circled_6_delcric
        if result: return result                            
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage5.1.1">circled_1_delcric</a> </dt><dd>&#22312;&#36825;&#37324;&#20320;&#36824;&#23558;&#20351;&#29992;&#38381;&#21512;&#25216;&#26415; (&#21160;&#24577;&#26500;&#24314;&#20989;&#25968;&#26102;&#20351;&#29992;&#20989;&#25968;&#22806;&#37096;&#23450;&#20041;&#30340;&#21464;&#37327;)&#65292;&#20294;&#26159;&#29616;&#22312;&#20320;&#25226;&#21407;&#26469;&#20998;&#24320;&#30340;&#21305;&#37197;&#20989;&#25968;&#21644;&#35268;&#21017;&#24212;&#29992;&#20989;&#25968;&#21512;&#20108;&#20026;&#19968; (&#20320;&#23558;&#22312;&#19979;&#19968;&#33410;&#20013;&#26126;&#20102;&#20854;&#21407;&#22240;)&#12290;&#20320;&#24456;&#24555;&#20250;&#30475;&#21040;&#65292;&#36825;&#19982;&#20998;&#21035;&#35843;&#29992;&#20004;&#20010;&#20989;&#25968;&#25928;&#26524;&#30456;&#21516;&#65292;&#21482;&#26159;&#35843;&#29992;&#30340;&#26041;&#27861;&#31245;&#26377;&#19981;&#21516;&#12290;</dd><dt><a href="#plural.stage5.1.2">circled_2_delcric</a> </dt><dd>&#21681;&#20204;&#30340; <code class="function">plural</code> &#20989;&#25968;&#29616;&#22312;&#25509;&#21463;&#30340;&#31532;&#20108;&#20010;&#21442;&#25968;&#26159;&#40664;&#35748;&#20540;&#20026; <code class="literal">en</code> &#30340;&#21487;&#36873;&#21442;&#25968; <code class="varname">language</code>&#12290;</dd><dt><a href="#plural.stage5.1.3">circled_3_delcric</a> </dt><dd>&#20320;&#20351;&#29992; <code class="varname">language</code> &#21442;&#25968;&#21629;&#21517;&#19968;&#20010;&#25991;&#20214;&#65292;&#25171;&#24320;&#36825;&#20010;&#25991;&#20214;&#24182;&#35835;&#21462;&#20854;&#20013;&#30340;&#20869;&#23481;&#21040;&#19968;&#20010;&#21015;&#34920;&#12290;&#22914;&#26524; <code class="varname">language</code> &#26159; <code class="literal">en</code>&#65292;&#37027;&#20040;&#20320;&#23558;&#25171;&#24320; <code class="filename">rules.en</code> &#25991;&#20214;&#65292;&#35835;&#21462;&#20840;&#37096;&#20869;&#23481;&#65292;&#20197;&#20854;&#20013;&#30340;&#22238;&#36710;&#31526;&#20316;&#20026;&#20998;&#38548;&#26500;&#24314;&#19968;&#20010;&#21015;&#34920;&#12290;&#25991;&#20214;&#30340;&#27599;&#19968;&#34892;&#23558;&#25104;&#20026;&#21015;&#34920;&#30340;&#19968;&#20010;&#20803;&#32032;&#12290;</dd><dt><a href="#plural.stage5.1.4">circled_4_delcric</a> </dt><dd>&#22914;&#20320;&#25152;&#35265;&#65292;&#25991;&#20214;&#30340;&#27599;&#19968;&#34892;&#37117;&#26377;&#19977;&#20010;&#20540;&#65292;&#20294;&#26159;&#23427;&#20204;&#26159;&#20197;&#31354;&#30333;&#23383;&#31526; (&#21046;&#34920;&#31526;&#25110;&#32773;&#31354;&#26684;&#31526;&#65292;&#36825;&#27809;&#20160;&#20040;&#21306;&#21035;) &#20998;&#21106;&#12290;&#29992; <code class="function">string.split</code> &#20989;&#25968;&#26144;&#23556;&#21015;&#34920;&#26469;&#21019;&#24314;&#19968;&#20010;&#27599;&#20010;&#20803;&#32032;&#37117;&#26159;&#19977;&#20803;&#32032;&#20803;&#32452;&#30340;&#26032;&#21015;&#34920;&#12290;&#22240;&#27492;&#65292;&#20687; <code class="literal">[sxz]$ $ es</code> &#36825;&#26679;&#30340;&#19968;&#34892;&#23558;&#34987;&#25171;&#30862;&#24182;&#25918;&#20837; <code class="literal">('[sxz]$', '$', 'es')</code> &#36825;&#26679;&#30340;&#20803;&#32452;&#12290;&#36825;&#24847;&#21619;&#30528; <code class="varname">patterns</code> &#23558;&#26368;&#32456;&#21464;&#25104;&#20803;&#32452;&#21015;&#34920;&#30340;&#24418;&#24335;&#65292;&#23601;&#20687;<a class="link" href="#plural.stage4" title="17.5.&nbsp;plural.py, &#31532; 4 &#38454;&#27573;">&#31532; 4 &#38454;&#27573;</a>&#23454;&#25171;&#23454;&#32534;&#20889;&#30340;&#37027;&#26679;&#12290;</dd><dt><a href="#plural.stage5.1.5">circled_5_delcric</a> </dt><dd>&#22914;&#26524; <code class="varname">patterns</code> &#26159;&#19968;&#20010;&#20803;&#32452;&#21015;&#34920;&#65292;&#37027;&#20040; <code class="varname">rules</code> &#23601;&#21487;&#20197;&#36890;&#36807;&#19968;&#20010;&#20010;&#35843;&#29992; <code class="function">buildRule</code> &#21160;&#24577;&#22320;&#29983;&#25104;&#20989;&#25968;&#21015;&#34920;&#12290;&#35843;&#29992; <code class="function">buildRule(('[sxz]$', '$', 'es'))</code> &#36820;&#22238;&#19968;&#20010;&#25509;&#21463;&#21333;&#21442;&#25968; <code class="varname">word</code> &#30340;&#20989;&#25968;&#12290;&#24403;&#36820;&#22238;&#30340;&#20989;&#25968;&#34987;&#35843;&#29992;&#65292;&#21017;&#23558;&#25191;&#34892; <code class="literal">re.search('[sxz]$', word) and re.sub('$', 'es', word)</code>&#12290;</dd><dt><a href="#plural.stage5.1.6">circled_6_delcric</a> </dt><dd>&#22240;&#20026;&#20320;&#29616;&#22312;&#26500;&#24314;&#30340;&#26159;&#19968;&#20010;&#21305;&#37197;&#21644;&#35268;&#21017;&#24212;&#29992;&#21512;&#19968;&#30340;&#20989;&#25968;&#65292;&#20320;&#38656;&#35201;&#20998;&#21035;&#35843;&#29992;&#23427;&#20204;&#12290;&#20165;&#20165;&#26159;&#35843;&#29992;&#20989;&#25968;&#65292;&#22914;&#26524;&#36820;&#22238;&#20102;&#20869;&#23481;&#65292;&#37027;&#20040;&#36820;&#22238;&#30340;&#20415;&#26159;&#22797;&#25968;&#65307;&#22914;&#26524;&#27809;&#26377;&#36820;&#22238; (&#20063;&#23601;&#26159;&#36820;&#22238;&#20102;<code class="literal">None</code>)&#65292;&#37027;&#20040;&#35813;&#35268;&#21017;&#26410;&#33021;&#21305;&#37197;&#65292;&#23601;&#24212;&#35813;&#23581;&#35797;&#20854;&#20182;&#35268;&#21017;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#37324;&#30340;&#36827;&#27493;&#26159;&#20320;&#25226;&#22797;&#25968;&#35268;&#21017;&#23436;&#20840;&#20998;&#31163;&#21040;&#21478;&#22806;&#30340;&#25991;&#20214;&#20013;&#12290;&#19981;&#20294;&#36825;&#20010;&#25991;&#20214;&#21487;&#20197;&#29420;&#31435;&#20110;&#20195;&#30721;&#21333;&#29420;&#32500;&#25252;&#65292;&#32780;&#19988;&#20320;&#24314;&#31435;&#20102;&#19968;&#20010;&#21629;&#21517;&#35268;&#21010;&#20351; <code class="function">plural</code> &#20989;&#25968;&#21487;&#20197;&#26681;&#25454; <code class="varname">language</code> &#21442;&#25968;&#20351;&#29992;&#19981;&#21516;&#30340;&#35268;&#21017;&#25991;&#20214;&#12290;</p><p>&#36825;&#37324;&#30340;&#32570;&#38519;&#26159;&#27599;&#27425;&#35843;&#29992; <code class="function">plural</code> &#20989;&#25968;&#37117;&#38656;&#35201;&#21435;&#35835;&#21462;&#19968;&#27425;&#25991;&#20214;&#12290;&#25105;&#24819;&#25105;&#21487;&#20197;&#22312;&#25972;&#26412;&#20070;&#20013;&#37117;&#19981;&#20351;&#29992; "<span class="quote">&#30041;&#32473;&#35835;&#32773;&#21435;&#32451;&#20064;</span>"&#65292;&#20294;&#26159;&#36825;&#37324;&#65306;&#20026;&#29305;&#23450;&#30340;&#35821;&#35328;&#35268;&#21017;&#25991;&#20214;&#24314;&#31435;&#19968;&#20010;&#32531;&#23384;&#26426;&#21046;&#65292;&#24182;&#22312;&#35843;&#29992;&#26399;&#38388;&#35268;&#21017;&#25991;&#20214;&#25913;&#21464;&#26102;&#33258;&#21160;&#21047;&#26032;<span class="emphasis"><em>&#30041;&#32473;&#35835;&#32773;&#20316;&#20026;&#32451;&#20064;</em></span>&#12290;&#31069;&#20320;&#39034;&#21033;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.stage6"></a>17.7.&nbsp;<code class="filename">plural.py</code>, &#31532; 6 &#38454;&#27573;</h2></div></div></div><div class="abstract"><p>&#29616;&#22312;&#20320;&#24050;&#20934;&#22791;&#22909;&#25506;&#35752;&#29983;&#25104;&#22120; (Generator) &#20102;&#12290;</p></div><div class="example"><a name="d0e38429"></a><p class="title"><b>&#20363;&nbsp;17.17.&nbsp;<code class="filename">plural6.py</code></b></p><div class="example-contents"><pre class="programlisting">
import re

def rules(language):                                                                 
    for line in file('rules.%s' % language):                                         
        pattern, search, replace = line.split()                                      
        yield lambda word: re.search(pattern, word) and re.sub(search, replace, word)

def plural(noun, language='en'):      
    for applyRule in rules(language): 
        result = applyRule(noun)      
        if result: return result      
</pre></div></div><br class="example-break"><p>&#36825;&#37324;&#20351;&#29992;&#20102;&#34987;&#31216;&#20316;&#29983;&#25104;&#22120;&#30340;&#25216;&#26415;&#65292;&#25105;&#19981;&#25171;&#31639;&#22312;&#20320;&#30475;&#36807;&#19968;&#20010;&#31616;&#21333;&#20363;&#23376;&#20043;&#21069;&#35797;&#22270;&#35299;&#37322;&#23427;&#12290;</p><div class="example"><a name="plural.introducing.generators"></a><p class="title"><b>&#20363;&nbsp;17.18.&nbsp;&#20171;&#32461;&#29983;&#25104;&#22120;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">def make_counter(x):</span>
<code class="prompt">...     </code><span class="userinput">print 'entering make_counter'</span>
<code class="prompt">...     </code><span class="userinput">while 1:</span>
<code class="prompt">...     </code><span class="userinput">    yield x</span>               <a name="plural.stage6.2.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">    print 'incrementing x'</span>
<code class="prompt">...     </code><span class="userinput">    x = x + 1</span>
<code class="prompt">...     </code>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter = make_countercircled_2_delcric</span> <a name="plural.stage6.2.2"></a>circled_2_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter</span>                   <a name="plural.stage6.2.3"></a>circled_3_delcric
<font color="teal">&lt;generator object at 0x001C9C10&gt;</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter.next()</span>            <a name="plural.stage6.2.4"></a>circled_4_delcric
<font color="teal">entering make_counter
2</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter.next()</span>            <a name="plural.stage6.2.5"></a>circled_5_delcric
<font color="teal">incrementing x
3</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">counter.next()</span>            <a name="plural.stage6.2.6"></a>circled_6_delcric
<font color="teal">incrementing x
4</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage6.2.1">circled_1_delcric</a> </dt><dd><code class="function">make_counter</code> &#20013;&#20986;&#29616;&#20851;&#38190;&#23383; <code class="literal">yield</code> &#24847;&#21619;&#30528;&#36825;&#19981;&#26159;&#19968;&#20010;&#26222;&#36890;&#30340;&#20989;&#25968;&#12290;&#23427;&#26159;&#19968;&#31181;&#27599;&#27425;&#29983;&#25104;&#19968;&#20010;&#20540;&#30340;&#29305;&#27530;&#20989;&#25968;&#12290;&#20320;&#21487;&#20197;&#25226;&#23427;&#30475;&#25104;&#26159;&#19968;&#20010;&#21487;&#24674;&#22797;&#20989;&#25968;&#12290;&#35843;&#29992;&#23427;&#20250;&#36820;&#22238;&#19968;&#20010;&#29983;&#25104;&#22120;&#65292;&#23427;&#21487;&#20197;&#36820;&#22238; <code class="varname">x</code> &#30340;&#36830;&#32493;&#20540;&#12290;</dd><dt><a href="#plural.stage6.2.2">circled_2_delcric</a> </dt><dd>&#24819;&#35201;&#21019;&#24314;&#19968;&#20010; <code class="function">make_counter</code> &#29983;&#25104;&#22120;&#30340;&#23454;&#20363;&#65292;&#21482;&#35201;&#20687;&#20854;&#23427;&#20989;&#25968;&#19968;&#26679;&#35843;&#29992;&#12290;&#27880;&#24847;&#36825;&#24182;&#27809;&#26377;&#30495;&#27491;&#25191;&#34892;&#20989;&#25968;&#20195;&#30721;&#12290;&#20320;&#21487;&#20197;&#20998;&#36776;&#20986;&#36825;&#19968;&#28857;&#65292;&#22240;&#20026; <code class="function">make_counter</code> &#30340;&#31532;&#19968;&#34892;&#26159; <code class="function">print</code> &#35821;&#21477;&#65292;&#28982;&#32780;&#27809;&#26377;&#20219;&#20309;&#20869;&#23481;&#36755;&#20986;&#12290;</dd><dt><a href="#plural.stage6.2.3">circled_3_delcric</a> </dt><dd><code class="function">make_counter</code> &#20989;&#25968;&#36820;&#22238;&#19968;&#20010;&#29983;&#25104;&#22120;&#23545;&#35937;&#12290;</dd><dt><a href="#plural.stage6.2.4">circled_4_delcric</a> </dt><dd>&#20320;&#31532;&#19968;&#27425;&#35843;&#29992;&#29983;&#25104;&#22120;&#23545;&#35937;&#30340; <code class="function">next()</code> &#26041;&#27861;&#65292;&#23558;&#25191;&#34892; <code class="function">make_counter</code> &#20013;&#30340;&#20195;&#30721;&#25191;&#34892;&#21040;&#31532;&#19968;&#20010; <code class="literal">yield</code> &#35821;&#21477;&#65292;&#28982;&#21518;&#36820;&#22238;&#29983;&#20135; (yield) &#20986;&#26469;&#30340;&#20540;&#12290;&#22312;&#26412;&#20363;&#20013;&#65292;&#36825;&#20010;&#20540;&#26159; <code class="literal">2</code>&#65292;&#22240;&#20026;&#20320;&#26159;&#36890;&#36807; <code class="function">make_countercircled_2_delcric</code> &#26469;&#21019;&#24314;&#26368;&#21021;&#30340;&#29983;&#25104;&#22120;&#30340;&#12290;</dd><dt><a href="#plural.stage6.2.5">circled_5_delcric</a> </dt><dd>&#19981;&#26029;&#35843;&#29992;&#29983;&#25104;&#22120;&#23545;&#35937;&#30340; <code class="function">next()</code> <span class="emphasis"><em>&#23558;&#20174;&#20320;&#19978;&#27425;&#31163;&#24320;&#30340;&#20301;&#32622;&#37325;&#26032;&#24320;&#22987;</em></span> &#24182;&#32487;&#32493;&#19979;&#21435;&#30452;&#21040;&#20320;&#21448;&#19968;&#27425;&#36935;&#21040; <code class="literal">yield</code> &#35821;&#21477;&#12290;&#25509;&#19979;&#26469;&#25191;&#34892; <code class="function">print</code> &#35821;&#21477;&#26469;&#25171;&#21360; <code class="literal">incrementing x</code>&#65292;&#28982;&#21518;&#25191;&#34892; <code class="literal">x = x + 1</code> &#35821;&#21477;&#26469;&#30495;&#27491;&#22320;&#22686;&#21152;&#12290;&#28982;&#21518;&#20320;&#36827;&#20837; <code class="literal">while</code> &#30340;&#21448;&#19968;&#27425;&#24490;&#29615;&#65292;&#20320;&#25152;&#20570;&#30340;&#31532;&#19968;&#20214;&#20107;&#26159; <code class="literal">yield x</code>&#65292;&#36820;&#22238;&#30446;&#21069;&#30340; <code class="varname">x</code> &#20540; (&#29616;&#22312;&#26159;3)&#12290;</dd><dt><a href="#plural.stage6.2.6">circled_6_delcric</a> </dt><dd>&#31532;&#20108;&#27425;&#20320;&#35843;&#29992; <code class="function">counter.next()</code> &#26102;&#65292;&#20320;&#21448;&#20570;&#19968;&#36941;&#30456;&#21516;&#30340;&#20107;&#24773;&#65292;&#20294;&#26159;&#36825;&#27425; <code class="varname">x</code> &#26159;
 <code class="literal">4</code>&#12290;&#22914;&#27492;&#32487;&#32493;&#12290;&#22240;&#20026; <code class="function">make_counter</code> &#35774;&#32622;&#30340;&#26159;&#19968;&#20010;&#26080;&#38480;&#24490;&#29615;&#65292;&#29702;&#35770;&#19978;&#20320;&#21487;&#20197;&#27704;&#36828;&#36825;&#26679;&#32487;&#32493;&#19979;&#21435;&#65292;&#19981;&#26029;&#22320;&#36882;&#22686;&#24182;&#24377;&#20986; <code class="varname">x</code> &#20540;&#12290;&#29616;&#22312;&#35753;&#25105;&#20204;&#30475;&#30475;&#29983;&#25104;&#22120;&#26356;&#20855;&#24847;&#20041;&#30340;&#24212;&#29992;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="example"><a name="plural.fib.example"></a><p class="title"><b>&#20363;&nbsp;17.19.&nbsp;&#20351;&#29992;&#29983;&#25104;&#22120;&#26367;&#20195;&#36882;&#24402;</b></p><div class="example-contents"><pre class="programlisting">
def fibonacci(max):
    a, b = 0, 1       <a name="plural.stage6.3.1"></a>circled_1_delcric
    while a &lt; max:
        yield a       <a name="plural.stage6.3.2"></a>circled_2_delcric
        a, b = b, a+b <a name="plural.stage6.3.3"></a>circled_3_delcric
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage6.3.1">circled_1_delcric</a> </dt><dd>&#26000;&#27874;&#32435;&#22865;&#25968;&#21015; (Fibonacci sequence) &#26159;&#27599;&#20010;&#25968;&#37117;&#26159;&#21069;&#38754;&#20004;&#20010;&#25968;&#20540;&#21644;&#30340;&#19968;&#20010;&#25968;&#21015;&#12290;&#23427;&#20174; <code class="constant">0</code> &#21644; <code class="constant">1</code> &#24320;&#22987;&#65292;&#24320;&#22987;&#22686;&#38271;&#24471;&#24456;&#24930;&#65292;&#20294;&#36234;&#26469;&#36234;&#24555;&#12290;&#24320;&#22987;&#36825;&#20010;&#25968;&#21015;&#20320;&#38656;&#35201;&#20004;&#20010;&#21464;&#37327;&#65306;<code class="varname">a</code> &#20174; <code class="constant">0</code>&#24320;&#22987;&#65292;<code class="varname">b</code> &#20174; <code class="constant">1</code> &#24320;&#22987;&#12290;</dd><dt><a href="#plural.stage6.3.2">circled_2_delcric</a> </dt><dd><code class="varname">a</code> &#26159;&#25968;&#21015;&#30340;&#24403;&#21069;&#20540;&#65292;&#24377;&#20986;&#23427;&#12290;</dd><dt><a href="#plural.stage6.3.3">circled_3_delcric</a> </dt><dd><code class="varname">b</code> &#26159;&#25968;&#21015;&#30340;&#19979;&#19968;&#20010;&#25968;&#65292;&#25226;&#23427;&#36171;&#20540;&#32473; <code class="varname">a</code>&#65292;&#21516;&#26102;&#35745;&#31639;&#20986; (<code class="literal">a+b</code>) &#24182;&#36171;&#20540;&#32473; <code class="varname">b</code> &#25918;&#22312;&#19968;&#36793;&#31245;&#21518;&#20351;&#29992;&#12290;&#27880;&#24847;&#36825;&#26159;&#24182;&#34892;&#21457;&#29983;&#30340;&#65292;&#22914;&#26524; <code class="varname">a</code> &#26159; <code class="literal">3</code>&#65292;<code class="varname">b</code> &#26159; <code class="literal">5</code>&#65292;&#37027;&#20040; <code class="literal">a, b = b, a+b</code> &#23558;&#20250;&#35774;&#32622; <code class="varname">a</code> &#20026; <code class="literal">5</code> (<code class="varname">b</code> &#30340;&#21407;&#20540;)&#65292;<code class="varname">b</code> &#20026; <code class="literal">8</code> (<code class="varname">a</code> &#21644; <code class="varname">b</code> &#20043;&#21644;)&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#36825;&#26679;&#20320;&#23601;&#26377;&#20102;&#29983;&#25104;&#36830;&#32493;&#30340; Fibonacci &#25968;&#30340;&#20989;&#25968;&#20102;&#12290;&#24403;&#28982;&#20320;&#20063;&#21487;&#20197;&#36890;&#36807;&#36882;&#24402;&#20570;&#21040;&#65292;&#20294;&#26159;&#36825;&#37324;&#30340;&#26041;&#27861;&#26356;&#21152;&#26131;&#35835;&#12290;&#24182;&#19988;&#20063;&#19982; <code class="literal">for</code> &#24037;&#20316;&#24471;&#24456;&#22909;&#12290;</p><div class="example"><a name="d0e38712"></a><p class="title"><b>&#20363;&nbsp;17.20.&nbsp;<code class="literal">for</code> &#24490;&#29615;&#20013;&#30340;&#29983;&#25104;&#22120;</b></p><div class="example-contents"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">for n in fibonacci(1000):</span> <a name="plural.stage6.4.1"></a>circled_1_delcric
<code class="prompt">...     </code><span class="userinput">print n,</span>              <a name="plural.stage6.4.2"></a>circled_2_delcric
<font color="teal">0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage6.4.1">circled_1_delcric</a> </dt><dd>&#20320;&#21487;&#20197;&#22312; <code class="literal">for</code> &#24490;&#29615;&#20013;&#30452;&#25509;&#20351;&#29992; <code class="function">fibonacci</code> &#36825;&#26679;&#30340;&#29983;&#25104;&#22120;&#12290;<code class="literal">for</code> &#24490;&#29615;&#23558;&#20250;&#21019;&#24314;&#19968;&#20010;&#29983;&#25104;&#22120;&#23545;&#35937;&#24182;&#36830;&#32493;&#35843;&#29992;&#20854; <code class="function">next()</code> &#26041;&#27861;&#33719;&#24471;&#20540;&#24182;&#36171;&#20104; <code class="literal">for</code> &#24490;&#29615;&#21464;&#37327; (<code class="varname">n</code>)&#12290;</dd><dt><a href="#plural.stage6.4.2">circled_2_delcric</a> </dt><dd>&#27599;&#36718; <code class="literal">for</code> &#24490;&#29615; <code class="varname">n</code> &#37117;&#20174; <code class="function">fibonacci</code> &#30340; <code class="literal">yield</code> &#35821;&#21477;&#33719;&#24471;&#19968;&#20010;&#26032;&#30340;&#20540;&#12290;&#24403; <code class="function">fibonacci</code> &#36229;&#20986;&#25968;&#23383;&#38480;&#23450; (<code class="varname">a</code> &#36229;&#36807; <code class="varname">max</code>&#65292;&#20320;&#22312;&#36825;&#37324;&#38480;&#23450;&#30340;&#26159; <code class="literal">1000</code>) &#24456;&#33258;&#28982;&#22320;&#36864;&#20986; <code class="literal">for</code> &#24490;&#29615;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#22909;&#20102;&#65292;&#35753;&#25105;&#20204;&#22238;&#21040; <code class="function">plural</code> &#20989;&#25968;&#30475;&#30475;&#22914;&#20309;&#21487;&#20197;&#25226;&#23427;&#29992;&#36215;&#26469;&#12290;</p><div class="example"><a name="d0e38793"></a><p class="title"><b>&#20363;&nbsp;17.21.&nbsp;&#29983;&#25104;&#22120;&#29983;&#25104;&#21160;&#24577;&#20989;&#25968;</b></p><div class="example-contents"><pre class="programlisting">
def rules(language):                                                                 
    for line in file('rules.%s' % language):                                          <a name="plural.stage6.5.1"></a>circled_1_delcric
        pattern, search, replace = line.split()                                       <a name="plural.stage6.5.2"></a>circled_2_delcric
        yield lambda word: re.search(pattern, word) and re.sub(search, replace, word) <a name="plural.stage6.5.3"></a>circled_3_delcric

def plural(noun, language='en'):      
    for applyRule in rules(language):  <a name="plural.stage6.5.4"></a>circled_4_delcric
        result = applyRule(noun)      
        if result: return result      
</pre><div class="calloutlist"><dl compact><dt><a href="#plural.stage6.5.1">circled_1_delcric</a> </dt><dd><code class="literal">for line in file(...)</code> &#26159;&#20174;&#25991;&#20214;&#20013;&#19968;&#34892;&#34892;&#35835;&#21462;&#30340;&#36890;&#29992;&#26041;&#27861;&#65292;&#27599;&#27425;&#19968;&#34892;&#12290;&#23427;&#33021;&#27491;&#24120;&#24037;&#20316;&#26159;&#22240;&#20026; <span class="emphasis"><em><code class="function">file</code> &#23454;&#38469;&#19978;&#36820;&#22238;&#19968;&#20010;&#29983;&#25104;&#22120;</em></span>&#65292;&#23427;&#30340; <code class="function">next()</code> &#26041;&#27861;&#36820;&#22238;&#25991;&#20214;&#20013;&#30340;&#19979;&#19968;&#34892;&#12290;&#31616;&#30452;&#22826;&#37239;&#20102;&#65292;&#20809;&#26159;&#24819;&#24819;&#23601;&#35753;&#25105;&#28385;&#22836;&#22823;&#27735;&#12290;</dd><dt><a href="#plural.stage6.5.2">circled_2_delcric</a> </dt><dd>&#36825;&#27809;&#26377;&#20160;&#20040;&#31070;&#22855;&#20043;&#22788;&#12290;&#36824;&#35760;&#24471;&#35268;&#21017;&#25991;&#20214;&#30340;&#27599;&#19968;&#34892;&#37117;&#29992;&#31354;&#30333;&#20998;&#24320;&#19977;&#20010;&#20540;&#21527;&#65311;&#25152;&#20197; <code class="literal">line.split()</code> &#36820;&#22238;&#19968;&#20010;&#19977;&#20803;&#32032;&#20803;&#32452;&#65292;&#20320;&#25226;&#36825;&#20123;&#20540;&#36171;&#32473;&#20102; 3 &#20010;&#23616;&#37096;&#21464;&#37327;&#12290;</dd><dt><a href="#plural.stage6.5.3">circled_3_delcric</a> </dt><dd><span class="emphasis"><em>&#28982;&#21518;&#20320;&#19981;&#26029;&#22320;&#24377;&#20986;&#12290;</em></span> &#20320;&#24377;&#20986;&#20160;&#20040;&#21602;&#65311;&#19968;&#20010;&#20351;&#29992; <code class="literal">lambda</code> &#21160;&#24577;&#29983;&#25104;&#30340;&#20989;&#25968;&#65292;&#32780;&#36825;&#20010;&#20989;&#25968;&#23454;&#38469;&#19978;&#26159;&#19968;&#20010;&#38381;&#21512; (&#25226;&#26412;&#22320;&#21464;&#37327; <code class="varname">pattern</code>&#65292;<code class="varname">search</code> &#21644; <code class="varname">replace</code> &#20316;&#20026;&#24120;&#37327;)&#12290;&#25442;&#21477;&#35805;&#35828;&#65292;<code class="function">rules</code> &#26159;&#19968;&#20010;&#24377;&#20986;&#35268;&#21017;&#20989;&#25968;&#30340;&#29983;&#25104;&#22120;&#12290;</dd><dt><a href="#plural.stage6.5.4">circled_4_delcric</a> </dt><dd>&#26082;&#28982; <code class="function">rules</code> &#26159;&#19968;&#20010;&#29983;&#25104;&#22120;&#65292;&#20320;&#23601;&#21487;&#20197;&#22312; <code class="literal">for</code> &#24490;&#29615;&#20013;&#30452;&#25509;&#20351;&#29992;&#23427;&#12290;<code class="literal">for</code> &#24490;&#29615;&#30340;&#31532;&#19968;&#36718;&#20320;&#35843;&#29992; <code class="function">rules</code> &#20989;&#25968;&#65292;&#25171;&#24320;&#35268;&#21017;&#25991;&#20214;&#65292;&#35835;&#21462;&#31532;&#19968;&#34892;&#65292;&#21160;&#24577;&#26500;&#24314;&#19968;&#20010;&#26681;&#25454;&#35268;&#21017;&#25991;&#20214;&#31532;&#19968;&#34892;&#21305;&#37197;&#24182;&#24212;&#29992;&#35268;&#21017;&#30340;&#20989;&#25968;&#12290;<code class="literal">for</code> &#24490;&#29615;&#30340;&#31532;&#20108;&#36718;&#23558;&#20250;&#20174;&#19978;&#19968;&#36718; <code class="function">rules</code> &#20013;&#20572;&#19979;&#30340;&#20301;&#32622; (<code class="literal">for line in file(...)</code> &#24490;&#29615;&#20869;&#37096;) &#35835;&#21462;&#35268;&#21017;&#25991;&#20214;&#30340;&#31532;&#20108;&#34892;&#65292;&#21160;&#24577;&#26500;&#24314;&#26681;&#25454;&#35268;&#21017;&#25991;&#20214;&#31532;&#20108;&#34892;&#21305;&#37197;&#24182;&#24212;&#29992;&#35268;&#21017;&#30340;&#21478;&#19968;&#20010;&#20989;&#25968;&#12290;&#22914;&#27492;&#32487;&#32493;&#19979;&#21435;&#12290;</dd></dl></div></div></div><br class="example-break"><p>&#20320;&#22312;<a class="link" href="#plural.stage5" title="17.6.&nbsp;plural.py, &#31532; 5 &#38454;&#27573;">&#31532; 5 &#38454;&#27573;</a>&#24471;&#21040;&#30340;&#26159;&#20160;&#20040;&#65311;&#31532; 5 &#38454;&#27573;&#20013;&#65292;&#20320;&#35835;&#21462;&#25972;&#20010;&#35268;&#21017;&#25991;&#20214;&#24182;&#22312;&#20351;&#29992;&#31532;&#19968;&#26465;&#35268;&#21017;&#20043;&#21069;&#26500;&#24314;&#19968;&#20010;&#25152;&#26377;&#35268;&#21017;&#32452;&#25104;&#30340;&#21015;&#34920;&#12290;&#29616;&#22312;&#26377;&#20102;&#29983;&#25104;&#22120;&#65292;&#20320;&#21487;&#20197;&#26356;&#33298;&#36866;&#22320;&#20570;&#21040;&#36825;&#19968;&#20999;&#65306;&#20320;&#25171;&#24320;&#24182;&#35835;&#21462;&#31532;&#19968;&#26465;&#35268;&#21017;&#65292;&#26681;&#25454;&#23427;&#21019;&#24314;&#20989;&#25968;&#24182;&#20351;&#29992;&#20043;&#65292;&#22914;&#26524;&#23427;&#36866;&#29992;&#21017;&#26681;&#26412;&#19981;&#21435;&#35835;&#21462;&#35268;&#21017;&#25991;&#20214;&#21097;&#19979;&#30340;&#20869;&#23481;&#65292;&#20063;&#19981;&#21435;&#24314;&#31435;&#21478;&#22806;&#30340;&#20989;&#25968;&#12290;</p><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>PEP 255 (<a href="http://www.python.org/peps/pep-0255.html">http://www.python.org/peps/pep-0255.html</a>) &#23450;&#20041;&#29983;&#25104;&#22120;&#12290;</li><li><span class="application">Python</span> Cookbook (<a href="http://www.activestate.com/ASPN/Python/Cookbook/">http://www.activestate.com/ASPN/Python/Cookbook/</a>) &#26377;&#29983;&#25104;&#22120;&#30340;&#20363;&#23376; (<a href="http://www.google.com/search?q=generators+cookbook+site:aspn.activestate.com">http://www.google.com/search?q=generators+cookbook+site:aspn.activestate.com</a>)&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="plural.summary"></a>17.8.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#36825;&#19968;&#31456;&#20013;&#25105;&#20204;&#25506;&#35752;&#20102;&#20960;&#20010;&#19981;&#21516;&#30340;&#39640;&#32423;&#25216;&#26415;&#12290;&#23427;&#20204;&#24182;&#19981;&#37117;&#36866;&#29992;&#20110;&#20219;&#20309;&#24773;&#20917;&#12290;</p></div><p>&#20320;&#29616;&#22312;&#24212;&#35813;&#33021;&#33258;&#22914;&#24212;&#29992;&#22914;&#19979;&#25216;&#26415;&#65306;</p><div class="itemizedlist"><ul><li>&#24212;&#29992;<a class="link" href="#plural.stage1" title="17.2.&nbsp;plural.py, &#31532; 1 &#38454;&#27573;">&#27491;&#21017;&#34920;&#36798;&#24335;&#36827;&#34892;&#23383;&#31526;&#20018;&#26367;&#25442;</a>&#12290;</li><li>&#23558;<a class="link" href="#plural.stage2" title="17.3.&nbsp;plural.py, &#31532; 2 &#38454;&#27573;">&#20989;&#25968;&#24403;&#20316;&#23545;&#35937;</a>&#65292;&#25226;&#23427;&#20204;&#23384;&#20110;&#21015;&#34920;&#20013;&#65292;&#25226;&#23427;&#20204;&#36171;&#20540;&#32473;&#21464;&#37327;&#65292;&#24182;&#36890;&#36807;&#21464;&#37327;&#26469;&#35843;&#29992;&#23427;&#20204;&#12290;</li><li>&#26500;&#24314;<a class="link" href="#plural.stage3" title="17.4.&nbsp;plural.py, &#31532; 3 &#38454;&#27573;">&#24212;&#29992; <code class="literal">lambda</code> &#30340;&#21160;&#24577;&#20989;&#25968;</a>&#12290;</li><li>&#26500;&#24314;<a class="link" href="#plural.stage4" title="17.5.&nbsp;plural.py, &#31532; 4 &#38454;&#27573;">&#38381;&#21512;</a>&#65292;&#23558;&#22806;&#37096;&#21464;&#37327;&#20316;&#20026;&#24120;&#37327;&#26500;&#24314;&#21160;&#24577;&#20989;&#25968;&#12290;</li><li>&#26500;&#24314;<a class="link" href="#plural.stage6" title="17.7.&nbsp;plural.py, &#31532; 6 &#38454;&#27573;">&#29983;&#25104;&#22120;</a>&#65292;&#36827;&#34892;&#36923;&#36753;&#36882;&#22686;&#25805;&#20316;&#24182;&#22312;&#27599;&#27425;&#35843;&#29992;&#26102;&#36820;&#22238;&#19981;&#21516;&#20540;&#30340;&#24674;&#22797;&#25191;&#34892;&#20989;&#25968;&#12290;</li></ul></div><p>&#25277;&#35937;&#21270;&#65292;&#21160;&#24577;&#26500;&#24314;&#20989;&#25968;&#65292;&#26500;&#24314;&#38381;&#21512;&#20197;&#21450;&#24212;&#29992;&#29983;&#25104;&#22120;&#33021;&#22815;&#20351;&#20320;&#30340;&#20195;&#30721;&#26356;&#21152;&#31616;&#21333;&#21270;&#12289;&#21487;&#35835;&#21270;&#12289;&#28789;&#27963;&#21270;&#12290;&#20320;&#38656;&#35201;&#22312;&#31616;&#27905;&#21644;&#21151;&#33021;&#23454;&#29616;&#20004;&#26041;&#38754;&#36827;&#34892;&#24179;&#34913;&#12290;</p></div></div><div class="chapter" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="soundex"></a>&#31532;&nbsp;18&nbsp;&#31456;&nbsp;&#24615;&#33021;&#20248;&#21270;</h1></div></div></div><div class="abstract"><p>&#24615;&#33021;&#20248;&#21270; (Performance tuning) &#26159;&#19968;&#20214;&#22810;&#23039;&#22810;&#24425;&#30340;&#20107;&#24773;&#12290;<span class="application">Python</span> &#26159;&#19968;&#31181;&#35299;&#37322;&#24615;&#35821;&#35328;&#24182;&#19981;&#34920;&#31034;&#20320;&#19981;&#24212;&#35813;&#25285;&#24515;&#20195;&#30721;&#20248;&#21270;&#12290;&#20294;&#20063;&#19981;&#24517;<span class="emphasis"><em>&#22826;</em></span> &#25285;&#24515;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soundex.divein"></a>18.1.&nbsp;&#27010;&#35272;</h2></div></div></div><div class="abstract"><p>&#30001;&#20110;&#20195;&#30721;&#20248;&#21270;&#36807;&#31243;&#20013;&#23384;&#22312;&#22826;&#22810;&#30340;&#19981;&#26126;&#30830;&#22240;&#32032;&#65292;&#20197;&#33267;&#20110;&#20320;&#24456;&#38590;&#28165;&#26970;&#35813;&#20174;&#20309;&#20837;&#25163;&#12290;</p></div><p>&#35753;&#25105;&#20204;&#20174;&#36825;&#37324;&#24320;&#22987;&#65306;<span class="emphasis"><em>&#20320;&#30495;&#30340;&#30830;&#20449;&#20320;&#35201;&#36825;&#26679;&#20570;&#21527;&#65311;</em></span>  &#20320;&#30340;&#20195;&#30721;&#30495;&#30340;&#37027;&#20040;&#24046;&#21527;&#65311;&#20540;&#24471;&#33457;&#26102;&#38388;&#21435;&#20248;&#21270;&#23427;&#21527;&#65311;&#22312;&#20320;&#30340;&#24212;&#29992;&#31243;&#24207;&#30340;&#29983;&#21629;&#21608;&#26399;&#20013;&#65292;&#19982;&#33457;&#36153;&#22312;&#31561;&#24453;&#19968;&#20010;&#36828;&#31243;&#25968;&#25454;&#24211;&#26381;&#21153;&#22120;&#65292;&#25110;&#26159;&#31561;&#24453;&#29992;&#25143;&#36755;&#20837;&#30456;&#27604;&#65292;&#36816;&#34892;&#36825;&#27573;&#20195;&#30721;&#23558;&#33457;&#36153;&#22810;&#23569;&#26102;&#38388;&#65311;</p><p>&#31532;&#20108;&#65292;<span class="emphasis"><em>&#20320;&#30830;&#20449;&#24050;&#32463;&#23436;&#25104;&#20195;&#30721;&#32534;&#20889;&#20102;&#21527;&#65311;</em></span> &#36807;&#26089;&#30340;&#20248;&#21270;&#23601;&#20687;&#26159;&#22312;&#19968;&#22359;&#21322;&#29983;&#19981;&#29087;&#30340;&#34507;&#31957;&#19978;&#25746;&#31958;&#38684;&#12290;&#20320;&#33457;&#36153;&#20102;&#20960;&#23567;&#26102;&#12289;&#20960;&#22825; (&#25110;&#26356;&#38271;) &#26102;&#38388;&#26469;&#20248;&#21270;&#20320;&#30340;&#20195;&#30721;&#20197;&#25552;&#39640;&#24615;&#33021;&#65292;&#21364;&#21457;&#29616;&#23427;&#19981;&#33021;&#23436;&#25104;&#20320;&#24076;&#26395;&#23427;&#20570;&#30340;&#24037;&#20316;&#12290;&#37027;&#26159;&#28010;&#36153;&#26102;&#38388;&#12290;</p><p>&#36825;&#24182;&#19981;&#26159;&#35828;&#20195;&#30721;&#20248;&#21270;&#27627;&#26080;&#29992;&#22788;&#65292;&#20294;&#26159;&#20320;&#38656;&#35201;&#26816;&#26597;&#19968;&#19979;&#25972;&#20010;&#31995;&#32479;&#65292;&#24182;&#19988;&#30830;&#23450;&#25226;&#26102;&#38388;&#33457;&#22312;&#36825;&#19978;&#38754;&#26159;&#20540;&#24471;&#30340;&#12290;&#22312;&#20248;&#21270;&#20195;&#30721;&#19978;&#27599;&#33457;&#36153;&#19968;&#20998;&#38047;&#65292;&#23601;&#24847;&#21619;&#30528;&#20320;&#23569;&#20102;&#22686;&#21152;&#26032;&#21151;&#33021;&#12289;&#32534;&#20889;&#25991;&#26723;&#25110;&#32773;&#38506;&#20320;&#30340;&#23401;&#23376;&#29609;&#25110;&#32773;&#32534;&#20889;&#21333;&#20803;&#27979;&#35797;&#30340;&#19968;&#20998;&#38047;&#12290;</p><p>&#21734;&#65292;&#26159;&#30340;&#65292;&#21333;&#20803;&#27979;&#35797;&#12290;&#19981;&#24517;&#25105;&#35828;&#65292;&#22312;&#24320;&#22987;&#24615;&#33021;&#20248;&#21270;&#20043;&#21069;&#20320;&#38656;&#35201;&#19968;&#20010;&#23436;&#20840;&#30340;&#21333;&#20803;&#27979;&#35797;&#38598;&#12290;&#20320;&#26368;&#19981;&#38656;&#35201;&#30340;&#23601;&#26159;&#22312;&#20081;&#21160;&#20320;&#30340;&#31639;&#27861;&#26102;&#24341;&#20837;&#26032;&#30340;&#38382;&#39064;&#12290;</p><p>&#35880;&#35760;&#30528;&#36825;&#20123;&#24544;&#21578;&#65292;&#35753;&#25105;&#20204;&#26469;&#30475;&#19968;&#20123;&#20248;&#21270; <span class="application">Python</span> &#20195;&#30721;&#30340;&#25216;&#26415;&#12290;&#25105;&#20204;&#35201;&#30740;&#31350;&#30340;&#20195;&#30721;&#26159; Soundex &#31639;&#27861;&#30340;&#23454;&#29616;&#12290;Soundex &#26159;&#19968;&#31181; 20 &#19990;&#32426;&#22312;&#32654;&#22269;&#20154;&#21475;&#26222;&#26597;&#20013;&#24402;&#26723;&#22995;&#27663;&#30340;&#26041;&#27861;&#12290;&#23427;&#25226;&#21548;&#36215;&#26469;&#30456;&#20284;&#30340;&#22995;&#27663;&#24402;&#22312;&#19968;&#36215;&#65292;&#20351;&#24471;&#22312;&#21363;&#20415;&#38169;&#35823;&#25340;&#20889;&#30340;&#24773;&#20917;&#19979;&#35843;&#26597;&#32773;&#20173;&#33021;&#26597;&#25214;&#21040;&#12290;Soundex &#20170;&#22825;&#20173;&#28982;&#22240;&#24046;&#19981;&#22810;&#30340;&#21407;&#22240;&#34987;&#24212;&#29992;&#30528;&#65292;&#24403;&#28982;&#29616;&#22312;&#29992;&#35745;&#31639;&#26426;&#25968;&#25454;&#24211;&#26381;&#21153;&#22120;&#20102;&#12290;&#22823;&#37096;&#20998;&#30340;&#25968;&#25454;&#24211;&#26381;&#21153;&#22120;&#37117;&#26377; Soundex &#20989;&#25968;&#12290;</p><p>Soundex &#31639;&#27861;&#26377;&#20960;&#20010;&#24046;&#21035;&#19981;&#22823;&#30340;&#21464;&#21270;&#29256;&#26412;&#12290;&#36825;&#26159;&#26412;&#31456;&#20351;&#29992;&#30340;&#65306;</p><div class="orderedlist"><ol type="1"><li>&#21517;&#23383;&#30340;&#31532;&#19968;&#20010;&#23383;&#27597;&#19981;&#21464;&#12290;</li><li>&#26681;&#25454;&#29305;&#23450;&#30340;&#23545;&#29031;&#34920;&#65292;&#23558;&#21097;&#19979;&#30340;&#23383;&#27597;&#36716;&#25442;&#20026;&#25968;&#23383;&#65306;<div class="itemizedlist"><ul><li>B&#12289; F&#12289; P &#21644; V &#36716;&#25442;&#20026; 1&#12290;</li><li>C&#12289; G&#12289; J&#12289; K&#12289; Q&#12289; S&#12289; X &#21644; Z &#36716;&#25442;&#20026; 2&#12290;</li><li>D &#21644; T &#36716;&#25442;&#20026; 3&#12290;</li><li>L &#36716;&#25442;&#20026; 4&#12290;</li><li>M &#21644; N &#36716;&#25442;&#20026; 5&#12290;</li><li>R &#36716;&#25442;&#20026; 6&#12290;</li><li>&#25152;&#26377;&#20854;&#20182;&#23383;&#27597;&#36716;&#25442;&#20026; 9&#12290;</li></ul></div></li><li>&#21435;&#38500;&#36830;&#32493;&#37325;&#22797;&#12290;</li><li>&#21435;&#38500;&#25152;&#26377; 9&#12290;</li><li>&#22914;&#26524;&#32467;&#26524;&#37117;&#23569;&#20110;&#22235;&#20010;&#23383;&#31526; (&#31532;&#19968;&#20010;&#23383;&#27597;&#21152;&#19978;&#21518;&#38754;&#30340;&#19977;&#20301;&#23383;&#31526;)&#65292;&#23601;&#20197;&#38646;&#34917;&#40784;&#12290;</li><li>&#22914;&#26524;&#32467;&#26524;&#36229;&#36807;&#22235;&#20010;&#23383;&#31526;&#65292;&#20002;&#24323;&#25481;&#22235;&#20301;&#20043;&#21518;&#30340;&#23383;&#31526;&#12290;</li></ol></div><p>&#27604;&#22914;&#65292;&#25105;&#30340;&#21517;&#23383; <code class="literal">Pilgrim</code> &#34987;&#36716;&#25442;&#20026; P942695&#12290;&#27809;&#26377;&#36830;&#32493;&#37325;&#22797;&#65292;&#25152;&#20197;&#36825;&#19968;&#27493;&#19981;&#38656;&#35201;&#20570;&#12290;&#28982;&#21518;&#26159;&#21435;&#38500; 9&#65292;&#21097;&#19979; P4265&#12290;&#22826;&#38271;&#20102;&#65292;&#25152;&#20197;&#20320;&#25226;&#36229;&#20986;&#30340;&#23383;&#31526;&#20002;&#24323;&#65292;&#21097;&#19979; P426&#12290;</p><p>&#21478;&#19968;&#20010;&#20363;&#23376;&#65306;<code class="literal">Woo</code> &#34987;&#36716;&#25442;&#20026; W99&#65292;&#21464;&#25104; W9&#65292;&#21464;&#25104; W&#65292;&#28982;&#21518;&#20197;&#34917;&#38646;&#25104;&#20026; W000&#12290;</p><p>&#36825;&#26159; Soundex &#20989;&#25968;&#30340;&#31532;&#19968;&#27425;&#23581;&#35797;&#65306;</p><div class="example"><a name="d0e39037"></a><p class="title"><b>&#20363;&nbsp;18.1.&nbsp;<code class="filename">soundex/stage1/soundex1a.py</code></b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="programlisting">
import string, re

charToSoundex = {"A": "9",
                 "B": "1",
                 "C": "2",
                 "D": "3",
                 "E": "9",
                 "F": "1",
                 "G": "2",
                 "H": "9",
                 "I": "9",
                 "J": "2",
                 "K": "2",
                 "L": "4",
                 "M": "5",
                 "N": "5",
                 "O": "9",
                 "P": "1",
                 "Q": "2",
                 "R": "6",
                 "S": "2",
                 "T": "3",
                 "U": "9",
                 "V": "1",
                 "W": "9",
                 "X": "2",
                 "Y": "9",
                 "Z": "2"}

def soundex(source):
    "convert string to Soundex equivalent"

    # Soundex requirements:
    # source string must be at least 1 character
    # and must consist entirely of letters
    allChars = string.uppercase + string.lowercase
    if not re.search('^[%s]+$' % allChars, source):
        return "0000"

    # Soundex algorithm:
    # 1. make first character uppercase
    source = source[0].upper() + source[1:]
    
    # 2. translate all other characters to Soundex digits
    digits = source[0]
    for s in source[1:]:
        s = s.upper()
        digits += charToSoundex[s]

    # 3. remove consecutive duplicates
    digits2 = digits[0]
    for d in digits[1:]:
        if digits2[-1] != d:
            digits2 += d
        
    # 4. remove all "9"s
    digits3 = re.sub('9', '', digits2)
    
    # 5. pad end with "0"s to 4 characters
    while len(digits3) &lt; 4:
        digits3 += "0"
        
    # 6. return first 4 characters
    return digits3[:4]

if __name__ == '__main__':
    from timeit import Timer
    names = ('Woo', 'Pilgrim', 'Flingjingwaller')
    for name in names:
        statement = "soundex('%s')" % name
        t = Timer(statement, "from __main__ import soundex")
        print name.ljust(15), soundex(name), min(t.repeat())
</pre></div></div><br class="example-break"><div class="itemizedlist"><p class="title"><b>&#36827;&#19968;&#27493;&#38405;&#35835;</b></p><ul><li>Soundexing and Genealogy (<a href="http://www.avotaynu.com/soundex.html">http://www.avotaynu.com/soundex.html</a>) &#32473;&#20986;&#20102; Soundex &#21457;&#23637;&#30340;&#24180;&#20195;&#34920;&#20197;&#21450;&#22320;&#22495;&#21464;&#21270;&#12290;</li></ul></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soundex.timeit"></a>18.2.&nbsp;&#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;</h2></div></div></div><div class="abstract"><p>&#20851;&#20110; <span class="application">Python</span> &#20195;&#30721;&#20248;&#21270;&#20320;&#38656;&#35201;&#30693;&#36947;&#30340;&#26368;&#37325;&#35201;&#38382;&#39064;&#26159;&#65292;&#20915;&#19981;&#35201;&#33258;&#24049;&#32534;&#20889;&#35745;&#26102;&#20989;&#25968;&#12290;</p></div><p>&#20026;&#19968;&#20010;&#24456;&#30701;&#30340;&#20195;&#30721;&#35745;&#26102;&#37117;&#24456;&#22797;&#26434;&#12290;&#22788;&#29702;&#22120;&#26377;&#22810;&#23569;&#26102;&#38388;&#29992;&#20110;&#36816;&#34892;&#36825;&#20010;&#20195;&#30721;&#65311;&#26377;&#20160;&#20040;&#22312;&#21518;&#21488;&#36816;&#34892;&#21527;&#65311;&#27599;&#20010;&#29616;&#20195;&#35745;&#31639;&#26426;&#37117;&#22312;&#21518;&#21488;&#36816;&#34892;&#25345;&#32493;&#25110;&#32773;&#38388;&#27463;&#30340;&#31243;&#24207;&#12290;&#23567;&#23567;&#30340;&#30095;&#24573;&#21487;&#33021;&#30772;&#22351;&#20320;&#30340;&#30334;&#24180;&#22823;&#35745;&#65292;&#21518;&#21488;&#26381;&#21153;&#20598;&#23572;&#34987; "<span class="quote">&#21796;&#37266;</span>" &#22312;&#26368;&#21518;&#21315;&#20998;&#20043;&#19968;&#31186;&#20570;&#19968;&#20123;&#20687;&#26597;&#25910;&#20449;&#20214;&#65292;&#36830;&#25509;&#35745;&#26102;&#36890;&#20449;&#26381;&#21153;&#22120;&#65292;&#26816;&#26597;&#24212;&#29992;&#31243;&#24207;&#26356;&#26032;&#65292;&#25195;&#25551;&#30149;&#27602;&#65292;&#26597;&#30475;&#26159;&#21542;&#26377;&#30913;&#30424;&#34987;&#25554;&#20837;&#20809;&#39537;&#20043;&#31867;&#24456;&#26377;&#24847;&#20041;&#30340;&#20107;&#12290;&#22312;&#24320;&#22987;&#35745;&#26102;&#27979;&#35797;&#20043;&#21069;&#65292;&#25226;&#19968;&#20999;&#37117;&#20851;&#25481;&#65292;&#26029;&#24320;&#32593;&#32476;&#30340;&#36830;&#25509;&#12290;&#20877;&#27425;&#30830;&#23450;&#19968;&#20999;&#37117;&#20851;&#19978;&#21518;&#20851;&#25481;&#37027;&#20123;&#19981;&#26029;&#26597;&#30475;&#32593;&#32476;&#26159;&#21542;&#24674;&#22797;&#30340;&#26381;&#21153;&#31561;&#31561;&#12290;</p><p>&#25509;&#19979;&#26469;&#26159;&#35745;&#26102;&#26694;&#26550;&#26412;&#36523;&#24341;&#20837;&#30340;&#21464;&#21270;&#22240;&#32032;&#12290;<span class="application">Python</span> &#35299;&#37322;&#22120;&#26159;&#21542;&#32531;&#23384;&#20102;&#26041;&#27861;&#21517;&#30340;&#26597;&#25214;&#65311;&#26159;&#21542;&#32531;&#23384;&#20195;&#30721;&#22359;&#30340;&#32534;&#35793;&#32467;&#26524;&#65311;&#27491;&#21017;&#34920;&#36798;&#24335;&#21602;? &#20320;&#30340;&#20195;&#30721;&#37325;&#22797;&#36816;&#34892;&#26102;&#26377;&#21103;&#20316;&#29992;&#21527;&#65311;&#19981;&#35201;&#24536;&#35760;&#65292;&#20320;&#30340;&#24037;&#20316;&#32467;&#26524;&#23558;&#20197;&#27604;&#31186;&#26356;&#23567;&#30340;&#21333;&#20301;&#21576;&#29616;&#65292;&#20320;&#30340;&#35745;&#26102;&#26694;&#26550;&#20013;&#30340;&#23567;&#38169;&#35823;&#23558;&#20250;&#24102;&#26469;&#19981;&#21487;&#25405;&#22238;&#30340;&#32467;&#26524;&#25197;&#26354;&#12290;</p><p><span class="application">Python</span> &#31038;&#21306;&#26377;&#21477;&#20439;&#35821;&#65306;"<span class="quote"><span class="application">Python</span> &#33258;&#24049;&#24102;&#30528;&#30005;&#27744;&#12290;</span>" &#21035;&#33258;&#24049;&#20889;&#35745;&#26102;&#26694;&#26550;&#12290;<span class="application">Python</span> 2.3 &#20855;&#22791;&#19968;&#20010;&#21483;&#20570; <code class="filename">timeit</code> &#30340;&#23436;&#32654;&#35745;&#26102;&#24037;&#20855;&#12290;</p><div class="example"><a name="d0e39095"></a><p class="title"><b>&#20363;&nbsp;18.2.&nbsp;<code class="filename">timeit</code> &#20171;&#32461;</b></p><div class="example-contents"><p>&#22914;&#26524;&#24744;&#36824;&#27809;&#26377;&#19979;&#36733;&#26412;&#20070;&#38468;&#24102;&#30340;&#26679;&#20363;&#31243;&#24207;, &#21487;&#20197; &#19979;&#36733;&#26412;&#31243;&#24207;&#21644;&#20854;&#20182;&#26679;&#20363;&#31243;&#24207; (<a href="http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip">http://www.woodpecker.org.cn/diveintopython/download/diveintopython-exampleszh-cn-5.4b.zip</a>)&#12290;</p><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">import timeit</span>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t = timeit.Timer("soundex.soundex('Pilgrim')",</span>
<code class="prompt">...     </code><span class="userinput">"import soundex")</span>   <a name="soundex.timeit.1.1"></a>circled_1_delcric
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t.timeit()</span>              <a name="soundex.timeit.1.2"></a>circled_2_delcric
<font color="teal">8.21683733547</font>
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">t.repeat(3, 2000000)</span>    <a name="soundex.timeit.1.3"></a>circled_3_delcric
<font color="teal">[16.48319309109, 16.46128984923, 16.44203948912]</font>
</pre><div class="calloutlist"><dl compact><dt><a href="#soundex.timeit.1.1">circled_1_delcric</a> </dt><dd><code class="filename">timeit</code> &#27169;&#22359;&#23450;&#20041;&#20102;&#25509;&#21463;&#20004;&#20010;&#21442;&#25968;&#30340; <code class="classname">Timer</code> &#31867;&#12290;&#20004;&#20010;&#21442;&#25968;&#37117;&#26159;&#23383;&#31526;&#20018;&#12290;&#31532;&#19968;&#20010;&#21442;&#25968;&#26159;&#20320;&#35201;&#35745;&#26102;&#30340;&#35821;&#21477;&#65292;&#36825;&#37324;&#20320;&#35745;&#26102;&#30340;&#26159;&#20197;<code class="literal">'Pilgrim'</code>&#21442;&#25968;&#35843;&#29992; Soundex &#20989;&#25968;&#12290;&#20256;&#36882;&#32473; <code class="classname">Timer</code> &#30340;&#31532;&#20108;&#20010;&#21442;&#25968;&#26159;&#20026;&#31532;&#19968;&#20010;&#21442;&#25968;&#35821;&#21477;&#26500;&#24314;&#29615;&#22659;&#30340;&#23548;&#20837;&#35821;&#21477;&#12290;&#20174;&#20869;&#37096;&#35762;&#65292;<code class="filename">timeit</code> &#26500;&#24314;&#36215;&#19968;&#20010;&#29420;&#31435;&#30340;&#34394;&#25311;&#29615;&#22659;&#65292;&#25163;&#24037;&#22320;&#25191;&#34892;&#24314;&#31435;&#35821;&#21477; (&#23548;&#20837; <code class="filename">soundex</code> &#27169;&#22359;)&#65292;&#28982;&#21518;&#25163;&#24037;&#22320;&#32534;&#35793;&#21644;&#25191;&#34892;&#34987;&#35745;&#26102;&#35821;&#21477; (&#35843;&#29992; Soundex &#20989;&#25968;)&#12290;</dd><dt><a href="#soundex.timeit.1.2">circled_2_delcric</a> </dt><dd>&#21482;&#35201;&#26377;&#20102; <code class="classname">Timer</code> &#23545;&#35937;&#65292;&#26368;&#31616;&#21333;&#30340;&#20107;&#23601;&#26159;&#35843;&#29992; <code class="methodname">timeit()</code>&#65292;&#23427;&#35843;&#29992;&#20320;&#30340;&#20989;&#25968;&#19968;&#30334;&#19975;&#27425;&#24182;&#36820;&#22238;&#25152;&#32791;&#36153;&#30340;&#31186;&#25968;&#12290;</dd><dt><a href="#soundex.timeit.1.3">circled_3_delcric</a> </dt><dd><code class="classname">Timer</code> &#23545;&#35937;&#30340;&#21478;&#19968;&#20010;&#20027;&#35201;&#26041;&#27861;&#26159; <code class="methodname">repeat()</code>&#65292;&#23427;&#25509;&#21463;&#20004;&#20010;&#21487;&#36873;&#21442;&#25968;&#12290;&#31532;&#19968;&#20010;&#21442;&#25968;&#26159;&#37325;&#22797;&#25972;&#20010;&#27979;&#35797;&#30340;&#27425;&#25968;&#65292;&#31532;&#20108;&#20010;&#21442;&#25968;&#26159;&#27599;&#20010;&#27979;&#35797;&#20013;&#35843;&#29992;&#34987;&#35745;&#26102;&#35821;&#21477;&#30340;&#27425;&#25968;&#12290;&#20004;&#20010;&#21442;&#25968;&#37117;&#26159;&#21487;&#36873;&#30340;&#65292;&#23427;&#20204;&#30340;&#40664;&#35748;&#20540;&#20998;&#21035;&#26159; <code class="literal">3</code> &#21644; <code class="literal">1000000</code>&#12290;<code class="methodname">repeat()</code> &#26041;&#27861;&#36820;&#22238;&#20197;&#31186;&#35760;&#24405;&#30340;&#27599;&#20010;&#27979;&#35797;&#24490;&#29615;&#30340;&#32791;&#26102;&#21015;&#34920;&#12290;</dd></dl></div></div></div><br class="example-break"><div class="tip"><blockquote><b class="title"><a name="d0e39191">&#25552;&#31034;: </a></b><br>&#20320;&#21487;&#20197;&#22312;&#21629;&#20196;&#34892;&#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;&#26469;&#27979;&#35797;&#19968;&#20010;&#24050;&#23384;&#22312;&#30340; <span class="application">Python</span> &#31243;&#24207;&#65292;&#32780;&#19981;&#38656;&#35201;&#20462;&#25913;&#20195;&#30721;&#12290;&#22312; <a href="http://docs.python.org/lib/node396.html">http://docs.python.org/lib/node396.html</a> &#26597;&#30475;&#25991;&#26723;&#20013;&#20851;&#20110;&#21629;&#20196;&#34892;&#36873;&#39033;&#30340;&#20869;&#23481;&#12290;</blockquote></div><p>&#27880;&#24847; <code class="methodname">repeat()</code> &#36820;&#22238;&#19968;&#20010;&#26102;&#38388;&#21015;&#34920;&#12290;&#30001;&#20110; <span class="application">Python</span> &#35745;&#26102;&#22120;&#20351;&#29992;&#30340;&#22788;&#29702;&#22120;&#26102;&#38388;&#30340;&#24494;&#23567;&#21464;&#21270; (&#25110;&#32773;&#37027;&#20123;&#20320;&#27809;&#21150;&#27861;&#26681;&#38500;&#30340;&#21487;&#24694;&#30340;&#21518;&#21488;&#36827;&#31243;)&#65292;&#36825;&#20123;&#26102;&#38388;&#20013;&#20960;&#20046;&#19981;&#21487;&#33021;&#20986;&#29616;&#37325;&#22797;&#12290;&#20320;&#30340;&#31532;&#19968;&#24819;&#27861;&#20063;&#35768;&#26159;&#35828;&#65306;"<span class="quote">&#35753;&#25105;&#20204;&#27714;&#24179;&#22343;&#20540;&#33719;&#24471;&#30495;&#23454;&#30340;&#25968;&#25454;&#12290;</span>"</p><p>&#20107;&#23454;&#19978;&#65292;&#37027;&#20960;&#20046;&#26159;&#30830;&#23450;&#38169;&#35823;&#30340;&#12290;&#20320;&#30340;&#20195;&#30721;&#25110;&#32773; <span class="application">Python</span> &#35299;&#37322;&#22120;&#30340;&#21464;&#21270;&#21487;&#33021;&#32553;&#30701;&#32791;&#26102;&#65292;&#37027;&#20123;&#27809;&#21150;&#27861;&#21435;&#38500;&#30340;&#21487;&#24694;&#21518;&#21488;&#36827;&#31243;&#25110;&#32773;&#20854;&#20182; <span class="application">Python</span> &#35299;&#37322;&#22120;&#20197;&#22806;&#30340;&#22240;&#32032;&#20063;&#35768;&#20196;&#32791;&#26102;&#24310;&#38271;&#12290;&#22914;&#26524;&#35745;&#26102;&#32467;&#26524;&#20043;&#38388;&#30340;&#24046;&#24322;&#36229;&#36807;&#30334;&#20998;&#20043;&#20960;&#65292;&#22826;&#22810;&#30340;&#21487;&#21464;&#22240;&#32032;&#20351;&#20320;&#27809;&#27861;&#30456;&#20449;&#32467;&#26524;&#65292;&#22914;&#26524;&#19981;&#26159;&#36825;&#26679;&#21017;&#21487;&#20197;&#21462;&#26368;&#23567;&#20540;&#32780;&#20002;&#24323;&#20854;&#20182;&#32467;&#26524;&#12290;</p><p><span class="application">Python</span> &#26377;&#19968;&#20010;&#26041;&#20415;&#30340; <code class="function">min</code> &#20989;&#25968;&#36820;&#22238;&#36755;&#20837;&#21015;&#34920;&#20013;&#30340;&#26368;&#23567;&#20540;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">&gt;&gt;&gt; </code><span class="userinput">min(t.repeat(3, 1000000))</span>
<font color="teal">8.22203948912</font>
</pre></div><div class="tip"><blockquote><b class="title"><a name="d0e39239">&#25552;&#31034;: </a></b><br><code class="filename">timeit</code> &#27169;&#22359;&#21482;&#26377;&#22312;&#20320;&#30693;&#36947;&#21738;&#27573;&#20195;&#30721;&#38656;&#35201;&#20248;&#21270;&#26102;&#20351;&#29992;&#12290;&#22914;&#26524;&#20320;&#26377;&#19968;&#20010;&#24456;&#22823;&#30340; <span class="application">Python</span> &#31243;&#24207;&#24182;&#19988;&#19981;&#30693;&#36947;&#20320;&#30340;&#24615;&#33021;&#38382;&#39064;&#25152;&#22312;&#65292;&#26597;&#30475; <code class="filename">hotshot</code> &#27169;&#22359; (<a href="http://docs.python.org/lib/module-hotshot.html">http://docs.python.org/lib/module-hotshot.html</a>)&#12290;</blockquote></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soundex.stage1"></a>18.3.&nbsp;&#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;</h2></div></div></div><div class="abstract"><p> Soundex &#20989;&#25968;&#30340;&#31532;&#19968;&#20214;&#20107;&#26159;&#26816;&#26597;&#36755;&#20837;&#26159;&#21542;&#26159;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#12290;&#24590;&#26679;&#20570;&#26159;&#26368;&#22909;&#30340;&#26041;&#27861;&#65311;</p></div><p>&#22914;&#26524;&#20320;&#22238;&#31572; "<span class="quote">&#27491;&#21017;&#34920;&#36798;&#24335;</span>"&#65292;&#22352;&#22312;&#35282;&#33853;&#37324;&#21453;&#30465;&#20320;&#31967;&#31957;&#30340;&#30452;&#35273;&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#20960;&#20046;&#27704;&#36828;&#19981;&#26159;&#26368;&#22909;&#30340;&#31572;&#26696;&#65292;&#32780;&#19988;&#24212;&#35813;&#34987;&#23613;&#21487;&#33021;&#36991;&#24320;&#12290;&#36825;&#19981;&#20165;&#20165;&#26159;&#22522;&#20110;&#24615;&#33021;&#32771;&#34385;&#65292;&#32780;&#26159;&#22240;&#20026;&#35843;&#35797;&#21644;&#32500;&#25252;&#37117;&#24456;&#22256;&#38590;&#65292;&#24403;&#28982;&#24615;&#33021;&#20063;&#26159;&#20010;&#21407;&#22240;&#12290;</p><p>&#36825;&#26159; <code class="filename">soundex/stage1/soundex1a.py</code> &#26816;&#26597; <code class="varname">source</code> &#26159;&#21542;&#20840;&#37096;&#30001;&#23383;&#27597;&#26500;&#25104;&#30340;&#19968;&#27573;&#20195;&#30721;&#65292;&#33267;&#23569;&#26159;&#19968;&#20010;&#23383;&#27597; (&#32780;&#19981;&#26159;&#31354;&#23383;&#31526;&#20018;)&#65306;</p><div class="informalexample"><pre class="programlisting">
    allChars = string.uppercase + string.lowercase
    if not re.search('^[%s]+$' % allChars, source):
        return "0000"
</pre></div><p><code class="filename">soundex1a.py</code> &#34920;&#29616;&#22914;&#20309;&#65311;&#20026;&#20102;&#26041;&#20415;&#65292;<code class="literal">__main__</code> &#37096;&#20998;&#21253;&#21547;&#20102;&#19968;&#27573;&#20195;&#30721;&#65306;&#35843;&#29992; <code class="filename">timeit</code> &#27169;&#22359;&#65292;&#20026;&#19977;&#20010;&#19981;&#21516;&#21517;&#23383;&#20998;&#21035;&#24314;&#31435;&#27979;&#35797;&#65292;&#20381;&#27425;&#27979;&#35797;&#65292;&#24182;&#26174;&#31034;&#27599;&#20010;&#27979;&#35797;&#30340;&#26368;&#30701;&#32791;&#26102;&#65306;</p><div class="informalexample"><pre class="programlisting">
if __name__ == '__main__':
    from timeit import Timer
    names = ('Woo', 'Pilgrim', 'Flingjingwaller')
    for name in names:
        statement = "soundex('%s')" % name
        t = Timer(statement, "from __main__ import soundex")
        print name.ljust(15), soundex(name), min(t.repeat())
</pre></div><p>&#37027;&#20040;&#65292;&#24212;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340; <code class="filename">soundex1a.py</code> &#34920;&#29616;&#22914;&#20309;&#21602;&#65311;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage1&gt;</code><span class="userinput">python soundex1a.py</span>
<font color="teal">Woo             W000 19.3356647283
Pilgrim         P426 24.0772053431
Flingjingwaller F452 35.0463220884</font>
</pre></div><p>&#27491;&#22914;&#20320;&#39044;&#26009;&#65292;&#21517;&#23383;&#36234;&#38271;&#65292;&#31639;&#27861;&#32791;&#26102;&#23601;&#36234;&#38271;&#12290;&#26377;&#20960;&#20010;&#24037;&#20316;&#21487;&#20197;&#20196;&#25105;&#20204;&#20943;&#23567;&#36825;&#20010;&#24046;&#36317; (&#20351;&#20989;&#25968;&#23545;&#20110;&#38271;&#36755;&#20837;&#33457;&#36153;&#36739;&#30701;&#30340;&#30456;&#23545;&#26102;&#38388;) &#20294;&#26159;&#31639;&#27861;&#30340;&#26412;&#36136;&#20915;&#23450;&#23427;&#19981;&#21487;&#33021;&#27599;&#27425;&#36816;&#34892;&#26102;&#38388;&#37117;&#30456;&#21516;&#12290;</p><p>&#21478;&#19968;&#28857;&#24212;&#38125;&#35760;&#20110;&#24515;&#30340;&#26159;&#65292;&#25105;&#20204;&#27979;&#35797;&#30340;&#26159;&#26377;&#20195;&#34920;&#24615;&#30340;&#21517;&#23383;&#26679;&#26412;&#12290;<code class="literal">Woo</code> &#26159;&#20010;&#34987;&#32553;&#30701;&#21040;&#21333;&#23383;&#31526;&#24182;&#34917;&#38646;&#30340;&#23567;&#26679;&#26412;&#65307;<code class="literal">Pilgrim</code> &#26159;&#20010;&#22841;&#24102;&#30528;&#29305;&#21035;&#23383;&#31526;&#21644;&#24573;&#30053;&#23383;&#31526;&#30340;&#24179;&#22343;&#38271;&#24230;&#30340;&#27491;&#24120;&#26679;&#26412;&#65307;<code class="literal">Flingjingwaller</code> &#26159;&#19968;&#20010;&#21253;&#21547;&#36830;&#32493;&#37325;&#22797;&#23383;&#31526;&#24182;&#19988;&#29305;&#21035;&#38271;&#30340;&#26679;&#26412;&#12290;&#20854;&#23427;&#30340;&#27979;&#35797;&#21487;&#33021;&#21516;&#26679;&#26377;&#24110;&#21161;&#65292;&#20294;&#23427;&#20204;&#24050;&#32463;&#24456;&#22909;&#22320;&#20195;&#34920;&#20102;&#19981;&#21516;&#30340;&#26679;&#26412;&#33539;&#22260;&#12290;</p><p>&#37027;&#20040;&#37027;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#22914;&#20309;&#21602;&#65311;&#21999;&#65292;&#32570;&#20047;&#25928;&#29575;&#12290;&#22240;&#20026;&#36825;&#20010;&#34920;&#36798;&#24335;&#27979;&#35797;&#19981;&#27490;&#19968;&#20010;&#33539;&#22260;&#30340;&#23383;&#31526; (<code class="literal">A-Z</code> &#30340;&#22823;&#20889;&#33539;&#22260;&#21644; <code class="literal">a-z</code> &#30340;&#23567;&#20889;&#23383;&#27597;&#33539;&#22260;)&#65292;&#25105;&#20204;&#21487;&#20197;&#20351;&#29992;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#32553;&#20889;&#35821;&#27861;&#12290;&#36825;&#20415;&#26159; <code class="filename">soundex/stage1/soundex1b.py</code>:</p><div class="informalexample"><pre class="programlisting">
    if not re.search('^[A-Za-z]+$', source):
        return "0000"
</pre></div><p><code class="filename">timeit</code> &#26174;&#31034; <code class="filename">soundex1b.py</code> &#27604; <code class="filename">soundex1a.py</code> &#31245;&#24494;&#24555;&#19968;&#20123;&#65292;&#20294;&#26159;&#27809;&#20160;&#20040;&#20196;&#20154;&#28608;&#21160;&#30340;&#21464;&#21270;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage1&gt;</code><span class="userinput">python soundex1b.py</span>
<font color="teal">Woo             W000 17.1361133887
Pilgrim         P426 21.8201693232
Flingjingwaller F452 32.7262294509</font>
</pre></div><p>&#22312; <a class="xref" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#31532;&nbsp;15.3&nbsp;&#33410; &#8220;&#37325;&#26500;&#8221;</a> &#20013;&#25105;&#20204;&#30475;&#21040;&#27491;&#21017;&#34920;&#36798;&#24335;&#21487;&#20197;&#34987;&#32534;&#35793;&#24182;&#22312;&#37325;&#29992;&#26102;&#20197;&#26356;&#24555;&#36895;&#24230;&#33719;&#24471;&#32467;&#26524;&#12290;&#22240;&#20026;&#36825;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#22312;&#20989;&#25968;&#20013;&#27599;&#27425;&#34987;&#35843;&#29992;&#26102;&#37117;&#19981;&#21464;&#21270;&#65292;&#25105;&#20204;&#21487;&#20197;&#32534;&#35793;&#23427;&#19968;&#27425;&#24182;&#20351;&#29992;&#34987;&#32534;&#35793;&#30340;&#29256;&#26412;&#12290;&#36825;&#20415;&#26159; <code class="filename">soundex/stage1/soundex1c.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
isOnlyChars = re.compile('^[A-Za-z]+$').search
def soundex(source):
    if not isOnlyChars(source):
        return "0000"
</pre></div><p><code class="filename">soundex1c.py</code> &#20013;&#20351;&#29992;&#34987;&#32534;&#35793;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#20135;&#29983;&#20102;&#26174;&#33879;&#30340;&#25552;&#36895;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage1&gt;</code><span class="userinput">python soundex1c.py</span>
<font color="teal">Woo             W000 14.5348347346
Pilgrim         P426 19.2784703084
Flingjingwaller F452 30.0893873383</font>
</pre></div><p>&#20294;&#26159;&#36825;&#26679;&#30340;&#20248;&#21270;&#26159;&#27491;&#36335;&#21527;&#65311;&#36825;&#37324;&#30340;&#36923;&#36753;&#24456;&#31616;&#21333;&#65306;&#36755;&#20837; <code class="varname">source</code> &#24212;&#35813;&#26159;&#38750;&#31354;&#65292;&#24182;&#19988;&#38656;&#35201;&#23436;&#20840;&#30001;&#23383;&#27597;&#26500;&#25104;&#12290;&#22914;&#26524;&#32534;&#20889;&#19968;&#20010;&#24490;&#29615;&#26597;&#30475;&#27599;&#20010;&#23383;&#31526;&#24182;&#19988;&#25243;&#24323;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#26159;&#21542;&#20250;&#26356;&#24555;&#20123;&#65311;</p><p>&#36825;&#20415;&#26159; <code class="filename">soundex/stage1/soundex1d.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
    if not source:
        return "0000"
    for c in source:
        if not ('A' &lt;= c &lt;= 'Z') and not ('a' &lt;= c &lt;= 'z'):
            return "0000"
</pre></div><p>&#36825;&#20010;&#25216;&#26415;&#22312; <code class="filename">soundex1d.py</code> &#20013;&#24688;&#22909;<span class="emphasis"><em>&#19981;&#21450;</em></span> &#32534;&#35793;&#21518;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#24555; (&#23613;&#31649;&#27604;&#20351;&#29992;&#26410;&#32534;&#35793;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#24555;<sup>[<a name="d0e39400" href="#ftn.d0e39400" class="footnote">14</a>]</sup>)&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage1&gt;</code><span class="userinput">python soundex1d.py</span>
<font color="teal">Woo             W000 15.4065058548
Pilgrim         P426 22.2753567842
Flingjingwaller F452 37.5845122774</font>
</pre></div><p>&#20026;&#20160;&#20040; <code class="filename">soundex1d.py</code> &#27809;&#33021;&#26356;&#24555;&#65311;&#31572;&#26696;&#26469;&#33258; <span class="application">Python</span> &#30340;&#32534;&#35793;&#26412;&#36136;&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#24341;&#25806;&#20197; C &#35821;&#35328;&#32534;&#20889;&#65292;&#34987;&#32534;&#35793;&#21518;&#21017;&#33021;&#26412;&#33021;&#22320;&#22312;&#20320;&#30340;&#35745;&#31639;&#26426;&#19978;&#36816;&#34892;&#12290;&#21478;&#19968;&#26041;&#38754;&#65292;&#24490;&#29615;&#26159;&#20197; <span class="application">Python</span> &#32534;&#20889;&#65292;&#35201;&#36890;&#36807; <span class="application">Python</span> &#35299;&#37322;&#22120;&#12290;&#23613;&#31649;&#24490;&#29615;&#30456;&#23545;&#31616;&#21333;&#65292;&#20294;&#27809;&#33021;&#31616;&#21333;&#21040;&#34917;&#20607;&#33457;&#22312;&#20195;&#30721;&#35299;&#37322;&#19978;&#30340;&#26102;&#38388;&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#27704;&#36828;&#19981;&#26159;&#27491;&#30830;&#31572;&#26696;&#8230;&#8230;&#20294;&#20363;&#22806;&#36824;&#26159;&#23384;&#22312;&#30340;&#12290;</p><p>&#24688;&#24039; <span class="application">Python</span> &#25552;&#20379;&#20102;&#19968;&#20010;&#26214;&#28073;&#30340;&#23383;&#31526;&#20018;&#26041;&#27861;&#12290;&#20320;&#26377;&#29702;&#30001;&#19981;&#20102;&#35299;&#23427;&#65292;&#22240;&#20026;&#26412;&#20070;&#26410;&#26366;&#25552;&#21040;&#23427;&#12290;&#36825;&#20010;&#26041;&#27861;&#20415;&#26159; <code class="methodname">isalpha()</code>&#65292;&#23427;&#26816;&#26597;&#19968;&#20010;&#23383;&#31526;&#20018;&#26159;&#21542;&#21482;&#21253;&#21547;&#23383;&#27597;&#12290;</p><p>&#36825;&#20415;&#26159; <code class="filename">soundex/stage1/soundex1e.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
    if (not source) and (not source.isalpha()):
        return "0000"
</pre></div><p>&#22312; <code class="filename">soundex1e.py</code> &#20013;&#24212;&#29992;&#36825;&#20010;&#29305;&#27530;&#26041;&#27861;&#25105;&#20204;&#33021;&#24471;&#21040;&#22810;&#23569;&#22909;&#22788;?  &#24456;&#22810;&#12290;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage1&gt;</code><span class="userinput">python soundex1e.py</span>
<font color="teal">Woo             W000 13.5069504644
Pilgrim         P426 18.2199394057
Flingjingwaller F452 28.9975225902</font>
</pre></div><div class="example"><a name="d0e39467"></a><p class="title"><b>&#20363;&nbsp;18.3.&nbsp;&#30446;&#21069;&#20026;&#27490;&#26368;&#22909;&#30340;&#32467;&#26524;&#65306;<code class="filename">soundex/stage1/soundex1e.py</code></b></p><div class="example-contents"><pre class="programlisting">
import string, re

charToSoundex = {"A": "9",
                 "B": "1",
                 "C": "2",
                 "D": "3",
                 "E": "9",
                 "F": "1",
                 "G": "2",
                 "H": "9",
                 "I": "9",
                 "J": "2",
                 "K": "2",
                 "L": "4",
                 "M": "5",
                 "N": "5",
                 "O": "9",
                 "P": "1",
                 "Q": "2",
                 "R": "6",
                 "S": "2",
                 "T": "3",
                 "U": "9",
                 "V": "1",
                 "W": "9",
                 "X": "2",
                 "Y": "9",
                 "Z": "2"}

def soundex(source):
    if (not source) and (not source.isalpha()):
        return "0000"
    source = source[0].upper() + source[1:]
    digits = source[0]
    for s in source[1:]:
        s = s.upper()
        digits += charToSoundex[s]
    digits2 = digits[0]
    for d in digits[1:]:
        if digits2[-1] != d:
            digits2 += d
    digits3 = re.sub('9', '', digits2)
    while len(digits3) &lt; 4:
        digits3 += "0"
    return digits3[:4]

if __name__ == '__main__':
    from timeit import Timer
    names = ('Woo', 'Pilgrim', 'Flingjingwaller')
    for name in names:
        statement = "soundex('%s')" % name
        t = Timer(statement, "from __main__ import soundex")
        print name.ljust(15), soundex(name), min(t.repeat())
</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soundex.stage2"></a>18.4.&nbsp;&#20248;&#21270;&#23383;&#20856;&#26597;&#25214;</h2></div></div></div><div class="abstract"><p> Soundex &#31639;&#27861;&#30340;&#31532;&#20108;&#27493;&#26159;&#20381;&#29031;&#29305;&#23450;&#35268;&#21017;&#23558;&#23383;&#31526;&#36716;&#25442;&#20026;&#25968;&#23383;&#12290;&#20570;&#21040;&#36825;&#28857;&#26368;&#22909;&#30340;&#26041;&#27861;&#26159;&#20160;&#20040;&#65311;</p></div><p>&#26368;&#26126;&#26174;&#30340;&#35299;&#20915;&#26041;&#26696;&#26159;&#23450;&#20041;&#19968;&#20010;&#20197;&#21333;&#23383;&#31526;&#20026;&#38190;&#24182;&#20197;&#25152;&#23545;&#24212;&#25968;&#23383;&#20026;&#20540;&#30340;&#23383;&#20856;&#65292;&#20197;&#23383;&#20856;&#26597;&#25214;&#27599;&#20010;&#23383;&#31526;&#12290;&#36825;&#20415;&#26159; <code class="filename">soundex/stage1/soundex1e.py</code> &#20013;&#20351;&#29992;&#30340;&#26041;&#27861; (&#30446;&#21069;&#26368;&#22909;&#30340;&#32467;&#26524;)&#65306;</p><div class="informalexample"><pre class="programlisting">
charToSoundex = {"A": "9",
                 "B": "1",
                 "C": "2",
                 "D": "3",
                 "E": "9",
                 "F": "1",
                 "G": "2",
                 "H": "9",
                 "I": "9",
                 "J": "2",
                 "K": "2",
                 "L": "4",
                 "M": "5",
                 "N": "5",
                 "O": "9",
                 "P": "1",
                 "Q": "2",
                 "R": "6",
                 "S": "2",
                 "T": "3",
                 "U": "9",
                 "V": "1",
                 "W": "9",
                 "X": "2",
                 "Y": "9",
                 "Z": "2"}

def soundex(source):
    # ... input check omitted for brevity ...
    source = source[0].upper() + source[1:]
    digits = source[0]
    for s in source[1:]:
        s = s.upper()
        digits += charToSoundex[s]
</pre></div><p>&#20320;&#24050;&#32463;&#20026; <code class="filename">soundex1e.py</code> &#35745;&#26102;&#65292;&#36825;&#20415;&#26159;&#20854;&#34920;&#29616;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage1&gt;</code><span class="userinput">python soundex1c.py</span>
<font color="teal">Woo             W000 13.5069504644
Pilgrim         P426 18.2199394057
Flingjingwaller F452 28.9975225902</font>
</pre></div><p>&#36825;&#27573;&#20195;&#30721;&#24456;&#30452;&#25509;&#65292;&#20294;&#23427;&#26159;&#26368;&#20339;&#35299;&#20915;&#26041;&#26696;&#21527;&#65311;&#20026;&#27599;&#20010;&#23383;&#31526;&#20998;&#21035;&#35843;&#29992; <code class="methodname">upper()</code> &#30475;&#36215;&#26469;&#19981;&#26159;&#24456;&#26377;&#25928;&#29575;&#65292;&#20026;&#25972;&#20010;&#23383;&#31526;&#20018;&#35843;&#29992; <code class="methodname">upper()</code> &#19968;&#27425;&#21487;&#33021;&#20250;&#22909;&#20123;&#12290;</p><p>&#28982;&#21518;&#26159;&#19968;&#30742;&#19968;&#29926;&#22320;&#24314;&#31435; <code class="varname">digits</code> &#23383;&#31526;&#20018;&#12290;&#19968;&#30742;&#19968;&#29926;&#30340;&#24314;&#36896;&#22909;&#20687;&#38750;&#24120;&#27424;&#32570;&#25928;&#29575;&#12290;&#22312; <span class="application">Python</span> &#20869;&#37096;&#65292;&#35299;&#37322;&#22120;&#38656;&#35201;&#22312;&#24490;&#29615;&#30340;&#27599;&#19968;&#36718;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#23383;&#31526;&#20018;&#65292;&#28982;&#21518;&#20002;&#24323;&#26087;&#30340;&#12290;</p><p>&#20294;&#26159;&#65292;<span class="application">Python</span> &#25797;&#38271;&#20110;&#21015;&#34920;&#12290;&#21487;&#20197;&#33258;&#21160;&#22320;&#23558;&#23383;&#31526;&#20018;&#20316;&#20026;&#21015;&#34920;&#26469;&#23545;&#24453;&#12290;&#32780;&#19988;&#20351;&#29992; <code class="methodname">join()</code> &#26041;&#27861;&#21487;&#20197;&#24456;&#23481;&#26131;&#22320;&#23558;&#21015;&#34920;&#21512;&#24182;&#25104;&#23383;&#31526;&#20018;&#12290;</p><p>&#36825;&#20415;&#26159; <code class="filename">soundex/stage2/soundex2a.py</code>&#65292;&#36890;&#36807; <code class="literal">map</code> &#21644; <code class="literal">lambda</code> &#25226;&#25152;&#26377;&#23383;&#27597;&#36716;&#25442;&#20026;&#25968;&#23383;&#65306;</p><div class="informalexample"><pre class="programlisting">
def soundex(source):
    # ...
    source = source.upper()
    digits = source[0] + "".join(map(lambda c: charToSoundex[c], source[1:]))
</pre></div><p>&#22826;&#38663;&#24778;&#20102;&#65292;<code class="filename">soundex2a.py</code> &#24182;&#19981;&#24555;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage2&gt;</code><span class="userinput">python soundex2a.py</span>
<font color="teal">Woo             W000 15.0097526362
Pilgrim         P426 19.254806407
Flingjingwaller F452 29.3790847719</font>
</pre></div><p>&#21311;&#21517; <code class="literal">lambda</code> &#20989;&#25968;&#30340;&#20351;&#29992;&#32791;&#36153;&#25481;&#20102;&#20174;&#20197;&#23383;&#31526;&#21015;&#34920;&#26367;&#20195;&#23383;&#31526;&#20018;&#20105;&#21462;&#26469;&#30340;&#26102;&#38388;&#12290;</p><p><code class="filename">soundex/stage2/soundex2b.py</code> &#20351;&#29992;&#20102;&#19968;&#20010;&#21015;&#34920;&#36941;&#21382;&#26469;&#26367;&#20195; <code class="literal">map</code> &#21644; <code class="literal">lambda</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
    source = source.upper()
    digits = source[0] + "".join([charToSoundex[c] for c in source[1:]])
</pre></div><p>&#22312; <code class="filename">soundex2b.py</code> &#20013;&#20351;&#29992;&#21015;&#34920;&#36941;&#21382;&#27604; <code class="filename">soundex2a.py</code> &#20013;&#20351;&#29992; <code class="literal">map</code> &#21644; <code class="literal">lambda</code> &#24555;&#65292;&#20294;&#36824;&#27809;&#26377;&#26368;&#21021;&#30340;&#20195;&#30721;&#24555; (<code class="filename">soundex1e.py</code> &#20013;&#19968;&#30742;&#19968;&#29926;&#30340;&#26500;&#24314;&#23383;&#31526;&#20018;<sup>[<a name="d0e39596" href="#ftn.d0e39596" class="footnote">15</a>]</sup>)&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage2&gt;</code><span class="userinput">python soundex2b.py</span>
<font color="teal">Woo             W000 13.4221324219
Pilgrim         P426 16.4901234654
Flingjingwaller F452 25.8186157738</font>
</pre></div><p>&#26159;&#26102;&#20505;&#20174;&#26412;&#36136;&#19981;&#21516;&#30340;&#26041;&#27861;&#26469;&#24605;&#32771;&#20102;&#12290;&#23383;&#20856;&#26597;&#25214;&#26159;&#19968;&#20010;&#26222;&#36890;&#30446;&#30340;&#23454;&#29616;&#24037;&#20855;&#12290;&#23383;&#20856;&#30340;&#38190;&#21487;&#20197;&#26159;&#20219;&#24847;&#38271;&#24230;&#30340;&#23383;&#31526;&#20018; (&#25110;&#32773;&#24456;&#22810;&#20854;&#20182;&#25968;&#25454;&#31867;&#22411;) &#20294;&#36825;&#37324;&#25105;&#20204;&#21482;&#21644;&#21333;&#23383;&#31526;&#38190;<span class="emphasis"><em>&#21644;</em></span> &#21333;&#23383;&#31526;&#20540;&#25171;&#20132;&#36947;&#12290;&#24688;&#24039; <span class="application">Python</span> &#26377;&#22788;&#29702;&#36825;&#31181;&#24773;&#20917;&#30340;&#29305;&#21035;&#20989;&#25968;&#65306;<code class="function">string.maketrans</code> &#20989;&#25968;&#12290;</p><p>&#36825;&#20415;&#26159; <code class="filename">soundex/stage2/soundex2c.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
allChar = string.uppercase + string.lowercase
charToSoundex = string.maketrans(allChar, "91239129922455912623919292" * 2)
def soundex(source):
    # ...
    digits = source[0].upper() + source[1:].translate(charToSoundex)
</pre></div><p>&#36825;&#20799;&#22312;&#24178;&#20160;&#20040;&#65311;<code class="function">string.maketrans</code> &#21019;&#24314;&#19968;&#20010;&#20004;&#20010;&#23383;&#31526;&#20018;&#38388;&#30340;&#32763;&#35793;&#30697;&#38453;&#65306;&#31532;&#19968;&#21442;&#25968;&#21644;&#31532;&#20108;&#21442;&#25968;&#12290;&#23601;&#27492;&#32780;&#35328;&#65292;&#31532;&#19968;&#20010;&#21442;&#25968;&#26159;&#23383;&#31526;&#20018; <code class="literal">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz</code>&#65292;&#31532;&#20108;&#20010;&#21442;&#25968;&#26159;&#23383;&#31526;&#20018; <code class="literal">9123912992245591262391929291239129922455912623919292</code>&#12290;&#30475;&#21040;&#20854;&#27169;&#24335;&#20102;&#65311;&#24688;&#22909;&#19982;&#25105;&#20204;&#29992;&#20887;&#38271;&#30340;&#23383;&#20856;&#26500;&#24314;&#30340;&#27169;&#24335;&#30456;&#21516;&#12290;A &#26144;&#23556;&#21040; 9&#65292;B &#26144;&#23556;&#21040; 1&#65292;C &#26144;&#23556;&#21040; 2 &#31561;&#31561;&#12290;&#20294;&#23427;&#19981;&#26159;&#19968;&#20010;&#23383;&#20856;&#12290;&#32780;&#26159;&#19968;&#20010;&#20320;&#21487;&#20197;&#36890;&#36807;&#23383;&#31526;&#20018;&#26041;&#27861; <code class="methodname">translate</code> &#20351;&#29992;&#30340;&#29305;&#21035;&#25968;&#25454;&#32467;&#26500;&#12290;&#23427;&#26681;&#25454; <code class="function">string.maketrans</code> &#23450;&#20041;&#30340;&#30697;&#38453;&#23558;&#27599;&#20010;&#23383;&#31526;&#32763;&#35793;&#20026;&#23545;&#24212;&#30340;&#25968;&#23383;&#12290;</p><p><code class="filename">timeit</code> &#26174;&#31034; <code class="filename">soundex2c.py</code> &#27604;&#23450;&#20041;&#23383;&#20856;&#24182;&#23545;&#36755;&#20837;&#36827;&#34892;&#24490;&#29615;&#19968;&#30742;&#19968;&#29926;&#22320;&#26500;&#24314;&#36755;&#20986;&#24555;&#24456;&#22810;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage2&gt;</code><span class="userinput">python soundex2c.py</span>
<font color="teal">Woo             W000 11.437645008
Pilgrim         P426 13.2825062962
Flingjingwaller F452 18.5570110168</font>
</pre></div><p>&#20320;&#19981;&#21487;&#33021;&#20570;&#24471;&#26356;&#22810;&#20102;&#12290;<span class="application">Python</span> &#26377;&#19968;&#20010;&#29305;&#27530;&#20989;&#25968;&#65292;&#36890;&#36807;&#20351;&#29992;&#23427;&#20570;&#21040;&#20102;&#19968;&#20010;&#21644;&#20320;&#30340;&#24037;&#20316;&#24046;&#19981;&#22810;&#30340;&#20107;&#24773;&#12290;&#23601;&#29992;&#23427;&#24182;&#32487;&#32493;&#21543;&#65281;</p><div class="example"><a name="d0e39676"></a><p class="title"><b>&#20363;&nbsp;18.4.&nbsp;&#30446;&#21069;&#30340;&#26368;&#20339;&#32467;&#26524;&#65306;<code class="filename">soundex/stage2/soundex2c.py</code></b></p><div class="example-contents"><pre class="programlisting">
import string, re

allChar = string.uppercase + string.lowercase
charToSoundex = string.maketrans(allChar, "91239129922455912623919292" * 2)

def soundex(source):
    if (not source) or (not source.isalpha()):
        return "0000"
    digits = source[0].upper() + source[1:].translate(charToSoundex)
    digits2 = digits[0]
    for d in digits[1:]:
        if digits2[-1] != d:
            digits2 += d
    digits3 = re.sub('9', '', digits2)
    while len(digits3) &lt; 4:
        digits3 += "0"
    return digits3[:4]

if __name__ == '__main__':
    from timeit import Timer
    names = ('Woo', 'Pilgrim', 'Flingjingwaller')
    for name in names:
        statement = "soundex('%s')" % name
        t = Timer(statement, "from __main__ import soundex")
        print name.ljust(15), soundex(name), min(t.repeat())
</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soundex.stage3"></a>18.5.&nbsp;&#20248;&#21270;&#21015;&#34920;&#25805;&#20316;</h2></div></div></div><div class="abstract"><p>Soundex &#31639;&#27861;&#30340;&#31532;&#19977;&#27493;&#26159;&#21435;&#38500;&#36830;&#32493;&#37325;&#22797;&#23383;&#31526;&#12290;&#24590;&#26679;&#20570;&#26159;&#26368;&#20339;&#26041;&#27861;&#65311;</p></div><p>&#36825;&#37324;&#26159;&#25105;&#20204;&#30446;&#21069;&#22312; <code class="filename">soundex/stage2/soundex2c.py</code> &#20013;&#30340;&#20195;&#30721;&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits2 = digits[0]
    for d in digits[1:]:
        if digits2[-1] != d:
            digits2 += d
</pre></div><p>&#36825;&#37324;&#26159; <code class="filename">soundex2c.py</code> &#30340;&#24615;&#33021;&#34920;&#29616;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage2&gt;</code><span class="userinput">python soundex2c.py</span>
<font color="teal">Woo             W000 11.437645008
Pilgrim         P426 13.2825062962
Flingjingwaller F452 18.5570110168</font>
</pre></div><p>&#31532;&#19968;&#20214;&#20107;&#26159;&#32771;&#34385;&#65292;&#32771;&#23519;&#22312;&#24490;&#29615;&#30340;&#27599;&#19968;&#36718;&#37117;&#26816;&#26597; <code class="varname">digits[-1]</code> &#26159;&#21542;&#26377;&#25928;&#29575;&#12290;&#21015;&#34920;&#32034;&#24341;&#20195;&#20215;&#22823;&#21527;&#65311;&#22914;&#26524;&#25226;&#19978;&#19968;&#20010;&#25968;&#23383;&#23384;&#22312;&#21478;&#22806;&#30340;&#21464;&#37327;&#20013;&#20197;&#20415;&#26816;&#26597;&#26159;&#21542;&#20250;&#33719;&#30410;&#65311;</p><p>&#36825;&#37324;&#30340; <code class="filename">soundex/stage3/soundex3a.py</code> &#23558;&#22238;&#31572;&#36825;&#20010;&#38382;&#39064;&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits2 = ''
    last_digit = ''
    for d in digits:
        if d != last_digit:
            digits2 += d
            last_digit = d
</pre></div><p><code class="filename">soundex3a.py</code> &#24182;&#19981;&#27604; <code class="filename">soundex2c.py</code> &#36816;&#34892;&#24471;&#24555;&#22810;&#23569;&#65292;&#32780;&#19988;&#29978;&#33267;&#21487;&#33021;&#26356;&#20250;&#24930;&#20123; (&#24046;&#24322;&#36824;&#27809;&#26377;&#22823;&#21040;&#21487;&#20197;&#30830;&#20449;&#36825;&#19968;&#28857;)&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage3&gt;</code><span class="userinput">python soundex3a.py</span>
<font color="teal">Woo             W000 11.5346048171
Pilgrim         P426 13.3950636184
Flingjingwaller F452 18.6108927252</font>
</pre></div><p>&#20026;&#20160;&#20040; <code class="filename">soundex3a.py</code> &#19981;&#26356;&#24555;&#21602;&#65311;&#20854;&#23454; <span class="application">Python</span> &#30340;&#32034;&#24341;&#21151;&#33021;&#24688;&#24688;&#24456;&#26377;&#25928;&#12290;&#37325;&#22797;&#20351;&#29992; <code class="varname">digits2[-1]</code> &#26681;&#26412;&#27809;&#20160;&#20040;&#38382;&#39064;&#12290;&#21478;&#19968;&#26041;&#38754;&#65292;&#25163;&#24037;&#20445;&#30041;&#19978;&#19968;&#20010;&#25968;&#23383;&#24847;&#21619;&#30528;&#25105;&#20204;&#27599;&#23384;&#20648;&#19968;&#20010;&#25968;&#23383;&#37117;&#35201;&#20026;<span class="emphasis"><em>&#20004;&#20010;</em></span> &#21464;&#37327;&#36171;&#20540;&#65292;&#36825;&#20415;&#25273;&#26432;&#20102;&#25105;&#20204;&#36991;&#24320;&#32034;&#24341;&#26597;&#25214;&#25152;&#24102;&#26469;&#30340;&#24494;&#23567;&#22909;&#22788;&#12290;</p><p>&#35753;&#25105;&#20204;&#20174;&#26412;&#36136;&#19978;&#19981;&#21516;&#30340;&#26041;&#27861;&#26469;&#24605;&#32771;&#12290;&#22914;&#26524;&#21487;&#20197;&#25226;&#23383;&#31526;&#20018;&#24403;&#20316;&#23383;&#31526;&#21015;&#34920;&#26469;&#23545;&#24453;&#65292;&#37027;&#20040;&#20351;&#29992;&#21015;&#34920;&#36941;&#21382;&#36941;&#23547;&#21015;&#34920;&#20415;&#25104;&#20026;&#21487;&#33021;&#12290;&#38382;&#39064;&#26159;&#20195;&#30721;&#38656;&#35201;&#20351;&#29992;&#21015;&#34920;&#20013;&#30340;&#19978;&#19968;&#20010;&#23383;&#31526;&#65292;&#32780;&#19988;&#20351;&#29992;&#21015;&#34920;&#36941;&#21382;&#20570;&#21040;&#36825;&#19968;&#28857;&#24182;&#19981;&#23481;&#26131;&#12290;</p><p>&#20294;&#26159;&#65292;&#20351;&#29992;&#20869;&#24314;&#30340; <code class="function">range()</code> &#20989;&#25968;&#21019;&#24314;&#19968;&#20010;&#32034;&#24341;&#25968;&#23383;&#26500;&#25104;&#30340;&#21015;&#34920;&#26159;&#21487;&#20197;&#30340;&#12290;&#20351;&#29992;&#36825;&#20123;&#32034;&#24341;&#25968;&#23383;&#19968;&#27493;&#27493;&#25628;&#32034;&#21015;&#34920;&#24182;&#25343;&#20986;&#19982;&#21069;&#38754;&#19981;&#21516;&#30340;&#23383;&#31526;&#12290;&#36825;&#26679;&#23558;&#20351;&#20320;&#24471;&#21040;&#19968;&#20010;&#23383;&#31526;&#20018;&#21015;&#34920;&#65292;&#20351;&#29992;&#23383;&#31526;&#20018;&#26041;&#27861; <code class="methodname">join()</code> &#20415;&#21487;&#37325;&#24314;&#23383;&#31526;&#20018;&#12290;</p><p>&#36825;&#20415;&#26159; <code class="filename">soundex/stage3/soundex3b.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits2 = "".join([digits[i] for i in range(len(digits))
                       if i == 0 or digits[i-1] != digits[i]])
</pre></div><p>&#36825;&#26679;&#24555;&#20102;&#21527;&#65311;&#19968;&#20010;&#23383;&#65292;&#21542;&#12290;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage3&gt;</code><span class="userinput">python soundex3b.py</span>
<font color="teal">Woo             W000 14.2245271396
Pilgrim         P426 17.8337165757
Flingjingwaller F452 25.9954005327</font>
</pre></div><p>&#26377;&#21487;&#33021;&#22240;&#20026;&#30446;&#21069;&#30340;&#36825;&#20123;&#26041;&#27861;&#37117;&#26159; "<span class="quote">&#23383;&#31526;&#20018;&#20013;&#24515;&#21270;</span>" &#30340;&#12290;<span class="application">Python</span> &#21487;&#20197;&#36890;&#36807;&#19968;&#20010;&#21629;&#20196;&#25226;&#19968;&#20010;&#23383;&#31526;&#20018;&#36716;&#21270;&#20026;&#19968;&#20010;&#23383;&#31526;&#21015;&#34920;&#65306;<code class="function">list('abc')</code> &#36820;&#22238; <code class="literal">['a', 'b', 'c']</code>&#12290;&#26356;&#36827;&#19968;&#27493;&#65292;&#21015;&#34920;&#21487;&#20197;&#34987;&#24456;&#24555;&#22320;<span class="emphasis"><em>&#23601;&#22320;</em></span> &#25913;&#21464;&#12290;&#19982;&#20854;&#19968;&#30742;&#19968;&#29926;&#22320;&#24314;&#36896;&#19968;&#20010;&#26032;&#30340;&#21015;&#34920; (&#25110;&#32773;&#23383;&#31526;&#20018;)&#65292;&#20026;&#20160;&#20040;&#19981;&#36873;&#25321;&#25805;&#20316;&#21015;&#34920;&#30340;&#20803;&#32032;&#21602;&#65311;</p><p>&#36825;&#20415;&#26159; <code class="filename">soundex/stage3/soundex3c.py</code>&#65292;&#23601;&#22320;&#20462;&#25913;&#21015;&#34920;&#21435;&#38500;&#36830;&#32493;&#37325;&#22797;&#20803;&#32032;&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits = list(source[0].upper() + source[1:].translate(charToSoundex))
    i=0
    for item in digits:
        if item==digits[i]: continue
        i+=1
        digits[i]=item
    del digits[i+1:]
    digits2 = "".join(digits)
</pre></div><p>&#36825;&#27604; <code class="filename">soundex3a.py</code> &#25110; <code class="filename">soundex3b.py</code> &#24555;&#21527;&#65311;&#19981;&#65292;&#23454;&#38469;&#19978;&#36825;&#26159;&#30446;&#21069;&#26368;&#24930;&#30340;&#19968;&#31181;&#26041;&#27861;<sup>[<a name="d0e39824" href="#ftn.d0e39824" class="footnote">16</a>]</sup>&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage3&gt;</code><span class="userinput">python soundex3c.py</span>
<font color="teal">Woo             W000 14.1662554878
Pilgrim         P426 16.0397885765
Flingjingwaller F452 22.1789341942</font>
</pre></div><p>&#25105;&#20204;&#22312;&#36825;&#20799;&#38500;&#20102;&#35797;&#29992;&#20102;&#20960;&#31181; "<span class="quote">&#32874;&#26126;</span>" &#30340;&#25216;&#26415;&#65292;&#26681;&#26412;&#27809;&#26377;&#20160;&#20040;&#36827;&#27493;&#12290;&#21040;&#30446;&#21069;&#20026;&#27490;&#26368;&#24555;&#30340;&#26041;&#27861;&#23601;&#26159;&#26368;&#30452;&#25509;&#30340;&#21407;&#22987;&#26041;&#27861; (<code class="filename">soundex2c.py</code>)&#12290;&#26377;&#26102;&#20505;&#32874;&#26126;&#26410;&#24517;&#26377;&#22238;&#25253;&#12290;</p><div class="example"><a name="d0e39852"></a><p class="title"><b>&#20363;&nbsp;18.5.&nbsp;&#30446;&#21069;&#30340;&#26368;&#20339;&#32467;&#26524;&#65306;<code class="filename">soundex/stage2/soundex2c.py</code></b></p><div class="example-contents"><pre class="programlisting">
import string, re

allChar = string.uppercase + string.lowercase
charToSoundex = string.maketrans(allChar, "91239129922455912623919292" * 2)

def soundex(source):
    if (not source) or (not source.isalpha()):
        return "0000"
    digits = source[0].upper() + source[1:].translate(charToSoundex)
    digits2 = digits[0]
    for d in digits[1:]:
        if digits2[-1] != d:
            digits2 += d
    digits3 = re.sub('9', '', digits2)
    while len(digits3) &lt; 4:
        digits3 += "0"
    return digits3[:4]

if __name__ == '__main__':
    from timeit import Timer
    names = ('Woo', 'Pilgrim', 'Flingjingwaller')
    for name in names:
        statement = "soundex('%s')" % name
        t = Timer(statement, "from __main__ import soundex")
        print name.ljust(15), soundex(name), min(t.repeat())
</pre></div></div><br class="example-break"></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soundex.stage4"></a>18.6.&nbsp;&#20248;&#21270;&#23383;&#31526;&#20018;&#25805;&#20316;</h2></div></div></div><div class="abstract"><p>Soundex &#31639;&#27861;&#30340;&#26368;&#21518;&#19968;&#27493;&#26159;&#23545;&#30701;&#32467;&#26524;&#34917;&#38646;&#21644;&#25130;&#30701;&#38271;&#32467;&#26524;&#12290;&#26368;&#20339;&#30340;&#20570;&#27861;&#26159;&#20160;&#20040;&#65311;</p></div><p>&#36825;&#26159;&#30446;&#21069;&#22312; <code class="filename">soundex/stage2/soundex2c.py</code> &#20013;&#30340;&#20570;&#27861;&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits3 = re.sub('9', '', digits2)
    while len(digits3) &lt; 4:
        digits3 += "0"
    return digits3[:4]
</pre></div><p>&#36825;&#37324;&#26159; <code class="filename">soundex2c.py</code> &#30340;&#34920;&#29616;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage2&gt;</code><span class="userinput">python soundex2c.py</span>
<font color="teal">Woo             W000 12.6070768771
Pilgrim         P426 14.4033353401
Flingjingwaller F452 19.7774882003</font>
</pre></div><p>&#24605;&#32771;&#30340;&#31532;&#19968;&#20214;&#20107;&#26159;&#20197;&#24490;&#29615;&#21462;&#20195;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#36825;&#37324;&#30340;&#20195;&#30721;&#26469;&#33258; <code class="filename">soundex/stage4/soundex4a.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits3 = ''
    for d in digits2:
        if d != '9':
            digits3 += d
</pre></div><p><code class="filename">soundex4a.py</code> &#24555;&#20102;&#21527;&#65311;&#26159;&#30340;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage4&gt;</code><span class="userinput">python soundex4a.py</span>
<font color="teal">Woo             W000 6.62865531792
Pilgrim         P426 9.02247576158
Flingjingwaller F452 13.6328416042</font>
</pre></div><p>&#20294;&#26159;&#65292;&#31561;&#19968;&#19979;&#12290;&#19968;&#20010;&#20174;&#23383;&#31526;&#20018;&#21435;&#38500;&#23383;&#31526;&#30340;&#24490;&#29615;&#65311;&#25105;&#20204;&#21487;&#20197;&#29992;&#19968;&#20010;&#31616;&#21333;&#30340;&#23383;&#31526;&#20018;&#26041;&#27861;&#20570;&#21040;&#12290;&#36825;&#20415;&#26159;  <code class="filename">soundex/stage4/soundex4b.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits3 = digits2.replace('9', '')
</pre></div><p><code class="filename">soundex4b.py</code> &#24555;&#20102;&#21527;&#65311;&#36825;&#26159;&#20010;&#26377;&#36259;&#30340;&#38382;&#39064;&#65292;&#23427;&#21462;&#20915;&#36755;&#20837;&#20540;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage4&gt;</code><span class="userinput">python soundex4b.py</span>
<font color="teal">Woo             W000 6.75477414029
Pilgrim         P426 7.56652144337
Flingjingwaller F452 10.8727729362</font>
</pre></div><p><code class="filename">soundex4b.py</code> &#20013;&#30340;&#23383;&#31526;&#20018;&#26041;&#27861;&#23545;&#20110;&#22823;&#22810;&#25968;&#21517;&#23383;&#27604;&#24490;&#29615;&#24555;&#65292;&#20294;&#26159;&#23545;&#20110;&#30701;&#23567;&#30340;&#24773;&#20917; (&#24456;&#30701;&#30340;&#21517;&#23383;) &#21364;&#27604; <code class="filename">soundex4a.py</code> &#30053;&#24494;&#24930;&#20123;&#12290;&#24615;&#33021;&#20248;&#21270;&#24182;&#19981;&#24635;&#26159;&#19968;&#33268;&#30340;&#65292;&#23545;&#20110;&#19968;&#20010;&#24773;&#20917;&#24555;&#20123;&#65292;&#21364;&#21487;&#33021;&#23545;&#21478;&#22806;&#19968;&#20123;&#24773;&#20917;&#24930;&#20123;&#12290;&#23601;&#27492;&#32780;&#35328;&#65292;&#22823;&#22810;&#25968;&#24773;&#20917;&#23558;&#20250;&#20174;&#25913;&#21464;&#20013;&#33719;&#30410;&#65292;&#25152;&#20197;&#23601;&#25913;&#21543;&#65292;&#20294;&#26159;&#21035;&#24536;&#20102;&#21407;&#21017;&#12290;</p><p>&#26368;&#21518;&#20173;&#24456;&#37325;&#35201;&#30340;&#26159;&#65292;&#35753;&#25105;&#20204;&#26816;&#27979;&#31639;&#27861;&#30340;&#26368;&#21518;&#20004;&#27493;&#65306;&#20197;&#38646;&#34917;&#40784;&#30701;&#32467;&#26524;&#21644;&#25130;&#30701;&#36229;&#36807;&#22235;&#23383;&#31526;&#30340;&#38271;&#32467;&#26524;&#12290;&#20320;&#22312;  <code class="filename">soundex4b.py</code> &#20013;&#30475;&#21040;&#30340;&#20195;&#30721;&#23601;&#26159;&#20570;&#36825;&#20010;&#24037;&#20316;&#30340;&#65292;&#20294;&#26159;&#22826;&#27809;&#25928;&#29575;&#20102;&#12290;&#30475;&#19968;&#19979; <code class="filename">soundex/stage4/soundex4c.py</code> &#25214;&#20986;&#21407;&#22240;&#65306;</p><div class="informalexample"><pre class="programlisting">
    digits3 += '000'
    return digits3[:4]
</pre></div><p>&#25105;&#20204;&#20026;&#20160;&#20040;&#38656;&#35201;&#19968;&#20010; <code class="literal">while</code> &#24490;&#29615;&#26469;&#34917;&#40784;&#32467;&#26524;&#65311;&#25105;&#20204;&#26089;&#23601;&#30693;&#36947;&#25105;&#20204;&#38656;&#35201;&#25226;&#32467;&#26524;&#25130;&#25104;&#22235;&#23383;&#31526;&#65292;&#24182;&#19988;&#25105;&#20204;&#30693;&#36947;&#25105;&#20204;&#24050;&#32463;&#26377;&#20102;&#33267;&#23569;&#19968;&#20010;&#23383;&#31526; (&#30452;&#25509;&#20174; <code class="varname">source</code> &#20013;&#25343;&#36807;&#26469;&#30340;&#36215;&#22987;&#23383;&#31526;)&#12290;&#36825;&#24847;&#21619;&#30528;&#25105;&#20204;&#21487;&#20197;&#20165;&#20165;&#22312;&#36755;&#20986;&#30340;&#32467;&#23614;&#28155;&#21152;&#19977;&#20010;&#38646;&#65292;&#28982;&#21518;&#25130;&#26029;&#23427;&#12290;&#19981;&#35201;&#23475;&#24597;&#37325;&#26032;&#29702;&#35299;&#38382;&#39064;&#65292;&#20174;&#19981;&#22826;&#19968;&#26679;&#30340;&#35282;&#24230;&#30475;&#38382;&#39064;&#21487;&#20197;&#33719;&#24471;&#31616;&#21333;&#30340;&#35299;&#20915;&#26041;&#26696;&#12290;</p><p>&#25105;&#20204;&#20002;&#24323; <code class="literal">while</code> &#24490;&#29615;&#21518;&#20174; <code class="filename">soundex4c.py</code> &#20013;&#33719;&#24471;&#24590;&#26679;&#30340;&#36895;&#24230;&#65311;&#22826;&#26126;&#26174;&#20102;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage4&gt;</code><span class="userinput">python soundex4c.py</span>
<font color="teal">Woo             W000 4.89129791636
Pilgrim         P426 7.30642134685
Flingjingwaller F452 10.689832367</font>
</pre></div><p>&#26368;&#21518;&#65292;&#36824;&#26377;&#19968;&#20214;&#20107;&#21487;&#20197;&#20196;&#36825;&#19977;&#34892;&#36816;&#34892;&#24471;&#26356;&#24555;&#65306;&#20320;&#21487;&#20197;&#25226;&#23427;&#20204;&#21512;&#24182;&#20026;&#19968;&#34892;&#12290;&#30475;&#19968;&#30524; <code class="filename">soundex/stage4/soundex4d.py</code>&#65306;</p><div class="informalexample"><pre class="programlisting">
    return (digits2.replace('9', '') + '000')[:4]
</pre></div><p>&#22312; <code class="filename">soundex4d.py</code> &#20013;&#25226;&#25152;&#26377;&#20195;&#30721;&#25918;&#22312;&#19968;&#34892;&#21487;&#20197;&#27604; <code class="filename">soundex4c.py</code> &#31245;&#24494;&#24555;&#37027;&#20040;&#19968;&#28857;&#65306;</p><div class="informalexample"><pre class="screen">
<code class="prompt">C:\samples\soundex\stage4&gt;</code><span class="userinput">python soundex4d.py</span>
<font color="teal">Woo             W000 4.93624105857
Pilgrim         P426 7.19747593619
Flingjingwaller F452 10.5490700634</font>
</pre></div><p>&#23427;&#38750;&#24120;&#38590;&#25026;&#65292;&#32780;&#19988;&#20248;&#21270;&#20063;&#19981;&#26126;&#26174;&#12290;&#36825;&#20540;&#24471;&#21527;&#65311;&#25105;&#24076;&#26395;&#20320;&#26377;&#24456;&#22909;&#30340;&#35265;&#35299;&#12290;&#24615;&#33021;&#24182;&#19981;&#26159;&#19968;&#20999;&#12290;&#20320;&#22312;&#20248;&#21270;&#26041;&#38754;&#30340;&#21162;&#21147;&#24212;&#35813;&#19982;&#31243;&#24207;&#30340;&#21487;&#35835;&#24615;&#21644;&#21487;&#32500;&#25252;&#24615;&#30456;&#24179;&#34913;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="soundex.summary"></a>18.7.&nbsp;&#23567;&#32467;</h2></div></div></div><div class="abstract"><p>&#36825;&#19968;&#31456;&#23637;&#31034;&#20102;&#24615;&#33021;&#20248;&#21270;&#30340;&#20960;&#20010;&#37325;&#35201;&#26041;&#38754;&#65292;&#36825;&#37324;&#26159;&#23601; <span class="application">Python</span> &#32780;&#35328;&#65292;&#20294;&#23427;&#20204;&#21364;&#26222;&#36941;&#36866;&#29992;&#12290;</p></div><div class="itemizedlist"><ul><li>&#22914;&#26524;&#20320;&#35201;&#22312;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#32534;&#20889;&#24490;&#29615;&#38388;&#25225;&#25321;&#65292;&#36873;&#25321;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#27491;&#21017;&#34920;&#36798;&#24335;&#22240;&#20854;&#26159;&#20197; C &#35821;&#35328;&#32534;&#35793;&#30340;&#21487;&#20197;&#26412;&#33021;&#22320;&#22312;&#20320;&#30340;&#35745;&#31639;&#26426;&#19978;&#36816;&#34892;&#65292;&#20320;&#30340;&#24490;&#29615;&#21364;&#20197; <span class="application">Python</span> &#32534;&#20889;&#38656;&#35201;&#36890;&#36807; <span class="application">Python</span> &#35299;&#37322;&#22120;&#36816;&#34892;&#12290;</li><li>&#22914;&#26524;&#20320;&#38656;&#35201;&#22312;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#23383;&#31526;&#20018;&#26041;&#27861;&#38388;&#25225;&#25321;&#65292;&#36873;&#25321;&#23383;&#31526;&#20018;&#26041;&#27861;&#12290;&#23427;&#20204;&#37117;&#26159;&#20197; C &#32534;&#35793;&#30340;&#65292;&#25152;&#20197;&#36873;&#21462;&#31616;&#21333;&#30340;&#12290;</li><li>&#23383;&#20856;&#26597;&#25214;&#30340;&#36890;&#24120;&#24212;&#29992;&#24456;&#24555;&#65292;&#20294;&#26159; <code class="function">string.maketrans</code> &#20043;&#31867;&#30340;&#29305;&#27530;&#20989;&#25968;&#21644; <code class="methodname">isalpha()</code> &#20043;&#31867;&#30340;&#23383;&#31526;&#20018;&#26041;&#27861;&#26356;&#24555;&#12290;&#22914;&#26524; <span class="application">Python</span> &#26377;&#23450;&#21046;&#26041;&#27861;&#32473;&#20320;&#29992;&#65292;&#23601;&#20351;&#23427;&#21543;&#65281;</li><li>&#21035;&#22826;&#32874;&#26126;&#20102;&#12290;&#26377;&#26102;&#19968;&#20123;&#26126;&#26174;&#30340;&#31639;&#27861;&#26159;&#26368;&#24555;&#30340;&#12290;</li><li>&#19981;&#35201;&#22826;&#36855;&#24651;&#24615;&#33021;&#20248;&#21270;&#65292;&#24615;&#33021;&#24182;&#19981;&#26159;&#19968;&#20999;&#12290;</li></ul></div><p>&#26368;&#21518;&#19968;&#28857;&#22826;&#37325;&#35201;&#20102;&#65292;&#36825;&#31456;&#20013;&#20320;&#20196;&#36825;&#20010;&#31243;&#24207;&#25552;&#36895;&#19977;&#20493;&#24182;&#19988;&#20196;&#30334;&#19975;&#27425;&#30340;&#35843;&#29992;&#33410;&#30465; 20 &#31186;&#12290;&#22826;&#26834;&#20102;&#65281;&#29616;&#22312;&#24605;&#32771;&#19968;&#19979;&#65306;&#22312;&#37027;&#30334;&#19975;&#27425;&#30340;&#20989;&#25968;&#35843;&#29992;&#20013;&#65292;&#26377;&#22810;&#23569;&#31186;&#33457;&#22312;&#21608;&#36793;&#24212;&#29992;&#31243;&#24207;&#31561;&#24453;&#25968;&#25454;&#24211;&#36830;&#25509;&#65311;&#33457;&#22312;&#30913;&#30424;&#36755;&#20837;/&#36755;&#20986;&#19978;&#65311;&#33457;&#22312;&#31561;&#24453;&#29992;&#25143;&#36755;&#20837;&#19978;&#65311;&#19981;&#35201;&#22312;&#36807;&#24230;&#20248;&#21270;&#31639;&#27861;&#19978;&#33457;&#26102;&#38388;&#65292;&#20174;&#32780;&#24573;&#30053;&#20102;&#20854;&#23427;&#22320;&#26041;&#21487;&#20197;&#20570;&#30340;&#26126;&#26174;&#25913;&#36827;&#12290;&#24320;&#21457;&#20320;&#32534;&#20889;&#36816;&#34892;&#33391;&#22909;&#30340; <span class="application">Python</span> &#20195;&#30721;&#30340;&#30452;&#35273;&#65292;&#22914;&#26524;&#21457;&#29616;&#26126;&#26174;&#30340;&#22833;&#35823;&#21017;&#20462;&#27491;&#23427;&#20204;&#65292;&#24182;&#19981;&#23545;&#20854;&#23427;&#37096;&#20998;&#36807;&#20998;&#25805;&#20316;&#12290;</p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.d0e39400" href="#d0e39400" class="para">14</a>] </sup>&#27880;&#24847; <code class="filename">soundex1d.py</code> &#22312;&#21518;&#20004;&#20010;&#27979;&#35797;&#28857;&#19978;&#37117;&#27604; <code class="filename">soundex1b.py</code> &#24930;&#65292;&#36825;&#28857;&#19982;&#20316;&#32773;&#25152;&#35828;&#30340;&#30683;&#30462;&#12290;&#26412;&#31456;&#21478;&#36824;&#26377;&#22810;&#22788;&#20986;&#29616;&#20102;&#27491;&#25991;&#19982;&#27979;&#35797;&#32467;&#26524;&#30683;&#30462;&#30340;&#22320;&#26041;&#65292;&#27599;&#20010;&#22320;&#26041;&#37117;&#20250;&#29992;&#35793;&#27880;&#21152;&#20197;&#35828;&#26126;&#12290;&#36825;&#20010; bug &#23558;&#22312;&#19979;&#20010;&#29256;&#26412;&#20013;&#24471;&#21040;&#20462;&#27491;&#12290;&#8213;&#8213;&#35793;&#27880;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e39596" href="#d0e39596" class="para">15</a>] </sup>&#20107;&#23454;&#24688;&#22909;&#30456;&#21453;&#65292;<code class="filename">soundex2b.py</code> &#22312;&#27599;&#20010;&#28857;&#19978;&#37117;&#24555;&#20110; <code class="filename">soundex1e.py</code>&#12290;&#8213;&#8213;&#35793;&#27880;</p></div><div class="footnote"><p><sup>[<a name="ftn.d0e39824" href="#d0e39824" class="para">16</a>] </sup><code class="filename">soundex3c.py</code> &#27604; <code class="filename">soundex3b.py</code> &#24555;&#12290;&#8213;&#8213;&#35793;&#27880;</p></div></div></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="furtherreading"></a>&#38468;&#24405;&nbsp;A.&nbsp;&#36827;&#19968;&#27493;&#38405;&#35835;</h1></div></div></div><p><a href="../#install">&#31532;&nbsp;1&nbsp;&#31456;&nbsp;&#23433;&#35013; <span class="application">Python</span></a></p><ul></ul><p><a href="../#odbchelper">&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</a></p><ul><li><a href="../#odbchelper.docstring">2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;</a><p></p><ul><li>PEP 257 (<a href="http://www.python.org/peps/pep-0257.html">http://www.python.org/peps/pep-0257.html</a>) &#23450;&#20041;&#20102; <code class="literal">doc string</code> &#35268;&#33539;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Style Guide</em> (<a href="http://www.python.org/doc/essays/styleguide.html">http://www.python.org/doc/essays/styleguide.html</a>) &#35752;&#35770;&#20102;&#22914;&#20309;&#32534;&#20889;&#19968;&#20010;&#22909;&#30340; <code class="literal">doc string</code>&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#22312; <code class="literal">doc string</code> &#20013;&#22914;&#20309;&#20351;&#29992;&#31354;&#30333; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006750000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006750000000000000000</a>)&#12290;</li></ul><p></p></li><li><a href="../#d0e4801">2.4.2.&nbsp;&#20309;&#35859;&#23545;&#35937;&#65311;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#30830;&#20999;&#35299;&#37322;&#20102;&#22312; <span class="application">Python</span> &#20013;&#19975;&#29289;&#30342;&#23545;&#35937;&#30340;&#21547;&#20041; (<a href="http://www.python.org/doc/current/ref/objects.html">http://www.python.org/doc/current/ref/objects.html</a>)&#65292;&#22240;&#20026;&#26377;&#20123;&#20070;&#29983;&#27668;&#21313;&#36275;&#30340;&#20154;&#65292;&#21916;&#27426;&#33457;&#26102;&#38388;&#35752;&#35770;&#36825;&#31867;&#30340;&#38382;&#39064;&#12290;</li><li>eff-bot (<a href="http://www.effbot.org/guides/">http://www.effbot.org/guides/</a>) &#24635;&#32467;&#20102; <span class="application">Python</span> &#23545;&#35937; (<a href="http://www.effbot.org/guides/python-objects.htm">http://www.effbot.org/guides/python-objects.htm</a>).</li></ul><p></p></li><li><a href="../#odbchelper.indenting">2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#35752;&#35770;&#20102;&#20132;&#21449;&#32553;&#36827;&#38382;&#39064;&#65292;&#24182;&#19988;&#28436;&#31034;&#20102;&#21508;&#31181;&#21508;&#26679;&#30340;&#32553;&#36827;&#38169;&#35823; (<a href="http://www.python.org/doc/current/ref/indentation.html">http://www.python.org/doc/current/ref/indentation.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Style Guide</em> (<a href="http://www.python.org/doc/essays/styleguide.html">http://www.python.org/doc/essays/styleguide.html</a>) &#35752;&#35770;&#20102;&#33391;&#22909;&#30340;&#32553;&#36827;&#39118;&#26684;&#12290;</li></ul><p></p></li><li><a href="../#odbchelper.testing">2.6.&nbsp;&#27979;&#35797;&#27169;&#22359;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#35752;&#35770;&#20102;&#23548;&#20837;&#27169;&#22359; (<a href="http://www.python.org/doc/current/ref/import.html">http://www.python.org/doc/current/ref/import.html</a>)&#30340;&#24213;&#23618;&#32454;&#33410;&#12290;</li></ul><p></p></li></ul><p><a href="../#datatypes">&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;</a></p><ul><li><a href="../#d0e5585">3.1.3.&nbsp;&#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;</a><p></p><ul><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#35762;&#25480;&#20102; dictionary &#21644;&#22914;&#20309;&#20351;&#29992; dictionary &#27169;&#25311;&#31232;&#30095;&#30697;&#38453; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap10.htm">http://www.ibiblio.org/obp/thinkCSpy/chap10.htm</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#26377;&#35768;&#22810;&#20351;&#29992; dictionary &#30340;&#31034;&#20363;&#20195;&#30721; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/541">http://www.faqts.com/knowledge-base/index.phtml/fid/541</a>)&#12290;</li><li><span class="application">Python</span> Cookbook (<a href="http://www.activestate.com/ASPN/Python/Cookbook/">http://www.activestate.com/ASPN/Python/Cookbook/</a>) &#35752;&#35770;&#20102;&#22914;&#20309;&#36890;&#36807; key &#23545; dictionary &#30340;&#20540;&#36827;&#34892;&#25490;&#24207; (<a href="http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52306">http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52306</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#30340; dictionary &#26041;&#27861; (<a href="http://www.python.org/doc/current/lib/typesmapping.html">http://www.python.org/doc/current/lib/typesmapping.html</a>)&#12290;</li></ul><p></p></li><li><a href="../#d0e6537">3.2.5.&nbsp;&#20351;&#29992; list &#30340;&#36816;&#31639;&#31526;</a><p></p><ul><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#35762;&#36848;&#20102;list&#65292;&#24182;&#19988;&#37325;&#28857;&#35762;&#36848;&#20102;&#22914;&#20309;&#25226; list &#20316;&#20026;&#20989;&#25968;&#21442;&#25968;&#20256;&#36882; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap08.htm">http://www.ibiblio.org/obp/thinkCSpy/chap08.htm</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#25226; list &#20316;&#20026;&#22534;&#26632;&#21644;&#38431;&#21015;&#20351;&#29992; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007110000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007110000000000000000</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#26377;&#20851; list &#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/534">http://www.faqts.com/knowledge-base/index.phtml/fid/534</a>)&#24182;&#19988;&#26377;&#35768;&#22810;&#20351;&#29992; list &#30340;&#31034;&#20363;&#20195;&#30721; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/540">http://www.faqts.com/knowledge-base/index.phtml/fid/540</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#30340; list &#26041;&#27861; (<a href="http://www.python.org/doc/current/lib/typesseq-mutable.html">http://www.python.org/doc/current/lib/typesseq-mutable.html</a>)&#12290;</li></ul><p></p></li><li><a href="../#odbchelper.tuple">3.3.&nbsp;Tuple &#20171;&#32461;</a><p></p><ul><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#35762;&#35299;&#20102; tuple &#24182;&#19988;&#23637;&#31034;&#20102;&#22914;&#20309;&#36830;&#25509; tuple (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap10.htm">http://www.ibiblio.org/obp/thinkCSpy/chap10.htm</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#23545;&#19968;&#20010; tuple &#25490;&#24207; (<a href="http://www.faqts.com/knowledge-base/view.phtml/aid/4553/fid/587">http://www.faqts.com/knowledge-base/view.phtml/aid/4553/fid/587</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#23450;&#20041;&#19968;&#20010;&#21482;&#21253;&#21547;&#19968;&#20010;&#20803;&#32032;&#30340; tuple (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007300000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007300000000000000000</a>)&#12290;</li></ul><p></p></li><li><a href="../#odbchelper.multiassign">3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#23637;&#31034;&#20102;&#20160;&#20040;&#26102;&#20505;&#21487;&#20197;&#24573;&#30053;&#32493;&#34892;&#31526; (<a href="http://www.python.org/doc/current/ref/implicit-joining.html">http://www.python.org/doc/current/ref/implicit-joining.html</a>)&#21644;&#20160;&#20040;&#26102;&#20505;&#24744;&#38656;&#35201;&#20351;&#29992;&#32493;&#34892;&#31526; (<a href="http://www.python.org/doc/current/ref/explicit-joining.html">http://www.python.org/doc/current/ref/explicit-joining.html</a>)&#30340;&#20363;&#23376;&#12290;</li><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#28436;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#22810;&#21464;&#37327;&#36171;&#20540;&#26469;&#20132;&#25442;&#20004;&#20010;&#21464;&#37327;&#30340;&#20540; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap09.htm">http://www.ibiblio.org/obp/thinkCSpy/chap09.htm</a>)&#12290;</li></ul><p></p></li><li><a href="../#odbchelper.stringformatting">3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#25152;&#20351;&#29992;&#30340;&#26684;&#24335;&#31526; (<a href="http://www.python.org/doc/current/lib/typesseq-strings.html">http://www.python.org/doc/current/lib/typesseq-strings.html</a>)&#12290;</li><li><em class="citetitle">Effective <acronym class="acronym">AWK</acronym> Programming</em> (<a href="http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Top">http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Top</a>) &#35752;&#35770;&#20102;&#25152;&#26377;&#30340;&#26684;&#24335;&#31526; (<a href="http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Control+Letters">http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Control+Letters</a>)&#21644;&#39640;&#32423;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#25216;&#26415;&#65292;&#22914;&#25351;&#23450;&#23485;&#24230;&#65292;&#31934;&#24230;&#21644;0&#22635;&#20805; (<a href="http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Format+Modifiers">http://www-gnats.gnu.org:8080/cgi-bin/info2www?(gawk)Format+Modifiers</a>)&#12290;</li></ul><p></p></li><li><a href="../#odbchelper.map">3.6.&nbsp;&#26144;&#23556; list</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#21478;&#19968;&#31181;&#26041;&#27861;&#26469;&#26144;&#23556; list&#65306;&#20351;&#29992;&#20869;&#32622;&#30340; <code class="function">map</code> &#20989;&#25968; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#23545;&#23884;&#22871; list &#30340; list &#36827;&#34892;&#35299;&#26512; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007140000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007140000000000000000</a>)&#12290;</li></ul><p></p></li><li><a href="../#odbchelper.join">3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;</a><p></p><ul><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110;&#23383;&#31526;&#20018;&#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/480">http://www.faqts.com/knowledge-base/index.phtml/fid/480</a>)&#65292;&#24182;&#19988;&#26377;&#35768;&#22810;&#20351;&#29992;&#23383;&#31526;&#20018;&#30340;&#20363;&#23376;&#20195;&#30721; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/539">http://www.faqts.com/knowledge-base/index.phtml/fid/539</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#23383;&#31526;&#20018;&#26041;&#27861; (<a href="http://www.python.org/doc/current/lib/string-methods.html">http://www.python.org/doc/current/lib/string-methods.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">string</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-string.html">http://www.python.org/doc/current/lib/module-string.html</a>)&#30340;&#25991;&#26723;&#12290;</li><li><em class="citetitle">The Whole <span class="application">Python</span> <acronym class="acronym">FAQ</acronym></em> (<a href="http://www.python.org/doc/FAQ.html">http://www.python.org/doc/FAQ.html</a>) &#35299;&#37322;&#20102;&#20026;&#20160;&#20040; <code class="function">join</code> &#26159;&#23383;&#31526;&#20018;&#26041;&#27861; (<a href="http://www.python.org/cgi-bin/faqw.py?query=4.96&amp;querytype=simple&amp;casefold=yes&amp;req=search">http://www.python.org/cgi-bin/faqw.py?query=4.96&amp;querytype=simple&amp;casefold=yes&amp;req=search</a>)&#32780;&#19981;&#26159; list &#26041;&#27861;&#12290;</li></ul><p></p></li></ul><p><a href="../#apihelper">&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;</a></p><ul><li><a href="../#apihelper.optional">4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#30830;&#20999;&#22320;&#35752;&#35770;&#20102;&#20309;&#26102;&#12289;&#22914;&#20309;&#36827;&#34892;&#32570;&#30465;&#21442;&#25968;&#36171;&#20540; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000</a>)&#65292;&#36825;&#37117;&#21644;&#32570;&#30465;&#20540;&#26159;&#19968;&#20010; list &#36824;&#26159;&#19968;&#20010;&#20855;&#26377;&#21103;&#20316;&#29992;&#30340;&#34920;&#36798;&#24335;&#26377;&#20851;&#12290;</li></ul><p></p></li><li><a href="../#d0e9105">4.3.3.&nbsp;&#20869;&#32622;&#20989;&#25968;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#23545;&#25152;&#26377;&#30340;&#20869;&#32622;&#20989;&#25968; (<a href="http://www.python.org/doc/current/lib/built-in-funcs.html">http://www.python.org/doc/current/lib/built-in-funcs.html</a>)&#21644;&#25152;&#26377;&#30340;&#20869;&#32622;&#24322;&#24120; (<a href="http://www.python.org/doc/current/lib/module-exceptions.html">http://www.python.org/doc/current/lib/module-exceptions.html</a>)&#37117;&#36827;&#34892;&#20102;&#25991;&#26723;&#21270;&#12290;</li></ul><p></p></li><li><a href="../#apihelper.filter">4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#20351;&#29992;&#20869;&#32622; <code class="function">filter</code> &#20989;&#25968; (<a href="http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000">http://www.python.org/doc/current/tut/node7.html#SECTION007130000000000000000</a>)&#36807;&#28388;&#21015;&#34920;&#30340;&#21478;&#19968;&#31181;&#26041;&#24335;&#12290;</li></ul><p></p></li><li><a href="../#d0e10128">4.6.1.&nbsp;&#20351;&#29992; <code class="literal">and-or</code> &#25216;&#24039;</a><p></p><ul><li><span class="application">Python</span> Cookbook (<a href="http://www.activestate.com/ASPN/Python/Cookbook/">http://www.activestate.com/ASPN/Python/Cookbook/</a>) &#35752;&#35770;&#20102;&#20854;&#23427;&#30340; <code class="literal">and-or</code> &#25216;&#24039; (<a href="http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52310">http://www.activestate.com/ASPN/Python/Cookbook/Recipe/52310</a>)&#12290;</li></ul><p></p></li><li><a href="../#d0e10549">4.7.1.&nbsp;&#30495;&#23454;&#19990;&#30028;&#20013;&#30340; <code class="literal">lambda</code> &#20989;&#25968;</a><p></p><ul><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#35752;&#35770;&#20102;&#20351;&#29992; <code class="literal">lambda</code> &#26469;&#38388;&#25509;&#35843;&#29992;&#20989;&#25968; (<a href="http://www.faqts.com/knowledge-base/view.phtml/aid/6081/fid/241">http://www.faqts.com/knowledge-base/view.phtml/aid/6081/fid/241</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#28436;&#31034;&#20102;&#22914;&#20309;&#20174;&#19968;&#20010; <code class="literal">lambda</code> &#20989;&#25968;&#20869;&#37096;&#35775;&#38382;&#22806;&#37096;&#21464;&#37327; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006740000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006740000000000000000</a>)&#12290;(<acronym class="acronym">PEP</acronym> 227 (<a href="http://python.sourceforge.net/peps/pep-0227.html">http://python.sourceforge.net/peps/pep-0227.html</a>) &#35299;&#37322;&#20102;&#22312; <span class="application">Python</span> &#30340;&#26410;&#26469;&#29256;&#26412;&#20013;&#23558;&#22914;&#20309;&#21464;&#21270;&#12290;)</li><li><em class="citetitle">The Whole <span class="application">Python</span> <acronym class="acronym">FAQ</acronym></em> (<a href="http://www.python.org/doc/FAQ.html">http://www.python.org/doc/FAQ.html</a>) &#26377;&#20851;&#20110;&#20196;&#20154;&#27169;&#31946;&#30340;&#20351;&#29992; <code class="literal">lambda</code> &#21333;&#34892;&#35821;&#21477; (<a href="http://www.python.org/cgi-bin/faqw.py?query=4.15&amp;querytype=simple&amp;casefold=yes&amp;req=search">http://www.python.org/cgi-bin/faqw.py?query=4.15&amp;querytype=simple&amp;casefold=yes&amp;req=search</a>)&#30340;&#20363;&#23376;&#12290;</li></ul><p></p></li></ul><p><a href="../#fileinfo">&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</a></p><ul><li><a href="../#fileinfo.fromimport">5.2.&nbsp;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;</a><p></p><ul><li>eff-bot (<a href="http://www.effbot.org/guides/">http://www.effbot.org/guides/</a>) &#26377;&#26356;&#22810;&#20851;&#20110; <code class="literal">import <em class="replaceable">module</em></code> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <code class="literal">from <em class="replaceable">module</em> import</code> (<a href="http://www.effbot.org/guides/import-confusion.htm">http://www.effbot.org/guides/import-confusion.htm</a>) &#30340;&#35770;&#36848;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#39640;&#32423;&#30340;&#23548;&#20837;&#25216;&#26415;&#65292;&#21253;&#25324; <code class="literal">from <em class="replaceable">module</em> import *</code> (<a href="http://www.python.org/doc/current/tut/node8.html#SECTION008410000000000000000">http://www.python.org/doc/current/tut/node8.html#SECTION008410000000000000000</a>)&#12290;</li></ul><p></p></li><li><a href="../#d0e12045">5.3.2.&nbsp;&#20102;&#35299;&#20309;&#26102;&#21435;&#20351;&#29992; <code class="literal">self</code> &#21644; <code class="function">__init__</code></a><p></p><ul><li><em class="citetitle">Learning to Program</em> (<a href="http://www.freenetpages.co.uk/hp/alan.gauld/">http://www.freenetpages.co.uk/hp/alan.gauld/</a>) &#26377;&#20248;&#38597;&#30340;&#31867;&#30340;&#20171;&#32461; (<a href="http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm">http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm</a>)&#12290;</li><li><em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#23637;&#31034;&#20102;&#22914;&#20309;&#20351;&#29992;&#31867;&#26469;&#23454;&#29616;&#22797;&#21512;&#25968;&#25454;&#31867;&#22411;&#27169;&#22411; (<a href="http://www.ibiblio.org/obp/thinkCSpy/chap12.htm">http://www.ibiblio.org/obp/thinkCSpy/chap12.htm</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#28145;&#20837;&#32771;&#34385;&#20102;&#31867;&#12289;&#21517;&#23383;&#31354;&#38388;&#21644;&#32487;&#25215; (<a href="http://www.python.org/doc/current/tut/node11.html">http://www.python.org/doc/current/tut/node11.html</a>)&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110;&#31867;&#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/242">http://www.faqts.com/knowledge-base/index.phtml/fid/242</a>)&#12290;</li></ul><p></p></li><li><a href="../#d0e12314">5.4.1.&nbsp;&#22403;&#22334;&#22238;&#25910;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#20687; <code class="literal">__class__</code> &#20043;&#31867;&#30340;&#20869;&#32622;&#23646;&#24615; (<a href="http://www.python.org/doc/current/lib/specialattrs.html">http://www.python.org/doc/current/lib/specialattrs.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">gc</code> &#27169;&#22359;&#30340;&#25991;&#26723; (<a href="http://www.python.org/doc/current/lib/module-gc.html">http://www.python.org/doc/current/lib/module-gc.html</a>)&#65292;&#27492;&#27169;&#22359;&#32473;&#20104;&#20320;&#23545; <span class="application">Python</span> &#30340;&#22403;&#22334;&#22238;&#25910;&#30340;&#24213;&#23618;&#25511;&#21046;&#26435;&#12290;</li></ul><p></p></li><li><a href="../#fileinfo.userdict">5.5.&nbsp;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">UserDict</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-UserDict.html">http://www.python.org/doc/current/lib/module-UserDict.html</a>) &#21644; <code class="filename">copy</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-copy.html">http://www.python.org/doc/current/lib/module-copy.html</a>) &#30340;&#25991;&#26723;&#12290;</li></ul><p></p></li><li><a href="../#fileinfo.morespecial">5.7.&nbsp;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#25552;&#20379;&#20102;&#25152;&#26377;&#19987;&#29992;&#31867;&#26041;&#27861; (<a href="http://www.python.org/doc/current/ref/specialnames.html">http://www.python.org/doc/current/ref/specialnames.html</a>)&#30340;&#25991;&#26723;&#12290;</li></ul><p></p></li><li><a href="../#fileinfo.private">5.9.&nbsp;&#31169;&#26377;&#20989;&#25968;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#31169;&#26377;&#21464;&#37327; (<a href="http://www.python.org/doc/current/tut/node11.html#SECTION0011600000000000000000">http://www.python.org/doc/current/tut/node11.html#SECTION0011600000000000000000</a>)&#30340;&#20869;&#37096;&#24037;&#20316;&#26041;&#24335;&#12290;</li></ul><p></p></li></ul><p><a href="../#filehandling">&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;</a></p><ul><li><a href="../#d0e14544">6.1.1.&nbsp;&#20026;&#20854;&#20182;&#29992;&#36884;&#20351;&#29992;&#24322;&#24120;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#24322;&#24120;&#65292;&#21253;&#25324;&#23450;&#20041;&#21644;&#24341;&#21457;&#20320;&#33258;&#24050;&#30340;&#24322;&#24120;&#65292;&#20197;&#21450;&#19968;&#27425;&#22788;&#29702;&#22810;&#20010;&#24322;&#24120; (<a href="http://www.python.org/doc/current/tut/node10.html#SECTION0010400000000000000000">http://www.python.org/doc/current/tut/node10.html#SECTION0010400000000000000000</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#20869;&#32622;&#24322;&#24120; (<a href="http://www.python.org/doc/current/lib/module-exceptions.html">http://www.python.org/doc/current/lib/module-exceptions.html</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; getpass (<a href="http://www.python.org/doc/current/lib/module-getpass.html">http://www.python.org/doc/current/lib/module-getpass.html</a>) &#27169;&#22359;&#30340;&#25991;&#26723;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">traceback</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-traceback.html">http://www.python.org/doc/current/lib/module-traceback.html</a>) &#30340;&#25991;&#26723;&#65292;&#36825;&#20010;&#27169;&#22359;&#22312;&#24322;&#24120;&#24341;&#21457;&#20043;&#21518;&#65292;&#25552;&#20379;&#20102;&#24213;&#23618;&#30340;&#23545;&#24322;&#24120;&#23646;&#24615;&#30340;&#22788;&#29702;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Reference Manual</em> (<a href="http://www.python.org/doc/current/ref/">http://www.python.org/doc/current/ref/</a>) &#35752;&#35770;&#20102; <code class="literal">try...except</code> &#22359; (<a href="http://www.python.org/doc/current/ref/try.html">http://www.python.org/doc/current/ref/try.html</a>) &#30340;&#20869;&#37096;&#24037;&#20316;&#26041;&#24335;&#12290;</li></ul><p></p></li><li><a href="../#d0e15243">6.2.4.&nbsp;&#20889;&#20837;&#25991;&#20214;</a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#25991;&#20214;&#30340;&#35835;&#21462;&#21644;&#20889;&#20837;&#65292;&#21253;&#25324;&#22914;&#20309;&#23558;&#19968;&#20010;&#25991;&#20214;&#19968;&#27425;&#19968;&#34892;&#22320;&#35835;&#21040; list &#20013; (<a href="http://www.python.org/doc/current/tut/node9.html#SECTION009210000000000000000">http://www.python.org/doc/current/tut/node9.html#SECTION009210000000000000000</a>)&#12290;</li><li>eff-bot (<a href="http://www.effbot.org/guides/">http://www.effbot.org/guides/</a>) &#35752;&#35770;&#20102;&#21508;&#31181;&#21508;&#26679;&#35835;&#21462;&#25991;&#20214;&#26041;&#27861; (<a href="http://www.effbot.org/guides/readline-performance.htm">http://www.effbot.org/guides/readline-performance.htm</a>) &#30340;&#25928;&#29575;&#21644;&#24615;&#33021;&#12290;</li><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110;&#25991;&#20214;&#30340;&#24120;&#35265;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/552">http://www.faqts.com/knowledge-base/index.phtml/fid/552</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102;&#25152;&#26377;&#25991;&#20214;&#23545;&#35937;&#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/bltin-file-objects.html">http://www.python.org/doc/current/lib/bltin-file-objects.html</a>)&#12290;</li></ul><p></p></li><li><a href="../#fileinfo.modules">6.4.&nbsp;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code></a><p></p><ul><li><em class="citetitle"><span class="application">Python</span> Tutorial</em> (<a href="http://www.python.org/doc/current/tut/tut.html">http://www.python.org/doc/current/tut/tut.html</a>) &#35752;&#35770;&#20102;&#32570;&#30465;&#21442;&#25968;&#21040;&#24213;&#22312;&#20160;&#20040;&#26102;&#20505;&#21644;&#26159;&#22914;&#20309;&#35745;&#31639;&#30340; (<a href="http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000">http://www.python.org/doc/current/tut/node6.html#SECTION006710000000000000000</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">sys</code> (<a href="http://www.python.org/doc/current/lib/module-sys.html">http://www.python.org/doc/current/lib/module-sys.html</a>) &#27169;&#22359;&#30340;&#25991;&#26723;&#12290;</li></ul><p></p></li><li><a href="../#fileinfo.os">6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;</a><p></p><ul><li><span class="application">Python</span> Knowledge Base (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/199/">http://www.faqts.com/knowledge-base/index.phtml/fid/199/</a>) &#22238;&#31572;&#20102;&#20851;&#20110; <code class="filename">os</code> &#27169;&#22359;&#30340;&#38382;&#39064; (<a href="http://www.faqts.com/knowledge-base/index.phtml/fid/240">http://www.faqts.com/knowledge-base/index.phtml/fid/240</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#25552;&#20379;&#20102; <code class="filename">os</code> (<a href="http://www.python.org/doc/current/lib/module-os.html">http://www.python.org/doc/current/lib/module-os.html</a>) &#27169;&#22359;&#21644; <code class="filename">os.path</code> (<a href="http://www.python.org/doc/current/lib/module-os.path.html">http://www.python.org/doc/current/lib/module-os.path.html</a>) &#27169;&#22359;&#30340;&#25991;&#26723;&#12290;</li></ul><p></p></li></ul><p><a href="../#re">&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;</a></p><ul><li><a href="../#re.phone">7.6.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;</a><p></p><ul><li>Regular Expression HOWTO (<a href="http://py-howto.sourceforge.net/regex/regex.html">http://py-howto.sourceforge.net/regex/regex.html</a>) &#35762;&#35299;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#22914;&#20309;&#22312; <span class="application">Python</span> &#20013;&#20351;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#27010;&#36848;&#20102; <code class="filename">re</code> module (<a href="http://www.python.org/doc/current/lib/module-re.html">http://www.python.org/doc/current/lib/module-re.html</a>)&#12290;</li></ul><p></p></li></ul><p><a href="../#dialect">&#31532;&nbsp;8&nbsp;&#31456;&nbsp;<acronym class="acronym">HTML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#dialect.basehtml">8.4.&nbsp;<code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;</a><p></p><ul><li>W3C (<a href="http://www.w3.org/">http://www.w3.org/</a>) &#35752;&#35770;&#20102;&#23383;&#31526;&#21644;&#23454;&#20307;&#24341;&#29992; (<a href="http://www.w3.org/TR/REC-html40/charset.html#entities">http://www.w3.org/TR/REC-html40/charset.html#entities</a>)&#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#35299;&#31572;&#20102;&#24744;&#30340;&#24576;&#30097;&#65292;&#21363; <code class="filename">htmlentitydefs</code> &#27169;&#22359; (<a href="http://www.python.org/doc/current/lib/module-htmlentitydefs.html">http://www.python.org/doc/current/lib/module-htmlentitydefs.html</a>)&#30340;&#30830;&#21517;&#31526;&#20854;&#23454;&#12290;</li></ul><p></p></li><li><a href="../#dialect.alltogether">8.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><p></p><ul><li>&#24744;&#21487;&#33021;&#20250;&#35748;&#20026;&#25105;&#30340;&#26381;&#21153;&#31471;&#33050;&#26412;&#32534;&#31243;&#30340;&#24819;&#27861;&#26159;&#24320;&#29609;&#31505;&#12290;&#22312;&#25105;&#21457;&#29616;&#36825;&#20010;&#22522;&#20110; web &#30340;&#26041;&#35328;&#36716;&#25442;&#22120; (<a href="http://rinkworks.com/dialect/">http://rinkworks.com/dialect/</a>)&#20043;&#21069;&#65292;&#30340;&#30830;&#26159;&#36825;&#26679;&#24819;&#30340;&#12290;&#19981;&#24184;&#30340;&#26159;&#65292;&#30475;&#19981;&#21040;&#23427;&#30340;&#28304;&#20195;&#30721;&#12290;</li></ul><p></p></li></ul><p><a href="../#kgp">&#31532;&nbsp;9&nbsp;&#31456;&nbsp;<acronym class="acronym">XML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#kgp.unicode">9.4.&nbsp;Unicode</a><p></p><ul><li>Unicode.org (<a href="http://www.unicode.org/">http://www.unicode.org/</a>) &#26159; unicode &#26631;&#20934;&#30340;&#20027;&#39029;&#65292;&#21253;&#21547;&#20102;&#19968;&#20010;&#31616;&#35201;&#30340;&#25216;&#26415;&#31616;&#20171; (<a href="http://www.unicode.org/standard/principles.html">http://www.unicode.org/standard/principles.html</a>)&#12290;</li><li>Unicode &#25945;&#31243; (<a href="http://www.reportlab.com/i18n/python_unicode_tutorial.html">http://www.reportlab.com/i18n/python_unicode_tutorial.html</a>)&#26377;&#26356;&#22810;&#20851;&#20110;&#22914;&#20309;&#20351;&#29992; <span class="application">Python</span> unicode &#20989;&#25968;&#30340;&#20363;&#23376;&#65292;&#21253;&#25324;&#29978;&#33267;&#22312;&#24182;&#19981;&#30495;&#30340;&#38656;&#35201;&#26102;&#22914;&#20309;&#23558; unicode &#24378;&#21046;&#36716;&#25442;&#20026; <acronym class="acronym">ASCII</acronym>&#12290;</li><li>PEP 263 (<a href="http://www.python.org/peps/pep-0263.html">http://www.python.org/peps/pep-0263.html</a>) &#28041;&#21450;&#20102;&#20309;&#26102;&#12289;&#22914;&#20309;&#22312;&#20320;&#30340;<code class="filename">.py</code>&#25991;&#20214;&#20013;&#23450;&#20041;&#23383;&#31526;&#32534;&#30721;&#30340;&#26356;&#22810;&#32454;&#33410;&#12290;</li></ul><p></p></li></ul><p><a href="../#streams">&#31532;&nbsp;10&nbsp;&#31456;&nbsp;&#33050;&#26412;&#21644;&#27969;</a></p><ul></ul><p><a href="../#oa">&#31532;&nbsp;11&nbsp;&#31456;&nbsp;HTTP Web &#26381;&#21153;</a></p><ul><li><a href="../#oa.divein">11.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li>Paul Prescod &#35748;&#20026;&#32431; HTTP web &#26381;&#21153;&#26159; Internet &#30340;&#26410;&#26469; (<a href="http://webservices.xml.com/pub/a/ws/2002/02/06/rest.html">http://webservices.xml.com/pub/a/ws/2002/02/06/rest.html</a>)&#12290;</li></ul><p></p></li></ul><p><a href="../#soap">&#31532;&nbsp;12&nbsp;&#31456;&nbsp;<acronym class="acronym">SOAP</acronym> Web &#26381;&#21153;</a></p><ul><li><a href="../#soap.divein">12.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="http://www.xmethods.net/">http://www.xmethods.net/</a> &#26159;&#19968;&#20010;&#35775;&#38382; <acronym class="acronym">SOAP</acronym> web &#26381;&#21153;&#30340;&#20844;&#20849;&#30693;&#35782;&#24211;&#12290;</li><li><acronym class="acronym">SOAP</acronym> &#35268;&#33539; (<a href="http://www.w3.org/TR/soap/">http://www.w3.org/TR/soap/</a>)&#30456;&#24403;&#21487;&#35835;&#65292;&#22914;&#26524;&#20320;&#21916;&#27426;&#36825;&#31867;&#19996;&#35199;&#30340;&#35805;&#12290;</li></ul><p></p></li><li><a href="../#soap.troubleshooting">12.8.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#25925;&#38556;&#25490;&#38500;</a><p></p><ul><li>New developments for <span class="application">SOAPpy</span> (<a href="http://www-106.ibm.com/developerworks/webservices/library/ws-pyth17.html">http://www-106.ibm.com/developerworks/webservices/library/ws-pyth17.html</a>) &#19968;&#27493;&#27493;&#36830;&#25509;&#21040;&#21478;&#19968;&#20010;&#19981;&#21517;&#21103;&#20854;&#23454;&#30340; <acronym class="acronym">SOAP</acronym> &#26381;&#21153;&#12290;</li></ul><p></p></li></ul><p><a href="../#roman">&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;</a></p><ul><li><a href="../#roman.intro">13.1.&nbsp;&#32599;&#39532;&#25968;&#23383;&#31243;&#24207;&#20171;&#32461; II</a><p></p><ul><li>&#36825;&#20010;&#31449;&#28857; (<a href="http://www.wilkiecollins.demon.co.uk/roman/front.htm">http://www.wilkiecollins.demon.co.uk/roman/front.htm</a>) &#26377;&#20851;&#20110;&#32599;&#39532;&#25968;&#23383;&#26356;&#22810;&#30340;&#20869;&#23481;&#65292;&#21253;&#25324;&#32599;&#39532;&#20154;&#22914;&#20309;&#20351;&#29992;&#32599;&#39532;&#25968;&#23383;&#30340;&#36855;&#20154; &#21382;&#21490; (<a href="http://www.wilkiecollins.demon.co.uk/roman/intro.htm">http://www.wilkiecollins.demon.co.uk/roman/intro.htm</a>) (&#31616;&#35328;&#20043;&#65306;&#20805;&#28385;&#20598;&#28982;&#24615;&#21644;&#21453;&#22797;&#26080;&#24120;)&#12290;</li></ul><p></p></li><li><a href="../#roman.romantest">13.3.&nbsp;<code class="filename">romantest.py</code> &#20171;&#32461;</a><p></p><ul><li> <span class="application">PyUnit</span> &#20027;&#39029; (<a href="http://pyunit.sourceforge.net/">http://pyunit.sourceforge.net/</a>) &#23545;&#20110;&#20351;&#29992; <code class="filename">unittest</code> &#26694;&#26550; (<a href="http://pyunit.sourceforge.net/pyunit.html">http://pyunit.sourceforge.net/pyunit.html</a>) &#20197;&#21450;&#26412;&#31456;&#27809;&#33021;&#28085;&#30422;&#30340;&#39640;&#32423;&#29305;&#24615;&#26377;&#28145;&#20837;&#30340;&#35752;&#35770;&#12290;</li><li> <span class="application">PyUnit</span> <acronym class="acronym">FAQ</acronym> (<a href="http://pyunit.sourceforge.net/pyunit.html">http://pyunit.sourceforge.net/pyunit.html</a>) &#35299;&#37322;&#20102; &#20026;&#20160;&#20040;&#27979;&#35797;&#29992;&#20363;&#35201;&#21644;&#34987;&#27979;&#35797;&#20195;&#30721;&#20998;&#24320;&#23384;&#25918; (<a href="http://pyunit.sourceforge.net/pyunit.html#WHERE">http://pyunit.sourceforge.net/pyunit.html#WHERE</a>) &#12290;</li><li><em class="citetitle"><span class="application">Python</span> Library Reference</em> (<a href="http://www.python.org/doc/current/lib/">http://www.python.org/doc/current/lib/</a>) &#24635;&#32467;&#20102; <code class="filename">unittest</code> (<a href="http://www.python.org/doc/current/lib/module-unittest.html">http://www.python.org/doc/current/lib/module-unittest.html</a>) &#27169;&#22359;&#12290;</li><li>ExtremeProgramming.org (<a href="http://www.extremeprogramming.org/">http://www.extremeprogramming.org/</a>) &#35752;&#35770; &#20320;&#20026;&#20160;&#20040;&#38656;&#35201;&#32534;&#20889;&#21333;&#20803;&#27979;&#35797; (<a href="http://www.extremeprogramming.org/rules/unittests.html">http://www.extremeprogramming.org/rules/unittests.html</a>)&#12290;</li><li>The Portland Pattern Repository (<a href="http://www.c2.com/cgi/wiki">http://www.c2.com/cgi/wiki</a>) &#26377;&#19968;&#20010;&#25345;&#32493;&#30340; &#21333;&#20803;&#27979;&#35797; (<a href="http://www.c2.com/cgi/wiki?UnitTests">http://www.c2.com/cgi/wiki?UnitTests</a>) &#35752;&#35770;&#65292;&#21253;&#25324;&#20102;&#19968;&#20010; &#26631;&#20934;&#30340;&#23450;&#20041; (<a href="http://www.c2.com/cgi/wiki?StandardDefinitionOfUnitTest">http://www.c2.com/cgi/wiki?StandardDefinitionOfUnitTest</a>)&#65292;&#20026;&#20160;&#20040;&#20320;&#38656;&#35201; &#39318;&#20808;&#24320;&#21457;&#21333;&#20803;&#27979;&#35797;&#20195;&#30721; (<a href="http://www.c2.com/cgi/wiki?CodeUnitTestFirst">http://www.c2.com/cgi/wiki?CodeUnitTestFirst</a>) &#20197;&#21450;&#21478;&#22806;&#19968;&#20123;&#28145;&#23618;&#27425; &#26696;&#20363; (<a href="http://www.c2.com/cgi/wiki?UnitTestTrial">http://www.c2.com/cgi/wiki?UnitTestTrial</a>)&#12290;</li></ul><p></p></li></ul><p><a href="../#roman1.5">&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</a></p><ul></ul><p><a href="../#roman2">&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;</a></p><ul><li><a href="../#roman.summary">15.5.&nbsp;&#23567;&#32467;</a><p></p><ul><li>XProgramming.com (<a href="http://www.xprogramming.com/">http://www.xprogramming.com/</a>) &#26377;&#22810;&#31181;&#35821;&#35328;&#30340; &#21333;&#20803;&#27979;&#35797;&#26694;&#26550; (<a href="http://www.xprogramming.com/software.htm">http://www.xprogramming.com/software.htm</a>) &#30340;&#19979;&#36733;&#38142;&#25509;&#12290;</li></ul><p></p></li></ul><p><a href="../#regression">&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;</a></p><ul></ul><p><a href="../#plural">&#31532;&nbsp;17&nbsp;&#31456;&nbsp;&#21160;&#24577;&#20989;&#25968;</a></p><ul><li><a href="../#plural.stage6">17.7.&nbsp;<code class="filename">plural.py</code>, &#31532; 6 &#38454;&#27573;</a><p></p><ul><li>PEP 255 (<a href="http://www.python.org/peps/pep-0255.html">http://www.python.org/peps/pep-0255.html</a>) &#23450;&#20041;&#29983;&#25104;&#22120;&#12290;</li><li><span class="application">Python</span> Cookbook (<a href="http://www.activestate.com/ASPN/Python/Cookbook/">http://www.activestate.com/ASPN/Python/Cookbook/</a>) &#26377;&#29983;&#25104;&#22120;&#30340;&#20363;&#23376; (<a href="http://www.google.com/search?q=generators+cookbook+site:aspn.activestate.com">http://www.google.com/search?q=generators+cookbook+site:aspn.activestate.com</a>)&#12290;</li></ul><p></p></li></ul><p><a href="../#soundex">&#31532;&nbsp;18&nbsp;&#31456;&nbsp;&#24615;&#33021;&#20248;&#21270;</a></p><ul><li><a href="../#soundex.divein">18.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li>Soundexing and Genealogy (<a href="http://www.avotaynu.com/soundex.html">http://www.avotaynu.com/soundex.html</a>) &#32473;&#20986;&#20102; Soundex &#21457;&#23637;&#30340;&#24180;&#20195;&#34920;&#20197;&#21450;&#22320;&#22495;&#21464;&#21270;&#12290;</li></ul><p></p></li></ul></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="abstracts"></a>&#38468;&#24405;&nbsp;B.&nbsp;&#20116;&#20998;&#38047;&#22238;&#39038;</h1></div></div></div><p><a href="../#install">&#31532;&nbsp;1&nbsp;&#31456;&nbsp;&#23433;&#35013; <span class="application">Python</span></a></p><ul><li><a href="../#install.choosing">1.1.&nbsp;&#21738;&#19968;&#31181; <span class="application">Python</span> &#36866;&#21512;&#24744;&#65311;</a><blockquote><div class="abstract"><p>&#23398;&#20064; <span class="application">Python</span> &#30340;&#31532;&#19968;&#20214;&#20107;&#23601;&#26159;&#23433;&#35013;&#65292;&#19981;&#26159;&#21527;&#65311;</p></div></blockquote></li><li><a href="../#install.windows">1.2.&nbsp;Windows &#19978;&#30340; <span class="application">Python</span></a><blockquote><div class="abstract"><p>&#22312; Windows &#19978;&#65292;&#23433;&#35013; <span class="application">Python</span> &#26377;&#20004;&#31181;&#36873;&#25321;&#12290;</p></div></blockquote></li><li><a href="../#install.macosx">1.3.&nbsp;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#30340; <span class="application">Python</span> </a><blockquote><div class="abstract"><p>&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#65292;&#23545;&#20110;&#23433;&#35013; <span class="application">Python</span> &#26377;&#20004;&#31181;&#36873;&#25321;&#65306;&#23433;&#35013;&#25110;&#19981;&#23433;&#35013;&#12290;&#24744;&#21487;&#33021;&#24819;&#35201;&#23433;&#35013;&#23427;&#12290;</p></div></blockquote></li><li><a href="../#install.macos9">1.4.&nbsp;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> 9 &#19978;&#30340; <span class="application">Python</span> </a><blockquote><div class="abstract"><p><abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> 9 &#19978;&#27809;&#26377;&#39044;&#35013;&#20219;&#20309;&#29256;&#26412;&#30340; <span class="application">Python</span>&#65292;&#23433;&#35013;&#30456;&#23545;&#31616;&#21333;&#65292;&#21482;&#26377;&#19968;&#31181;&#36873;&#25321;&#12290;</p></div></blockquote></li><li><a href="../#install.redhat">1.5.&nbsp;RedHat Linux &#19978;&#30340; <span class="application">Python</span> </a><blockquote><div class="abstract"><p>&#22312; <a href="http://www.python.org/ftp/python/">http://www.python.org/ftp/python/</a> &#36873;&#25321;&#21015;&#20986;&#30340;&#26368;&#26032;&#30340;&#29256;&#26412;&#21495;, &#28982;&#21518;&#36873;&#25321;
&#20854;&#20013;&#30340;<code class="filename">rpms/</code> &#30446;&#24405;&#19979;&#36733;&#26368;&#26032;&#30340; <span class="application">Python</span> <acronym class="acronym">RPM</acronym> &#21253;&#12290;
&#20351;&#29992; <span class="command"><strong>rpm</strong></span> &#21629;&#20196;&#36827;&#34892;&#23433;&#35013;&#65292;&#25805;&#20316;&#22914;&#19979;&#25152;&#31034;:</p></div></blockquote></li><li><a href="../#install.debian">1.6.&nbsp;Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#30340; <span class="application">Python</span> </a><blockquote><div class="abstract"><p>&#22914;&#26524;&#24744;&#36816;&#34892;&#22312; Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#65292;&#23433;&#35013; <span class="application">Python</span> &#38656;&#35201;&#20351;&#29992; <span class="command"><strong>apt</strong></span> &#21629;&#20196;&#12290;</p></div></blockquote></li><li><a href="../#install.source">1.7.&nbsp;&#20174;&#28304;&#20195;&#30721;&#23433;&#35013; <span class="application">Python</span> </a><blockquote><div class="abstract"><p>&#22914;&#26524;&#24744;&#23425;&#24895;&#20174;&#28304;&#30721;&#21019;&#24314;&#65292;&#21487;&#20197;&#20174; <a href="http://www.python.org/ftp/python/">http://www.python.org/ftp/python/</a>&#19979;&#36733; <span class="application">Python</span> &#30340;&#28304;&#20195;&#30721;&#12290;&#36873;&#25321;&#26368;&#26032;&#30340;&#29256;&#26412;&#65292;&#19979;&#36733;<code class="filename">.tgz</code> &#25991;&#20214;&#65292;&#25191;&#34892;&#36890;&#24120;&#30340; <strong class="userinput"><code>configure</code></strong>, <strong class="userinput"><code>make</code></strong>, <strong class="userinput"><code>make install</code></strong> &#27493;&#39588;&#12290;</p></div></blockquote></li><li><a href="../#install.shell">1.8.&nbsp;&#20351;&#29992; <span class="application">Python</span> &#30340;&#20132;&#20114; Shell</a><blockquote><div class="abstract"><p>&#26082;&#28982;&#25105;&#20204;&#24050;&#32463;&#23433;&#35013;&#20102; <span class="application">Python</span>&#65292;&#37027;&#20040;&#25105;&#20204;&#36816;&#34892;&#30340;&#36825;&#20010;&#20132;&#20114; shell &#26159;&#20160;&#20040;&#19996;&#35199;&#21602;&#65311;</p></div></blockquote></li><li><a href="../#install.summary">1.9.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#24744;&#29616;&#22312;&#24212;&#35813;&#24050;&#32463;&#23433;&#35013;&#20102;&#19968;&#20010;&#21487;&#20197;&#24037;&#20316;&#30340; <span class="application">Python</span> &#29256;&#26412;&#20102;&#12290;</p></div></blockquote></li></ul><p><a href="../#odbchelper">&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</a></p><ul><li><a href="../#odbchelper.divein">2.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#36825;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#12289;&#21487;&#25191;&#34892;&#30340; <span class="application">Python</span> &#31243;&#24207;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.funcdef">2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;</a><blockquote><div class="abstract"><p>&#19982;&#20854;&#23427;&#22823;&#22810;&#25968;&#35821;&#35328;&#19968;&#26679; <span class="application">Python</span> &#26377;&#20989;&#25968;&#65292;&#20294;&#26159;&#23427;&#27809;&#26377;&#20687; <span class="application"><acronym class="acronym">C++</acronym></span> &#19968;&#26679;&#30340;&#29420;&#31435;&#30340;&#22836;&#25991;&#20214;&#65307;&#25110;&#32773;&#20687; <span class="application">Pascal</span> &#19968;&#26679;&#30340;&#20998;&#31163;&#30340; <code class="literal">interface</code>/<code class="literal">implementation</code> &#27573;&#12290;&#22312;&#38656;&#35201;&#20989;&#25968;&#26102;&#65292;&#20687;&#19979;&#38754;&#36825;&#26679;&#22768;&#26126;&#21363;&#21487;&#65306;</p></div></blockquote></li><li><a href="../#odbchelper.docstring">2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;</a><blockquote><div class="abstract"><p>&#21487;&#20197;&#36890;&#36807;&#32473;&#20986;&#19968;&#20010; <code class="literal">doc string</code> (&#25991;&#26723;&#23383;&#31526;&#20018;) &#26469;&#25991;&#26723;&#21270;&#19968;&#20010; <span class="application">Python</span> &#20989;&#25968;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.objects">2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;</a><blockquote><div class="abstract"><p>&#22312; <span class="application">Python</span> &#20013;&#65292;&#20989;&#25968;&#21516;&#20854;&#23427;&#19996;&#35199;&#19968;&#26679;&#20063;&#26159;&#23545;&#35937;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.indenting">2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#20989;&#25968;&#27809;&#26377;&#26126;&#26174;&#30340; <code class="literal">begin</code> &#21644; <code class="literal">end</code>&#65292;&#27809;&#26377;&#26631;&#26126;&#20989;&#25968;&#30340;&#24320;&#22987;&#21644;&#32467;&#26463;&#30340;&#33457;&#25324;&#21495;&#12290;&#21807;&#19968;&#30340;&#20998;&#38548;&#31526;&#26159;&#19968;&#20010;&#20882;&#21495; (<code class="literal">:</code>)&#65292;&#25509;&#30528;&#20195;&#30721;&#26412;&#36523;&#26159;&#32553;&#36827;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.testing">2.6.&nbsp;&#27979;&#35797;&#27169;&#22359;</a><blockquote><div class="abstract"><p>&#25152;&#26377;&#30340; <span class="application">Python</span> &#27169;&#22359;&#37117;&#26159;&#23545;&#35937;&#65292;&#24182;&#19988;&#26377;&#20960;&#20010;&#26377;&#29992;&#30340;&#23646;&#24615;&#12290;&#24744;&#21487;&#20197;&#20351;&#29992;&#36825;&#20123;&#23646;&#24615;&#26041;&#20415;&#22320;&#27979;&#35797;&#24744;&#25152;&#32534;&#20889;&#30340;&#27169;&#22359;&#12290;&#19979;&#38754;&#26159;&#19968;&#20010;&#20351;&#29992; <code class="literal">if</code> <code class="literal">__name__</code> &#30340;&#25216;&#24039;&#12290;</p></div></blockquote></li></ul><p><a href="../#datatypes">&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;</a></p><ul><li><a href="../#odbchelper.dict">3.1.&nbsp;Dictionary &#20171;&#32461;</a><blockquote><div class="abstract"><p>Dictionary &#26159; <span class="application">Python</span> &#30340;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;&#20043;&#19968;&#65292;&#23427;&#23450;&#20041;&#20102;&#38190;&#21644;&#20540;&#20043;&#38388;&#19968;&#23545;&#19968;&#30340;&#20851;&#31995;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.list">3.2.&nbsp;List &#20171;&#32461;</a><blockquote><div class="abstract"><p>List &#26159; <span class="application">Python</span> &#20013;&#20351;&#29992;&#26368;&#39057;&#32321;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#22914;&#26524;&#24744;&#23545; list &#20165;&#26377;&#30340;&#32463;&#39564;&#23601;&#26159;&#22312; <span class="application">Visual Basic</span> &#20013;&#30340;&#25968;&#32452;&#25110; <span class="application">Powerbuilder</span> &#20013;&#30340;&#25968;&#25454;&#23384;&#20648;&#65292;&#37027;&#20040;&#23601;&#25171;&#36215;&#31934;&#31070;&#23398;&#20064; <span class="application">Python</span> &#30340; list &#21543;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.tuple">3.3.&nbsp;Tuple &#20171;&#32461;</a><blockquote><div class="abstract"><p>Tuple &#26159;&#19981;&#21487;&#21464;&#30340; list&#12290;&#19968;&#26086;&#21019;&#24314;&#20102;&#19968;&#20010; tuple&#65292;&#23601;&#19981;&#33021;&#20197;&#20219;&#20309;&#26041;&#24335;&#25913;&#21464;&#23427;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.vardef">3.4.&nbsp;&#21464;&#37327;&#22768;&#26126;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#19982;&#22823;&#22810;&#25968;&#20854;&#23427;&#35821;&#35328;&#19968;&#26679;&#26377;&#23616;&#37096;&#21464;&#37327;&#21644;&#20840;&#23616;&#21464;&#37327;&#20043;&#20998;&#65292;&#20294;&#26159;&#23427;&#27809;&#26377;&#26126;&#26174;&#30340;&#21464;&#37327;&#22768;&#26126;&#12290;&#21464;&#37327;&#36890;&#36807;&#39318;&#27425;&#36171;&#20540;&#20135;&#29983;&#65292;&#24403;&#36229;&#20986;&#20316;&#29992;&#33539;&#22260;&#26102;&#33258;&#21160;&#28040;&#20129;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.stringformatting">3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#25903;&#25345;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;&#30340;&#36755;&#20986; &#12290;&#23613;&#31649;&#36825;&#26679;&#21487;&#33021;&#20250;&#29992;&#21040;&#38750;&#24120;&#22797;&#26434;&#30340;&#34920;&#36798;&#24335;&#65292;&#20294;&#26368;&#22522;&#26412;&#30340;&#29992;&#27861;&#26159;&#23558;&#19968;&#20010;&#20540;&#25554;&#20837;&#21040;&#19968;&#20010;&#26377;&#23383;&#31526;&#20018;&#26684;&#24335;&#31526; <code class="literal">%s</code> &#30340;&#23383;&#31526;&#20018;&#20013;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.map">3.6.&nbsp;&#26144;&#23556; list</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#30340;&#24378;&#22823;&#29305;&#24615;&#20043;&#19968;&#26159;&#20854;&#23545; list &#30340;&#35299;&#26512;&#65292;&#23427;&#25552;&#20379;&#19968;&#31181;&#32039;&#20945;&#30340;&#26041;&#27861;&#65292;&#21487;&#20197;&#36890;&#36807;&#23545; list &#20013;&#30340;&#27599;&#20010;&#20803;&#32032;&#24212;&#29992;&#19968;&#20010;&#20989;&#25968;&#65292;&#20174;&#32780;&#23558;&#19968;&#20010; list &#26144;&#23556;&#20026;&#21478;&#19968;&#20010; list&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.join">3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;</a><blockquote><div class="abstract"><p>&#24744;&#26377;&#20102;&#19968;&#20010;&#24418;&#22914; <code class="literal"><em class="replaceable">key</em>=<em class="replaceable">value</em></code> &#30340; key-value &#23545; list&#65292;&#24182;&#19988;&#24819;&#23558;&#23427;&#20204;&#21512;&#25104;&#20026;&#21333;&#20010;&#23383;&#31526;&#20018;&#12290;&#20026;&#20102;&#23558;&#20219;&#24847;&#21253;&#21547;&#23383;&#31526;&#20018;&#30340; list &#36830;&#25509;&#25104;&#21333;&#20010;&#23383;&#31526;&#20018;&#65292;&#21487;&#20197;&#20351;&#29992;&#23383;&#31526;&#20018;&#23545;&#35937;&#30340; <code class="function">join</code> &#26041;&#27861;&#12290;</p></div></blockquote></li><li><a href="../#odbchelper.summary">3.8.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#29616;&#22312; <code class="filename">odbchelper.py</code> &#31243;&#24207;&#21644;&#23427;&#30340;&#36755;&#20986;&#32467;&#26524;&#37117;&#24212;&#35813;&#38750;&#24120;&#28165;&#26970;&#20102;&#12290;</p></div></blockquote></li></ul><p><a href="../#apihelper">&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;</a></p><ul><li><a href="../#apihelper.divein">4.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#23436;&#25972;&#21487;&#36816;&#34892;&#30340; <span class="application">Python</span> &#31243;&#24207;&#12290;&#22823;&#27010;&#30475;&#19968;&#19979;&#36825;&#27573;&#31243;&#24207;&#65292;&#20320;&#24212;&#35813;&#21487;&#20197;&#29702;&#35299;&#19981;&#23569;&#20102;&#12290;&#29992;&#25968;&#23383;&#26631;&#20986;&#30340;&#34892;&#38416;&#36848;&#20102; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#20013;&#28041;&#21450;&#30340;&#19968;&#20123;&#27010;&#24565;&#12290;&#22914;&#26524;&#21097;&#19979;&#26469;&#30340;&#20195;&#30721;&#30475;&#36215;&#26469;&#26377;&#28857;&#22855;&#24618;&#65292;&#19981;&#29992;&#25285;&#24515;&#65292;&#36890;&#36807;&#38405;&#35835;&#26412;&#31456;&#20320;&#23558;&#20250;&#29702;&#35299;&#25152;&#26377;&#36825;&#20123;&#12290;</p></div></blockquote></li><li><a href="../#apihelper.optional">4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#20801;&#35768;&#20989;&#25968;&#21442;&#25968;&#26377;&#32570;&#30465;&#20540;&#65307;&#22914;&#26524;&#35843;&#29992;&#20989;&#25968;&#26102;&#19981;&#20351;&#29992;&#21442;&#25968;&#65292;&#21442;&#25968;&#23558;&#33719;&#24471;&#23427;&#30340;&#32570;&#30465;&#20540;&#12290;&#27492;&#22806;&#65292;&#36890;&#36807;&#20351;&#29992;&#21629;&#21517;&#21442;&#25968;&#36824;&#21487;&#20197;&#20197;&#20219;&#24847;&#39034;&#24207;&#25351;&#23450;&#21442;&#25968;&#12290;<span class="application">SQL Server</span> Transact/<acronym class="acronym">SQL</acronym> &#20013;&#30340;&#23384;&#20648;&#36807;&#31243;&#20063;&#21487;&#20197;&#20570;&#21040;&#36825;&#20123;&#65307;&#22914;&#26524;&#20320;&#26159;&#33050;&#26412;&#39640;&#25163;&#65292;&#20320;&#21487;&#20197;&#30053;&#36807;&#36825;&#37096;&#20998;&#12290;</p></div></blockquote></li><li><a href="../#apihelper.builtin">4.3.&nbsp;&#20351;&#29992; <code class="function">type</code>&#12289;<code class="function">str</code>&#12289;<code class="function">dir</code> &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#26377;&#23567;&#37096;&#20998;&#30456;&#24403;&#26377;&#29992;&#30340;&#20869;&#32622;&#20989;&#25968;&#12290;&#38500;&#36825;&#20123;&#20989;&#25968;&#20043;&#22806;&#65292;&#20854;&#23427;&#25152;&#26377;&#30340;&#20989;&#25968;&#37117;&#34987;&#20998;&#21040;&#20102;&#21508;&#20010;&#27169;&#22359;&#20013;&#12290;&#20854;&#23454;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#26126;&#26234;&#30340;&#35774;&#35745;&#31574;&#30053;&#65292;&#36991;&#20813;&#20102;&#26680;&#24515;&#35821;&#35328;&#21464;&#24471;&#20687;&#20854;&#23427;&#33050;&#26412;&#35821;&#35328;&#19968;&#26679;&#33219;&#32959; (&#21683; &#21683;&#65292;<span class="application">Visual Basic</span>)&#12290;</p></div></blockquote></li><li><a href="../#apihelper.getattr">4.4.&nbsp;&#36890;&#36807; <code class="function">getattr</code> &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;</a><blockquote><div class="abstract"><p>&#20320;&#24050;&#32463;&#30693;&#36947; <a class="link" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;"><span class="application">Python</span> &#20989;&#25968;&#26159;&#23545;&#35937;</a>&#12290;&#20320;&#19981;&#30693;&#36947;&#30340;&#26159;&#65292;&#20351;&#29992; <code class="function">getattr</code> &#20989;&#25968;&#65292;&#21487;&#20197;&#24471;&#21040;&#19968;&#20010;&#30452;&#21040;&#36816;&#34892;&#26102;&#25165;&#30693;&#36947;&#21517;&#31216;&#30340;&#20989;&#25968;&#30340;&#24341;&#29992;&#12290;</p></div></blockquote></li><li><a href="../#apihelper.filter">4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;</a><blockquote><div class="abstract"><p>&#22914;&#20320;&#25152;&#30693;&#65292;<span class="application">Python</span> &#20855;&#26377;&#36890;&#36807;&#21015;&#34920;&#35299;&#26512; (<a class="xref" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#31532;&nbsp;3.6&nbsp;&#33410; &#8220;&#26144;&#23556; list&#8221;</a>) &#23558;&#21015;&#34920;&#26144;&#23556;&#21040;&#20854;&#23427;&#21015;&#34920;&#30340;&#24378;&#22823;&#33021;&#21147;&#12290;&#36825;&#31181;&#33021;&#21147;&#21516;&#36807;&#28388;&#26426;&#21046;&#32467;&#21512;&#20351;&#29992;&#65292;&#20351;&#21015;&#34920;&#20013;&#30340;&#26377;&#20123;&#20803;&#32032;&#34987;&#26144;&#23556;&#30340;&#21516;&#26102;&#36339;&#36807;&#21478;&#22806;&#19968;&#20123;&#20803;&#32032;&#12290;</p></div></blockquote></li><li><a href="../#apihelper.andor">4.6.&nbsp;<code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#29305;&#27530;&#24615;&#36136;</a><blockquote><div class="abstract"><p>&#22312;<span class="application">Python</span> &#20013;&#65292;<code class="literal">and</code> &#21644; <code class="literal">or</code> &#25191;&#34892;&#24067;&#23572;&#36923;&#36753;&#28436;&#31639;&#65292;&#22914;&#20320;&#25152;&#26399;&#24453;&#30340;&#19968;&#26679;&#12290;&#20294;&#26159;&#23427;&#20204;&#24182;&#19981;&#36820;&#22238;&#24067;&#23572;&#20540;&#65292;&#32780;&#26159;&#36820;&#22238;&#23427;&#20204;&#23454;&#38469;&#36827;&#34892;&#27604;&#36739;&#30340;&#20540;&#20043;&#19968;&#12290;</p></div></blockquote></li><li><a href="../#apihelper.lambda">4.7.&nbsp;&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#25903;&#25345;&#19968;&#31181;&#26377;&#36259;&#30340;&#35821;&#27861;&#65292;&#23427;&#20801;&#35768;&#20320;&#24555;&#36895;&#23450;&#20041;&#21333;&#34892;&#30340;&#26368;&#23567;&#20989;&#25968;&#12290;&#36825;&#20123;&#21483;&#20570; <code class="literal">lambda</code> &#30340;&#20989;&#25968;&#65292;&#26159;&#20174; <span class="application">Lisp</span> &#20511;&#29992;&#26469;&#30340;&#65292;&#21487;&#20197;&#29992;&#22312;&#20219;&#20309;&#38656;&#35201;&#20989;&#25968;&#30340;&#22320;&#26041;&#12290;</p></div></blockquote></li><li><a href="../#apihelper.alltogether">4.8.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><blockquote><div class="abstract"><p>&#26368;&#21518;&#19968;&#34892;&#20195;&#30721;&#26159;&#21807;&#19968;&#36824;&#27809;&#26377;&#35299;&#37322;&#36807;&#30340;&#65292;&#23427;&#23436;&#25104;&#20840;&#37096;&#30340;&#24037;&#20316;&#12290;&#20294;&#26159;&#29616;&#22312;&#24037;&#20316;&#24050;&#32463;&#31616;&#21333;&#20102;&#65292;&#22240;&#20026;&#25152;&#38656;&#35201;&#30340;&#27599;&#20214;&#20107;&#37117;&#24050;&#32463;&#25353;&#29031;&#38656;&#27714;&#24314;&#31435;&#22909;&#20102;&#12290;&#25152;&#26377;&#30340;&#22810;&#31859;&#35834;&#39592;&#29260;&#24050;&#32463;&#23601;&#20301;&#65292;&#21040;&#20102;&#23558;&#23427;&#20204;&#25512;&#20498;&#30340;&#26102;&#20505;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#apihelper.summary">4.9.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p><code class="filename">apihelper.py</code> &#31243;&#24207;&#21644;&#23427;&#30340;&#36755;&#20986;&#29616;&#22312;&#24212;&#35813;&#38750;&#24120;&#28165;&#26224;&#20102;&#12290;</p></div></blockquote></li></ul><p><a href="../#fileinfo">&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</a></p><ul><li><a href="../#fileinfo.divein">5.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#19979;&#38754;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#65292;&#21487;&#36816;&#34892;&#30340; <span class="application">Python</span> &#31243;&#24207;&#12290;&#35831;&#38405;&#35835;&#27169;&#22359;&#12289;&#31867;&#21644;&#20989;&#25968;&#30340; <a class="link" href="#odbchelper.docstring" title="2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;"><code class="literal">doc string</code>s</a>&#65292;&#21487;&#20197;&#22823;&#27010;&#20102;&#35299;&#36825;&#20010;&#31243;&#24207;&#25152;&#20570;&#30340;&#20107;&#24773;&#21644;&#24037;&#20316;&#24773;&#20917;&#12290;&#20687;&#24179;&#26102;&#19968;&#26679;&#65292;&#19981;&#29992;&#25285;&#24515;&#20320;&#19981;&#29702;&#35299;&#30340;&#19996;&#35199;&#65292;&#36825;&#23601;&#26159;&#26412;&#31456;&#20854;&#23427;&#37096;&#20998;&#23558;&#21578;&#35785;&#20320;&#30340;&#20869;&#23481;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.fromimport">5.2.&nbsp;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#26377;&#20004;&#31181;&#23548;&#20837;&#27169;&#22359;&#30340;&#26041;&#27861;&#12290;&#20004;&#31181;&#37117;&#26377;&#29992;&#65292;&#20320;&#24212;&#35813;&#30693;&#36947;&#20160;&#20040;&#26102;&#20505;&#20351;&#29992;&#21738;&#19968;&#31181;&#26041;&#27861;&#12290;&#19968;&#31181;&#26041;&#27861;&#65292;<code class="literal">import <em class="replaceable">module</em></code>&#65292;&#20320;&#24050;&#32463;&#22312;<a class="xref" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#31532;&nbsp;2.4&nbsp;&#33410; &#8220;&#19975;&#29289;&#30342;&#23545;&#35937;&#8221;</a>&#30475;&#36807;&#20102;&#12290;&#21478;&#19968;&#31181;&#26041;&#27861;&#23436;&#25104;&#21516;&#26679;&#30340;&#20107;&#24773;&#65292;&#20294;&#26159;&#23427;&#19982;&#31532;&#19968;&#31181;&#26377;&#30528;&#32454;&#24494;&#20294;&#37325;&#35201;&#30340;&#21306;&#21035;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.class">5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#26159;&#23436;&#20840;&#38754;&#21521;&#23545;&#35937;&#30340;&#65306;&#20320;&#21487;&#20197;&#23450;&#20041;&#33258;&#24050;&#30340;&#31867;&#65292;&#20174;&#33258;&#24050;&#30340;&#25110;&#20869;&#32622;&#30340;&#31867;&#32487;&#25215;&#65292;&#28982;&#21518;&#20174;&#20320;&#23450;&#20041;&#30340;&#31867;&#21019;&#24314;&#23454;&#20363;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.create">5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;</a><blockquote><div class="abstract"><p>&#22312; <span class="application">Python</span> &#20013;&#23545;&#31867;&#36827;&#34892;&#23454;&#20363;&#21270;&#24456;&#30452;&#25509;&#12290;&#35201;&#23545;&#31867;&#36827;&#34892;&#23454;&#20363;&#21270;&#65292;&#21482;&#35201;&#35843;&#29992;&#31867; (&#23601;&#22909;&#20687;&#23427;&#26159;&#19968;&#20010;&#20989;&#25968;)&#65292;&#20256;&#20837;&#23450;&#20041;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#30340;&#21442;&#25968;&#12290;&#36820;&#22238;&#20540;&#23558;&#26159;&#26032;&#21019;&#24314;&#30340;&#23545;&#35937;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.userdict">5.5.&nbsp;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;</a><blockquote><div class="abstract"><p>&#22914;&#20320;&#25152;&#35265;&#65292;<code class="classname">FileInfo</code> &#26159;&#19968;&#20010;&#26377;&#30528;&#20687;&#23383;&#20856;&#19968;&#26679;&#30340;&#34892;&#20026;&#26041;&#24335;&#30340;&#31867;&#12290;&#20026;&#20102;&#36827;&#19968;&#27493;&#25581;&#31034;&#36825;&#19968;&#28857;&#65292;&#35753;&#25105;&#20204;&#30475;&#19968;&#30475;&#22312; <code class="filename">UserDict</code> &#27169;&#22359;&#20013;&#30340; <code class="classname">UserDict</code> &#31867;&#65292;&#23427;&#26159;&#25105;&#20204;&#30340; <code class="classname">FileInfo</code> &#31867;&#30340;&#29238;&#31867;&#12290;&#23427;&#27809;&#26377;&#20160;&#20040;&#29305;&#21035;&#30340;&#65292;&#20063;&#26159;&#29992; <span class="application">Python</span> &#20889;&#30340;&#65292;&#24182;&#19988;&#20445;&#23384;&#22312;&#19968;&#20010; <code class="literal">.py</code> &#25991;&#20214;&#37324;&#65292;&#23601;&#20687;&#25105;&#20204;&#20854;&#20182;&#30340;&#20195;&#30721;&#12290;&#29305;&#21035;&#20043;&#22788;&#22312;&#20110;&#65292;&#23427;&#20445;&#23384;&#22312;&#20320;&#30340; <span class="application">Python</span> &#23433;&#35013;&#30446;&#24405;&#30340; <code class="filename">lib</code> &#30446;&#24405;&#19979;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.specialmethods">5.6.&nbsp;&#19987;&#29992;&#31867;&#26041;&#27861;</a><blockquote><div class="abstract"><p>&#38500;&#20102;&#26222;&#36890;&#30340;&#31867;&#26041;&#27861;&#65292;<span class="application">Python</span> &#31867;&#36824;&#21487;&#20197;&#23450;&#20041;&#19987;&#29992;&#26041;&#27861;&#12290;&#19987;&#29992;&#26041;&#27861;&#26159;&#22312;&#29305;&#27530;&#24773;&#20917;&#19979;&#25110;&#24403;&#20351;&#29992;&#29305;&#21035;&#35821;&#27861;&#26102;&#30001; <span class="application">Python</span> &#26367;&#20320;&#35843;&#29992;&#30340;&#65292;&#32780;&#19981;&#26159;&#22312;&#20195;&#30721;&#20013;&#30452;&#25509;&#35843;&#29992; (&#20687;&#26222;&#36890;&#30340;&#26041;&#27861;&#37027;&#26679;)&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.morespecial">5.7.&nbsp;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;</a><blockquote><div class="abstract"><p>&#38500;&#20102; <code class="function">__getitem__</code> &#21644; <code class="function">__setitem__</code> &#20043;&#22806; <span class="application">Python</span> &#36824;&#26377;&#26356;&#22810;&#30340;&#19987;&#29992;&#20989;&#25968;&#12290;&#26576;&#20123;&#21487;&#20197;&#35753;&#20320;&#27169;&#25311;&#20986;&#20320;&#29978;&#33267;&#21487;&#33021;&#19981;&#30693;&#36947;&#30340;&#21151;&#33021;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.classattributes">5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;</a><blockquote><div class="abstract"><p>&#20320;&#24050;&#32463;&#30693;&#36947;&#20102;<a class="link" href="#fileinfo.userdict.init.example" title="&#20363;&nbsp;5.9.&nbsp;&#23450;&#20041; UserDict &#31867;">&#25968;&#25454;&#23646;&#24615;</a>&#65292;&#23427;&#20204;&#26159;&#34987;&#19968;&#20010;&#29305;&#23450;&#30340;&#31867;&#23454;&#20363;&#25152;&#25317;&#26377;&#30340;&#21464;&#37327;&#12290;<span class="application">Python</span> &#20063;&#25903;&#25345;&#31867;&#23646;&#24615;&#65292;&#23427;&#20204;&#26159;&#30001;&#31867;&#26412;&#36523;&#25152;&#25317;&#26377;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.private">5.9.&nbsp;&#31169;&#26377;&#20989;&#25968;</a><blockquote><div class="abstract"><p>&#19982;&#22823;&#22810;&#25968;&#30340;&#35821;&#35328;&#19981;&#21516;&#65292;&#19968;&#20010; <span class="application">Python</span> &#20989;&#25968;&#65292;&#26041;&#27861;&#65292;&#25110;&#23646;&#24615;&#26159;&#31169;&#26377;&#36824;&#26159;&#20844;&#26377;&#65292;&#23436;&#20840;&#21462;&#20915;&#20110;&#23427;&#30340;&#21517;&#23383;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.summary">5.10.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#23454;&#25171;&#23454;&#30340;&#23545;&#35937;&#25226;&#25103;&#21040;&#27492;&#20026;&#27490;&#12290;&#20320;&#23558;&#22312; <a class="xref" href="#soap" title="&#31532;&nbsp;12&nbsp;&#31456;&nbsp;SOAP Web &#26381;&#21153;">&#31532; 12 &#31456;</a> &#20013;&#30475;&#21040;&#19968;&#20010;&#30495;&#23454;&#19990;&#30028;&#24212;&#29992;&#31243;&#24207;&#30340;&#19987;&#26377;&#31867;&#26041;&#27861;&#65292;&#23427;&#20351;&#29992; <code class="function">getattr</code> &#21019;&#24314;&#19968;&#20010;&#21040;&#36828;&#31243; Web &#26381;&#21153;&#30340;&#20195;&#29702;&#12290;</p></div></blockquote></li></ul><p><a href="../#filehandling">&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;</a></p><ul><li><a href="../#fileinfo.exception">6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;</a><blockquote><div class="abstract"><p>&#19982;&#35768;&#22810;&#38754;&#21521;&#23545;&#35937;&#35821;&#35328;&#19968;&#26679;&#65292;<span class="application">Python</span> &#20855;&#26377;&#24322;&#24120;&#22788;&#29702;&#65292;&#36890;&#36807;&#20351;&#29992; <code class="literal">try...except</code> &#22359;&#26469;&#23454;&#29616;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.files">6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#26377;&#19968;&#20010;&#20869;&#32622;&#20989;&#25968;&#65292;<code class="function">open</code>&#65292;&#29992;&#26469;&#25171;&#24320;&#22312;&#30913;&#30424;&#19978;&#30340;&#25991;&#20214;&#12290;<code class="function">open</code> &#36820;&#22238;&#19968;&#20010;&#25991;&#20214;&#23545;&#35937;&#65292;&#23427;&#25317;&#26377;&#19968;&#20123;&#26041;&#27861;&#21644;&#23646;&#24615;&#65292;&#21487;&#20197;&#24471;&#21040;&#34987;&#25171;&#24320;&#25991;&#20214;&#30340;&#20449;&#24687;&#65292;&#20197;&#21450;&#23545;&#34987;&#25171;&#24320;&#25991;&#20214;&#36827;&#34892;&#25805;&#20316;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.for">6.3.&nbsp;<code class="literal">for</code> &#24490;&#29615;</a><blockquote><div class="abstract"><p>&#19982;&#20854;&#23427;&#22823;&#22810;&#25968;&#35821;&#35328;&#19968;&#26679;&#65292;<span class="application">Python</span> &#20063;&#25317;&#26377; <code class="literal">for</code> &#24490;&#29615;&#12290;&#20320;&#21040;&#29616;&#22312;&#36824;&#26410;&#26366;&#30475;&#21040;&#23427;&#20204;&#30340;&#21807;&#19968;&#21407;&#22240;&#23601;&#26159;&#65292;<span class="application">Python</span> &#22312;&#20854;&#23427;&#22826;&#22810;&#30340;&#26041;&#38754;&#34920;&#29616;&#20986;&#33394;&#65292;&#36890;&#24120;&#20320;&#19981;&#38656;&#35201;&#23427;&#20204;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.modules">6.4.&nbsp;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code></a><blockquote><div class="abstract"><p>&#19982;&#20854;&#23427;&#20219;&#20309; <span class="application">Python</span> &#30340;&#19996;&#35199;&#19968;&#26679;&#65292;&#27169;&#22359;&#20063;&#26159;&#23545;&#35937;&#12290;&#21482;&#35201;&#23548;&#20837;&#20102;&#65292;&#24635;&#21487;&#20197;&#29992;&#20840;&#23616; dictionary <code class="literal"><code class="filename">sys</code>.modules</code> &#26469;&#24471;&#21040;&#19968;&#20010;&#27169;&#22359;&#30340;&#24341;&#29992;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.os">6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;</a><blockquote><div class="abstract"><p><code class="filename">os.path</code> &#27169;&#22359;&#26377;&#20960;&#20010;&#25805;&#20316;&#25991;&#20214;&#21644;&#30446;&#24405;&#30340;&#20989;&#25968;&#12290;&#36825;&#37324;&#65292;&#25105;&#20204;&#30475;&#30475;&#22914;&#20309;&#25805;&#20316;&#36335;&#24452;&#21517;&#21644;&#21015;&#20986;&#19968;&#20010;&#30446;&#24405;&#30340;&#20869;&#23481;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.alltogether">6.6.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><blockquote><div class="abstract"><p>&#20877;&#19968;&#27425;&#65292;&#25152;&#26377;&#30340;&#22810;&#31859;&#35834;&#39592;&#29260;&#37117;&#25918;&#22909;&#20102;&#12290;&#25105;&#20204;&#24050;&#32463;&#30475;&#36807;&#27599;&#34892;&#20195;&#30721;&#26159;&#22914;&#20309;&#24037;&#20316;&#30340;&#20102;&#12290;&#29616;&#22312;&#24448;&#22238;&#36208;&#19968;&#27493;&#65292;&#30475;&#19968;&#19979;&#25918;&#22312;&#19968;&#36215;&#26159;&#24590;&#20040;&#26679;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#fileinfo.summary2">6.7.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#22312; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532; 5 &#31456;</a> &#20171;&#32461;&#30340; <code class="filename">fileinfo.py</code> &#31243;&#24207;&#29616;&#22312;&#24212;&#35813;&#23436;&#20840;&#29702;&#35299;&#20102;&#12290;</p></div></blockquote></li></ul><p><a href="../#re">&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;</a></p><ul><li><a href="../#re.intro">7.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#22914;&#26524;&#20320;&#35201;&#35299;&#20915;&#30340;&#38382;&#39064;&#21033;&#29992;&#23383;&#31526;&#20018;&#20989;&#25968;&#33021;&#22815;&#23436;&#25104;&#65292;&#20320;&#24212;&#35813;&#20351;&#29992;&#23427;&#20204;&#12290;&#23427;&#20204;&#24555;&#36895;&#12289;&#31616;&#21333;&#19988;&#23481;&#26131;&#38405;&#35835;&#65292;&#32780;&#24555;&#36895;&#12289;&#31616;&#21333;&#12289;&#21487;&#35835;&#24615;&#24378;&#30340;&#20195;&#30721;&#21487;&#20197;&#35828;&#20986;&#24456;&#22810;&#22909;&#22788;&#12290;&#20294;&#26159;&#65292;&#22914;&#26524;&#20320;&#21457;&#29616;&#20320;&#20351;&#29992;&#20102;&#35768;&#22810;&#19981;&#21516;&#30340;&#23383;&#31526;&#20018;&#20989;&#25968;&#21644; <code class="literal">if</code> &#35821;&#21477;&#26469;&#22788;&#29702;&#19968;&#20010;&#29305;&#27530;&#24773;&#20917;&#65292;&#25110;&#32773;&#20320;&#32452;&#21512;&#20351;&#29992;&#20102; <code class="function">split</code>&#12289;<code class="function">join</code> &#31561;&#20989;&#25968;&#32780;&#23548;&#33268;&#29992;&#19968;&#31181;&#22855;&#24618;&#30340;&#29978;&#33267;&#35835;&#19981;&#19979;&#21435;&#30340;&#26041;&#24335;&#29702;&#35299;&#21015;&#34920;&#65292;&#27492;&#26102;&#65292;&#20320;&#20063;&#35768;&#38656;&#35201;&#36716;&#21040;&#27491;&#21017;&#34920;&#36798;&#24335;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#re.matching">7.2.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;</a><blockquote><div class="abstract"><p>&#36825;&#19968;&#31995;&#21015;&#30340;&#20363;&#23376;&#26159;&#30001;&#25105;&#20960;&#24180;&#21069;&#26085;&#24120;&#24037;&#20316;&#20013;&#30340;&#29616;&#23454;&#38382;&#39064;&#21551;&#21457;&#32780;&#26469;&#30340;&#65292;&#24403;&#26102;&#25105;&#38656;&#35201;&#20174;&#19968;&#20010;&#32769;&#21270;&#31995;&#32479;&#20013;&#23548;&#20986;&#34903;&#36947;&#22320;&#22336;&#65292;&#22312;&#23558;&#23427;&#20204;&#23548;&#20837;&#26032;&#30340;&#31995;&#32479;&#20043;&#21069;&#65292;&#36827;&#34892;&#28165;&#29702;&#21644;&#26631;&#20934;&#21270;&#12290;(&#30475;&#65292;&#25105;&#19981;&#26159;&#21482;&#23558;&#36825;&#20123;&#19996;&#35199;&#22534;&#21040;&#19968;&#36215;&#65292;&#23427;&#26377;&#23454;&#38469;&#30340;&#29992;&#22788;&#12290;)&#36825;&#20010;&#20363;&#23376;&#23637;&#31034;&#25105;&#22914;&#20309;&#22788;&#29702;&#36825;&#20010;&#38382;&#39064;&#12290;</p></div></blockquote></li><li><a href="../#re.roman">7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;</a><blockquote><div class="abstract"><p>&#20320;&#21487;&#33021;&#32463;&#24120;&#30475;&#21040;&#32599;&#39532;&#25968;&#23383;&#65292;&#21363;&#20351;&#20320;&#27809;&#26377;&#24847;&#35782;&#21040;&#23427;&#20204;&#12290;&#20320;&#21487;&#33021;&#26366;&#32463;&#22312;&#32769;&#30005;&#24433;&#25110;&#32773;&#30005;&#35270;&#20013;&#30475;&#21040;&#23427;&#20204; ("<span class="quote">&#29256;&#26435;&#25152;&#26377; <code class="literal">MCMXLVI</code></span>" &#32780;&#19981;&#26159; "<span class="quote">&#29256;&#26435;&#25152;&#26377;<code class="literal">1946</code></span>")&#65292;&#25110;&#32773;&#22312;&#26576;&#22270;&#20070;&#39302;&#25110;&#26576;&#22823;&#23398;&#30340;&#36129;&#29486;&#22681;&#19978;&#30475;&#21040;&#23427;&#20204; ("<span class="quote">&#25104;&#31435;&#20110; <code class="literal">MDCCCLXXXVIII</code></span>"&#32780;&#19981;&#26159;"<span class="quote">&#25104;&#31435;&#20110;<code class="literal">1888</code></span>")&#12290;&#20320;&#20063;&#21487;&#33021;&#22312;&#26576;&#20123;&#25991;&#29486;&#30340;&#22823;&#32434;&#25110;&#32773;&#30446;&#24405;&#19978;&#30475;&#21040;&#23427;&#20204;&#12290;&#36825;&#26159;&#19968;&#20010;&#34920;&#31034;&#25968;&#23383;&#30340;&#31995;&#32479;&#65292;&#23427;&#23454;&#38469;&#19978;&#33021;&#22815;&#36861;&#28335;&#21040;&#36828;&#21476;&#30340;&#32599;&#39532;&#24093;&#22269; (&#22240;&#27492;&#32780;&#24471;&#21517;)&#12290;</p></div></blockquote></li><li><a href="../#re.nm">7.4.&nbsp;&#20351;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;</a><blockquote><div class="abstract"><p>&#22312;<a class="link" href="#re.roman" title="7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;">&#21069;&#38754;&#30340;&#31456;&#33410;</a>&#65292;&#20320;&#22788;&#29702;&#20102;&#30456;&#21516;&#23383;&#31526;&#21487;&#20197;&#37325;&#22797;&#19977;&#27425;&#30340;&#24773;&#20917;&#12290;&#22312;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#65292;&#26377;&#21478;&#22806;&#19968;&#20010;&#26041;&#24335;&#26469;&#34920;&#36798;&#36825;&#31181;&#24773;&#20917;&#65292;&#24182;&#19988;&#33021;&#25552;&#39640;&#20195;&#30721;&#30340;&#21487;&#35835;&#24615;&#12290;&#39318;&#20808;&#30475;&#30475;&#25105;&#20204;&#22312;&#21069;&#38754;&#30340;&#20363;&#23376;&#20013;&#20351;&#29992;&#30340;&#26041;&#27861;&#12290;</p></div></blockquote></li><li><a href="../#re.verbose">7.5.&nbsp;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;</a><blockquote><div class="abstract"><p>&#36804;&#20170;&#20026;&#27490;&#65292;&#20320;&#21482;&#26159;&#22788;&#29702;&#36807;&#34987;&#25105;&#31216;&#20043;&#20026;"<span class="quote">&#32039;&#20945;</span>"&#31867;&#22411;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;&#27491;&#22914;&#20320;&#26366;&#30475;&#21040;&#30340;&#65292;&#23427;&#20204;&#38590;&#20197;&#38405;&#35835;&#65292;&#21363;&#20351;&#20320;&#28165;&#26970;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#21547;&#20041;&#65292;&#20320;&#20063;&#19981;&#33021;&#20445;&#35777;&#20845;&#20010;&#26376;&#20197;&#21518;&#20320;&#36824;&#33021;&#29702;&#35299;&#23427;&#12290;&#20320;&#30495;&#27491;&#25152;&#38656;&#30340;&#23601;&#26159;&#21033;&#29992;&#20869;&#32852;&#25991;&#26723; (inline documentation)&#12290;</p></div></blockquote></li><li><a href="../#re.phone">7.6.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;</a><blockquote><div class="abstract"><p>&#36804;&#20170;&#20026;&#27490;&#65292;&#20320;&#20027;&#35201;&#26159;&#21305;&#37197;&#25972;&#20010;&#27169;&#24335;&#65292;&#19981;&#35770;&#26159;&#21305;&#37197;&#19978;&#65292;&#36824;&#26159;&#27809;&#26377;&#21305;&#37197;&#19978;&#12290;&#20294;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#36824;&#26377;&#27604;&#36825;&#26356;&#20026;&#24378;&#22823;&#30340;&#21151;&#33021;&#12290;&#24403;&#19968;&#20010;&#27169;&#24335;<span class="emphasis"><em>&#30830;&#23454;</em></span> &#21305;&#37197;&#19978;&#26102;&#65292;&#20320;&#21487;&#20197;&#33719;&#21462;&#27169;&#24335;&#20013;&#29305;&#23450;&#30340;&#29255;&#26029;&#65292;&#20320;&#21487;&#20197;&#21457;&#29616;&#20855;&#20307;&#21305;&#37197;&#30340;&#20301;&#32622;&#12290;</p></div></blockquote></li><li><a href="../#re.summary">7.7.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#36825;&#21482;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#33021;&#22815;&#23436;&#25104;&#24037;&#20316;&#30340;&#24456;&#23569;&#19968;&#37096;&#20998;&#12290;&#25442;&#21477;&#35805;&#35828;&#65292;&#21363;&#20351;&#20320;&#29616;&#22312;&#22791;&#21463;&#25171;&#20987;&#65292;&#30456;&#20449;&#25105;&#65292;&#20320;&#20063;&#19981;&#26159;&#20160;&#20040;&#20063;&#27809;&#35265;&#36807;&#20102;&#12290;</p></div></blockquote></li></ul><p><a href="../#dialect">&#31532;&nbsp;8&nbsp;&#31456;&nbsp;<acronym class="acronym">HTML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#dialect.divein">8.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>
&#25105;&#32463;&#24120;&#22312; comp.lang.python (<a href="http://groups.google.com/groups?group=comp.lang.python">http://groups.google.com/groups?group=comp.lang.python</a>) &#19978;&#30475;&#21040;&#20851;&#20110;&#22914;&#19979;&#30340;&#38382;&#39064;&#65306; "<span class="quote"> &#24590;&#20040;&#25165;&#33021;&#20174;&#25105;&#30340; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#21015;&#20986;&#25152;&#26377;&#30340; [&#22836;|&#22270;&#20687;|&#38142;&#25509;] &#21602;&#65311;</span>" "<span class="quote">&#24590;&#20040;&#25165;&#33021; [&#20998;&#26512;|&#35299;&#37322;|munge] &#25105;&#30340; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#30340;&#25991;&#26412;&#65292;&#20294;&#26159;&#21448;&#35201;&#20445;&#30041;&#26631;&#35760;&#21602;&#65311;</span>"  "<span class="quote">&#24590;&#20040;&#25165;&#33021;&#19968;&#27425;&#32473;&#25105;&#25152;&#26377;&#30340; <acronym class="acronym">HTML</acronym> &#26631;&#35760; [&#22686;&#21152;|&#21024;&#38500;|&#21152;&#24341;&#21495;] &#23646;&#24615;&#21602;&#65311;</span>" &#26412;&#31456;&#23558;&#22238;&#31572;&#25152;&#26377;&#36825;&#20123;&#38382;&#39064;&#12290;</p></div></blockquote></li><li><a href="../#dialect.sgmllib">8.2.&nbsp;<code class="filename">sgmllib.py</code> &#20171;&#32461;</a><blockquote><div class="abstract"><p><acronym class="acronym">HTML</acronym> &#22788;&#29702;&#20998;&#25104;&#19977;&#27493;&#65306;&#23558; <acronym class="acronym">HTML</acronym> &#20998;&#35299;&#25104;&#23427;&#30340;&#32452;&#25104;&#29255;&#27573;&#65292;&#23545;&#29255;&#27573;&#36827;&#34892;&#21152;&#24037;&#65292;&#25509;&#30528;&#23558;&#29255;&#27573;&#20877;&#37325;&#26032;&#21512;&#25104; HTML&#12290;&#31532;&#19968;&#27493;&#26159;&#36890;&#36807; <code class="filename">sgmllib.py</code> &#26469;&#23436;&#25104;&#30340;&#65292;&#23427;&#26159;&#26631;&#20934; <span class="application">Python</span> &#24211;&#30340;&#19968;&#37096;&#20998;&#12290;</p></div></blockquote></li><li><a href="../#dialect.extract">8.3.&nbsp;&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;</a><blockquote><div class="abstract"><p>&#20026;&#20102;&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;&#65292;&#23558; <code class="classname">SGMLParser</code> &#31867;&#36827;&#34892;&#23376;&#31867;&#21270;&#65292;&#28982;&#21518;&#23545;&#24819;&#35201;&#25429;&#25417;&#30340;&#26631;&#35760;&#25110;&#23454;&#20307;&#23450;&#20041;&#26041;&#27861;&#12290;</p></div></blockquote></li><li><a href="../#dialect.basehtml">8.4.&nbsp;<code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;</a><blockquote><div class="abstract"><p><code class="classname">SGMLParser</code> &#33258;&#36523;&#19981;&#20250;&#20135;&#29983;&#20219;&#20309;&#32467;&#26524;&#12290;&#23427;&#21482;&#26159;&#20998;&#26512;&#65292;&#20998;&#26512;&#65292;&#20877;&#20998;&#26512;&#65292;&#23545;&#20110;&#23427;&#25214;&#21040;&#30340;&#26377;&#36259;&#30340;&#19996;&#35199;&#20250;&#35843;&#29992;&#30456;&#24212;&#30340;&#19968;&#20010;&#26041;&#27861;&#65292;&#20294;&#26159;&#36825;&#20123;&#26041;&#27861;&#20160;&#20040;&#37117;&#19981;&#20570;&#12290;<code class="classname">SGMLParser</code> &#26159;&#19968;&#20010; <acronym class="acronym">HTML</acronym> <span class="emphasis"><em>&#28040;&#36153;&#32773; (consumer)</em></span>&#65306;&#23427;&#25509;&#25910; <acronym class="acronym">HTML</acronym>&#65292;&#23558;&#20854;&#20998;&#35299;&#25104;&#23567;&#30340;&#12289;&#32467;&#26500;&#21270;&#30340;&#23567;&#22359;&#12290;&#27491;&#22914;&#24744;&#25152;&#30475;&#21040;&#30340;&#65292;&#22312;<a class="link" href="#dialect.extract" title="8.3.&nbsp;&#20174; HTML &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;">&#21069;&#19968;&#33410;</a>&#20013;&#65292;&#24744;&#21487;&#20197;&#23450;&#20041; <code class="classname">SGMLParser</code> &#30340;&#23376;&#31867;&#65292;&#23427;&#21487;&#20197;&#25429;&#25417;&#29305;&#21035;&#26631;&#35760;&#21644;&#29983;&#25104;&#26377;&#29992;&#30340;&#19996;&#35199;&#65292;&#22914;&#19968;&#20010;&#32593;&#39029;&#20013;&#25152;&#26377;&#38142;&#25509;&#30340;&#19968;&#20010;&#21015;&#34920;&#12290;&#29616;&#22312;&#25105;&#20204;&#23558;&#27839;&#30528;&#36825;&#26465;&#36335;&#26356;&#28145;&#19968;&#27493;&#12290;&#25105;&#20204;&#35201;&#23450;&#20041;&#19968;&#20010;&#21487;&#20197;&#25429;&#25417; <code class="classname">SGMLParser</code> &#25152;&#20002;&#20986;&#26469;&#30340;&#25152;&#26377;&#19996;&#35199;&#30340;&#19968;&#20010;&#31867;&#65292;&#25509;&#30528;&#37325;&#24314;&#25972;&#20010; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#12290;&#29992;&#25216;&#26415;&#26415;&#35821;&#26469;&#35828;&#65292;&#36825;&#20010;&#31867;&#23558;&#26159;&#19968;&#20010; <acronym class="acronym">HTML</acronym> <span class="emphasis"><em>&#29983;&#20135;&#32773; (producer)</em></span>&#12290;</p></div></blockquote></li><li><a href="../#dialect.locals">8.5.&nbsp;<code class="function">locals</code> &#21644; <code class="function">globals</code></a><blockquote><div class="abstract"><p>&#25105;&#20204;&#20808;&#20559;&#31163;&#19968;&#19979; <acronym class="acronym">HTML</acronym> &#22788;&#29702;&#30340;&#20027;&#39064;&#65292;&#35752;&#35770;&#19968;&#19979; <span class="application">Python</span> &#22914;&#20309;&#22788;&#29702;&#21464;&#37327;&#12290;<span class="application">Python</span> &#26377;&#20004;&#20010;&#20869;&#32622;&#30340;&#20989;&#25968;&#65292;<code class="function">locals</code> &#21644; <code class="function">globals</code>&#65292;&#23427;&#20204;&#25552;&#20379;&#20102;&#22522;&#20110; dictionary &#30340;&#35775;&#38382;&#23616;&#37096;&#21644;&#20840;&#23616;&#21464;&#37327;&#30340;&#26041;&#24335;&#12290;</p></div></blockquote></li><li><a href="../#dialect.dictsub">8.6.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a><blockquote><div class="abstract"><p>&#26377;&#21478;&#22806;&#19968;&#31181;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#30340;&#24418;&#24335;&#65292;&#23427;&#20351;&#29992; dictionary &#32780;&#19981;&#26159;&#20540;&#30340; tuple&#12290;</p></div></blockquote></li><li><a href="../#dialect.quoting">8.7.&nbsp;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;</a><blockquote><div class="abstract"><p>&#22312; comp.lang.python (<a href="http://groups.google.com/groups?group=comp.lang.python">http://groups.google.com/groups?group=comp.lang.python</a>) &#19978;&#30340;&#19968;&#20010;&#24120;&#35265;&#38382;&#39064;&#26159; "<span class="quote">&#25105;&#26377;&#19968;&#20123; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#65292;&#23646;&#24615;&#20540;&#27809;&#26377;&#29992;&#24341;&#21495;&#25324;&#36215;&#26469;&#65292;&#24182;&#19988;&#25105;&#24819;&#23558;&#23427;&#20204;&#20840;&#37096;&#25324;&#36215;&#26469;&#65292;&#25105;&#24590;&#20040;&#25165;&#33021;&#23454;&#29616;&#23427;&#21602;&#65311;</span>"
<sup>[<a name="d0e21934" href="#ftn.d0e21934" class="footnote">7</a>]</sup>  (&#19968;&#33324;&#36825;&#31181;&#20107;&#24773;&#30340;&#20986;&#29616;&#26159;&#30001;&#20110;&#19968;&#20010;&#39033;&#30446;&#32463;&#29702;&#21152;&#20837;&#21040;&#19968;&#20010;&#22823;&#30340;&#39033;&#30446;&#20013;&#26469;&#65292;&#32780;&#20182;&#21448;&#25265;&#30528; <acronym class="acronym">HTML</acronym> &#26159;&#19968;&#31181;&#26631;&#35760;&#35821;&#35328;&#30340;&#25945;&#26465;&#65292;&#35201;&#27714;&#25152;&#26377;&#30340;&#39029;&#38754;&#24517;&#39035;&#33021;&#22815;&#36890;&#36807; <acronym class="acronym">HTML</acronym> &#26657;&#39564;&#22120;&#30340;&#39564;&#35777;&#12290;&#32780;&#23646;&#24615;&#20540;&#27809;&#26377;&#34987;&#24341;&#21495;&#25324;&#36215;&#26469;&#26159;&#19968;&#31181;&#24120;&#35265;&#30340;&#23545; <acronym class="acronym">HTML</acronym> &#35268;&#33539;&#30340;&#36829;&#21453;&#12290;) &#19981;&#31649;&#20160;&#20040;&#21407;&#22240;&#65292;&#26410;&#25324;&#36215;&#26469;&#30340;&#23646;&#24615;&#20540;&#36890;&#36807;&#23558; <acronym class="acronym">HTML</acronym> &#36865;&#36827; <code class="classname">BaseHTMLProcessor</code> &#21487;&#20197;&#23481;&#26131;&#22320;&#20462;&#22797;&#12290;
</p></div></blockquote></li><li><a href="../#dialect.dialectizer">8.8.&nbsp;<code class="filename">dialect.py</code> &#20171;&#32461;</a><blockquote><div class="abstract"><p><code class="classname">Dialectizer</code> &#26159; <code class="classname">BaseHTMLProcessor</code> &#30340;&#31616;&#21333; (&#21644;&#25305;&#21155;) &#30340;&#27966;&#29983;&#31867;&#12290;&#23427;&#36890;&#36807;&#19968;&#31995;&#21015;&#30340;&#26367;&#25442;&#23545;&#25991;&#26412;&#22359;&#36827;&#34892;&#20102;&#22788;&#29702;&#65292;&#20294;&#26159;&#23427;&#30830;&#20445;&#22312; <code class="literal"><code class="sgmltag-element">&lt;pre&gt;</code>...<code class="sgmltag-element">&lt;/pre&gt;</code></code> &#22359;&#20043;&#38388;&#30340;&#20219;&#20309;&#19996;&#35199;&#19981;&#34987;&#20462;&#25913;&#22320;&#36890;&#36807;&#12290;</p></div></blockquote></li><li><a href="../#dialect.alltogether">8.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><blockquote><div class="abstract"><p>&#21040;&#20102;&#23558;&#36804;&#20170;&#20026;&#27490;&#25105;&#20204;&#24050;&#32463;&#23398;&#36807;&#24182;&#29992;&#24471;&#19981;&#38169;&#30340;&#19996;&#35199;&#25918;&#22312;&#19968;&#36215;&#30340;&#26102;&#20505;&#20102;&#12290;&#25105;&#24076;&#26395;&#24744;&#19987;&#24515;&#20123;&#12290;</p></div></blockquote></li><li><a href="../#dialect.summary">8.10.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#21521;&#24744;&#25552;&#20379;&#20102;&#19968;&#20010;&#24378;&#22823;&#24037;&#20855;&#65292;<code class="filename">sgmllib.py</code>&#65292;&#21487;&#20197;&#36890;&#36807;&#23558; <acronym class="acronym">HTML</acronym> &#32467;&#26500;&#36716;&#21464;&#20026;&#19968;&#31181;&#23545;&#35937;&#27169;&#22411;&#26469;&#36827;&#34892;&#22788;&#29702;&#12290;&#21487;&#20197;&#20197;&#35768;&#22810;&#19981;&#21516;&#30340;&#26041;&#24335;&#26469;&#20351;&#29992;&#36825;&#20010;&#24037;&#20855;&#12290;</p></div></blockquote></li></ul><p><a href="../#kgp">&#31532;&nbsp;9&nbsp;&#31456;&nbsp;<acronym class="acronym">XML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#kgp.divein">9.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#22788;&#29702; <acronym class="acronym">XML</acronym> &#26377;&#20004;&#31181;&#22522;&#26412;&#30340;&#26041;&#24335;&#12290;&#19968;&#31181;&#21483;&#20570; <acronym class="acronym">SAX</acronym> ("<span class="quote">Simple <acronym class="acronym">API</acronym> for <acronym class="acronym">XML</acronym></span>")&#65292;&#23427;&#30340;&#24037;&#20316;&#26041;&#24335;&#26159;&#65292;&#19968;&#27425;&#35835;&#20986;&#19968;&#28857; <acronym class="acronym">XML</acronym> &#20869;&#23481;&#65292;&#28982;&#21518;&#23545;&#21457;&#29616;&#30340;&#27599;&#19968;&#20010;&#20803;&#32032;&#35843;&#29992;&#19968;&#20010;&#26041;&#27861;&#12290;(&#22914;&#26524;&#20320;&#35835;&#20102; <a class="xref" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">&#31532;&nbsp;8&nbsp;&#31456; <i><acronym class="acronym">HTML</acronym> &#22788;&#29702;</i></a>&#65292;&#36825;&#24212;&#35813;&#21548;&#36215;&#26469;&#24456;&#29087;&#24713;&#65292;&#22240;&#20026;&#36825;&#26159; <code class="filename">sgmllib</code> &#24037;&#20316;&#30340;&#26041;&#24335;&#12290;) &#21478;&#19968;&#31181;&#26041;&#24335;&#21483;&#20570; <acronym class="acronym">DOM</acronym> ("<span class="quote">Document Object Model</span>")&#65292;&#23427;&#30340;&#24037;&#20316;&#26041;&#24335;&#26159;&#65292;&#19968;&#27425;&#24615;&#35835;&#20837;&#25972;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#65292;&#28982;&#21518;&#20351;&#29992; <span class="application">Python</span> &#31867;&#21019;&#24314;&#19968;&#20010;&#20869;&#37096;&#34920;&#31034;&#24418;&#24335; (&#20197;&#26641;&#32467;&#26500;&#36827;&#34892;&#36830;&#25509;)&#12290;<span class="application">Python</span> &#25317;&#26377;&#36825;&#20004;&#31181;&#35299;&#26512;&#26041;&#24335;&#30340;&#26631;&#20934;&#27169;&#22359;&#65292;&#20294;&#26159;&#26412;&#31456;&#21482;&#28041;&#21450; <acronym class="acronym">DOM</acronym>&#12290;</p></div></blockquote></li><li><a href="../#kgp.packages">9.2.&nbsp;&#21253;</a><blockquote><div class="abstract"><p>&#23454;&#38469;&#19978;&#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26159;&#24456;&#31616;&#21333;&#30340;&#65306;&#21482;&#35201;&#19968;&#34892;&#20195;&#30721;&#12290;&#20294;&#26159;&#65292;&#22312;&#20320;&#25509;&#35302;&#37027;&#34892;&#20195;&#30721;&#21069;&#65292;&#38656;&#35201;&#26242;&#26102;&#23700;&#24320;&#19968;&#19979;&#65292;&#35752;&#35770;&#19968;&#19979;&#21253;&#12290;</p></div></blockquote></li><li><a href="../#kgp.parse">9.3.&nbsp;<acronym class="acronym">XML</acronym> &#35299;&#26512;</a><blockquote><div class="abstract"><p>&#27491;&#22914;&#25105;&#35828;&#30340;&#65292;&#23454;&#38469;&#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26159;&#38750;&#24120;&#31616;&#21333;&#30340;&#65306;&#21482;&#35201;&#19968;&#34892;&#20195;&#30721;&#12290;&#20174;&#36825;&#37324;&#20986;&#21457;&#21040;&#21738;&#20799;&#21435;&#23601;&#26159;&#20320;&#33258;&#24049;&#30340;&#20107;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#kgp.unicode">9.4.&nbsp;Unicode</a><blockquote><div class="abstract"><p>Unicode &#26159;&#19968;&#20010;&#31995;&#32479;&#65292;&#29992;&#26469;&#34920;&#31034;&#19990;&#30028;&#19978;&#25152;&#26377;&#19981;&#21516;&#35821;&#35328;&#30340;&#23383;&#31526;&#12290;&#24403; <span class="application">Python</span> &#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#25152;&#26377;&#30340;&#25968;&#25454;&#37117;&#26159;&#20197;unicode&#30340;&#24418;&#24335;&#20445;&#23384;&#22312;&#20869;&#23384;&#20013;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#kgp.search">9.5.&nbsp;&#25628;&#32034;&#20803;&#32032;</a><blockquote><div class="abstract"><p>&#36890;&#36807;&#19968;&#27493;&#27493;&#35775;&#38382;&#27599;&#19968;&#20010;&#33410;&#28857;&#30340;&#26041;&#24335;&#36941;&#21382; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#21487;&#33021;&#24456;&#20047;&#21619;&#12290;&#22914;&#26524;&#20320;&#27491;&#22312;&#23547;&#25214;&#20123;&#29305;&#21035;&#30340;&#19996;&#35199;&#65292;&#21448;&#24688;&#24688;&#23427;&#20204;&#28145;&#28145;&#22475;&#20837;&#20102;&#20320;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#65292;&#26377;&#20010;&#25463;&#24452;&#35753;&#20320;&#21487;&#20197;&#24555;&#36895;&#25214;&#21040;&#23427;&#65306;<code class="function">getElementsByTagName</code> &#12290;</p></div></blockquote></li><li><a href="../#kgp.attributes">9.6.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;</a><blockquote><div class="abstract"><p><acronym class="acronym">XML</acronym> &#20803;&#32032;&#21487;&#20197;&#26377;&#19968;&#20010;&#25110;&#32773;&#22810;&#20010;&#23646;&#24615;&#65292;&#21482;&#35201;&#24050;&#32463;&#35299;&#26512;&#20102;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#65292;&#35775;&#38382;&#23427;&#20204;&#23601;&#22826;&#31616;&#21333;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#kgp.segue">9.7.&nbsp;Segue </a><blockquote><div class="abstract"><p>&#20197;&#19978;&#23601;&#26159; XML &#30340;&#26680;&#24515;&#20869;&#23481;&#12290;&#19979;&#19968;&#31456;&#23558;&#20351;&#29992;&#30456;&#21516;&#30340;&#31034;&#20363;&#31243;&#24207;&#65292;&#20294;&#26159;&#28966;&#28857;&#22312;&#20110;&#33021;&#20351;&#31243;&#24207;&#26356;&#21152;&#28789;&#27963;&#30340;&#20854;&#23427;&#26041;&#38754;&#65306;&#20351;&#29992;&#36755;&#20837;&#27969;&#22788;&#29702;&#65292;&#20351;&#29992; <code class="function">getattr</code> &#36827;&#34892;&#26041;&#27861;&#20998;&#21457;&#65292;&#24182;&#20351;&#29992;&#21629;&#20196;&#34892;&#26631;&#35782;&#20801;&#35768;&#29992;&#25143;&#37325;&#26032;&#37197;&#32622;&#31243;&#24207;&#32780;&#26080;&#38656;&#20462;&#25913;&#20195;&#30721;&#12290;</p></div></blockquote></li></ul><p><a href="../#streams">&#31532;&nbsp;10&nbsp;&#31456;&nbsp;&#33050;&#26412;&#21644;&#27969;</a></p><ul><li><a href="../#kgp.openanything">10.1.&nbsp;&#25277;&#35937;&#36755;&#20837;&#28304;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#30340;&#26368;&#24378;&#22823;&#21147;&#37327;&#20043;&#19968;&#26159;&#23427;&#30340;&#21160;&#24577;&#32465;&#23450;&#65292;&#32780;&#21160;&#24577;&#32465;&#23450;&#26368;&#24378;&#22823;&#30340;&#29992;&#27861;&#20043;&#19968;&#26159;<span class="emphasis"><em>&#31867;&#25991;&#20214;(file-like)&#23545;&#35937;</em></span>&#12290;</p></div></blockquote></li><li><a href="../#kgp.stdio">10.2.&nbsp;&#26631;&#20934;&#36755;&#20837;&#12289;&#36755;&#20986;&#21644;&#38169;&#35823;</a><blockquote><div class="abstract"><p><acronym class="acronym">UNIX</acronym> &#29992;&#25143;&#24050;&#32463;&#23545;&#26631;&#20934;&#36755;&#20837;&#12289;&#26631;&#20934;&#36755;&#20986;&#21644;&#26631;&#20934;&#38169;&#35823;&#30340;&#27010;&#24565;&#38750;&#24120;&#29087;&#24713;&#20102;&#12290;&#36825;&#19968;&#33410;&#26159;&#20026;&#20854;&#20182;&#19981;&#29087;&#24713;&#30340;&#20154;&#20934;&#22791;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#kgp.cache">10.3.&nbsp;&#26597;&#35810;&#32531;&#20914;&#33410;&#28857;</a><blockquote><div class="abstract"><p><code class="filename">kgp.py</code> &#20351;&#29992;&#20102;&#22810;&#31181;&#25216;&#24039;&#65292;&#22312;&#20320;&#36827;&#34892; <acronym class="acronym">XML</acronym> &#22788;&#29702;&#26102;&#65292;&#23427;&#20204;&#25110;&#35768;&#33021;&#27966;&#19978;&#29992;&#22330;&#12290;&#31532;&#19968;&#20010;&#23601;&#26159;&#65292;&#21033;&#29992;&#36755;&#20837;&#25991;&#26723;&#30340;&#32467;&#26500;&#31283;&#23450;&#29305;&#24449;&#26469;&#26500;&#24314;&#33410;&#28857;&#32531;&#20914;&#12290;</p></div></blockquote></li><li><a href="../#kgp.child">10.4.&nbsp;&#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;</a><blockquote><div class="abstract"><p>&#35299;&#26512; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#21478;&#19968;&#20010;&#26377;&#29992;&#30340;&#24049;&#25216;&#24039;&#26159;&#26597;&#25214;&#26576;&#20010;&#29305;&#23450;&#20803;&#32032;&#30340;&#25152;&#26377;&#30452;&#25509;&#23376;&#20803;&#32032;&#12290;&#20363;&#22914;&#65292;&#22312;&#35821;&#27861;&#25991;&#20214;&#20013;&#65292;&#19968;&#20010; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#21487;&#20197;&#26377;&#25968;&#20010; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#20854;&#20013;&#27599;&#19968;&#20010;&#37117;&#21487;&#20197;&#21253;&#21547;&#24456;&#22810;&#19996;&#35199;&#65292;&#21253;&#25324;&#20854;&#20182;&#30340; <code class="sgmltag-element">p</code> &#20803;&#32032;&#12290;&#20320;&#21482;&#35201;&#26597;&#25214;&#20316;&#20026; <code class="sgmltag-element">ref</code> &#23401;&#23376;&#30340; <code class="sgmltag-element">p</code> &#20803;&#32032;&#65292;&#19981;&#29992;&#26597;&#25214;&#20854;&#20182; <code class="sgmltag-element">p</code> &#20803;&#32032;&#30340;&#23401;&#23376; <code class="sgmltag-element">p</code> &#20803;&#32032;&#12290;</p></div></blockquote></li><li><a href="../#kgp.handler">10.5.&nbsp;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;</a><blockquote><div class="abstract"><p>&#31532;&#19977;&#20010;&#26377;&#29992;&#30340; <acronym class="acronym">XML</acronym> &#22788;&#29702;&#25216;&#24039;&#26159;&#23558;&#20320;&#30340;&#20195;&#30721;&#22522;&#20110;&#33410;&#28857;&#31867;&#22411;&#21644;&#20803;&#32032;&#21517;&#31216;&#20998;&#25955;&#21040;&#36923;&#36753;&#20989;&#25968;&#20013;&#12290;&#35299;&#26512;&#21518;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26159;&#30001;&#21508;&#31181;&#31867;&#22411;&#30340;&#33410;&#28857;&#32452;&#25104;&#30340;&#65292;&#27599;&#19968;&#20010;&#37117;&#26159;&#36890;&#36807; <span class="application">Python</span> &#23545;&#35937;&#34920;&#31034;&#30340;&#12290;&#25991;&#26723;&#26412;&#36523;&#30340;&#26681;&#23618;&#27425;&#36890;&#36807;&#19968;&#20010; <code class="classname">Document</code> &#23545;&#35937;&#34920;&#31034;&#12290;<code class="classname">Document</code> &#36824;&#21253;&#21547;&#20102;&#19968;&#20010;&#25110;&#22810;&#20010; <code class="classname">Element</code> &#23545;&#35937; (&#34920;&#31034; <acronym class="acronym">XML</acronym> &#26631;&#35760;)&#65292;&#20854;&#20013;&#30340;&#27599;&#19968;&#20010;&#21487;&#20197;&#21253;&#21547;&#20854;&#23427;&#30340; <code class="classname">Element</code> &#23545;&#35937;&#12289;<code class="classname">Text</code> &#23545;&#35937; (&#34920;&#31034;&#25991;&#26412;)&#65292;&#25110;&#32773; <code class="classname">Comment</code> &#23545;&#35937; (&#34920;&#31034;&#20869;&#23884;&#27880;&#37322;)&#12290;&#20351;&#29992; <span class="application">Python</span> &#32534;&#20889;&#20998;&#31163;&#21508;&#20010;&#33410;&#28857;&#31867;&#22411;&#36923;&#36753;&#30340;&#20998;&#21457;&#22120;&#38750;&#24120;&#23481;&#26131;&#12290;</p></div></blockquote></li><li><a href="../#kgp.commandline">10.6.&nbsp;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#23436;&#20840;&#25903;&#25345;&#21019;&#24314;&#22312;&#21629;&#20196;&#34892;&#36816;&#34892;&#30340;&#31243;&#24207;&#65292;&#20063;&#25903;&#25345;&#36890;&#36807;&#21629;&#20196;&#34892;&#21442;&#25968;&#21644;&#30701;&#38271;&#26679;&#24335;&#26469;&#25351;&#23450;&#21508;&#31181;&#36873;&#39033;&#12290;&#36825;&#20123;&#24182;&#38750;&#26159; <acronym class="acronym">XML</acronym> &#29305;&#23450;&#30340;&#65292;&#20294;&#26159;&#36825;&#26679;&#30340;&#33050;&#26412;&#21487;&#20197;&#20805;&#20998;&#20351;&#29992;&#21629;&#20196;&#34892;&#22788;&#29702;&#65292;&#30475;&#26469;&#26159;&#26102;&#20505;&#25552;&#19968;&#19979;&#23427;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#kgp.alltogether">10.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><blockquote><div class="abstract"><p>&#20320;&#24050;&#32463;&#20102;&#35299;&#24456;&#22810;&#22522;&#30784;&#30340;&#19996;&#35199;&#12290;&#35753;&#25105;&#20204;&#22238;&#26469;&#30475;&#30475;&#25152;&#26377;&#29255;&#27573;&#26159;&#22914;&#20309;&#25972;&#21512;&#21040;&#19968;&#36215;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#kgp.summary">10.8.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p><span class="application">Python</span> &#24102;&#26377;&#35299;&#26512;&#21644;&#25805;&#20316; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#38750;&#24120;&#24378;&#22823;&#30340;&#24211;&#12290;<code class="filename">minidom</code> &#25509;&#25910;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#20214;&#24182;&#23558;&#20854;&#35299;&#26512;&#20026; <span class="application">Python</span> &#23545;&#35937;&#65292;&#24182;&#25552;&#20379;&#20102;&#23545;&#20219;&#24847;&#20803;&#32032;&#30340;&#38543;&#26426;&#35775;&#38382;&#12290;&#36827;&#19968;&#27493;&#65292;&#26412;&#31456;&#23637;&#31034;&#20102;&#22914;&#20309;&#21033;&#29992; <span class="application">Python</span> &#21019;&#24314;&#19968;&#20010;&#8220;&#30495;&#23454;&#8221;&#29420;&#31435;&#30340;&#21629;&#20196;&#34892;&#33050;&#26412;&#65292;&#36830;&#21516;&#21629;&#20196;&#34892;&#26631;&#24535;&#12289;&#21629;&#20196;&#34892;&#21442;&#25968;&#12289;&#38169;&#35823;&#22788;&#29702;&#65292;&#29978;&#33267;&#20174;&#21069;&#19968;&#20010;&#31243;&#24207;&#30340;&#31649;&#36947;&#25509;&#25910;&#36755;&#20837;&#30340;&#33021;&#21147;&#12290;</p></div></blockquote></li></ul><p><a href="../#oa">&#31532;&nbsp;11&nbsp;&#31456;&nbsp;HTTP Web &#26381;&#21153;</a></p><ul><li><a href="../#oa.divein">11.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p> &#22312;&#35762;&#35299;<a class="link" href="#dialect.extract.urllib" title="&#20363;&nbsp;8.5.&nbsp;urllib &#20171;&#32461;">&#22914;&#20309;&#19979;&#36733; web &#39029;</a>&#21644;<a class="link" href="#kgp.openanything.urllib" title="&#20363;&nbsp;10.2.&nbsp;&#35299;&#26512;&#26469;&#33258; URL &#30340; XML">&#22914;&#20309;&#20174; URL &#35299;&#26512; XML</a>&#26102;&#65292;&#20320;&#24050;&#32463;&#23398;&#20064;&#20102;&#20851;&#20110; <a class="link" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">HTML &#22788;&#29702;</a>&#21644; <a class="link" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">XML &#22788;&#29702;</a>&#65292;&#25509;&#19979;&#26469;&#35753;&#25105;&#20204;&#26469;&#26356;&#20840;&#38754;&#22320;&#25506;&#35752;&#26377;&#20851; HTTP web &#26381;&#21153;&#30340;&#20027;&#39064;&#12290;</p></div></blockquote></li><li><a href="../#oa.review">11.2.&nbsp;&#36991;&#20813;&#36890;&#36807; HTTP &#37325;&#22797;&#22320;&#33719;&#21462;&#25968;&#25454;</a><blockquote><div class="abstract"><p>&#20551;&#22914;&#35828;&#20320;&#24819;&#29992; HTTP &#19979;&#36733;&#36164;&#28304;&#65292;&#20363;&#22914;&#19968;&#20010; Atom feed &#27719;&#32858;&#12290;&#20320;&#19981;&#20165;&#20165;&#24819;&#19979;&#36733;&#19968;&#27425;&#65307;&#32780;&#26159;&#24819;&#19968;&#27425;&#21448;&#19968;&#27425;&#22320;&#19979;&#36733;&#23427;&#65292;&#22914;&#27599;&#23567;&#26102;&#19968;&#27425;&#65292;&#20174;&#25552;&#20379; news feed &#30340;&#31449;&#28857;&#33719;&#24471;&#26368;&#26032;&#30340;&#28040;&#24687;&#12290;&#35753;&#25105;&#20204;&#39318;&#20808;&#29992;&#19968;&#31181;&#30452;&#25509;&#32780;&#21407;&#22987;&#30340;&#26041;&#27861;&#26469;&#23454;&#29616;&#23427;&#65292;&#28982;&#21518;&#30475;&#30475;&#22914;&#20309;&#25913;&#36827;&#23427;&#12290;
</p></div></blockquote></li><li><a href="../#oa.features">11.3.&nbsp;HTTP &#30340;&#29305;&#24615;</a><blockquote><div class="abstract"><p>&#36825;&#37324;&#26377;&#20116;&#20010;&#20320;&#24517;&#39035;&#20851;&#27880;&#30340; HTTP &#37325;&#35201;&#29305;&#24615;&#12290;</p></div></blockquote></li><li><a href="../#oa.debug">11.4.&nbsp;&#35843;&#35797; HTTP web &#26381;&#21153;</a><blockquote><div class="abstract"><p>&#39318;&#20808;&#65292;&#35753;&#25105;&#20204;&#24320;&#21551; <span class="application">Python</span> HTTP &#24211;&#30340;&#35843;&#35797;&#29305;&#24615;&#24182;&#26597;&#30475;&#32593;&#32476;&#32447;&#36335;&#19978;&#30340;&#20256;&#36755;&#36807;&#31243;&#12290;&#36825;&#23545;&#26412;&#31456;&#30340;&#20840;&#37096;&#20869;&#23481;&#37117;&#24456;&#26377;&#29992;&#65292;&#22240;&#20026;&#20320;&#23558;&#28155;&#21152;&#36234;&#26469;&#36234;&#22810;&#30340;&#29305;&#24615;&#12290;</p></div></blockquote></li><li><a href="../#oa.useragent">11.5.&nbsp;&#35774;&#32622; <code class="literal">User-Agent</code></a><blockquote><div class="abstract"><p>&#25913;&#21892;&#20320;&#30340; HTTP web &#26381;&#21153;&#23458;&#25143;&#31471;&#30340;&#31532;&#19968;&#27493;&#23601;&#26159;&#29992; <code class="literal">User-Agent</code> &#36866;&#24403;&#22320;&#37492;&#21035;&#20320;&#33258;&#24049;&#12290;&#20026;&#20102;&#20570;&#21040;&#36825;&#19968;&#28857;&#65292;&#20320;&#38656;&#35201;&#36828;&#31163;&#22522;&#26412;&#30340; <code class="filename">urllib</code> &#32780;&#28145;&#20837;&#21040; <code class="filename">urllib2</code>&#12290;</p></div></blockquote></li><li><a href="../#oa.etags">11.6.&nbsp;&#22788;&#29702; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code></a><blockquote><div class="abstract"><p>&#26082;&#28982;&#20320;&#30693;&#36947;&#22914;&#20309;&#22312;&#20320;&#30340; web &#26381;&#21153;&#35831;&#27714;&#20013;&#28155;&#21152;&#33258;&#23450;&#20041;&#30340; HTTP &#22836;&#20449;&#24687;&#65292;&#25509;&#19979;&#26469;&#30475;&#30475;&#22914;&#20309;&#28155;&#21152; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code> &#22836;&#20449;&#24687;&#30340;&#25903;&#25345;&#12290;</p></div></blockquote></li><li><a href="../#oa.redirect">11.7.&nbsp;&#22788;&#29702;&#37325;&#23450;&#21521;</a><blockquote><div class="abstract"><p>&#20320;&#21487;&#20197;&#20351;&#29992;&#20004;&#31181;&#19981;&#21516;&#30340;&#33258;&#23450;&#20041; URL &#22788;&#29702;&#22120;&#26469;&#22788;&#29702;&#27704;&#20037;&#37325;&#23450;&#21521;&#21644;&#20020;&#26102;&#37325;&#23450;&#21521;&#12290;</p></div></blockquote></li><li><a href="../#oa.gzip">11.8.&nbsp;&#22788;&#29702;&#21387;&#32553;&#25968;&#25454;</a><blockquote><div class="abstract"><p>&#20320;&#35201;&#25903;&#25345;&#30340;&#26368;&#21518;&#19968;&#20010;&#37325;&#35201;&#30340; HTTP &#29305;&#24615;&#26159;&#21387;&#32553;&#12290;&#35768;&#22810; web &#26381;&#21153;&#20855;&#26377;&#21457;&#36865;&#21387;&#32553;&#25968;&#25454;&#30340;&#33021;&#21147;&#65292;&#36825;&#21487;&#20197;&#23558;&#32593;&#32476;&#32447;&#36335;&#19978;&#20256;&#36755;&#30340;&#22823;&#37327;&#25968;&#25454;&#28040;&#20943; 60% &#20197;&#19978;&#12290;&#36825;&#23588;&#20854;&#36866;&#29992;&#20110; XML web &#26381;&#21153;&#65292;&#22240;&#20026; XML &#25968;&#25454; &#30340;&#21387;&#32553;&#29575;&#21487;&#20197;&#24456;&#39640;&#12290;</p></div></blockquote></li><li><a href="../#oa.alltogether">11.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><blockquote><div class="abstract"><p>&#20320;&#24050;&#32463;&#30475;&#21040;&#20102;&#26500;&#36896;&#19968;&#20010;&#26234;&#33021;&#30340; HTTP web &#23458;&#25143;&#31471;&#30340;&#25152;&#26377;&#29255;&#26029;&#12290;&#29616;&#22312;&#35753;&#25105;&#20204;&#30475;&#30475;&#22914;&#20309;&#23558;&#23427;&#20204;&#25972;&#21512;&#21040;&#19968;&#36215;&#12290;</p></div></blockquote></li><li><a href="../#oa.summary">11.10.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p><code class="filename">openanything.py</code> &#21450;&#20854;&#20989;&#25968;&#29616;&#22312;&#21487;&#20197;&#23436;&#32654;&#22320;&#24037;&#20316;&#20102;&#12290;</p></div></blockquote></li></ul><p><a href="../#soap">&#31532;&nbsp;12&nbsp;&#31456;&nbsp;<acronym class="acronym">SOAP</acronym> Web &#26381;&#21153;</a></p><ul><li><a href="../#soap.divein">12.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#20320;&#29992; Google&#65292;&#23545;&#21543;&#65311;&#23427;&#26159;&#19968;&#20010;&#24456;&#27969;&#34892;&#30340;&#25628;&#32034;&#24341;&#25806;&#12290;&#20320;&#26159;&#21542;&#24076;&#26395;&#33021;&#20197;&#31243;&#24207;&#21270;&#30340;&#26041;&#24335;&#35775;&#38382; Google &#30340;&#25628;&#32034;&#32467;&#26524;&#21602;&#65311;&#29616;&#22312;&#20320;&#33021;&#20570;&#21040;&#20102;&#12290;&#19979;&#38754;&#26159;&#19968;&#20010;&#29992; <span class="application">Python</span> &#25628;&#32034; Google &#30340;&#31243;&#24207;&#12290;</p></div></blockquote></li><li><a href="../#soap.install">12.2.&nbsp;&#23433;&#35013; SOAP &#24211;</a><blockquote><div class="abstract"><p>&#19982;&#26412;&#20070;&#20013;&#30340;&#20854;&#20182;&#20195;&#30721;&#19981;&#21516;&#65292;&#26412;&#31456;&#20381;&#36182;&#30340;&#24211;&#19981;&#26159; <span class="application">Python</span> &#39044;&#23433;&#35013;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#soap.firststeps">12.3.&nbsp;&#27493;&#20837; <acronym class="acronym">SOAP</acronym></a><blockquote><div class="abstract"><p>&#35843;&#29992;&#36828;&#31243;&#20989;&#25968;&#26159; <acronym class="acronym">SOAP</acronym> &#30340;&#26680;&#24515;&#21151;&#33021;&#12290;&#26377;&#24456;&#22810;&#25552;&#20379;&#20844;&#24320; <acronym class="acronym">SOAP</acronym> &#35775;&#38382;&#30340;&#26381;&#21153;&#22120;&#25552;&#20379;&#29992;&#20110;&#23637;&#31034;&#30340;&#31616;&#21333;&#21151;&#33021;&#12290;</p></div></blockquote></li><li><a href="../#soap.debug">12.4.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;</a><blockquote><div class="abstract"><p> <acronym class="acronym">SOAP</acronym> &#25552;&#20379;&#20102;&#19968;&#20010;&#24456;&#26041;&#20415;&#30340;&#26041;&#27861;&#29992;&#20197;&#26597;&#30475;&#32972;&#21518;&#30340;&#24773;&#24418;&#12290;</p></div></blockquote></li><li><a href="../#soap.wsdl">12.5.&nbsp;<acronym class="acronym">WSDL</acronym> &#20171;&#32461;</a><blockquote><div class="abstract"><p><code class="classname">SOAPProxy</code> &#31867;&#26412;&#22320;&#26041;&#27861;&#35843;&#29992;&#24182;&#36879;&#26126;&#22320;&#36716;&#21521;&#21040;&#36828;&#31243; <acronym class="acronym">SOAP</acronym> &#26041;&#27861;&#12290;&#27491;&#22914;&#20320;&#25152;&#30475;&#21040;&#30340;&#65292;&#36825;&#26159;&#24456;&#22810;&#30340;&#24037;&#20316;&#65292;<code class="classname">SOAPProxy</code> &#24555;&#36895;&#21644;&#36879;&#26126;&#22320;&#23436;&#25104;&#20182;&#20204;&#12290;&#23427;&#27809;&#26377;&#20570;&#21040;&#30340;&#26159;&#25552;&#20379;&#26041;&#27861;&#33258;&#30465;&#30340;&#25163;&#27573;&#12290;</p></div></blockquote></li><li><a href="../#soap.introspection">12.6.&nbsp;&#20197; <acronym class="acronym">WSDL</acronym> &#36827;&#34892; <acronym class="acronym">SOAP</acronym> &#20869;&#30465;</a><blockquote><div class="abstract"><p>&#23601;&#20687;&#32593;&#32476;&#26381;&#21153;&#33310;&#21488;&#19978;&#30340;&#25152;&#26377;&#20107;&#29289;&#65292;<acronym class="acronym">WSDL</acronym> &#20063;&#32463;&#21382;&#20102;&#19968;&#20010;&#20805;&#28385;&#26126;&#20105;&#26263;&#26007;&#32780;&#19988;&#28459;&#38271;&#22810;&#21464;&#30340;&#21382;&#21490;&#12290;&#25105;&#19981;&#25171;&#31639;&#35762;&#36848;&#36825;&#27573;&#20196;&#25105;&#20260;&#24515;&#30340;&#21382;&#21490;&#12290;&#36824;&#26377;&#19968;&#20123;&#20854;&#20182;&#30340;&#26631;&#20934;&#25552;&#20379;&#30456;&#21516;&#30340;&#25903;&#25345;&#65292;&#20294; <acronym class="acronym">WSDL</acronym> &#36824;&#26159;&#32988;&#20986;&#65292;&#25152;&#20197;&#25105;&#20204;&#36824;&#26159;&#26469;&#23398;&#20064;&#19968;&#19979;&#22914;&#20309;&#20351;&#29992;&#23427;&#12290;</p></div></blockquote></li><li><a href="../#soap.google">12.7.&nbsp;&#25628;&#32034; Google</a><blockquote><div class="abstract"><p>&#35753;&#25105;&#20204;&#22238;&#21040;&#36825;&#31456;&#24320;&#22987;&#26102;&#20320;&#30475;&#21040;&#30340;&#37027;&#27573;&#20195;&#30721;&#65292;&#33719;&#24471;&#27604;&#24403;&#21069;&#27668;&#28201;&#26356;&#26377;&#20215;&#20540;&#21644;&#20196;&#20154;&#25391;&#22859;&#30340;&#20449;&#24687;&#12290;</p></div></blockquote></li><li><a href="../#soap.troubleshooting">12.8.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#25925;&#38556;&#25490;&#38500;</a><blockquote><div class="abstract"><p>&#26159;&#30340;&#65292;<acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#30340;&#19990;&#30028;&#20013;&#20063;&#19981;&#24635;&#26159;&#27426;&#20048;&#21644;&#38451;&#20809;&#12290;&#26377;&#26102;&#20505;&#20063;&#20250;&#26377;&#25925;&#38556;&#12290;</p></div></blockquote></li><li><a href="../#soap.summary">12.9.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p><acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26159;&#24456;&#22797;&#26434;&#30340;&#65292;&#38596;&#24515;&#21187;&#21187;&#30340;&#23427;&#35797;&#22270;&#28085;&#30422;&#32593;&#32476;&#26381;&#21153;&#30340;&#24456;&#22810;&#19981;&#21516;&#24212;&#29992;&#12290;&#36825;&#19968;&#31456;&#25105;&#20204;&#25509;&#35302;&#20102;&#23427;&#30340;&#19968;&#20010;&#31616;&#21333;&#24212;&#29992;&#12290;</p></div></blockquote></li></ul><p><a href="../#roman">&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;</a></p><ul><li><a href="../#roman.intro">13.1.&nbsp;&#32599;&#39532;&#25968;&#23383;&#31243;&#24207;&#20171;&#32461; II</a><blockquote><div class="abstract"><p>&#22312;&#21069;&#38754;&#30340;&#31456;&#33410;&#20013;&#65292;&#36890;&#36807;&#38405;&#35835;&#20195;&#30721;&#65292;&#20320;&#36805;&#36895;"<span class="quote">&#28145;&#20837;</span>"&#65292;&#20197;&#26368;&#24555;&#30340;&#36895;&#24230;&#29702;&#35299;&#20102;&#21508;&#20010;&#31243;&#24207;&#12290;&#26082;&#28982;&#20320;&#24050;&#23545; <span class="application">Python</span> &#26377;&#20102;&#19968;&#23450;&#30340;&#20102;&#35299;&#65292;&#37027;&#20040;&#25509;&#19979;&#26469;&#35753;&#25105;&#20204;&#30475;&#30475;&#31243;&#24207;&#24320;&#21457;<span class="emphasis"><em>&#20043;&#21069;</em></span> &#30340;&#24037;&#20316;&#12290;</p></div></blockquote></li><li><a href="../#roman.divein">13.2.&nbsp;&#28145;&#20837;</a><blockquote><div class="abstract"><p>&#29616;&#22312;&#20320;&#24050;&#32463;&#23450;&#20041;&#20102;&#20320;&#30340;&#36716;&#25442;&#31243;&#24207;&#25152;&#24212;&#26377;&#30340;&#21151;&#33021;&#65292;&#19979;&#38754;&#19968;&#27493;&#20250;&#26377;&#28857;&#20799;&#20986;&#20046;&#20320;&#30340;&#24847;&#26009;&#65306;&#20320;&#23558;&#35201;&#24320;&#21457;&#19968;&#20010;&#27979;&#35797;&#32452;&#20214; (test suite) &#26469;&#27979;&#35797;&#20320;&#26410;&#26469;&#30340;&#20989;&#25968;&#20197;&#30830;&#20445;&#23427;&#20204;&#24037;&#20316;&#27491;&#24120;&#12290;&#27809;&#38169;&#65306;&#20320;&#23558;&#20026;&#36824;&#26410;&#24320;&#21457;&#30340;&#31243;&#24207;&#24320;&#21457;&#27979;&#35797;&#20195;&#30721;&#12290;</p></div></blockquote></li><li><a href="../#roman.romantest">13.3.&nbsp;<code class="filename">romantest.py</code> &#20171;&#32461;</a><blockquote><div class="abstract"><p>&#36825;&#26159;&#23558;&#34987;&#24320;&#21457;&#24182;&#20445;&#23384;&#20026; <code class="filename">roman.py</code> &#30340;&#32599;&#39532;&#25968;&#23383;&#36716;&#25442;&#31243;&#24207;&#30340;&#23436;&#25972;&#27979;&#35797;&#32452;&#20214; (test suite)&#12290;&#24456;&#38590;&#31435;&#21051;&#30475;&#20986;&#23427;&#20204;&#26159;&#22914;&#20309;&#21327;&#21516;&#24037;&#20316;&#30340;&#65292;&#20284;&#20046;&#25152;&#26377;&#31867;&#25110;&#32773;&#26041;&#27861;&#20043;&#38388;&#37117;&#27809;&#26377;&#20851;&#31995;&#12290;&#36825;&#26159;&#26377;&#21407;&#22240;&#30340;&#65292;&#32780;&#19988;&#20320;&#24456;&#24555;&#23601;&#20250;&#26126;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#roman.success">13.4.&nbsp;&#27491;&#38754;&#27979;&#35797; (Testing for success)</a><blockquote><div class="abstract"><p>&#21333;&#20803;&#27979;&#35797;&#30340;&#22522;&#30784;&#26159;&#26500;&#24314;&#29420;&#31435;&#30340;&#27979;&#35797;&#29992;&#20363; (test case)&#12290;&#19968;&#20010;&#27979;&#35797;&#29992;&#20363;&#21482;&#22238;&#31572;&#19968;&#20010;&#20851;&#20110;&#34987;&#27979;&#35797;&#20195;&#30721;&#30340;&#38382;&#39064;&#12290;</p></div></blockquote></li><li><a href="../#roman.failure">13.5.&nbsp;&#36127;&#38754;&#27979;&#35797; (Testing for failure)</a><blockquote><div class="abstract"><p>&#20351;&#29992;&#26377;&#25928;&#36755;&#20837;&#30830;&#20445;&#20989;&#25968;&#25104;&#21151;&#36890;&#36807;&#27979;&#35797;&#36824;&#19981;&#22815;&#65292;&#20320;&#36824;&#38656;&#35201;&#27979;&#35797;&#26080;&#25928;&#36755;&#20837;&#23548;&#33268;&#20989;&#25968;&#22833;&#36133;&#30340;&#24773;&#24418;&#12290;&#20294;&#24182;&#19981;&#26159;&#20219;&#20309;&#22833;&#36133;&#37117;&#21487;&#20197;&#65292;&#24517;&#39035;&#22914;&#20320;&#39044;&#26399;&#22320;&#22833;&#36133;&#12290;</p></div></blockquote></li><li><a href="../#roman.sanity">13.6.&nbsp;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)</a><blockquote><div class="abstract"><p>&#20320;&#32463;&#24120;&#20250;&#21457;&#29616;&#19968;&#32452;&#20195;&#30721;&#20013;&#21253;&#21547;&#20114;&#36870;&#30340;&#36716;&#25442;&#20989;&#25968;&#65292;&#19968;&#20010;&#25226; A &#36716;&#25442;&#20026; B &#65292;&#21478;&#19968;&#20010;&#25226; B &#36716;&#25442;&#20026; A&#12290;&#22312;&#36825;&#31181;&#24773;&#20917;&#19979;&#65292;&#21019;&#24314;"<span class="quote">&#23436;&#22791;&#24615;&#26816;&#27979;</span>"&#21487;&#20197;&#20351;&#20320;&#22312;&#30001; A &#36716; B &#20877;&#36716; A &#30340;&#36807;&#31243;&#20013;&#19981;&#20250;&#20986;&#29616;&#20002;&#22833;&#31934;&#24230;&#25110;&#21462;&#25972;&#31561;&#38169;&#35823;&#12290;</p></div></blockquote></li></ul><p><a href="../#roman1.5">&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</a></p><ul><li><a href="../#roman.stage1">14.1.&nbsp;<code class="filename">roman.py</code>, &#31532; 1 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#21040;&#30446;&#21069;&#20026;&#27490;&#65292;&#21333;&#20803;&#27979;&#35797;&#24050;&#32463;&#23436;&#25104;&#65292;&#26159;&#26102;&#20505;&#24320;&#22987;&#32534;&#20889;&#34987;&#21333;&#20803;&#27979;&#35797;&#27979;&#35797;&#30340;&#20195;&#30721;&#20102;&#12290;&#20320;&#23558;&#20998;&#38454;&#27573;&#22320;&#23436;&#25104;&#36825;&#20010;&#24037;&#20316;&#65292;&#22240;&#27492;&#24320;&#22987;&#26102;&#25152;&#26377;&#30340;&#21333;&#20803;&#27979;&#35797;&#37117;&#26159;&#22833;&#36133;&#30340;&#65292;&#20294;&#22312;&#36880;&#27493;&#23436;&#25104; <code class="filename">roman.py</code> &#30340;&#21516;&#26102;&#20320;&#20250;&#30475;&#21040;&#23427;&#20204;&#19968;&#20010;&#20010;&#22320;&#36890;&#36807;&#27979;&#35797;&#12290;</p></div></blockquote></li><li><a href="../#roman.stage2">14.2.&nbsp;<code class="filename">roman.py</code>, &#31532; 2 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#29616;&#22312;&#20320;&#26377;&#20102; <code class="filename">roman</code> &#27169;&#22359;&#30340;&#22823;&#27010;&#26694;&#26550;&#65292;&#21040;&#20102;&#24320;&#22987;&#20889;&#20195;&#30721;&#20197;&#36890;&#36807;&#27979;&#35797;&#30340;&#26102;&#20505;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#roman.stage3">14.3.&nbsp;<code class="filename">roman.py</code>, &#31532; 3 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#29616;&#22312; <code class="function">toRoman</code> &#23545;&#20110;&#26377;&#25928;&#30340;&#36755;&#20837; (<code class="literal">1</code> &#21040; <code class="literal">3999</code> &#25972;&#25968;) &#24050;&#33021;&#27491;&#30830;&#24037;&#20316;&#65292;&#26159;&#27491;&#30830;&#22788;&#29702;&#37027;&#20123;&#26080;&#25928;&#36755;&#20837; (&#20219;&#20309;&#20854;&#20182;&#36755;&#20837;) &#30340;&#26102;&#20505;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#roman.stage4">14.4.&nbsp;<code class="filename">roman.py</code>, &#31532; 4 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#29616;&#22312; <code class="function">toRoman</code> &#23436;&#25104;&#20102;&#65292;&#26159;&#24320;&#22987;&#32534;&#20889; <code class="function">fromRoman</code> &#30340;&#26102;&#20505;&#20102;&#12290;&#24863;&#35874;&#37027;&#20010;&#23558;&#27599;&#20010;&#32599;&#39532;&#25968;&#23383;&#21644;&#23545;&#24212;&#25972;&#25968;&#20851;&#36830;&#30340;&#23436;&#32654;&#25968;&#25454;&#32467;&#26500;&#65292;&#36825;&#20010;&#24037;&#20316;&#19981;&#27604; <code class="function">toRoman</code> &#20989;&#25968;&#22797;&#26434;&#12290;</p></div></blockquote></li><li><a href="../#roman.stage5">14.5.&nbsp;<code class="filename">roman.py</code>, &#31532; 5 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#29616;&#22312; <code class="function">fromRoman</code> &#23545;&#20110;&#26377;&#25928;&#36755;&#20837;&#33021;&#22815;&#27491;&#24120;&#24037;&#20316;&#20102;&#65292;&#26159;&#25581;&#24320;&#26368;&#21518;&#19968;&#20010;&#35868;&#24213;&#30340;&#26102;&#20505;&#20102;&#65306;&#20351;&#23427;&#27491;&#24120;&#24037;&#20316;&#20110;&#26080;&#25928;&#36755;&#20837;&#30340;&#24773;&#20917;&#19979;&#12290;&#36825;&#24847;&#21619;&#30528;&#35201;&#25214;&#20986;&#19968;&#20010;&#26041;&#27861;&#26816;&#26597;&#19968;&#20010;&#23383;&#31526;&#20018;&#26159;&#19981;&#26159;&#26377;&#25928;&#30340;&#32599;&#39532;&#25968;&#23383;&#12290;&#36825;&#27604; <code class="function">toRoman</code> &#20013;<a class="link" href="#roman.stage3" title="14.3.&nbsp;roman.py, &#31532; 3 &#38454;&#27573;">&#39564;&#35777;&#26377;&#25928;&#30340;&#25968;&#23383;&#36755;&#20837;</a>&#22256;&#38590;&#65292;&#20294;&#26159;&#20320;&#21487;&#20197;&#20351;&#29992;&#19968;&#20010;&#24378;&#22823;&#30340;&#24037;&#20855;&#65306;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;</p></div></blockquote></li></ul><p><a href="../#roman2">&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;</a></p><ul><li><a href="../#roman.bugs">15.1.&nbsp;&#22788;&#29702; bugs</a><blockquote><div class="abstract"><p>&#23613;&#31649;&#20320;&#24456;&#21162;&#21147;&#22320;&#32534;&#20889;&#20840;&#38754;&#30340;&#21333;&#20803;&#27979;&#35797;&#65292;&#20294;&#26159; bug &#36824;&#26159;&#20250;&#20986;&#29616;&#12290;&#25105;&#25152;&#35828;&#30340; "<span class="quote">bug</span>" &#26159;&#20160;&#20040;&#21602;&#65311;Bug &#26159;&#20320;&#36824;&#27809;&#26377;&#32534;&#20889;&#30340;&#27979;&#35797;&#29992;&#20363;&#12290;</p></div></blockquote></li><li><a href="../#roman.change">15.2.&nbsp;&#24212;&#23545;&#38656;&#27714;&#21464;&#21270;</a><blockquote><div class="abstract"><p>&#23613;&#31649;&#20320;&#31469;&#23613;&#21162;&#21147;&#22320;&#20998;&#26512;&#20320;&#30340;&#23458;&#25143;&#65292;&#24182;&#28857;&#28783;&#29100;&#27833;&#22320;&#25552;&#28860;&#20986;&#31934;&#30830;&#30340;&#38656;&#27714;&#65292;&#20294;&#38656;&#27714;&#36824;&#26159;&#20250;&#26159;&#19981;&#26029;&#21464;&#21270;&#12290;&#22823;&#37096;&#20998;&#23458;&#25143;&#22312;&#30475;&#21040;&#20135;&#21697;&#21069;&#19981;&#30693;&#36947;&#20182;&#20204;&#24819;&#35201;&#20160;&#20040;&#12290;&#21363;&#20415;&#30693;&#36947;&#65292;&#20063;&#19981;&#25797;&#20110;&#31934;&#30830;&#34920;&#36848;&#20986;&#20182;&#20204;&#30340;&#26377;&#25928;&#38656;&#27714;&#12290;&#21363;&#20415;&#33021;&#34920;&#36848;&#20986;&#26469;&#65292;&#20182;&#20204;&#22312;&#19979;&#19968;&#20010;&#29256;&#26412;&#19968;&#23450;&#20250;&#35201;&#27714;&#26356;&#22810;&#30340;&#21151;&#33021;&#12290;&#22240;&#27492;&#20320;&#38656;&#35201;&#20570;&#22909;&#26356;&#26032;&#27979;&#35797;&#29992;&#20363;&#30340;&#20934;&#22791;&#20197;&#24212;&#23545;&#38656;&#27714;&#30340;&#25913;&#21464;&#12290;</p></div></blockquote></li><li><a href="../#roman.refactoring">15.3.&nbsp;&#37325;&#26500;</a><blockquote><div class="abstract"><p>&#20840;&#38754;&#30340;&#21333;&#20803;&#27979;&#35797;&#24102;&#26469;&#30340;&#26368;&#22823;&#22909;&#22788;&#19981;&#26159;&#20320;&#30340;&#20840;&#37096;&#27979;&#35797;&#29992;&#20363;&#26368;&#32456;&#36890;&#36807;&#26102;&#30340;&#25104;&#23601;&#24863;&#65307;&#20063;&#19981;&#26159;&#34987;&#36131;&#24618;&#30772;&#22351;&#20102;&#21035;&#20154;&#30340;&#20195;&#30721;&#26102;&#33021;&#22815;<span class="emphasis"><em>&#35777;&#26126;</em></span> &#33258;&#24049;&#30340;&#33258;&#20449;&#12290;&#26368;&#22823;&#30340;&#22909;&#22788;&#26159;&#21333;&#20803;&#27979;&#35797;&#32473;&#20102;&#20320;&#33258;&#30001;&#21435;&#26080;&#24773;&#22320;&#37325;&#26500;&#12290;</p></div></blockquote></li><li><a href="../#roman.postscript">15.4.&nbsp;&#21518;&#35760;</a><blockquote><div class="abstract"><p>&#32874;&#26126;&#30340;&#35835;&#32773;&#22312;&#23398;&#20064;<a class="link" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#21069;&#19968;&#33410;</a>&#26102;&#24819;&#24471;&#20250;&#26356;&#28145;&#20837;&#19968;&#23618;&#12290;&#29616;&#22312;&#20889;&#30340;&#36825;&#20010;&#31243;&#24207;&#20013;&#26368;&#20196;&#20154;&#22836;&#30171;&#30340;&#24615;&#33021;&#36127;&#25285;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#65292;&#20294;&#23427;&#26159;&#24517;&#38656;&#30340;&#65292;&#22240;&#20026;&#27809;&#26377;&#20854;&#23427;&#26041;&#27861;&#26469;&#35782;&#21035;&#32599;&#39532;&#25968;&#23383;&#12290;&#20294;&#26159;&#65292;&#23427;&#20204;&#21482;&#26377; 5000 &#20010;&#65292;&#20026;&#20160;&#20040;&#19981;&#19968;&#27425;&#24615;&#22320;&#26500;&#24314;&#19968;&#20010;&#26597;&#35810;&#34920;&#26469;&#35835;&#21462;&#65311;&#19981;&#24517;&#29992;&#27491;&#21017;&#34920;&#36798;&#24335;&#20984;&#29616;&#20102;&#36825;&#20010;&#20027;&#24847;&#30340;&#22909;&#22788;&#12290;&#20320;&#24314;&#31435;&#20102;&#25972;&#25968;&#21040;&#32599;&#39532;&#25968;&#23383;&#26597;&#35810;&#34920;&#30340;&#26102;&#20505;&#65292;&#32599;&#39532;&#25968;&#23383;&#21040;&#25972;&#25968;&#30340;&#36870;&#21521;&#26597;&#35810;&#34920;&#20063;&#26500;&#24314;&#20102;&#12290;</p></div></blockquote></li><li><a href="../#roman.summary">15.5.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#21333;&#20803;&#27979;&#35797;&#26159;&#19968;&#20010;&#24378;&#22823;&#30340;&#27010;&#24565;&#65292;&#20351;&#29992;&#24471;&#24403;&#30340;&#35805;&#26082;&#21487;&#20197;&#20943;&#23569;&#32500;&#25252;&#25104;&#26412;&#21448;&#21487;&#20197;&#22686;&#21152;&#38271;&#26399;&#39033;&#30446;&#30340;&#28789;&#27963;&#24615;&#12290;&#21516;&#26679;&#37325;&#35201;&#30340;&#26159;&#35201;&#24847;&#35782;&#21040;&#21333;&#20803;&#27979;&#35797;&#24182;&#19981;&#26159;&#8220;&#28789;&#20025;&#22937;&#33647;&#8221;&#65292;&#20063;&#19981;&#26159;&#8220;&#38134;&#24377;&#8221;&#12290;&#32534;&#20889;&#22909;&#30340;&#27979;&#35797;&#29992;&#20363;&#24456;&#22256;&#38590;&#65292;&#20445;&#25345;&#20854;&#26356;&#26032;&#26356;&#38656;&#35201;&#30952;&#32451; (&#29305;&#21035;&#26159;&#24403;&#39038;&#23458;&#23545;&#20462;&#22797;&#20005;&#37325;&#30340; Bug &#22823;&#21628;&#23567;&#21483;&#20043;&#26102;)&#12290;&#21333;&#20803;&#27979;&#35797;&#19981;&#26159;&#20854;&#23427;&#24418;&#24335;&#27979;&#35797;&#30340;&#26367;&#20195;&#21697;&#65292;&#27604;&#22914;&#35828;&#21151;&#33021;&#24615;&#27979;&#35797;&#12289;&#38598;&#25104;&#27979;&#35797;&#20197;&#21450;&#21487;&#29992;&#24615;&#27979;&#35797;&#12290;&#20294;&#23427;&#20999;&#23454;&#21487;&#34892;&#19988;&#21151;&#25928;&#26126;&#26174;&#65292;&#19968;&#26086;&#30456;&#35782;&#65292;&#20320;&#20250;&#21453;&#38382;&#20026;&#20160;&#20040;&#20197;&#24448;&#27809;&#26377;&#24212;&#29992;&#23427;&#12290;</p></div></blockquote></li></ul><p><a href="../#regression">&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;</a></p><ul><li><a href="../#regression.divein">16.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#22312; <a class="xref" href="#roman" title="&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;">&#31532;&nbsp;13&nbsp;&#31456; <i>&#21333;&#20803;&#27979;&#35797;</i></a> &#20013;&#65292;&#20320;&#23398;&#20250;&#20102;&#21333;&#20803;&#27979;&#35797;&#30340;&#21746;&#23398;&#12290;&#22312; <a class="xref" href="#roman1.5" title="&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;">&#31532;&nbsp;14&nbsp;&#31456; <i>&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</i></a>  &#20013;&#20320;&#27493;&#20837;&#20102; <span class="application">Python</span> &#22522;&#26412;&#30340;&#21333;&#20803;&#27979;&#35797;&#25805;&#20316;&#65292;&#22312; <a class="xref" href="#roman2" title="&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;">&#31532;&nbsp;15&nbsp;&#31456; <i>&#37325;&#26500;</i></a> &#37096;&#20998;&#65292;&#20320;&#30475;&#21040;&#21333;&#20803;&#27979;&#35797;&#22914;&#20309;&#20196;&#22823;&#35268;&#27169;&#37325;&#26500;&#21464;&#24471;&#23481;&#26131;&#12290;&#26412;&#31456;&#23558;&#22312;&#36825;&#20123;&#31243;&#24207;&#26679;&#20363;&#30340;&#22522;&#30784;&#19978;&#65292;&#38598;&#20013;&#20851;&#27880;&#20110;&#36229;&#36234;&#21333;&#20803;&#27979;&#35797;&#26412;&#36523;&#30340;&#26356;&#39640;&#32423;&#30340; <span class="application">Python</span> &#29305;&#26377;&#25216;&#26415;&#12290;</p></div></blockquote></li><li><a href="../#regression.path">16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;</a><blockquote><div class="abstract"><p>&#20174;&#21629;&#20196;&#34892;&#36816;&#34892; <span class="application">Python</span> &#20195;&#30721;&#26102;&#65292;&#30693;&#36947;&#25152;&#36816;&#34892;&#20195;&#30721;&#22312;&#30913;&#30424;&#19978;&#30340;&#23384;&#20648;&#20301;&#32622;&#26377;&#26102;&#20505;&#26159;&#26377;&#24517;&#35201;&#30340;&#12290;</p></div></blockquote></li><li><a href="../#regression.filter">16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;</a><blockquote><div class="abstract"><p>&#20320;&#24050;&#32463;&#29087;&#35782;&#20102;<a class="link" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#24212;&#29992;&#21015;&#34920;&#35299;&#26512;&#26469;&#36807;&#28388;&#21015;&#34920;</a>&#12290;&#36825;&#37324;&#20171;&#32461;&#30340;&#26159;&#36798;&#21040;&#30456;&#21516;&#25928;&#26524;&#30340;&#21478;&#19968;&#31181;&#20196;&#24456;&#22810;&#20154;&#24863;&#35273;&#28165;&#26224;&#30340;&#23454;&#29616;&#26041;&#27861;&#12290;</p></div></blockquote></li><li><a href="../#regression.map">16.4.&nbsp;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;</a><blockquote><div class="abstract"><p>&#20320;&#23545;&#20351;&#29992;<a class="link" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#21015;&#34920;&#35299;&#26512;</a>&#26144;&#23556;&#21015;&#34920;&#30340;&#20570;&#27861;&#24050;&#32463;&#29087;&#30693;&#12290;&#21478;&#19968;&#31181;&#26041;&#27861;&#21487;&#20197;&#23436;&#25104;&#21516;&#26679;&#30340;&#24037;&#20316;&#65306;&#20351;&#29992;&#20869;&#24314; <code class="function">map</code> &#20989;&#25968;&#12290;&#23427;&#30340;&#24037;&#20316;&#26426;&#29702;&#21644; <a class="link" href="#regression.filter" title="16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;"><code class="function">filter</code></a> &#20989;&#25968;&#31867;&#20284;&#12290;</p></div></blockquote></li><li><a href="../#regression.datacentric">16.5.&nbsp;&#25968;&#25454;&#20013;&#24515;&#24605;&#24819;&#32534;&#31243;</a><blockquote><div class="abstract"><p>&#29616;&#22312;&#30340;&#20320;&#65292;&#21487;&#33021;&#27491;&#25235;&#32819;&#25376;&#33134;&#22320;&#29408;&#24819;&#65292;&#20026;&#20160;&#20040;&#36825;&#26679;&#27604;&#20351;&#29992; <code class="literal">for</code> &#24490;&#29615;&#21644;&#30452;&#25509;&#35843;&#29992;&#20989;&#25968;&#22909;&#12290;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#22909;&#30340;&#38382;&#39064;&#12290;&#36890;&#24120;&#36825;&#26159;&#19968;&#20010;&#31243;&#24207;&#35266;&#38382;&#39064;&#12290;&#20351;&#29992; <code class="function">map</code> &#21644; <code class="function">filter</code> &#24378;&#36843;&#20320;&#22260;&#32469;&#25968;&#25454;&#36827;&#34892;&#24605;&#32771;&#12290;</p></div></blockquote></li><li><a href="../#regression.import">16.6.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;</a><blockquote><div class="abstract"><p>&#22909;&#20102;&#65292;&#22823;&#36947;&#29702;&#35848;&#22815;&#20102;&#12290;&#35753;&#25105;&#20204;&#35848;&#35848;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;&#21543;&#12290;</p></div></blockquote></li><li><a href="../#regression.alltogether">16.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><blockquote><div class="abstract"><p>&#20320;&#24050;&#32463;&#23398;&#20064;&#20102;&#36275;&#22815;&#30340;&#30693;&#35782;&#65292;&#29616;&#22312;&#26469;&#20998;&#26512;&#26412;&#31456;&#26679;&#20363;&#20195;&#30721;&#30340;&#21069;&#19971;&#34892;&#65306;&#35835;&#21462;&#19968;&#20010;&#30446;&#24405;&#24182;&#20174;&#20013;&#23548;&#20837;&#36873;&#23450;&#30340;&#27169;&#22359;&#12290;</p></div></blockquote></li><li><a href="../#regression.summary">16.8.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p><code class="filename">regression.py</code> &#31243;&#24207;&#21450;&#20854;&#36755;&#20986;&#21040;&#29616;&#22312;&#24212;&#35813;&#24456;&#28165;&#26970;&#20102;&#12290;</p></div></blockquote></li></ul><p><a href="../#plural">&#31532;&nbsp;17&nbsp;&#31456;&nbsp;&#21160;&#24577;&#20989;&#25968;</a></p><ul><li><a href="../#plural.divein">17.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#25105;&#24819;&#35848;&#35848;&#21517;&#35789;&#22797;&#25968;&#12290;&#36824;&#26377;&#65292;&#36820;&#22238;&#20854;&#23427;&#20989;&#25968;&#30340;&#20989;&#25968;&#65292;&#39640;&#32423;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#21644;&#29983;&#25104;&#22120; (Generator)&#12290;&#29983;&#25104;&#22120;&#26159; <span class="application">Python</span> 2.3 &#26032;&#24341;&#20837;&#30340;&#12290;&#20294;&#39318;&#20808;&#36824;&#26159;&#35753;&#25105;&#20204;&#20808;&#26469;&#35848;&#35848;&#22914;&#20309;&#29983;&#25104;&#21517;&#35789;&#22797;&#25968;&#12290;</p></div></blockquote></li><li><a href="../#plural.stage1">17.2.&nbsp;<code class="filename">plural.py</code>, &#31532; 1 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#20320;&#25152;&#38024;&#23545;&#30340;&#21333;&#35789; (&#33267;&#23569;&#22312;&#33521;&#35821;&#20013;) &#26159;&#23383;&#31526;&#20018;&#21644;&#23383;&#31526;&#12290;&#20320;&#36824;&#38656;&#35201;&#35268;&#21017;&#26469;&#25214;&#20986;&#19981;&#21516;&#30340;&#23383;&#31526; (&#23383;&#27597;) &#32452;&#21512;&#65292;&#24182;&#23545;&#23427;&#20204;&#36827;&#34892;&#19981;&#21516;&#30340;&#25805;&#20316;&#12290;&#36825;&#21548;&#36215;&#26469;&#20687;&#26159;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#24037;&#20316;&#12290;</p></div></blockquote></li><li><a href="../#plural.stage2">17.3.&nbsp;<code class="filename">plural.py</code>, &#31532; 2 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#29616;&#22312;&#20320;&#23558;&#22686;&#21152;&#19968;&#20010;&#25277;&#35937;&#36807;&#31243;&#12290;&#20320;&#20174;&#23450;&#20041;&#19968;&#20010;&#35268;&#21017;&#21015;&#34920;&#24320;&#22987;&#65306;&#22914;&#26524;&#36825;&#26679;&#65292;&#23601;&#20570;&#37027;&#20010;&#65292;&#21542;&#21017;&#21028;&#26029;&#19979;&#19968;&#35268;&#21017;&#12290;&#35753;&#25105;&#20204;&#26242;&#26102;&#23558;&#31243;&#24207;&#19968;&#37096;&#20998;&#22797;&#26434;&#21270;&#20197;&#20415;&#20351;&#21478;&#19968;&#37096;&#20998;&#31616;&#21333;&#21270;&#12290;</p></div></blockquote></li><li><a href="../#plural.stage3">17.4.&nbsp;<code class="filename">plural.py</code>, &#31532; 3 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#23558;&#27599;&#20010;&#21305;&#37197;&#21644;&#35268;&#21017;&#24212;&#29992;&#20998;&#21035;&#21046;&#20316;&#25104;&#20989;&#25968;&#27809;&#26377;&#24517;&#35201;&#12290;&#20320;&#20174;&#26469;&#19981;&#20250;&#30452;&#25509;&#35843;&#29992;&#23427;&#20204;&#65306;&#20320;&#25226;&#23427;&#20204;&#23450;&#20041;&#20110; <code class="varname">rules</code> &#21015;&#34920;&#20043;&#20013;&#24182;&#20174;&#37027;&#37324;&#35843;&#29992;&#23427;&#20204;&#12290;&#35753;&#25105;&#20204;&#38544;&#21435;&#23427;&#20204;&#30340;&#20989;&#25968;&#21517;&#32780;&#25235;&#20303;&#35268;&#21017;&#23450;&#20041;&#30340;&#20027;&#32447;&#12290;</p></div></blockquote></li><li><a href="../#plural.stage4">17.5.&nbsp;<code class="filename">plural.py</code>, &#31532; 4 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#35753;&#25105;&#20204;&#31934;&#28860;&#20986;&#20195;&#30721;&#20013;&#30340;&#37325;&#22797;&#20043;&#22788;&#65292;&#20197;&#20415;&#26356;&#23481;&#26131;&#22320;&#23450;&#20041;&#26032;&#35268;&#21017;&#12290;</p></div></blockquote></li><li><a href="../#plural.stage5">17.6.&nbsp;<code class="filename">plural.py</code>, &#31532; 5 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#20320;&#24050;&#32463;&#31934;&#28860;&#20102;&#25152;&#26377;&#37325;&#22797;&#20195;&#30721;&#65292;&#20063;&#23613;&#21487;&#33021;&#22320;&#25226;&#22797;&#25968;&#35268;&#21017;&#25552;&#28860;&#21040;&#23450;&#20041;&#19968;&#20010;&#23383;&#31526;&#20018;&#21015;&#34920;&#12290;&#25509;&#19979;&#26469;&#30340;&#27493;&#39588;&#26159;&#25226;&#36825;&#20123;&#23383;&#31526;&#20018;&#25552;&#20986;&#26469;&#25918;&#22312;&#21478;&#22806;&#30340;&#25991;&#20214;&#20013;&#65292;&#20174;&#32780;&#21487;&#20197;&#21644;&#20351;&#29992;&#23427;&#20204;&#30340;&#20195;&#30721;&#20998;&#24320;&#26469;&#32500;&#25252;&#12290;</p></div></blockquote></li><li><a href="../#plural.stage6">17.7.&nbsp;<code class="filename">plural.py</code>, &#31532; 6 &#38454;&#27573;</a><blockquote><div class="abstract"><p>&#29616;&#22312;&#20320;&#24050;&#20934;&#22791;&#22909;&#25506;&#35752;&#29983;&#25104;&#22120; (Generator) &#20102;&#12290;</p></div></blockquote></li><li><a href="../#plural.summary">17.8.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#36825;&#19968;&#31456;&#20013;&#25105;&#20204;&#25506;&#35752;&#20102;&#20960;&#20010;&#19981;&#21516;&#30340;&#39640;&#32423;&#25216;&#26415;&#12290;&#23427;&#20204;&#24182;&#19981;&#37117;&#36866;&#29992;&#20110;&#20219;&#20309;&#24773;&#20917;&#12290;</p></div></blockquote></li></ul><p><a href="../#soundex">&#31532;&nbsp;18&nbsp;&#31456;&nbsp;&#24615;&#33021;&#20248;&#21270;</a></p><ul><li><a href="../#soundex.divein">18.1.&nbsp;&#27010;&#35272;</a><blockquote><div class="abstract"><p>&#30001;&#20110;&#20195;&#30721;&#20248;&#21270;&#36807;&#31243;&#20013;&#23384;&#22312;&#22826;&#22810;&#30340;&#19981;&#26126;&#30830;&#22240;&#32032;&#65292;&#20197;&#33267;&#20110;&#20320;&#24456;&#38590;&#28165;&#26970;&#35813;&#20174;&#20309;&#20837;&#25163;&#12290;</p></div></blockquote></li><li><a href="../#soundex.timeit">18.2.&nbsp;&#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;</a><blockquote><div class="abstract"><p>&#20851;&#20110; <span class="application">Python</span> &#20195;&#30721;&#20248;&#21270;&#20320;&#38656;&#35201;&#30693;&#36947;&#30340;&#26368;&#37325;&#35201;&#38382;&#39064;&#26159;&#65292;&#20915;&#19981;&#35201;&#33258;&#24049;&#32534;&#20889;&#35745;&#26102;&#20989;&#25968;&#12290;</p></div></blockquote></li><li><a href="../#soundex.stage1">18.3.&nbsp;&#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;</a><blockquote><div class="abstract"><p> Soundex &#20989;&#25968;&#30340;&#31532;&#19968;&#20214;&#20107;&#26159;&#26816;&#26597;&#36755;&#20837;&#26159;&#21542;&#26159;&#19968;&#20010;&#31354;&#23383;&#31526;&#20018;&#12290;&#24590;&#26679;&#20570;&#26159;&#26368;&#22909;&#30340;&#26041;&#27861;&#65311;</p></div></blockquote></li><li><a href="../#soundex.stage2">18.4.&nbsp;&#20248;&#21270;&#23383;&#20856;&#26597;&#25214;</a><blockquote><div class="abstract"><p> Soundex &#31639;&#27861;&#30340;&#31532;&#20108;&#27493;&#26159;&#20381;&#29031;&#29305;&#23450;&#35268;&#21017;&#23558;&#23383;&#31526;&#36716;&#25442;&#20026;&#25968;&#23383;&#12290;&#20570;&#21040;&#36825;&#28857;&#26368;&#22909;&#30340;&#26041;&#27861;&#26159;&#20160;&#20040;&#65311;</p></div></blockquote></li><li><a href="../#soundex.stage3">18.5.&nbsp;&#20248;&#21270;&#21015;&#34920;&#25805;&#20316;</a><blockquote><div class="abstract"><p>Soundex &#31639;&#27861;&#30340;&#31532;&#19977;&#27493;&#26159;&#21435;&#38500;&#36830;&#32493;&#37325;&#22797;&#23383;&#31526;&#12290;&#24590;&#26679;&#20570;&#26159;&#26368;&#20339;&#26041;&#27861;&#65311;</p></div></blockquote></li><li><a href="../#soundex.stage4">18.6.&nbsp;&#20248;&#21270;&#23383;&#31526;&#20018;&#25805;&#20316;</a><blockquote><div class="abstract"><p>Soundex &#31639;&#27861;&#30340;&#26368;&#21518;&#19968;&#27493;&#26159;&#23545;&#30701;&#32467;&#26524;&#34917;&#38646;&#21644;&#25130;&#30701;&#38271;&#32467;&#26524;&#12290;&#26368;&#20339;&#30340;&#20570;&#27861;&#26159;&#20160;&#20040;&#65311;</p></div></blockquote></li><li><a href="../#soundex.summary">18.7.&nbsp;&#23567;&#32467;</a><blockquote><div class="abstract"><p>&#36825;&#19968;&#31456;&#23637;&#31034;&#20102;&#24615;&#33021;&#20248;&#21270;&#30340;&#20960;&#20010;&#37325;&#35201;&#26041;&#38754;&#65292;&#36825;&#37324;&#26159;&#23601; <span class="application">Python</span> &#32780;&#35328;&#65292;&#20294;&#23427;&#20204;&#21364;&#26222;&#36941;&#36866;&#29992;&#12290;</p></div></blockquote></li></ul></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="tips"></a>&#38468;&#24405;&nbsp;C.&nbsp;&#25216;&#24039;&#21644;&#31373;&#38376;</h1></div></div></div><p><a href="../#install">&#31532;&nbsp;1&nbsp;&#31456;&nbsp;&#23433;&#35013; <span class="application">Python</span></a></p><ul></ul><p><a href="../#odbchelper">&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</a></p><ul><li><a href="../#odbchelper.divein">2.1.&nbsp;&#27010;&#35272;</a><div class="tip"><blockquote><b class="title"><a name="tip.run.windows">&#25552;&#31034;: &#22312; Windows &#19978;&#36816;&#34892;</a></b><br>&#22312; Windows &#30340; <span class="application">ActivePython</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#21487;&#20197;&#36873;&#25321;
<span class="guimenu">File</span> &#8594; <span class="guimenuitem"><span class="accel">R</span>un...</span> (<span class="shortcut"><strong><span class="keycap"><strong>Ctrl</strong></span>+<span class="keysym">R</span></strong></span>) &#26469;&#36816;&#34892; <span class="application">Python</span> &#31243;&#24207;&#12290;&#36755;&#20986;&#32467;&#26524;&#23558;&#26174;&#31034;&#22312;&#20132;&#20114;&#31383;&#21475;&#20013;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="tip.run.mac">&#25552;&#31034;: &#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#19978;&#36816;&#34892;</a></b><br>&#22312; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#21487;&#20197;&#36873;&#25321;
<span class="guimenu">Python</span> &#8594; <span class="guimenuitem">Run window...</span> (<span class="shortcut"><strong><span class="keycap"><strong>Cmd</strong></span>+<span class="keysym">R</span></strong></span>) &#26469;&#36816;&#34892; <span class="application">Python</span> &#31243;&#24207;&#65292;&#20294;&#39318;&#20808;&#35201;&#35774;&#32622;&#19968;&#20010;&#37325;&#35201;&#30340;&#36873;&#39033;&#12290;&#22312; <acronym class="acronym">IDE</acronym> &#20013;&#25171;&#24320; <code class="filename">.py</code> &#27169;&#22359;&#65292;&#28857;&#20987;&#31383;&#21475;&#21491;&#19978;&#35282;&#30340;&#40657;&#33394;&#19977;&#35282;&#65292;&#24377;&#20986;&#36825;&#20010;&#27169;&#22359;&#30340;&#36873;&#39033;&#33756;&#21333;&#65292;&#28982;&#21518;&#23558; <span class="guimenuitem">Run as __main__</span> &#36873;&#20013;&#12290; &#36825;&#20010;&#35774;&#32622;&#26159;&#21516;&#27169;&#22359;&#19968;&#21516;&#20445;&#23384;&#30340;&#65292;&#25152;&#20197;&#23545;&#20110;&#27599;&#20010;&#27169;&#22359;&#24744;&#37117;&#38656;&#35201;&#36825;&#26679;&#20570;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="tip.run.unix">&#25552;&#31034;: &#22312; <acronym class="acronym">UNIX</acronym> &#19978;&#36816;&#34892;</a></b><br>&#22312; <acronym class="acronym">UNIX</acronym> &#20860;&#23481;&#30340;&#25805;&#20316;&#31995;&#32479;&#20013; (&#21253;&#25324; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X)&#65292;&#21487;&#20197;&#36890;&#36807;&#21629;&#20196;&#34892;&#65306;<strong class="userinput"><code>python <code class="filename">odbchelper.py</code></code></strong> &#36816;&#34892;&#27169;&#22359;&#12290;
</blockquote></div><p></p></li><li><a href="../#odbchelper.funcdef">2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;</a><div class="note"><blockquote><b class="title"><a name="compare.funcdef.vb">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Visual Basic</span> &#30340;&#36820;&#22238;&#20540;</a></b><br>&#22312; <span class="application">Visual Basic</span> &#20013;&#65292;&#20989;&#25968; (&#26377;&#36820;&#22238;&#20540;) &#20197; <code class="literal">function</code> &#24320;&#22987;&#65292;&#32780;&#23376;&#31243;&#24207; (&#26080;&#36820;&#22238;&#20540;) &#20197; <code class="literal">sub</code> &#24320;&#22987;&#12290;&#22312; <span class="application">Python</span> &#20013;&#27809;&#26377;&#23376;&#31243;&#24207;&#12290;&#21482;&#26377;&#20989;&#25968;&#65292;&#25152;&#26377;&#30340;&#20989;&#25968;&#37117;&#26377;&#36820;&#22238;&#20540; (&#23613;&#31649;&#21487;&#33021;&#20026; <code class="literal">None</code>)&#65292;&#24182;&#19988;&#25152;&#26377;&#30340;&#20989;&#25968;&#37117;&#20197; <code class="literal">def</code> &#24320;&#22987;&#12290;
</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.funcdef.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span> &#30340;&#36820;&#22238;&#20540;</a></b><br>&#22312; <span class="application">Java</span>&#12289;<span class="application"><acronym class="acronym">C++</acronym></span> &#21644;&#20854;&#20182;&#38745;&#24577;&#31867;&#22411;&#35821;&#35328;&#20013;&#65292;&#24517;&#39035;&#35201;&#25351;&#23450;&#20989;&#25968;&#36820;&#22238;&#20540;&#21644;&#27599;&#20010;&#20989;&#25968;&#21442;&#25968;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#27704;&#36828;&#20063;&#19981;&#38656;&#35201;&#26126;&#30830;&#25351;&#23450;&#20219;&#20309;&#19996;&#35199;&#30340;&#25968;&#25454;&#31867;&#22411;&#12290;<span class="application">Python</span> &#20250;&#26681;&#25454;&#36171;&#32473;&#23427;&#30340;&#20540;&#22312;&#20869;&#37096;&#23558;&#20854;&#25968;&#25454;&#31867;&#22411;&#35760;&#24405;&#19979;&#26469;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.docstring">2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;</a><div class="note"><blockquote><b class="title"><a name="compare.quoting.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span> &#20013;&#30340;&#24341;&#21495;</a></b><br>&#19977;&#37325;&#24341;&#21495;&#20063;&#26159;&#19968;&#31181;&#23450;&#20041;&#26082;&#21253;&#21547;&#21333;&#24341;&#21495;&#21448;&#21253;&#21547;&#21452;&#24341;&#21495;&#30340;&#23383;&#31526;&#20018;&#30340;&#31616;&#21333;&#26041;&#27861;&#65292;&#23601;&#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">qq/.../</code> &#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="tip.docstring">&#27880;&#24847;: &#20026;&#20160;&#20040;&#20351;&#29992; <code class="literal">doc string</code> &#26159;&#31181;&#22909;&#36873;&#25321;</a></b><br>&#35768;&#22810; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20351;&#29992; <code class="literal">doc string</code> &#26469;&#25552;&#20379;&#19978;&#19979;&#25991;&#25935;&#24863;&#30340;&#25991;&#26723;&#20449;&#24687;&#65292;&#25152;&#20197;&#24403;&#38190;&#20837;&#19968;&#20010;&#20989;&#25968;&#21517;&#26102;&#65292;&#23427;&#30340; <code class="literal">doc string</code> &#26174;&#31034;&#20026;&#19968;&#20010;&#24037;&#20855;&#25552;&#31034;&#12290;&#36825;&#19968;&#28857;&#21487;&#20197;&#35828;&#38750;&#24120;&#26377;&#29992;&#65292;&#20294;&#26159;&#23427;&#30340;&#22909;&#22351;&#21462;&#20915;&#20110;&#24744;&#20070;&#20889;&#30340; <code class="literal">doc string</code> &#30340;&#22909;&#22351;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.objects">2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;</a><div class="note"><blockquote><b class="title"><a name="compare.import.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: <code class="literal">import</code></a></b><br>&#22312; <span class="application">Python</span> &#20013;&#30340; <code class="literal">import</code> &#23601;&#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">require</code>&#12290;<code class="literal">import</code> &#19968;&#20010; <span class="application">Python</span> &#27169;&#22359;&#21518;&#65292;&#24744;&#23601;&#21487;&#20197;&#20351;&#29992; <code class="literal"><em class="replaceable">module</em>.<em class="replaceable">function</em></code> &#26469;&#35775;&#38382;&#23427;&#30340;&#20989;&#25968;&#65307;<code class="literal">require</code> &#19968;&#20010; <span class="application">Perl</span> &#27169;&#22359;&#21518;&#65292;&#24744;&#23601;&#21487;&#20197;&#20351;&#29992; <code class="literal"><em class="replaceable">module</em>::<em class="replaceable">function</em></code> &#26469;&#35775;&#38382;&#23427;&#30340;&#20989;&#25968;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.indenting">2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;</a><div class="note"><blockquote><b class="title"><a name="compare.lineend.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: &#35821;&#21477;&#21644;&#35821;&#21477;&#22359;&#20998;&#21106;</a></b><br><span class="application">Python</span> &#20351;&#29992;&#30828;&#22238;&#36710;&#26469;&#20998;&#21106;&#35821;&#21477;&#65292;&#20882;&#21495;&#21644;&#32553;&#36827;&#26469;&#20998;&#21106;&#20195;&#30721;&#22359;&#12290;<span class="application"><acronym class="acronym">C++</acronym></span> &#21644; <span class="application">Java</span> &#20351;&#29992;&#20998;&#21495;&#26469;&#20998;&#21106;&#35821;&#21477;&#65292;&#33457;&#25324;&#21495;&#26469;&#20998;&#21106;&#20195;&#30721;&#22359;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.testing">2.6.&nbsp;&#27979;&#35797;&#27169;&#22359;</a><div class="note"><blockquote><b class="title"><a name="compare.equals.c">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application"><acronym class="acronym">C</acronym></span>: &#27604;&#36739;&#21644;&#36171;&#20540;</a></b><br>&#19982; <span class="application"><acronym class="acronym">C</acronym></span> &#19968;&#26679;&#65292;<span class="application">Python</span> &#20351;&#29992; <code class="literal">==</code> &#20570;&#27604;&#36739;&#65292;&#20351;&#29992; <code class="literal">=</code> &#20570;&#36171;&#20540;&#12290;&#19982; <span class="application"><acronym class="acronym">C</acronym></span> &#19981;&#19968;&#26679;&#65292;<span class="application">Python</span> &#19981;&#25903;&#25345;&#34892;&#20869;&#36171;&#20540;&#65292;&#25152;&#20197;&#19981;&#20250;&#20986;&#29616;&#24819;&#35201;&#36827;&#34892;&#27604;&#36739;&#21364;&#24847;&#22806;&#22320;&#20986;&#29616;&#36171;&#20540;&#30340;&#24773;&#20917;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="tip.mac.runasmain">&#25552;&#31034;: <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#19978;&#30340; <code class="literal">if</code> <code class="literal">__name__</code></a></b><br>&#22312; <span class="application">MacPython</span> &#19978;&#65292;&#38656;&#35201;&#19968;&#20010;&#39069;&#22806;&#30340;&#27493;&#32858;&#26469;&#20351;&#24471; <code class="literal">if</code> <code class="literal">__name__</code> &#25216;&#24039;&#26377;&#25928;&#12290;&#28857;&#20987;&#31383;&#21475;&#21491;&#19978;&#35282;&#30340;&#40657;&#33394;&#19977;&#35282;&#65292;&#24377;&#20986;&#27169;&#22359;&#30340;&#23646;&#24615;&#33756;&#21333;&#65292;&#30830;&#35748; <span class="guimenuitem">Run as __main__</span> &#34987;&#36873;&#20013;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#datatypes">&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;</a></p><ul><li><a href="../#odbchelper.dict">3.1.&nbsp;Dictionary &#20171;&#32461;</a><div class="note"><blockquote><b class="title"><a name="compare.dict.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: Dictionary</a></b><br><span class="application">Python</span> &#20013;&#30340; dictionary &#23601;&#20687; <span class="application">Perl</span> &#20013;&#30340; hash (&#21704;&#24076;&#25968;&#32452;)&#12290;&#22312; <span class="application">Perl</span> &#20013;&#65292;&#23384;&#20648;&#21704;&#24076;&#20540;&#30340;&#21464;&#37327;&#24635;&#26159;&#20197; <code class="literal">%</code> &#23383;&#31526;&#24320;&#22987;&#65307;&#22312; <span class="application">Python</span> &#20013;&#65292;&#21464;&#37327;&#21487;&#20197;&#20219;&#24847;&#21462;&#21517;&#65292;&#24182;&#19988; <span class="application">Python</span> &#22312;&#20869;&#37096;&#20250;&#35760;&#24405;&#19979;&#20854;&#25968;&#25454;&#31867;&#22411;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.dict.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: Dictionary</a></b><br><span class="application">Python</span> &#20013;&#30340; dictionary &#20687; <span class="application">Java</span> &#20013;&#30340; <code class="classname">Hashtable</code> &#31867;&#30340;&#23454;&#20363;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.dict.vb">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Visual Basic</span>: Dictionary</a></b><br><span class="application">Python</span> &#20013;&#30340; dictionary &#20687; <span class="application">Visual Basic</span> &#20013;&#30340; <code class="classname">Scripting.Dictionary</code> &#23545;&#35937;&#30340;&#23454;&#20363;&#12290;</blockquote></div><p></p></li><li><a href="../#d0e5404">3.1.2.&nbsp;Dictionary &#30340;&#20462;&#25913;</a><div class="note"><blockquote><b class="title"><a name="tip.dictorder">&#27880;&#24847;: Dictionary &#26159;&#26080;&#24207;&#30340;</a></b><br>Dictionary &#27809;&#26377;&#20803;&#32032;&#39034;&#24207;&#30340;&#27010;&#24565;&#12290;&#35828;&#20803;&#32032; "<span class="quote">&#39034;&#24207;&#20081;&#20102;</span>" &#26159;&#19981;&#27491;&#30830;&#30340;&#65292;&#23427;&#20204;&#21482;&#26159;&#24207;&#20598;&#30340;&#31616;&#21333;&#25490;&#21015;&#12290;&#36825;&#26159;&#19968;&#20010;&#37325;&#35201;&#30340;&#29305;&#24615;&#65292;&#23427;&#20250;&#22312;&#24744;&#24819;&#35201;&#20197;&#19968;&#31181;&#29305;&#23450;&#30340;&#65292;&#21487;&#37325;&#29616;&#30340;&#39034;&#24207; (&#20687;&#20197; key &#30340;&#23383;&#27597;&#34920;&#39034;&#24207;) &#23384;&#21462; dictionary &#20803;&#32032;&#30340;&#26102;&#20505;&#39578;&#25200;&#24744;&#12290;&#26377;&#19968;&#20123;&#23454;&#29616;&#36825;&#20123;&#35201;&#27714;&#30340;&#26041;&#27861;&#65292;&#23427;&#20204;&#21482;&#26159;&#27809;&#26377;&#21152;&#21040; dictionary &#20013;&#21435;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.list">3.2.&nbsp;List &#20171;&#32461;</a><div class="note"><blockquote><b class="title"><a name="compare.list.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: list</a></b><br><span class="application">Python</span> &#30340; list &#22914;&#21516; <span class="application">Perl</span> &#20013;&#30340;&#25968;&#32452;&#12290;&#22312; <span class="application">Perl</span> &#20013;&#65292;&#29992;&#26469;&#20445;&#23384;&#25968;&#32452;&#30340;&#21464;&#37327;&#24635;&#26159;&#20197; <code class="literal">@</code> &#23383;&#31526;&#24320;&#22987;&#65307;&#22312; <span class="application">Python</span> &#20013;&#65292;&#21464;&#37327;&#21487;&#20197;&#20219;&#24847;&#21462;&#21517;&#65292;&#24182;&#19988; <span class="application">Python</span> &#22312;&#20869;&#37096;&#20250;&#35760;&#24405;&#19979;&#20854;&#25968;&#25454;&#31867;&#22411;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.list.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: list</a></b><br><span class="application">Python</span> &#20013;&#30340; list &#26356;&#20687; <span class="application">Java</span> &#20013;&#30340;&#25968;&#32452; (&#24744;&#21487;&#20197;&#31616;&#21333;&#22320;&#36825;&#26679;&#29702;&#35299;&#65292;&#20294; <span class="application">Python</span> &#20013;&#30340; list &#36828;&#27604; <span class="application">Java</span> &#20013;&#30340;&#25968;&#32452;&#24378;&#22823;)&#12290;&#19968;&#20010;&#26356;&#22909;&#30340;&#31867;&#27604;&#26159; <code class="classname">ArrayList</code> &#31867;&#65292;&#23427;&#21487;&#20197;&#20445;&#23384;&#20219;&#24847;&#23545;&#35937;&#65292;&#24182;&#19988;&#21487;&#20197;&#22312;&#22686;&#21152;&#26032;&#20803;&#32032;&#26102;&#21160;&#24577;&#25193;&#23637;&#12290;</blockquote></div><p></p></li><li><a href="../#d0e6257">3.2.3.&nbsp;&#22312; list &#20013;&#25628;&#32034;</a><div class="note"><blockquote><b class="title"><a name="tip.boolean">&#27880;&#24847;: &#20309;&#35859; <span class="application">Python</span> &#20013;&#30340; True &#65311;</a></b><br>&#22312; 2.2.1 &#29256;&#26412;&#20043;&#21069;&#65292;<span class="application">Python</span> &#27809;&#26377;&#21333;&#29420;&#30340;&#24067;&#23572;&#25968;&#25454;&#31867;&#22411;&#12290;&#20026;&#20102;&#24357;&#34917;&#36825;&#20010;&#32570;&#38519;&#65292;<span class="application">Python</span> &#22312;&#24067;&#23572;&#29615;&#22659; (&#22914; <code class="literal">if</code> &#35821;&#21477;) &#20013;&#20960;&#20046;&#25509;&#21463;&#25152;&#26377;&#19996;&#35199;&#65292;&#36981;&#24490;&#19979;&#38754;&#30340;&#35268;&#21017;&#65306;<div class="itemizedlist"><ul><li><code class="constant">0</code> &#20026; false; &#20854;&#23427;&#25152;&#26377;&#25968;&#20540;&#30342;&#20026; true&#12290;</li><li>&#31354;&#20018; (<code class="literal">""</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377;&#23383;&#31526;&#20018;&#30342;&#20026; true&#12290;</li><li>&#31354; list (<code class="literal">[]</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377; list &#30342;&#20026; true&#12290;</li><li>&#31354; tuple (<code class="literal">()</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377; tuple &#30342;&#20026; true&#12290;</li><li>&#31354; dictionary (<code class="literal">{}</code>) &#20026; false; &#20854;&#23427;&#25152;&#26377; dictionary &#30342;&#20026; true&#12290;</li></ul></div>&#36825;&#20123;&#35268;&#21017;&#20173;&#28982;&#36866;&#29992;&#20110; <span class="application">Python</span> 2.2.1 &#21450;&#20854;&#21518;&#32493;&#29256;&#26412;&#65292;&#20294;&#29616;&#22312;&#24744;&#20063;&#21487;&#20197;&#20351;&#29992;&#30495;&#27491;&#30340;&#24067;&#23572;&#20540;&#65292;&#23427;&#30340;&#20540;&#25110;&#32773;&#20026; <code class="literal">True</code> &#25110;&#32773;&#20026; <code class="literal">False</code>&#12290;&#35831;&#27880;&#24847;&#31532;&#19968;&#20010;&#23383;&#27597;&#26159;&#22823;&#20889;&#30340;&#65307;&#36825;&#20123;&#20540;&#22914;&#21516;&#22312; <span class="application">Python</span> &#20013;&#30340;&#20854;&#23427;&#19996;&#35199;&#19968;&#26679;&#37117;&#26159;&#22823;&#23567;&#20889;&#25935;&#24863;&#30340;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.tuple">3.3.&nbsp;Tuple &#20171;&#32461;</a><div class="note"><blockquote><b class="title"><a name="tip.tuple">&#27880;&#24847;: Tuple &#21040; list &#20877;&#21040; tuple</a></b><br>Tuple &#21487;&#20197;&#36716;&#25442;&#25104; list&#65292;&#21453;&#20043;&#20134;&#28982;&#12290;&#20869;&#32622;&#30340; <code class="function">tuple</code> &#20989;&#25968;&#25509;&#25910;&#19968;&#20010; list&#65292;&#24182;&#36820;&#22238;&#19968;&#20010;&#26377;&#30528;&#30456;&#21516;&#20803;&#32032;&#30340; tuple&#12290;&#32780; <code class="function">list</code> &#20989;&#25968;&#25509;&#25910;&#19968;&#20010; tuple &#36820;&#22238;&#19968;&#20010; list&#12290;&#20174;&#25928;&#26524;&#19978;&#30475;&#65292;<code class="function">tuple</code> &#20923;&#32467;&#19968;&#20010; list&#65292;&#32780; <code class="function">list</code> &#35299;&#20923;&#19968;&#20010; tuple&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.vardef">3.4.&nbsp;&#21464;&#37327;&#22768;&#26126;</a><div class="note"><blockquote><b class="title"><a name="tip.multiline">&#27880;&#24847;: &#20070;&#20889;&#22810;&#34892;&#21629;&#20196;</a></b><br>&#24403;&#19968;&#26465;&#21629;&#20196;&#29992;&#32493;&#34892;&#31526; ("<span class="quote"><code class="literal">\</code></span>") &#20998;&#21106;&#25104;&#22810;&#34892;&#26102;&#65292;&#21518;&#32493;&#30340;&#34892;&#21487;&#20197;&#20197;&#20219;&#20309;&#26041;&#24335;&#32553;&#36827;&#65292;&#27492;&#26102; <span class="application">Python</span> &#36890;&#24120;&#30340;&#20005;&#26684;&#30340;&#32553;&#36827;&#35268;&#21017;&#26080;&#38656;&#36981;&#23432;&#12290;&#22914;&#26524;&#24744;&#30340; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#33258;&#30001;&#23545;&#21518;&#32493;&#34892;&#36827;&#34892;&#20102;&#32553;&#36827;&#65292;&#24744;&#24212;&#35813;&#25226;&#23427;&#24403;&#25104;&#26159;&#32570;&#30465;&#22788;&#29702;&#65292;&#38500;&#38750;&#24744;&#26377;&#29305;&#21035;&#30340;&#21407;&#22240;&#19981;&#36825;&#20040;&#20570;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.stringformatting">3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</a><div class="note"><blockquote><b class="title"><a name="compare.stringformatting.c">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application"><acronym class="acronym">C</acronym></span>: &#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#20351;&#29992;&#19982; <span class="application"><acronym class="acronym">C</acronym></span> &#20013; <code class="function">sprintf</code> &#20989;&#25968;&#19968;&#26679;&#30340;&#35821;&#27861;&#12290;</blockquote></div><p></p></li><li><a href="../#odbchelper.join">3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;</a><div class="caution"><blockquote><b class="title"><a name="tip.join">&#23567;&#24515;: &#19981;&#33021; <code class="function">join</code> &#38750;&#23383;&#31526;&#20018;</a></b><br><code class="function">join</code> &#21482;&#33021;&#29992;&#20110;&#20803;&#32032;&#26159;&#23383;&#31526;&#20018;&#30340; list&#65307;&#23427;&#19981;&#36827;&#34892;&#20219;&#20309;&#30340;&#24378;&#21046;&#31867;&#22411;&#36716;&#25442;&#12290;&#36830;&#25509;&#19968;&#20010;&#23384;&#22312;&#19968;&#20010;&#25110;&#22810;&#20010;&#38750;&#23383;&#31526;&#20018;&#20803;&#32032;&#30340; list
 &#23558;&#24341;&#21457;&#19968;&#20010;&#24322;&#24120;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="tip.split">&#25552;&#31034;: &#29992; <code class="function">split</code> &#25628;&#32034;</a></b><br><code class="literal"><em class="replaceable">anystring</em>.<code class="function">split</code>(<em class="replaceable">delimiter</em>, 1)</code> &#26159;&#19968;&#20010;&#26377;&#29992;&#30340;&#25216;&#26415;&#65292;&#22312;&#24744;&#24819;&#35201;&#25628;&#32034;&#19968;&#20010;&#23376;&#20018;&#65292;&#28982;&#21518;&#20998;&#21035;&#22788;&#29702;&#23383;&#31526;&#21069;&#21322;&#37096;&#20998; (&#21363; list &#20013;&#31532;&#19968;&#20010;&#20803;&#32032;) &#21644;&#21518;&#21322;&#37096;&#20998; (&#21363; list &#20013;&#31532;&#20108;&#20010;&#20803;&#32032;) &#26102;&#65292;&#20351;&#29992;&#36825;&#20010;&#25216;&#26415;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#apihelper">&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;</a></p><ul><li><a href="../#apihelper.optional">4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;</a><div class="note"><blockquote><b class="title"><a name="tip.arguments">&#27880;&#24847;: &#28789;&#27963;&#30340;&#20989;&#25968;&#35843;&#29992;</a></b><br>&#35843;&#29992;&#20989;&#25968;&#26102;&#21807;&#19968;&#24517;&#39035;&#20570;&#30340;&#20107;&#24773;&#23601;&#26159;&#20026;&#27599;&#19968;&#20010;&#24517;&#22791;&#21442;&#25968;&#25351;&#23450;&#20540; (&#20197;&#26576;&#31181;&#26041;&#24335;)&#65307;&#20197;&#20309;&#31181;&#20855;&#20307;&#30340;&#26041;&#24335;&#21644;&#39034;&#24207;&#37117;&#21462;&#20915;&#20110;&#20320;&#12290;</blockquote></div><p></p></li><li><a href="../#d0e9105">4.3.3.&nbsp;&#20869;&#32622;&#20989;&#25968;</a><div class="note"><blockquote><b class="title"><a name="tip.manuals">&#27880;&#24847;: <span class="application">Python</span> &#26159;&#33258;&#25991;&#26723;&#21270;&#30340;</a></b><br><span class="application">Python</span> &#25552;&#20379;&#20102;&#24456;&#22810;&#20986;&#33394;&#30340;&#21442;&#32771;&#25163;&#20876;&#65292;&#20320;&#24212;&#35813;&#22909;&#22909;&#22320;&#31934;&#35835;&#19968;&#19979;&#25152;&#26377; <span class="application">Python</span> &#25552;&#20379;&#30340;&#24517;&#22791;&#27169;&#22359;&#12290;&#23545;&#20110;&#20854;&#23427;&#22823;&#37096;&#20998;&#35821;&#35328;&#65292;&#20320;&#20250;&#21457;&#29616;&#33258;&#24049;&#35201;&#24120;&#24120;&#22238;&#22836;&#21442;&#32771;&#25163;&#20876;&#25110;&#32773; man &#39029;&#26469;&#25552;&#37266;&#33258;&#24049;&#22914;&#20309;&#20351;&#29992;&#36825;&#20123;&#27169;&#22359;&#65292;&#20294;&#26159; <span class="application">Python</span> &#19981;&#21516;&#20110;&#27492;&#65292;&#23427;&#24456;&#22823;&#31243;&#24230;&#19978;&#26159;&#33258;&#25991;&#26723;&#21270;&#30340;&#12290;</blockquote></div><p></p></li><li><a href="../#apihelper.lambda">4.7.&nbsp;&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;</a><div class="note"><blockquote><b class="title"><a name="tip.lambda">&#27880;&#24847;: <code class="literal">lambda</code> &#26159;&#21487;&#36873;&#30340;</a></b><br><code class="literal">lambda</code> &#20989;&#25968;&#26159;&#19968;&#31181;&#39118;&#26684;&#38382;&#39064;&#12290;&#19981;&#19968;&#23450;&#38750;&#35201;&#20351;&#29992;&#23427;&#20204;&#65307;&#20219;&#20309;&#33021;&#22815;&#20351;&#29992;&#23427;&#20204;&#30340;&#22320;&#26041;&#65292;&#37117;&#21487;&#20197;&#23450;&#20041;&#19968;&#20010;&#21333;&#29420;&#30340;&#26222;&#36890;&#20989;&#25968;&#26469;&#36827;&#34892;&#26367;&#25442;&#12290;&#25105;&#23558;&#23427;&#20204;&#29992;&#22312;&#38656;&#35201;&#23553;&#35013;&#29305;&#27530;&#30340;&#12289;&#38750;&#37325;&#29992;&#20195;&#30721;&#19978;&#65292;&#36991;&#20813;&#20196;&#25105;&#30340;&#20195;&#30721;&#20805;&#26021;&#30528;&#22823;&#37327;&#21333;&#34892;&#20989;&#25968;&#12290;</blockquote></div><p></p></li><li><a href="../#apihelper.alltogether">4.8.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><div class="note"><blockquote><b class="title"><a name="compare.isnull.sql">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <acronym class="acronym">SQL</acronym>&#65306;&#30340; null &#20540;&#27604;&#36739;</a></b><br>&#22312; <acronym class="acronym">SQL</acronym> &#20013;&#65292;&#20320;&#24517;&#39035;&#20351;&#29992; <code class="literal">IS NULL</code> &#20195;&#26367; <code class="literal">= NULL</code> &#36827;&#34892; null &#20540;&#27604;&#36739;&#12290;&#22312; <span class="application">Python</span>&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; <code class="literal">== None</code> &#25110;&#32773; <code class="literal">is None</code> &#36827;&#34892;&#27604;&#36739;&#65292;&#20294;&#26159; <code class="literal">is None</code> &#26356;&#24555;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#fileinfo">&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</a></p><ul><li><a href="../#fileinfo.fromimport">5.2.&nbsp;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;</a><div class="note"><blockquote><b class="title"><a name="compare.fromimport.perl">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Perl</span>: <code class="literal">from <em class="replaceable">module</em> import</code></a></b><br><span class="application">Python</span> &#20013;&#30340; <code class="literal">from <em class="replaceable">module</em> import *</code> &#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">use <em class="replaceable">module</em></code> &#65307;<span class="application">Python</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em></code> &#20687; <span class="application">Perl</span> &#20013;&#30340; <code class="literal">require <em class="replaceable">module</em></code> &#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.fromimport.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: <code class="literal">from <em class="replaceable">module</em> import</code></a></b><br><span class="application">Python</span> &#20013;&#30340; <code class="literal">from <em class="replaceable">module</em> import *</code> &#20687; <span class="application">Java</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em>.*</code> &#65307;<span class="application">Python</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em></code> &#20687; <span class="application">Java</span> &#20013;&#30340; <code class="literal">import <em class="replaceable">module</em></code> &#12290;</blockquote></div><div class="caution"><blockquote><b class="title"><a name="d0e11641">&#23567;&#24515;: </a></b><br>&#23613;&#37327;&#23569;&#29992; <code class="literal">from module import *</code> &#65292;&#22240;&#20026;&#21028;&#23450;&#19968;&#20010;&#29305;&#27530;&#30340;&#20989;&#25968;&#25110;&#23646;&#24615;&#26159;&#20174;&#21738;&#26469;&#30340;&#26377;&#20123;&#22256;&#38590;&#65292;&#24182;&#19988;&#20250;&#36896;&#25104;&#35843;&#35797;&#21644;&#37325;&#26500;&#37117;&#26356;&#22256;&#38590;&#12290;</blockquote></div><p></p></li><li><a href="../#fileinfo.class">5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;</a><div class="note"><blockquote><b class="title"><a name="compare.pass.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: <code class="literal">pass</code></a></b><br>&#22312; <span class="application">Python</span> &#20013;&#30340; <code class="literal">pass</code> &#35821;&#21477;&#23601;&#20687; <span class="application">Java</span> &#25110; <span class="application"><acronym class="acronym">C</acronym></span> &#20013;&#30340;&#22823;&#25324;&#21495;&#31354;&#38598; (<code class="literal">{}</code>)&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.extends.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: Ancestors</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#31867;&#30340;&#22522;&#31867;&#21482;&#26159;&#31616;&#21333;&#22320;&#21015;&#22312;&#31867;&#21517;&#21518;&#38754;&#30340;&#23567;&#25324;&#21495;&#37324;&#12290;&#19981;&#20687;&#22312; <span class="application">Java</span> &#20013;&#26377;&#19968;&#20010;&#29305;&#27530;&#30340; <code class="literal">extends</code> &#20851;&#38190;&#23383;&#12290;</blockquote></div><p></p></li><li><a href="../#d0e11869">5.3.1.&nbsp;&#21021;&#22987;&#21270;&#24182;&#24320;&#22987;&#31867;&#32534;&#30721;</a><div class="note"><blockquote><b class="title"><a name="compare.self.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: <code class="literal">self</code></a></b><br>&#20064;&#24815;&#19978;&#65292;&#20219;&#20309; <span class="application">Python</span> &#31867;&#26041;&#27861;&#30340;&#31532;&#19968;&#20010;&#21442;&#25968; (&#23545;&#24403;&#21069;&#23454;&#20363;&#30340;&#24341;&#29992;) &#37117;&#21483;&#20570; <code class="literal">self</code>&#12290;&#36825;&#20010;&#21442;&#25968;&#25198;&#28436;&#30528; <span class="application"><acronym class="acronym">C++</acronym></span> &#25110; <span class="application">Java</span> &#20013;&#30340;&#20445;&#30041;&#23383; <code class="literal">this</code> &#30340;&#35282;&#33394;&#65292;&#20294; <code class="literal">self</code> &#22312; <span class="application">Python</span> &#20013;&#24182;&#19981;&#26159;&#19968;&#20010;&#20445;&#30041;&#23383;&#65292;&#23427;&#21482;&#26159;&#19968;&#20010;&#21629;&#21517;&#20064;&#24815;&#12290;&#34429;&#28982;&#22914;&#27492;&#65292;&#20063;&#35831;&#38500;&#20102; <code class="literal">self</code> &#20043;&#22806;&#19981;&#35201;&#20351;&#29992;&#20854;&#23427;&#30340;&#21517;&#23383;&#65292;&#36825;&#26159;&#19968;&#20010;&#38750;&#24120;&#22362;&#22266;&#30340;&#20064;&#24815;&#12290;</blockquote></div><p></p></li><li><a href="../#d0e12045">5.3.2.&nbsp;&#20102;&#35299;&#20309;&#26102;&#21435;&#20351;&#29992; <code class="literal">self</code> &#21644; <code class="function">__init__</code></a><div class="note"><blockquote><b class="title"><a name="tip.initoptional">&#27880;&#24847;: <code class="function">__init__</code> &#26041;&#27861;</a></b><br><code class="function">__init__</code> &#26041;&#27861;&#26159;&#21487;&#36873;&#30340;&#65292;&#20294;&#26159;&#19968;&#26086;&#20320;&#23450;&#20041;&#20102;&#65292;&#23601;&#24517;&#39035;&#35760;&#24471;&#26174;&#31034;&#35843;&#29992;&#29238;&#31867;&#30340; <code class="function">__init__</code> &#26041;&#27861; (&#22914;&#26524;&#23427;&#23450;&#20041;&#20102;&#30340;&#35805;)&#12290;&#36825;&#26679;&#26356;&#26159;&#27491;&#30830;&#30340;&#65306;&#26080;&#35770;&#20309;&#26102;&#23376;&#31867;&#24819;&#25193;&#23637;&#29238;&#31867;&#30340;&#34892;&#20026;&#65292;&#21518;&#20195;&#26041;&#27861;&#24517;&#39035;&#22312;&#36866;&#24403;&#30340;&#26102;&#26426;&#65292;&#20351;&#29992;&#36866;&#24403;&#30340;&#21442;&#25968;&#65292;&#26174;&#24335;&#35843;&#29992;&#29238;&#31867;&#26041;&#27861;&#12290;</blockquote></div><p></p></li><li><a href="../#fileinfo.create">5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;</a><div class="note"><blockquote><b class="title"><a name="compare.new.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: &#31867;&#30340;&#23454;&#20363;&#21270;</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#21019;&#24314;&#31867;&#30340;&#23454;&#20363;&#21482;&#35201;&#35843;&#29992;&#19968;&#20010;&#31867;&#65292;&#20223;&#20315;&#23427;&#26159;&#19968;&#20010;&#20989;&#25968;&#23601;&#34892;&#20102;&#12290;&#19981;&#20687; <span class="application"><acronym class="acronym">C++</acronym></span> &#25110; <span class="application">Java</span> &#26377;&#19968;&#20010;&#26126;&#30830;&#30340; <code class="literal">new</code> &#25805;&#20316;&#31526;&#12290;</blockquote></div><p></p></li><li><a href="../#fileinfo.userdict">5.5.&nbsp;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;</a><div class="tip"><blockquote><b class="title"><a name="tip.locate">&#25552;&#31034;: </a></b><br>&#22312; Windows &#19979;&#30340; <span class="application">ActivePython</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#20320;&#21487;&#20197;&#24555;&#36895;&#25171;&#24320;&#22312;&#20320;&#30340;&#24211;&#36335;&#24452;&#20013;&#30340;&#20219;&#20309;&#27169;&#22359;&#65292;&#20351;&#29992;
<span class="guimenu">File</span> &#8594; <span class="guimenuitem"><span class="accel">L</span>ocate...</span> (<span class="shortcut"><strong><span class="keycap"><strong>Ctrl</strong></span>+<span class="keysym">L</span></strong></span>)&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="compare.overloading">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span>: Function Overloading</a></b><br><span class="application">Java</span> &#21644; <span class="application">Powerbuilder</span> &#25903;&#25345;&#36890;&#36807;&#21442;&#25968;&#21015;&#34920;&#30340;&#37325;&#36733;&#65292;<span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">&#20063;&#23601;&#26159;</acronym></em></span> &#19968;&#20010;&#31867;&#21487;&#20197;&#26377;&#21516;&#21517;&#30340;&#22810;&#20010;&#26041;&#27861;&#65292;&#20294;&#36825;&#20123;&#26041;&#27861;&#25110;&#32773;&#26159;&#21442;&#25968;&#20010;&#25968;&#19981;&#21516;&#65292;&#25110;&#32773;&#26159;&#21442;&#25968;&#30340;&#31867;&#22411;&#19981;&#21516;&#12290;&#20854;&#23427;&#35821;&#35328; (&#26368;&#26126;&#26174;&#22914; <acronym class="acronym">PL/SQL</acronym>) &#29978;&#33267;&#25903;&#25345;&#36890;&#36807;&#21442;&#25968;&#21517;&#30340;&#37325;&#36733;&#65292;<span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">&#20063;&#23601;&#26159;</acronym></em></span> &#19968;&#20010;&#31867;&#21487;&#20197;&#26377;&#21516;&#21517;&#30340;&#22810;&#20010;&#26041;&#27861;&#65292;&#36825;&#20123;&#26041;&#27861;&#26377;&#30456;&#21516;&#31867;&#22411;&#65292;&#30456;&#21516;&#20010;&#25968;&#30340;&#21442;&#25968;&#65292;&#20294;&#21442;&#25968;&#21517;&#19981;&#21516;&#12290;<span class="application">Python</span> &#20004;&#31181;&#37117;&#19981;&#25903;&#25345;&#65292;&#24635;&#20043;&#26159;&#27809;&#26377;&#20219;&#20309;&#24418;&#24335;&#30340;&#20989;&#25968;&#37325;&#36733;&#12290;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#23601;&#26159;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#19981;&#31649;&#23427;&#26377;&#20160;&#20040;&#26679;&#30340;&#21442;&#25968;&#12290;&#27599;&#20010;&#31867;&#21482;&#33021;&#26377;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#24182;&#19988;&#22914;&#26524;&#19968;&#20010;&#23376;&#31867;&#25317;&#26377;&#19968;&#20010; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#23427;<span class="emphasis"><em>&#24635;&#26159;</em></span> &#35206;&#30422;&#29238;&#31867;&#30340; <code class="function">__init__</code> &#26041;&#27861;&#65292;&#29978;&#33267;&#23376;&#31867;&#21487;&#20197;&#29992;&#19981;&#21516;&#30340;&#21442;&#25968;&#21015;&#34920;&#26469;&#23450;&#20041;&#23427;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="fileinfo.derivedclasses">&#27880;&#24847;: </a></b><br><span class="application">Python</span> &#30340;&#21407;&#20316;&#32773; Guido &#26159;&#36825;&#26679;&#35299;&#37322;&#26041;&#27861;&#35206;&#30422;&#30340;&#65306;&#8220;&#23376;&#31867;&#21487;&#20197;&#35206;&#30422;&#29238;&#31867;&#20013;&#30340;&#26041;&#27861;&#12290;&#22240;&#20026;&#26041;&#27861;&#27809;&#26377;&#29305;&#27530;&#30340;&#20248;&#20808;&#32423;&#35774;&#32622;&#65292;&#29238;&#31867;&#20013;&#30340;&#19968;&#20010;&#26041;&#27861;&#22312;&#35843;&#29992;&#21516;&#31867;&#20013;&#30340;&#21478;&#19968;&#26041;&#27861;&#26102;&#65292;&#21487;&#33021;&#20854;&#23454;&#35843;&#29992;&#21040;&#30340;&#21364;&#26159;&#19968;&#20010;&#23376;&#31867;&#20013;&#35206;&#30422;&#29238;&#31867;&#21516;&#21517;&#26041;&#27861;&#30340;&#26041;&#27861;&#12290; (<span class="application"><acronym class="acronym">C++</acronym></span> &#31243;&#24207;&#21592;&#21487;&#33021;&#20250;&#36825;&#26679;&#24819;&#65306;&#25152;&#26377;&#30340; <span class="application">Python</span> &#26041;&#27861;&#37117;&#26159;&#34394;&#20989;&#25968;&#12290;)&#8221;&#22914;&#26524;&#20320;&#19981;&#26126;&#30333; (&#23427;&#20196;&#25105;&#39047;&#24863;&#22256;&#24785;)&#65292;&#19981;&#24517;&#22312;&#24847;&#12290;&#25105;&#24819;&#25105;&#35201;&#36339;&#36807;&#23427;&#12290;<sup>[<a name="d0e12706" href="#ftn.d0e12706" class="footnote">3</a>]</sup></blockquote></div><div class="caution"><blockquote><b class="title"><a name="note.dataattributes">&#23567;&#24515;: </a></b><br>&#24212;&#35813;&#24635;&#26159;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#32473;&#19968;&#20010;&#23454;&#20363;&#30340;&#25152;&#26377;&#25968;&#25454;&#23646;&#24615;&#36171;&#20104;&#19968;&#20010;&#21021;&#22987;&#20540;&#12290;&#36825;&#26679;&#20570;&#23558;&#20250;&#33410;&#30465;&#20320;&#22312;&#21518;&#38754;&#35843;&#35797;&#30340;&#26102;&#38388;&#65292;&#19981;&#24517;&#20026;&#25429;&#25417;&#22240;&#20351;&#29992;&#26410;&#21021;&#22987;&#21270; (&#20063;&#23601;&#26159;&#19981;&#23384;&#22312;) &#30340;&#23646;&#24615;&#32780;&#23548;&#33268;&#30340; <code class="classname">AttributeError</code> &#24322;&#24120;&#36153;&#26102;&#36153;&#21147;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="d0e12891">&#27880;&#24847;: &#21490;&#26009;&#35760;&#36733;</a></b><br>&#22312; <span class="application">Python</span> 2.2 &#20043;&#21069;&#30340;&#29256;&#26412;&#20013;&#65292;&#20320;&#19981;&#21487;&#20197;&#30452;&#25509;&#23376;&#31867;&#21270;&#23383;&#31526;&#20018;&#12289;&#21015;&#34920;&#20197;&#21450;&#23383;&#20856;&#20043;&#31867;&#30340;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411;&#12290;&#20316;&#20026;&#34917;&#20607;&#65292;<span class="application">Python</span> &#25552;&#20379;&#23553;&#35013;&#31867;&#26469;&#27169;&#25311;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411;&#30340;&#34892;&#20026;&#65292;&#27604;&#22914;&#65306;<code class="classname">UserString</code>&#12289;<code class="classname">UserList</code> &#21644; <code class="classname">UserDict</code>&#12290;&#36890;&#36807;&#28151;&#21512;&#20351;&#29992;&#26222;&#36890;&#21644;&#29305;&#27530;&#26041;&#27861;&#65292;<code class="classname">UserDict</code> &#31867;&#33021;&#21313;&#20998;&#20986;&#33394;&#22320;&#27169;&#20223;&#23383;&#20856;&#12290;&#22312; <span class="application">Python</span> 2.2 &#21644;&#20854;&#21518;&#30340;&#29256;&#26412;&#20013;&#65292;&#20320;&#21487;&#20197;&#30452;&#25509;&#20174; <code class="classname">dict</code> &#20869;&#24314;&#25968;&#25454;&#31867;&#22411;&#32487;&#25215;&#12290;&#26412;&#20070; <code class="filename">fileinfo_fromdict.py</code> &#20013;&#26377;&#36825;&#26041;&#38754;&#30340;&#19968;&#20010;&#20363;&#23376;&#12290;</blockquote></div><p></p></li><li><a href="../#d0e13019">5.6.1.&nbsp;&#33719;&#24471;&#21644;&#35774;&#32622;&#25968;&#25454;&#39033;</a><div class="note"><blockquote><b class="title"><a name="tip.self.call">&#27880;&#24847;: </a></b><br>&#24403;&#22312;&#19968;&#20010;&#31867;&#20013;&#23384;&#21462;&#25968;&#25454;&#23646;&#24615;&#26102;&#65292;&#20320;&#38656;&#35201;&#38480;&#23450;&#23646;&#24615;&#21517;&#65306;<code class="literal">self.<em class="replaceable">attribute</em></code>&#12290;&#24403;&#35843;&#29992;&#31867;&#20013;&#30340;&#20854;&#23427;&#26041;&#27861;&#26102;&#65292;&#20320;&#23646;&#35201;&#38480;&#23450;&#26041;&#27861;&#21517;&#65306;<code class="literal">self.<em class="replaceable">method</em></code>&#12290;</blockquote></div><p></p></li><li><a href="../#fileinfo.morespecial">5.7.&nbsp;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;</a><div class="note"><blockquote><b class="title"><a name="compare.strequals.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span> equality and identity</a></b><br>&#22312; <span class="application">Java</span> &#20013;&#65292;&#36890;&#36807;&#20351;&#29992; <code class="literal">str1 == str2</code> &#21487;&#20197;&#30830;&#23450;&#20004;&#20010;&#23383;&#31526;&#20018;&#21464;&#37327;&#26159;&#21542;&#25351;&#21521;&#21516;&#19968;&#22359;&#29289;&#29702;&#20869;&#23384;&#20301;&#32622;&#12290;&#36825;&#21483;&#20570;<span class="emphasis"><em>&#23545;&#35937;&#21516;&#19968;&#24615;</em></span>&#65292;&#22312; <span class="application">Python</span> &#20013;&#20889;&#20026; <code class="literal">str1 is str2</code>&#12290;&#22312; <span class="application">Java</span> &#20013;&#35201;&#27604;&#36739;&#20004;&#20010;&#23383;&#31526;&#20018;&#20540;&#65292;&#20320;&#35201;&#20351;&#29992; <code class="literal">str1.equals(str2)</code>&#65307;&#22312; <span class="application">Python</span> &#20013;&#65292;&#20320;&#35201;&#20351;&#29992; <code class="literal">str1 == str2</code>&#12290;&#26576;&#20123; <span class="application">Java</span> &#31243;&#24207;&#21592;&#65292;&#20182;&#20204;&#24050;&#32463;&#34987;&#25945;&#25480;&#24471;&#35748;&#20026;&#65292;&#27491;&#26159;&#22240;&#20026;&#22312; <span class="application">Java</span> &#20013; <code class="literal">==</code> &#26159;&#36890;&#36807;&#21516;&#19968;&#24615;&#32780;&#19981;&#26159;&#20540;&#36827;&#34892;&#27604;&#36739;&#65292;&#25152;&#20197;&#19990;&#30028;&#25165;&#20250;&#26356;&#32654;&#22909;&#12290;&#36825;&#20123;&#20154;&#35201;&#25509;&#21463; <span class="application">Python</span> &#30340;&#36825;&#20010;&#8220;&#20005;&#37325;&#32570;&#22833;&#8221;&#21487;&#33021;&#35201;&#33457;&#20123;&#26102;&#38388;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="note.physical.v.logical">&#27880;&#24847;: </a></b><br>&#20854;&#23427;&#30340;&#38754;&#21521;&#23545;&#35937;&#35821;&#35328;&#20165;&#35753;&#20320;&#23450;&#20041;&#19968;&#20010;&#23545;&#35937;&#30340;&#29289;&#29702;&#27169;&#22411; ("<span class="quote">&#36825;&#20010;&#23545;&#35937;&#26377; <code class="function">GetLength</code> &#26041;&#27861;</span>")&#65292;&#32780; <span class="application">Python</span> &#30340;&#19987;&#29992;&#31867;&#26041;&#27861;&#20687; <code class="function">__len__</code> &#20801;&#35768;&#20320;&#23450;&#20041;&#19968;&#20010;&#23545;&#35937;&#30340;&#36923;&#36753;&#27169;&#22411; ("<span class="quote">&#36825;&#20010;&#23545;&#35937;&#26377;&#19968;&#20010;&#38271;&#24230;</span>")&#12290;
</blockquote></div><p></p></li><li><a href="../#fileinfo.classattributes">5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;</a><div class="note"><blockquote><b class="title"><a name="compare.classattr.java">&#27880;&#24847;: <span class="application">Python</span> vs. <span class="application">Java</span> attribute definitions</a></b><br>&#22312; <span class="application">Java</span> &#20013;&#65292;&#38745;&#24577;&#21464;&#37327; (&#22312; <span class="application">Python</span> &#20013;&#21483;&#31867;&#23646;&#24615;) &#21644;&#23454;&#20363;&#21464;&#37327; (&#22312; <span class="application">Python</span> &#20013;&#21483;&#25968;&#25454;&#23646;&#24615;) &#20004;&#32773;&#37117;&#26159;&#32039;&#36319;&#22312;&#31867;&#23450;&#20041;&#20043;&#21518;&#23450;&#20041;&#30340; (&#19968;&#20010;&#26377; <code class="literal">static</code> &#20851;&#38190;&#23383;&#65292;&#19968;&#20010;&#27809;&#26377;)&#12290;&#22312; <span class="application">Python</span> &#20013;&#65292;&#21482;&#26377;&#31867;&#23646;&#24615;&#21487;&#20197;&#23450;&#20041;&#22312;&#36825;&#37324;&#65292;&#25968;&#25454;&#23646;&#24615;&#23450;&#20041;&#22312; <code class="function">__init__</code> &#26041;&#27861;&#20013;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="d0e13909">&#27880;&#24847;: </a></b><br>&#22312; <span class="application">Python</span> &#20013;&#27809;&#26377;&#24120;&#37327;&#12290;&#22914;&#26524;&#20320;&#35797;&#22270;&#21162;&#21147;&#30340;&#35805;&#20160;&#20040;&#37117;&#21487;&#20197;&#25913;&#21464;&#12290;&#36825;&#19968;&#28857;&#28385;&#36275; <span class="application">Python</span> &#30340;&#26680;&#24515;&#21407;&#21017;&#20043;&#19968;&#65306;&#22351;&#30340;&#34892;&#20026;&#24212;&#35813;&#34987;&#20811;&#26381;&#32780;&#19981;&#26159;&#34987;&#21462;&#32532;&#12290;&#22914;&#26524;&#20320;&#30495;&#27491;&#24819;&#25913;&#21464; <code class="literal">None</code> &#30340;&#20540;&#65292;&#20063;&#21487;&#20197;&#20570;&#21040;&#65292;&#20294;&#24403;&#26080;&#27861;&#35843;&#35797;&#30340;&#26102;&#20505;&#21035;&#26469;&#25214;&#25105;&#12290;</blockquote></div><p></p></li><li><a href="../#fileinfo.private">5.9.&nbsp;&#31169;&#26377;&#20989;&#25968;</a><div class="note"><blockquote><b class="title"><a name="tip.specialmethodnames">&#27880;&#24847;: Method Naming Conventions</a></b><br>&#22312; <span class="application">Python</span> &#20013;&#65292;&#25152;&#26377;&#30340;&#19987;&#29992;&#26041;&#27861; (&#20687; <a class="link" href="#fileinfo.specialmethods.setitem.example" title="&#20363;&nbsp;5.13.&nbsp;__setitem__ &#19987;&#29992;&#26041;&#27861;"><code class="function">__setitem__</code></a>) &#21644;&#20869;&#32622;&#23646;&#24615; (&#20687; <a class="link" href="#odbchelper.import" title="&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; buildConnectionString &#20989;&#25968;&#30340; doc string"><code class="literal">__doc__</code></a>) &#36981;&#23432;&#19968;&#20010;&#26631;&#20934;&#30340;&#21629;&#21517;&#20064;&#24815;&#65306;&#24320;&#22987;&#21644;&#32467;&#26463;&#37117;&#26377;&#20004;&#20010;&#19979;&#21010;&#32447;&#12290;&#19981;&#35201;&#23545;&#20320;&#33258;&#24050;&#30340;&#26041;&#27861;&#21644;&#23646;&#24615;&#29992;&#36825;&#31181;&#26041;&#27861;&#21629;&#21517;&#65307;&#21040;&#26368;&#21518;&#65292;&#23427;&#21482;&#20250;&#25226;&#20320; (&#25110;&#20854;&#23427;&#20154;) &#25630;&#20081;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#filehandling">&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;</a></p><ul><li><a href="../#fileinfo.exception">6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;</a><div class="note"><blockquote><b class="title"><a name="compare.exceptions.java">&#27880;&#24847;: <span class="application">Python</span> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <span class="application">Java</span> &#30340;&#24322;&#24120;&#22788;&#29702;</a></b><br><span class="application">Python</span> &#20351;&#29992; <code class="literal">try...except</code> &#26469;&#22788;&#29702;&#24322;&#24120;&#65292;&#20351;&#29992; <code class="literal">raise</code> &#26469;&#24341;&#21457;&#24322;&#24120;&#12290;<span class="application">Java</span> &#21644; <span class="application"><acronym class="acronym">C++</acronym></span> &#20351;&#29992; <code class="literal">try...catch</code> &#26469;&#22788;&#29702;&#24322;&#24120;&#65292;&#20351;&#29992; <code class="literal">throw</code> &#26469;&#24341;&#21457;&#24322;&#24120;&#12290;</blockquote></div><p></p></li><li><a href="../#fileinfo.os">6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;</a><div class="note"><blockquote><b class="title"><a name="tip.os">&#27880;&#24847;: </a></b><br>&#21482;&#35201;&#26377;&#21487;&#33021;&#65292;&#20320;&#23601;&#24212;&#35813;&#20351;&#29992;&#22312; <code class="filename">os</code> &#21644; <code class="filename">os.path</code> &#20013;&#30340;&#20989;&#25968;&#36827;&#34892;&#25991;&#20214;&#12289;&#30446;&#24405;&#21644;&#36335;&#24452;&#30340;&#25805;&#20316;&#12290;&#36825;&#20123;&#27169;&#22359;&#26159;&#23545;&#24179;&#21488;&#30456;&#20851;&#27169;&#22359;&#30340;&#23553;&#35013;&#27169;&#22359;&#65292;&#25152;&#20197;&#20687; <code class="function">os.path.split</code> &#36825;&#26679;&#30340;&#20989;&#25968;&#21487;&#20197;&#24037;&#20316;&#22312; <acronym class="acronym">UNIX</acronym>&#12289;Windows&#12289;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#21644; <span class="application">Python</span> &#25152;&#25903;&#25345;&#30340;&#20219;&#19968;&#31181;&#24179;&#21488;&#19978;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#re">&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;</a></p><ul><li><a href="../#re.nm">7.4.&nbsp;&#20351;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;</a><div class="note"><blockquote><b class="title"><a name="d0e18494">&#27880;&#24847;: </a></b><br>&#27809;&#26377;&#19968;&#20010;&#36731;&#26494;&#30340;&#26041;&#27861;&#26469;&#30830;&#23450;&#20004;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#26159;&#21542;&#31561;&#20215;&#12290;&#20320;&#33021;&#37319;&#29992;&#30340;&#26368;&#22909;&#30340;&#21150;&#27861;&#23601;&#26159;&#21015;&#20986;&#24456;&#22810;&#30340;&#27979;&#35797;&#26679;&#20363;&#65292;&#30830;&#23450;&#36825;&#20004;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#23545;&#25152;&#26377;&#30340;&#30456;&#20851;&#36755;&#20837;&#37117;&#26377;&#30456;&#21516;&#30340;&#36755;&#20986;&#12290;&#22312;&#26412;&#20070;&#21518;&#38754;&#30340;&#31456;&#33410;&#65292;&#23558;&#26356;&#22810;&#22320;&#35752;&#35770;&#22914;&#20309;&#32534;&#20889;&#27979;&#35797;&#26679;&#20363;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#dialect">&#31532;&nbsp;8&nbsp;&#31456;&nbsp;<acronym class="acronym">HTML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#dialect.sgmllib">8.2.&nbsp;<code class="filename">sgmllib.py</code> &#20171;&#32461;</a><div class="important"><blockquote><b class="title"><a name="d0e20196">&#37325;&#35201;: &#35821;&#35328;&#28436;&#21464;&#65306;<code class="sgmltag-element">DOCTYPE</code></a></b><br><span class="application">Python</span> 2.0 &#23384;&#22312;&#19968;&#20010; bug&#65292;&#21363; <code class="classname">SGMLParser</code> &#23436;&#20840;&#19981;&#33021;&#35782;&#21035;&#22768;&#26126; (<code class="function">handle_decl</code> &#27704;&#36828;&#19981;&#20250;&#35843;&#29992;)&#65292;&#36825;&#23601;&#24847;&#21619;&#30528; <code class="sgmltag-element">DOCTYPE</code> &#34987;&#38745;&#38745;&#22320;&#24573;&#30053;&#25481;&#20102;&#12290;&#36825;&#20010;&#38169;&#35823;&#22312; <span class="application">Python</span> 2.1 &#20013;&#25913;&#27491;&#20102;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="tip.commandline.windows">&#25552;&#31034;: &#22312; Windows &#19979;&#25351;&#23450;&#21629;&#20196;&#34892;&#21442;&#25968;</a></b><br>&#22312; Windows &#19979;&#30340; <span class="application">ActivePython</span> <acronym class="acronym">IDE</acronym> &#20013;&#65292;&#24744;&#21487;&#20197;&#22312; "<span class="quote">Run script</span>" &#23545;&#35805;&#26694;&#20013;&#25351;&#23450;&#21629;&#20196;&#34892;&#21442;&#25968;&#12290;&#29992;&#31354;&#26684;&#23558;&#22810;&#20010;&#21442;&#25968;&#20998;&#24320;&#12290;</blockquote></div><p></p></li><li><a href="../#dialect.basehtml">8.4.&nbsp;<code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;</a><div class="important"><blockquote><b class="title"><a name="d0e21013">&#37325;&#35201;: &#21253;&#21547;&#26893;&#20837;&#33050;&#26412;&#30340; <acronym class="acronym">HTML</acronym> &#22788;&#29702;</a></b><br><acronym class="acronym">HTML</acronym> &#35268;&#33539;&#35201;&#27714;&#25152;&#26377;&#38750; <acronym class="acronym">HTML</acronym> (&#20687;&#23458;&#25143;&#31471;&#30340; <span class="application">JavaScript</span>) &#24517;&#39035;&#21253;&#25324;&#22312; <acronym class="acronym">HTML</acronym> &#27880;&#37322;&#20013;&#65292;&#20294;&#19981;&#26159;&#25152;&#26377;&#30340;&#39029;&#38754;&#37117;&#26159;&#36825;&#20040;&#20570;&#30340; (&#32780;&#19988;&#25152;&#26377;&#30340;&#26368;&#26032;&#30340;&#27983;&#35272;&#22120;&#20063;&#37117;&#23481;&#35768;&#19981;&#36825;&#26679;&#20570;) &#12290;<code class="classname">BaseHTMLProcessor</code> &#19981;&#20801;&#35768;&#36825;&#26679;&#65292;&#22914;&#26524;&#33050;&#26412;&#23884;&#20837;&#24471;&#19981;&#27491;&#30830;&#65292;&#23427;&#23558;&#34987;&#24403;&#20316; <acronym class="acronym">HTML</acronym> &#19968;&#26679;&#36827;&#34892;&#20998;&#26512;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#33050;&#26412;&#21253;&#21547;&#20102;&#23567;&#20110;&#21644;&#31561;&#20110;&#21495;&#65292;<code class="classname">SGMLParser</code> &#21487;&#33021;&#20250;&#38169;&#35823;&#22320;&#35748;&#20026;&#25214;&#21040;&#20102;&#26631;&#35760;&#21644;&#23646;&#24615;&#12290;<code class="classname">SGMLParser</code> &#24635;&#26159;&#25226;&#26631;&#35760;&#21517;&#21644;&#23646;&#24615;&#21517;&#36716;&#25442;&#25104;&#23567;&#20889;&#65292;&#36825;&#26679;&#21487;&#33021;&#30772;&#22351;&#20102;&#33050;&#26412;&#65292;&#24182;&#19988; <code class="classname">BaseHTMLProcessor</code> &#24635;&#26159;&#29992;&#21452;&#24341;&#21495;&#26469;&#23558;&#23646;&#24615;&#23553;&#38381;&#36215;&#26469; (&#23613;&#31649;&#21407;&#22987;&#30340; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#21487;&#33021;&#20351;&#29992;&#21333;&#24341;&#21495;&#25110;&#27809;&#26377;&#24341;&#21495;) &#65292;&#36825;&#26679;&#24517;&#28982;&#20250;&#30772;&#22351;&#33050;&#26412;&#12290;&#24212;&#35813;&#24635;&#26159;&#23558;&#24744;&#30340;&#23458;&#25143;&#31471;&#33050;&#26412;&#25918;&#22312; <acronym class="acronym">HTML</acronym> &#27880;&#37322;&#20013;&#36827;&#34892;&#20445;&#25252;&#12290;</blockquote></div><p></p></li><li><a href="../#dialect.locals">8.5.&nbsp;<code class="function">locals</code> &#21644; <code class="function">globals</code></a><div class="important"><blockquote><b class="title"><a name="d0e21228">&#37325;&#35201;: &#35821;&#35328;&#28436;&#21464;&#65306;&#23884;&#22871;&#30340;&#20316;&#29992;&#22495;</a></b><br><span class="application">Python</span> 2.2 &#24341;&#20837;&#20102;&#19968;&#31181;&#30053;&#26377;&#19981;&#21516;&#20294;&#37325;&#35201;&#30340;&#25913;&#21464;&#65292;&#23427;&#20250;&#24433;&#21709;&#21517;&#23383;&#31354;&#38388;&#30340;&#25628;&#32034;&#39034;&#24207;&#65306;&#23884;&#22871;&#30340;&#20316;&#29992;&#22495;&#12290;

&#22312; <span class="application">Python</span> 2.2 &#29256;&#26412;&#20043;&#21069;&#65292;&#24403;&#24744;&#22312;&#19968;&#20010;<a class="link" href="#fileinfo.nested" title="&#20363;&nbsp;6.21.&nbsp;listDirectory">&#23884;&#22871;&#20989;&#25968;</a>&#25110; <a class="link" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;"><code class="literal">lambda</code> &#20989;&#25968;</a>&#20013;&#24341;&#29992;&#19968;&#20010;&#21464;&#37327;&#26102;&#65292;<span class="application">Python</span> &#20250;&#22312;&#24403;&#21069; (&#23884;&#22871;&#30340;&#25110; <code class="literal">lambda</code>) &#20989;&#25968;&#30340;&#21517;&#23383;&#31354;&#38388;&#20013;&#25628;&#32034;&#65292;&#28982;&#21518;&#22312;&#27169;&#22359;&#30340;&#21517;&#23383;&#31354;&#38388;&#12290;<span class="application">Python</span> 2.2 &#23558;&#21482;&#22312;&#24403;&#21069; (&#23884;&#22871;&#30340;&#25110; <code class="literal">lambda</code>) &#20989;&#25968;&#30340;&#21517;&#23383;&#31354;&#38388;&#20013;&#25628;&#32034;&#65292;<span class="emphasis"><em>&#28982;&#21518;&#26159;&#22312;&#29238;&#20989;&#25968;&#30340;&#21517;&#23383;&#31354;&#38388;</em></span> &#20013;&#25628;&#32034;&#65292;&#25509;&#30528;&#26159;&#27169;&#22359;&#30340;&#21517;&#23383;&#31354;&#38388;&#20013;&#25628;&#32034;&#12290;<span class="application">Python</span> 2.1 &#21487; &#20197;&#20004;&#31181;&#26041;&#24335;&#24037;&#20316;&#65292;&#32570;&#30465;&#22320;&#65292;&#25353; <span class="application">Python</span> 2.0 &#30340;&#26041;&#24335;&#24037;&#20316;&#12290;&#20294;&#26159;&#24744;&#21487;&#20197;&#25226;&#19979;&#38754;&#19968;&#34892;&#20195;&#30721;&#22686;&#21152;&#21040;&#24744;&#30340;&#27169;&#22359;&#22836;&#37096;&#65292;&#20351;&#24744;&#30340;&#27169;&#22359;&#24037;&#20316;&#36215;&#26469;&#20687; <span class="application">Python</span> 2.2 &#30340;&#26041;&#24335;&#65306;<pre class="programlisting">
from __future__ import nested_scopes</pre></blockquote></div><div class="note"><blockquote><b class="title"><a name="tip.localsbyname">&#27880;&#24847;: &#21464;&#37327;&#30340;&#21160;&#24577;&#35775;&#38382;</a></b><br>&#20351;&#29992; <code class="function">locals</code> &#21644; <code class="function">globals</code> &#20989;&#25968;&#65292;&#36890;&#36807;&#25552;&#20379;&#21464;&#37327;&#30340;&#23383;&#31526;&#20018;&#21517;&#23383;&#24744;&#21487;&#20197;&#21160;&#24577;&#22320;&#24471;&#21040;&#20219;&#20309;&#21464;&#37327;&#30340;&#20540;&#12290;&#36825;&#31181;&#26041;&#27861;&#25552;&#20379;&#20102;&#36825;&#26679;&#30340;&#21151;&#33021;&#65306;<a class="link" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;"><code class="function">getattr</code></a> &#20989;&#25968;&#20801;&#35768;&#24744;&#36890;&#36807;&#25552;&#20379;&#20989;&#25968;&#30340;&#23383;&#31526;&#20018;&#21517;&#26469;&#21160;&#24577;&#22320;&#35775;&#38382;&#20219;&#24847;&#30340;&#20989;&#25968;&#12290;</blockquote></div><p></p></li><li><a href="../#dialect.dictsub">8.6.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a><div class="important"><blockquote><b class="title"><a name="d0e21898">&#37325;&#35201;: &#20351;&#29992; <code class="function">locals</code> &#30340;&#24615;&#33021;&#38382;&#39064;</a></b><br>&#20351;&#29992; <code class="function">locals</code> &#26469;&#24212;&#29992;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#26159;&#19968;&#31181;&#26041;&#20415;&#30340;&#20316;&#27861;&#65292;&#23427;&#21487;&#20197;&#20351;&#22797;&#26434;&#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#34920;&#36798;&#24335;&#26356;&#26131;&#35835;&#12290;&#20294;&#23427;&#38656;&#35201;&#33457;&#36153;&#19968;&#23450;&#30340;&#20195;&#20215;&#12290;&#22312;&#35843;&#29992; <code class="function">locals</code> &#26041;&#38754;&#26377;&#19968;&#28857;&#24615;&#33021;&#19978;&#30340;&#38382;&#39064;&#65292;&#36825;&#26159;&#30001;&#20110; <a class="link" href="#dialect.locals.readonly.example" title="&#20363;&nbsp;8.12.&nbsp;locals &#26159;&#21482;&#35835;&#30340;&#65292;globals &#19981;&#26159;"> <code class="function">locals</code> &#21019;&#24314;&#20102;&#23616;&#37096;&#21517;&#23383;&#31354;&#38388;&#30340;&#19968;&#20010;&#25335;&#36125;</a>&#24341;&#36215;&#30340;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#kgp">&#31532;&nbsp;9&nbsp;&#31456;&nbsp;<acronym class="acronym">XML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#kgp.packages">9.2.&nbsp;&#21253;</a><div class="note"><blockquote><b class="title"><a name="d0e23356">&#27880;&#24847;: What makes a package</a></b><br>&#19968;&#20010;&#21253;&#26159;&#19968;&#20010;&#20854;&#20013;&#24102;&#26377;&#29305;&#27530;&#25991;&#20214; <code class="filename">__init__.py</code> &#30340;&#30446;&#24405;&#12290;<code class="filename">__init__.py</code> &#25991;&#20214;&#23450;&#20041;&#20102;&#21253;&#30340;&#23646;&#24615;&#21644;&#26041;&#27861;&#12290;&#20854;&#23454;&#23427;&#21487;&#20197;&#20160;&#20040;&#20063;&#19981;&#23450;&#20041;&#65307;&#21487;&#20197;&#21482;&#26159;&#19968;&#20010;&#31354;&#25991;&#20214;&#65292;&#20294;&#26159;&#24517;&#39035;&#35201;&#23384;&#22312;&#12290;&#22914;&#26524; <code class="filename">__init__.py</code> &#19981;&#23384;&#22312;&#65292;&#36825;&#20010;&#30446;&#24405;&#23601;&#20165;&#20165;&#26159;&#19968;&#20010;&#30446;&#24405;&#65292;&#32780;&#19981;&#26159;&#19968;&#20010;&#21253;&#65292;&#23427;&#23601;&#19981;&#33021;&#34987;&#23548;&#20837;&#25110;&#32773;&#21253;&#21547;&#20854;&#23427;&#30340;&#27169;&#22359;&#21644;&#23884;&#22871;&#21253;&#12290;</blockquote></div><p></p></li><li><a href="../#kgp.attributes">9.6.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;</a><div class="note"><blockquote><b class="title"><a name="d0e24920">&#27880;&#24847;: <acronym class="acronym">XML</acronym> &#23646;&#24615;&#21644;<span class="application">Python</span> &#23646;&#24615;</a></b><br>&#36825;&#37096;&#20998;&#30001;&#20110;&#26576;&#20010;&#21547;&#20041;&#37325;&#21472;&#30340;&#26415;&#35821;&#21487;&#33021;&#35753;&#20154;&#26377;&#28857;&#31946;&#28034;&#12290;&#22312;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#65292;&#20803;&#32032;&#21487;&#20197;&#26377;&#23646;&#24615;&#65292;&#32780; <span class="application">Python</span> &#23545;&#35937;&#20063;&#26377;&#23646;&#24615;&#12290;&#24403;&#20320;&#35299;&#26512;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#26102;&#65292;&#20320;&#24471;&#21040;&#20102;&#19968;&#32452; <span class="application">Python</span> &#23545;&#35937;&#65292;&#23427;&#20204;&#20195;&#34920; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#30340;&#25152;&#26377;&#29255;&#27573;&#65292;&#21516;&#26102;&#26377;&#20123; <span class="application">Python</span> &#23545;&#35937;&#20195;&#34920; <acronym class="acronym">XML</acronym> &#20803;&#32032;&#30340;&#23646;&#24615;&#12290;&#20294;&#26159;&#34920;&#31034; (<acronym class="acronym">XML</acronym>) &#23646;&#24615;&#30340; (<span class="application">Python</span>) &#23545;&#35937;&#20063;&#26377; (<span class="application">Python</span>) &#23646;&#24615;&#65292;&#23427;&#20204;&#29992;&#20110;&#35775;&#38382;&#23545;&#35937;&#34920;&#31034;&#30340; (<acronym class="acronym">XML</acronym>) &#23646;&#24615;&#12290;&#25105;&#21578;&#35785;&#36807;&#20320;&#23427;&#35753;&#20154;&#31946;&#28034;&#12290;&#25105;&#20250;&#20844;&#24320;&#25552;&#20986;&#20851;&#20110;&#22914;&#20309;&#26356;&#26126;&#26174;&#22320;&#21306;&#20998;&#36825;&#20123;&#19981;&#21516;&#30340;&#24314;&#35758;&#12290;
</blockquote></div><div class="note"><blockquote><b class="title"><a name="d0e25165">&#27880;&#24847;: &#23646;&#24615;&#27809;&#26377;&#39034;&#24207;</a></b><br>&#31867;&#20284;&#20110;&#23383;&#20856;&#65292;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#20803;&#32032;&#30340;&#23646;&#24615;&#27809;&#26377;&#39034;&#24207;&#12290;&#23646;&#24615;&#21487;&#20197;&#20197;&#26576;&#31181;&#39034;&#24207;<span class="emphasis"><em>&#20598;&#28982;</em></span> &#21015;&#22312;&#26368;&#21021;&#30340; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#20013;&#65292;&#32780;&#22312; <acronym class="acronym">XML</acronym> &#25991;&#26723;&#35299;&#26512;&#20026; <span class="application">Python</span> &#23545;&#35937;&#26102;&#65292;<code class="classname">Attr</code> &#23545;&#35937;&#20197;&#26576;&#31181;&#39034;&#24207;<span class="emphasis"><em>&#20598;&#28982;</em></span> &#21015;&#20986;&#65292;&#36825;&#20123;&#39034;&#24207;&#37117;&#26159;&#20219;&#24847;&#30340;&#65292;&#27809;&#26377;&#20219;&#20309;&#29305;&#21035;&#30340;&#21547;&#20041;&#12290;&#20320;&#24212;&#35813;&#24635;&#26159;&#20351;&#29992;&#21517;&#31216;&#26469;&#35775;&#38382;&#21333;&#20010;&#23646;&#24615;&#65292;&#23601;&#20687;&#23383;&#20856;&#30340;&#38190;&#19968;&#26679;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#streams">&#31532;&nbsp;10&nbsp;&#31456;&nbsp;&#33050;&#26412;&#21644;&#27969;</a></p><ul></ul><p><a href="../#oa">&#31532;&nbsp;11&nbsp;&#31456;&nbsp;HTTP Web &#26381;&#21153;</a></p><ul><li><a href="../#oa.etags">11.6.&nbsp;&#22788;&#29702; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code></a><div class="note"><blockquote><b class="title"><a name="tip.etag.vs.lastmodified">&#27880;&#24847;: &#25903;&#25345; <code class="literal">Last-Modified</code> <span class="emphasis"><em>&#21644;</em></span> <code class="literal">ETag</code></a></b><br>&#22312;&#36825;&#20123;&#20363;&#23376;&#20013;&#65292;HTTP &#26381;&#21153;&#22120;&#21516;&#26102;&#25903;&#25345; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code> &#22836;&#20449;&#24687;&#65292;&#20294;&#24182;&#38750;&#25152;&#26377;&#30340;&#26381;&#21153;&#22120;&#30342;&#22914;&#27492;&#12290;&#20316;&#20026;&#19968;&#20010; web &#26381;&#21153;&#30340;&#23458;&#25143;&#31471;&#65292;&#20320;&#24212;&#35813;&#20026;&#25903;&#25345;&#20004;&#31181;&#22836;&#20449;&#24687;&#20570;&#20934;&#22791;&#65292;&#20294;&#26159;&#20320;&#30340;&#31243;&#24207;&#20063;&#24212;&#35813;&#20026;&#26381;&#21153;&#22120;&#20165;&#25903;&#25345;&#20854;&#20013;&#19968;&#31181;&#22836;&#20449;&#24687;&#25110;&#20004;&#31181;&#22836;&#20449;&#24687;&#37117;&#19981;&#25903;&#25345;&#32780;&#20570;&#20934;&#22791;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#soap">&#31532;&nbsp;12&nbsp;&#31456;&nbsp;<acronym class="acronym">SOAP</acronym> Web &#26381;&#21153;</a></p><ul></ul><p><a href="../#roman">&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;</a></p><ul><li><a href="../#roman.divein">13.2.&nbsp;&#28145;&#20837;</a><div class="note"><blockquote><b class="title"><a name="note.unittest">&#27880;&#24847;: &#20320;&#26377; <code class="filename">unittest</code> &#21527;&#65311;</a></b><br><span class="application">Python</span> 2.1 &#21644;&#20043;&#21518;&#30340;&#29256;&#26412;&#24050;&#32463;&#21253;&#21547;&#20102; <code class="filename">unittest</code>&#12290;<span class="application">Python</span> 2.0 &#29992;&#25143;&#21017;&#21487;&#20197;&#20174; <code class="systemitem">pyunit.sourceforge.net</code> (<a href="http://pyunit.sourceforge.net/">http://pyunit.sourceforge.net/</a>)&#19979;&#36733;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#roman1.5">&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</a></p><ul><li><a href="../#roman.stage3">14.3.&nbsp;<code class="filename">roman.py</code>, &#31532; 3 &#38454;&#27573;</a><div class="note"><blockquote><b class="title"><a name="d0e33716">&#27880;&#24847;: &#30693;&#36947;&#20160;&#20040;&#26102;&#20505;&#20572;&#27490;&#32534;&#20889;&#20195;&#30721;</a></b><br>&#20840;&#38754;&#30340;&#21333;&#20803;&#27979;&#35797;&#33021;&#22815;&#21578;&#35785;&#20320;&#30340;&#26368;&#37325;&#35201;&#30340;&#20107;&#24773;&#26159;&#20160;&#20040;&#26102;&#20505;&#20572;&#27490;&#32534;&#20889;&#20195;&#30721;&#12290;&#24403;&#19968;&#20010;&#20989;&#25968;&#30340;&#25152;&#26377;&#21333;&#20803;&#27979;&#35797;&#37117;&#36890;&#36807;&#20102;&#65292;&#20572;&#27490;&#32534;&#20889;&#36825;&#20010;&#20989;&#25968;&#12290;&#19968;&#26086;&#25972;&#20010;&#27169;&#22359;&#30340;&#21333;&#20803;&#27979;&#35797;&#36890;&#36807;&#20102;&#65292;&#20572;&#27490;&#32534;&#20889;&#36825;&#20010;&#27169;&#22359;&#12290;</blockquote></div><p></p></li><li><a href="../#roman.stage5">14.5.&nbsp;<code class="filename">roman.py</code>, &#31532; 5 &#38454;&#27573;</a><div class="note"><blockquote><b class="title"><a name="d0e34305">&#27880;&#24847;: &#25152;&#26377;&#27979;&#35797;&#37117;&#36890;&#36807;&#21518;&#20570;&#20160;&#20040;&#21602;&#65311;</a></b><br>&#24403;&#25152;&#26377;&#27979;&#35797;&#37117;&#36890;&#36807;&#20102;&#65292;&#20572;&#27490;&#32534;&#31243;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#roman2">&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;</a></p><ul><li><a href="../#roman.refactoring">15.3.&nbsp;&#37325;&#26500;</a><div class="note"><blockquote><b class="title"><a name="d0e34932">&#27880;&#24847;: &#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;</a></b><br>&#22312;&#38656;&#35201;&#22810;&#27425;&#20351;&#29992;&#21516;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#30340;&#24773;&#20917;&#19979;&#65292;&#24212;&#35813;&#23558;&#23427;&#36827;&#34892;&#32534;&#35793;&#20197;&#33719;&#24471;&#19968;&#20010; pattern &#23545;&#35937;&#65292;&#28982;&#21518;&#30452;&#25509;&#35843;&#29992;&#36825;&#20010; pattern &#23545;&#35937;&#30340;&#26041;&#27861;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#regression">&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;</a></p><ul><li><a href="../#regression.path">16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;</a><div class="note"><blockquote><b class="title"><a name="os.path.abspath.exist.note">&#27880;&#24847;: <code class="function">os.path.abspath</code> &#24182;&#19981;&#39564;&#35777;&#36335;&#24452;&#21517;</a></b><br>&#20256;&#36882;&#32473; <code class="function">os.path.abspath</code> &#30340;&#36335;&#24452;&#21517;&#21644;&#25991;&#20214;&#21517;&#21487;&#20197;&#19981;&#23384;&#22312;&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="os.path.normpath.note">&#27880;&#24847;: &#26684;&#24335;&#21270;&#36335;&#24452;&#21517;</a></b><br><code class="function">os.path.abspath</code> &#19981;&#20165;&#26500;&#24314;&#23436;&#25972;&#36335;&#24452;&#21517;&#65292;&#36824;&#33021;&#26684;&#24335;&#21270;&#36335;&#24452;&#21517;&#12290;&#36825;&#24847;&#21619;&#30528;&#22914;&#26524;&#20320;&#27491;&#24037;&#20316;&#20110; <code class="filename">/usr/</code> &#30446;&#24405;&#65292;<code class="literal">os.path.abspath('bin/../local/bin')</code> &#23558;&#20250;&#36820;&#22238; <code class="filename">/usr/local/bin</code>&#12290;&#23427;&#25226;&#36335;&#24452;&#21517;&#26684;&#24335;&#21270;&#20026;&#23613;&#21487;&#33021;&#31616;&#21333;&#30340;&#24418;&#24335;&#12290;&#22914;&#26524;&#20320;&#21482;&#26159;&#24076;&#26395;&#31616;&#21333;&#22320;&#36820;&#22238;&#36825;&#26679;&#30340;&#26684;&#24335;&#21270;&#36335;&#24452;&#21517;&#32780;&#19981;&#38656;&#35201;&#23436;&#25972;&#36335;&#24452;&#21517;&#65292;&#21487;&#20197;&#20351;&#29992; <code class="function">os.path.normpath</code>&#12290;</blockquote></div><div class="note"><blockquote><b class="title"><a name="os.path.abspath.crossplatform.note">&#27880;&#24847;: <code class="function">os.path.abspath</code> &#26159;&#36328;&#24179;&#21488;&#30340;</a></b><br>&#23601;&#20687; <code class="filename">os</code> &#21644; <code class="filename">os.path</code> &#27169;&#22359;&#30340;&#20854;&#20182;&#20989;&#25968;&#65292;<code class="function">os.path.abspath</code> &#26159;&#36328;&#24179;&#21488;&#30340;&#12290;&#22914;&#26524;&#20320;&#26159;&#22312; Windows (&#20351;&#29992;&#21453;&#26012;&#26464;&#20316;&#20026;&#36335;&#24452;&#31526;&#21495;) &#25110; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> (&#20351;&#29992;&#20882;&#21495;) &#19978;&#36816;&#34892;&#65292;&#23427;&#20204;&#21516;&#26679;&#24037;&#20316;&#65292;&#21482;&#26159;&#23558;&#33719;&#24471;&#19982;&#25105;&#31245;&#26377;&#19981;&#21516;&#30340;&#32467;&#26524;&#12290;<code class="filename">os</code> &#30340;&#25152;&#26377;&#20989;&#25968;&#37117;&#26159;&#36825;&#26679;&#30340;&#12290;</blockquote></div><p></p></li></ul><p><a href="../#plural">&#31532;&nbsp;17&nbsp;&#31456;&nbsp;&#21160;&#24577;&#20989;&#25968;</a></p><ul></ul><p><a href="../#soundex">&#31532;&nbsp;18&nbsp;&#31456;&nbsp;&#24615;&#33021;&#20248;&#21270;</a></p><ul><li><a href="../#soundex.timeit">18.2.&nbsp;&#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;</a><div class="tip"><blockquote><b class="title"><a name="d0e39191">&#25552;&#31034;: </a></b><br>&#20320;&#21487;&#20197;&#22312;&#21629;&#20196;&#34892;&#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;&#26469;&#27979;&#35797;&#19968;&#20010;&#24050;&#23384;&#22312;&#30340; <span class="application">Python</span> &#31243;&#24207;&#65292;&#32780;&#19981;&#38656;&#35201;&#20462;&#25913;&#20195;&#30721;&#12290;&#22312; <a href="http://docs.python.org/lib/node396.html">http://docs.python.org/lib/node396.html</a> &#26597;&#30475;&#25991;&#26723;&#20013;&#20851;&#20110;&#21629;&#20196;&#34892;&#36873;&#39033;&#30340;&#20869;&#23481;&#12290;</blockquote></div><div class="tip"><blockquote><b class="title"><a name="d0e39239">&#25552;&#31034;: </a></b><br><code class="filename">timeit</code> &#27169;&#22359;&#21482;&#26377;&#22312;&#20320;&#30693;&#36947;&#21738;&#27573;&#20195;&#30721;&#38656;&#35201;&#20248;&#21270;&#26102;&#20351;&#29992;&#12290;&#22914;&#26524;&#20320;&#26377;&#19968;&#20010;&#24456;&#22823;&#30340; <span class="application">Python</span> &#31243;&#24207;&#24182;&#19988;&#19981;&#30693;&#36947;&#20320;&#30340;&#24615;&#33021;&#38382;&#39064;&#25152;&#22312;&#65292;&#26597;&#30475; <code class="filename">hotshot</code> &#27169;&#22359; (<a href="http://docs.python.org/lib/module-hotshot.html">http://docs.python.org/lib/module-hotshot.html</a>)&#12290;</blockquote></div><p></p></li></ul></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="examples"></a>&#38468;&#24405;&nbsp;D.&nbsp;&#31034;&#20363;&#28165;&#21333;</h1></div></div></div><p><a href="../#install">&#31532;&nbsp;1&nbsp;&#31456;&nbsp;&#23433;&#35013; <span class="application">Python</span></a></p><ul><li><a href="../#install.macosx">1.3.&nbsp;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#30340; <span class="application">Python</span> </a><p></p><ul><li><a href="../#d0e3460">&#20363;&nbsp;1.1.&nbsp;&#20004;&#20010; <span class="application">Python</span> &#29256;&#26412;</a></li></ul><p></p></li><li><a href="../#install.redhat">1.5.&nbsp;RedHat Linux &#19978;&#30340; <span class="application">Python</span> </a><p></p><ul><li><a href="../#d0e3640">&#20363;&nbsp;1.2.&nbsp;&#22312; RedHat Linux 9 &#19978;&#23433;&#35013;</a></li></ul><p></p></li><li><a href="../#install.debian">1.6.&nbsp;Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#30340; <span class="application">Python</span> </a><p></p><ul><li><a href="../#d0e3765">&#20363;&nbsp;1.3.&nbsp;&#22312; Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#23433;&#35013;</a></li></ul><p></p></li><li><a href="../#install.source">1.7.&nbsp;&#20174;&#28304;&#20195;&#30721;&#23433;&#35013; <span class="application">Python</span> </a><p></p><ul><li><a href="../#d0e3848">&#20363;&nbsp;1.4.&nbsp;&#20174;&#28304;&#20195;&#30721;&#23433;&#35013;</a></li></ul><p></p></li><li><a href="../#install.shell">1.8.&nbsp;&#20351;&#29992; <span class="application">Python</span> &#30340;&#20132;&#20114; Shell</a><p></p><ul><li><a href="../#d0e3963">&#20363;&nbsp;1.5.&nbsp;&#21021;&#27425;&#20351;&#29992;&#20132;&#20114; Shell</a></li></ul><p></p></li></ul><p><a href="../#odbchelper">&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</a></p><ul><li><a href="../#odbchelper.divein">2.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e4084">&#20363;&nbsp;2.1.&nbsp;<code class="filename">odbchelper.py</code></a></li></ul><p></p></li><li><a href="../#odbchelper.docstring">2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;</a><p></p><ul><li><a href="../#odbchelper.triplequotes">&#20363;&nbsp;2.2.&nbsp;&#23450;&#20041; <code class="function">buildConnectionString</code> &#20989;&#25968;&#30340; <code class="literal">doc string</code></a></li></ul><p></p></li><li><a href="../#odbchelper.objects">2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;</a><p></p><ul><li><a href="../#odbchelper.import">&#20363;&nbsp;2.3.&nbsp;&#35775;&#38382; <code class="function">buildConnectionString</code> &#20989;&#25968;&#30340; <code class="literal">doc string</code></a></li></ul><p></p></li><li><a href="../#d0e4686">2.4.1.&nbsp;&#27169;&#22359;&#23548;&#20837;&#30340;&#25628;&#32034;&#36335;&#24452;</a><p></p><ul><li><a href="../#odbchelper.objects.sys.path">&#20363;&nbsp;2.4.&nbsp;&#27169;&#22359;&#23548;&#20837;&#30340;&#25628;&#32034;&#36335;&#24452;</a></li></ul><p></p></li><li><a href="../#odbchelper.indenting">2.5.&nbsp;&#20195;&#30721;&#32553;&#36827;</a><p></p><ul><li><a href="../#d0e4895">&#20363;&nbsp;2.5.&nbsp;&#32553;&#36827; <code class="function">buildConnectionString</code> &#20989;&#25968;</a></li><li><a href="../#odbchelper.indenting.if">&#20363;&nbsp;2.6.&nbsp;<code class="literal">if</code> &#35821;&#21477;</a></li></ul><p></p></li></ul><p><a href="../#datatypes">&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;</a></p><ul><li><a href="../#d0e5309">3.1.1.&nbsp;Dictionary &#30340;&#23450;&#20041;</a><p></p><ul><li><a href="../#odbchelper.dict.define">&#20363;&nbsp;3.1.&nbsp;&#23450;&#20041; Dictionary</a></li></ul><p></p></li><li><a href="../#d0e5404">3.1.2.&nbsp;Dictionary &#30340;&#20462;&#25913;</a><p></p><ul><li><a href="../#odbchelper.dict.modify">&#20363;&nbsp;3.2.&nbsp;&#20462;&#25913; Dictionary</a></li><li><a href="../#odbchelper.dict.case">&#20363;&nbsp;3.3.&nbsp;Dictionary &#30340; key &#26159;&#22823;&#23567;&#20889;&#25935;&#24863;&#30340;</a></li><li><a href="../#odbchelper.dictionarytypes">&#20363;&nbsp;3.4.&nbsp;&#22312; dictionary &#20013;&#28151;&#29992;&#25968;&#25454;&#31867;&#22411;</a></li></ul><p></p></li><li><a href="../#d0e5585">3.1.3.&nbsp;&#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;</a><p></p><ul><li><a href="../#odbchelper.dict.del">&#20363;&nbsp;3.5.&nbsp;&#20174; dictionary &#20013;&#21024;&#38500;&#20803;&#32032;</a></li></ul><p></p></li><li><a href="../#d0e5762">3.2.1.&nbsp;List &#30340;&#23450;&#20041;</a><p></p><ul><li><a href="../#d0e5765">&#20363;&nbsp;3.6.&nbsp;&#23450;&#20041; List</a></li><li><a href="../#odbchelper.negative.example">&#20363;&nbsp;3.7.&nbsp;&#36127;&#30340; list &#32034;&#24341;</a></li><li><a href="../#odbchelper.list.slice">&#20363;&nbsp;3.8.&nbsp;list &#30340;&#20998;&#29255; (slice)</a></li><li><a href="../#odbchelper.list.slicing.example">&#20363;&nbsp;3.9.&nbsp;Slice &#31616;&#20889;</a></li></ul><p></p></li><li><a href="../#d0e6029">3.2.2.&nbsp;&#21521; list &#20013;&#22686;&#21152;&#20803;&#32032;</a><p></p><ul><li><a href="../#d0e6032">&#20363;&nbsp;3.10.&nbsp;&#21521; list &#20013;&#22686;&#21152;&#20803;&#32032;</a></li><li><a href="../#odbchelper.list.append.vs.extend">&#20363;&nbsp;3.11.&nbsp;<code class="function">extend</code> (&#25193;&#23637;) &#19982; <code class="function">append</code> (&#36861;&#21152;) &#30340;&#24046;&#21035;</a></li></ul><p></p></li><li><a href="../#d0e6257">3.2.3.&nbsp;&#22312; list &#20013;&#25628;&#32034;</a><p></p><ul><li><a href="../#odbchelper.list.search">&#20363;&nbsp;3.12.&nbsp;&#25628;&#32034; list</a></li></ul><p></p></li><li><a href="../#d0e6419">3.2.4.&nbsp;&#20174; list &#20013;&#21024;&#38500;&#20803;&#32032;</a><p></p><ul><li><a href="../#odbchelper.list.removingelements">&#20363;&nbsp;3.13.&nbsp;&#20174; list &#20013;&#21024;&#38500;&#20803;&#32032;</a></li></ul><p></p></li><li><a href="../#d0e6537">3.2.5.&nbsp;&#20351;&#29992; list &#30340;&#36816;&#31639;&#31526;</a><p></p><ul><li><a href="../#odbchelper.list.operators">&#20363;&nbsp;3.14.&nbsp;List &#36816;&#31639;&#31526;</a></li></ul><p></p></li><li><a href="../#odbchelper.tuple">3.3.&nbsp;Tuple &#20171;&#32461;</a><p></p><ul><li><a href="../#d0e6712">&#20363;&nbsp;3.15.&nbsp;&#23450;&#20041; tuple</a></li><li><a href="../#odbchelper.tuplemethods">&#20363;&nbsp;3.16.&nbsp;Tuple &#27809;&#26377;&#26041;&#27861;</a></li></ul><p></p></li><li><a href="../#odbchelper.vardef">3.4.&nbsp;&#21464;&#37327;&#22768;&#26126;</a><p></p><ul><li><a href="../#myparamsdef">&#20363;&nbsp;3.17.&nbsp;&#23450;&#20041; <code class="varname">myParams</code> &#21464;&#37327;</a></li></ul><p></p></li><li><a href="../#d0e7017">3.4.1.&nbsp;&#21464;&#37327;&#24341;&#29992;</a><p></p><ul><li><a href="../#odbchelper.unboundvariable">&#20363;&nbsp;3.18.&nbsp;&#24341;&#29992;&#26410;&#36171;&#20540;&#30340;&#21464;&#37327;</a></li></ul><p></p></li><li><a href="../#odbchelper.multiassign">3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;</a><p></p><ul><li><a href="../#d0e7056">&#20363;&nbsp;3.19.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;</a></li><li><a href="../#odbchelper.multiassign.range">&#20363;&nbsp;3.20.&nbsp;&#36830;&#32493;&#20540;&#36171;&#20540;</a></li></ul><p></p></li><li><a href="../#odbchelper.stringformatting">3.5.&nbsp;&#26684;&#24335;&#21270;&#23383;&#31526;&#20018;</a><p></p><ul><li><a href="../#d0e7308">&#20363;&nbsp;3.21.&nbsp;&#23383;&#31526;&#20018;&#30340;&#26684;&#24335;&#21270;</a></li><li><a href="../#odbchelper.stringformatting.coerce">&#20363;&nbsp;3.22.&nbsp;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#19982;&#23383;&#31526;&#20018;&#36830;&#25509;&#30340;&#27604;&#36739;</a></li><li><a href="../#odbchelper.stringformatting.numbers">&#20363;&nbsp;3.23.&nbsp;&#25968;&#20540;&#30340;&#26684;&#24335;&#21270;</a></li></ul><p></p></li><li><a href="../#odbchelper.map">3.6.&nbsp;&#26144;&#23556; list</a><p></p><ul><li><a href="../#d0e7553">&#20363;&nbsp;3.24.&nbsp;List &#35299;&#26512;&#20171;&#32461;</a></li><li><a href="../#odbchelper.items">&#20363;&nbsp;3.25.&nbsp;<code class="function">keys</code>, <code class="function">values</code> &#21644; <code class="function">items</code> &#20989;&#25968;</a></li><li><a href="../#d0e7756">&#20363;&nbsp;3.26.&nbsp;<code class="function">buildConnectionString</code> &#20013;&#30340; list &#35299;&#26512;</a></li></ul><p></p></li><li><a href="../#odbchelper.join">3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;</a><p></p><ul><li><a href="../#odbchelper.join.example">&#20363;&nbsp;3.27.&nbsp;<code class="filename">odbchelper.py</code> &#30340;&#36755;&#20986;&#32467;&#26524;</a></li><li><a href="../#odbchelper.split.example">&#20363;&nbsp;3.28.&nbsp;&#20998;&#21106;&#23383;&#31526;&#20018;</a></li></ul><p></p></li></ul><p><a href="../#apihelper">&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;</a></p><ul><li><a href="../#apihelper.divein">4.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e8300">&#20363;&nbsp;4.1.&nbsp;<code class="filename">apihelper.py</code></a></li><li><a href="../#d0e8396">&#20363;&nbsp;4.2.&nbsp;<code class="filename">apihelper.py</code> &#30340;&#29992;&#27861;&#31034;&#20363;</a></li><li><a href="../#d0e8433">&#20363;&nbsp;4.3.&nbsp;<code class="filename">apihelper.py</code> &#30340;&#39640;&#32423;&#29992;&#27861;</a></li></ul><p></p></li><li><a href="../#apihelper.optional">4.2.&nbsp;&#20351;&#29992;&#21487;&#36873;&#21442;&#25968;&#21644;&#21629;&#21517;&#21442;&#25968;</a><p></p><ul><li><a href="../#d0e8539">&#20363;&nbsp;4.4.&nbsp;<code class="function">info</code> &#30340;&#26377;&#25928;&#35843;&#29992;</a></li></ul><p></p></li><li><a href="../#d0e8648">4.3.1.&nbsp;<code class="function">type</code> &#20989;&#25968;</a><p></p><ul><li><a href="../#apihelper.type.intro">&#20363;&nbsp;4.5.&nbsp;<code class="function">type</code> &#20171;&#32461;</a></li></ul><p></p></li><li><a href="../#d0e8758">4.3.2.&nbsp;<code class="function">str</code> &#20989;&#25968;</a><p></p><ul><li><a href="../#apihelper.str.intro">&#20363;&nbsp;4.6.&nbsp;<code class="function">str</code> &#20171;&#32461;</a></li><li><a href="../#apihelper.dir.intro">&#20363;&nbsp;4.7.&nbsp;<code class="function">dir</code> &#20171;&#32461;</a></li><li><a href="../#apihelper.builtin.callable">&#20363;&nbsp;4.8.&nbsp;<code class="function">callable</code> &#20171;&#32461;</a></li></ul><p></p></li><li><a href="../#d0e9105">4.3.3.&nbsp;&#20869;&#32622;&#20989;&#25968;</a><p></p><ul><li><a href="../#apihelper.builtin.list">&#20363;&nbsp;4.9.&nbsp;&#20869;&#32622;&#23646;&#24615;&#21644;&#20869;&#32622;&#20989;&#25968;</a></li></ul><p></p></li><li><a href="../#apihelper.getattr">4.4.&nbsp;&#36890;&#36807; <code class="function">getattr</code> &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;</a><p></p><ul><li><a href="../#apihelper.getattr.intro">&#20363;&nbsp;4.10.&nbsp;<code class="function">getattr</code> &#20171;&#32461;</a></li></ul><p></p></li><li><a href="../#d0e9345">4.4.1.&nbsp;&#29992;&#20110;&#27169;&#22359;&#30340; <code class="function">getattr</code></a><p></p><ul><li><a href="../#apihelper.getattr.example">&#20363;&nbsp;4.11.&nbsp;<code class="filename">apihelper.py</code> &#20013;&#30340; <code class="function">getattr</code> &#20989;&#25968;</a></li></ul><p></p></li><li><a href="../#d0e9513">4.4.2.&nbsp;<code class="function">getattr</code> &#20316;&#20026;&#19968;&#20010;&#20998;&#21457;&#32773;</a><p></p><ul><li><a href="../#apihelper.getattr.dispatch">&#20363;&nbsp;4.12.&nbsp;&#20351;&#29992;<code class="function">getattr</code> &#21019;&#24314;&#20998;&#21457;&#32773;</a></li><li><a href="../#apihelper.getattr.default">&#20363;&nbsp;4.13.&nbsp;<code class="function">getattr</code> &#32570;&#30465;&#20540;</a></li></ul><p></p></li><li><a href="../#apihelper.filter">4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;</a><p></p><ul><li><a href="../#d0e9689">&#20363;&nbsp;4.14.&nbsp;&#21015;&#34920;&#36807;&#28388;&#20171;&#32461;</a></li></ul><p></p></li><li><a href="../#apihelper.andor">4.6.&nbsp;<code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#29305;&#27530;&#24615;&#36136;</a><p></p><ul><li><a href="../#apihelper.andor.intro.example">&#20363;&nbsp;4.15.&nbsp;<code class="literal">and</code> &#20171;&#32461;</a></li><li><a href="../#d0e9965">&#20363;&nbsp;4.16.&nbsp;<code class="literal">or</code> &#20171;&#32461;</a></li></ul><p></p></li><li><a href="../#d0e10128">4.6.1.&nbsp;&#20351;&#29992; <code class="literal">and-or</code> &#25216;&#24039;</a><p></p><ul><li><a href="../#apihelper.andortrick.intro">&#20363;&nbsp;4.17.&nbsp;<code class="literal">and-or</code> &#25216;&#24039;&#20171;&#32461;</a></li><li><a href="../#d0e10242">&#20363;&nbsp;4.18.&nbsp;<code class="literal">and-or</code> &#25216;&#24039;&#26080;&#25928;&#30340;&#22330;&#21512;</a></li><li><a href="../#d0e10352">&#20363;&nbsp;4.19.&nbsp;&#23433;&#20840;&#20351;&#29992; <code class="literal">and-or</code> &#25216;&#24039;</a></li></ul><p></p></li><li><a href="../#apihelper.lambda">4.7.&nbsp;&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;</a><p></p><ul><li><a href="../#d0e10455">&#20363;&nbsp;4.20.&nbsp;<code class="literal">lambda</code> &#20989;&#25968;&#20171;&#32461;</a></li></ul><p></p></li><li><a href="../#d0e10549">4.7.1.&nbsp;&#30495;&#23454;&#19990;&#30028;&#20013;&#30340; <code class="literal">lambda</code> &#20989;&#25968;</a><p></p><ul><li><a href="../#d0e10589">&#20363;&nbsp;4.21.&nbsp;<code class="function">split</code> &#19981;&#24102;&#21442;&#25968;</a></li></ul><p></p></li><li><a href="../#apihelper.alltogether">4.8.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><p></p><ul><li><a href="../#d0e10827">&#20363;&nbsp;4.22.&nbsp;&#21160;&#24577;&#24471;&#21040; <code class="literal">doc string</code> </a></li><li><a href="../#d0e10939">&#20363;&nbsp;4.23.&nbsp;&#20026;&#20160;&#20040;&#23545;&#19968;&#20010; <code class="literal">doc string</code> &#20351;&#29992; <code class="function">str</code> &#65311;</a></li><li><a href="../#d0e11109">&#20363;&nbsp;4.24.&nbsp;<code class="function">ljust</code> &#26041;&#27861;&#20171;&#32461;</a></li><li><a href="../#d0e11177">&#20363;&nbsp;4.25.&nbsp;&#25171;&#21360;&#21015;&#34920;</a></li></ul><p></p></li></ul><p><a href="../#fileinfo">&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</a></p><ul><li><a href="../#fileinfo.divein">5.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e11326">&#20363;&nbsp;5.1.&nbsp;<code class="filename">fileinfo.py</code></a></li></ul><p></p></li><li><a href="../#fileinfo.fromimport">5.2.&nbsp;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;</a><p></p><ul><li><a href="../#d0e11505">&#20363;&nbsp;5.2.&nbsp;<code class="literal">import <em class="replaceable">module</em></code> <span class="foreignphrase"><em class="foreignphrase"><acronym class="acronym">vs.</acronym></em></span> <code class="literal">from <em class="replaceable">module</em> import</code></a></li></ul><p></p></li><li><a href="../#fileinfo.class">5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;</a><p></p><ul><li><a href="../#fileinfo.class.simplest">&#20363;&nbsp;5.3.&nbsp;&#26368;&#31616;&#21333;&#30340; <span class="application">Python</span> &#31867;</a></li><li><a href="../#fileinfo.class.example">&#20363;&nbsp;5.4.&nbsp;&#23450;&#20041; <code class="classname">FileInfo</code> &#31867;</a></li></ul><p></p></li><li><a href="../#d0e11869">5.3.1.&nbsp;&#21021;&#22987;&#21270;&#24182;&#24320;&#22987;&#31867;&#32534;&#30721;</a><p></p><ul><li><a href="../#fileinfo.init.example">&#20363;&nbsp;5.5.&nbsp;&#21021;&#22987;&#21270; <code class="classname">FileInfo</code> &#31867;</a></li><li><a href="../#fileinfo.init.code.example">&#20363;&nbsp;5.6.&nbsp;&#32534;&#20889; <code class="classname">FileInfo</code> &#31867;</a></li></ul><p></p></li><li><a href="../#fileinfo.create">5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;</a><p></p><ul><li><a href="../#d0e12149">&#20363;&nbsp;5.7.&nbsp;&#21019;&#24314; <code class="classname">FileInfo</code> &#23454;&#20363;</a></li></ul><p></p></li><li><a href="../#d0e12314">5.4.1.&nbsp;&#22403;&#22334;&#22238;&#25910;</a><p></p><ul><li><a href="../#fileinfo.scope">&#20363;&nbsp;5.8.&nbsp;&#23581;&#35797;&#23454;&#29616;&#20869;&#23384;&#27844;&#28431;</a></li></ul><p></p></li><li><a href="../#fileinfo.userdict">5.5.&nbsp;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;</a><p></p><ul><li><a href="../#fileinfo.userdict.init.example">&#20363;&nbsp;5.9.&nbsp;&#23450;&#20041; <code class="classname">UserDict</code> &#31867;</a></li><li><a href="../#fileinfo.userdict.normalmethods">&#20363;&nbsp;5.10.&nbsp;<code class="classname">UserDict</code> &#24120;&#35268;&#26041;&#27861;</a></li><li><a href="../#fileinfo.userdict.fromdict">&#20363;&nbsp;5.11.&nbsp;&#30452;&#25509;&#32487;&#25215;&#33258;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411; <code class="classname">dict</code></a></li></ul><p></p></li><li><a href="../#d0e13019">5.6.1.&nbsp;&#33719;&#24471;&#21644;&#35774;&#32622;&#25968;&#25454;&#39033;</a><p></p><ul><li><a href="../#d0e13022">&#20363;&nbsp;5.12.&nbsp;<code class="function">__getitem__</code> &#19987;&#29992;&#26041;&#27861;</a></li><li><a href="../#fileinfo.specialmethods.setitem.example">&#20363;&nbsp;5.13.&nbsp;<code class="function">__setitem__</code> &#19987;&#29992;&#26041;&#27861;</a></li><li><a href="../#d0e13235">&#20363;&nbsp;5.14.&nbsp;&#22312; <code class="classname">MP3FileInfo</code> &#20013;&#35206;&#30422; <code class="function">__setitem__</code></a></li><li><a href="../#fileinfo.specialmethods.setname">&#20363;&nbsp;5.15.&nbsp;&#35774;&#32622; <code class="classname">MP3FileInfo</code> &#30340; <code class="literal">name</code></a></li></ul><p></p></li><li><a href="../#fileinfo.morespecial">5.7.&nbsp;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;</a><p></p><ul><li><a href="../#fileinfo.morespecial.example">&#20363;&nbsp;5.16.&nbsp;<code class="classname">UserDict</code> &#20013;&#26356;&#22810;&#30340;&#19987;&#29992;&#26041;&#27861;</a></li></ul><p></p></li><li><a href="../#fileinfo.classattributes">5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;</a><p></p><ul><li><a href="../#fileinfo.classattributes.intro">&#20363;&nbsp;5.17.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;</a></li><li><a href="../#fileinfo.classattributes.writeable.example">&#20363;&nbsp;5.18.&nbsp;&#20462;&#25913;&#31867;&#23646;&#24615;</a></li></ul><p></p></li><li><a href="../#fileinfo.private">5.9.&nbsp;&#31169;&#26377;&#20989;&#25968;</a><p></p><ul><li><a href="../#d0e14144">&#20363;&nbsp;5.19.&nbsp;&#23581;&#35797;&#35843;&#29992;&#19968;&#20010;&#31169;&#26377;&#26041;&#27861;</a></li></ul><p></p></li></ul><p><a href="../#filehandling">&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;</a></p><ul><li><a href="../#fileinfo.exception">6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;</a><p></p><ul><li><a href="../#d0e14443">&#20363;&nbsp;6.1.&nbsp;&#25171;&#24320;&#19968;&#20010;&#19981;&#23384;&#22312;&#30340;&#25991;&#20214;</a></li></ul><p></p></li><li><a href="../#d0e14544">6.1.1.&nbsp;&#20026;&#20854;&#20182;&#29992;&#36884;&#20351;&#29992;&#24322;&#24120;</a><p></p><ul><li><a href="../#crossplatform.example">&#20363;&nbsp;6.2.&nbsp;&#25903;&#25345;&#29305;&#23450;&#24179;&#21488;&#21151;&#33021;</a></li></ul><p></p></li><li><a href="../#fileinfo.files">6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;</a><p></p><ul><li><a href="../#d0e14796">&#20363;&nbsp;6.3.&nbsp;&#25171;&#24320;&#25991;&#20214;</a></li></ul><p></p></li><li><a href="../#d0e14868">6.2.1.&nbsp;&#35835;&#21462;&#25991;&#20214;</a><p></p><ul><li><a href="../#d0e14873">&#20363;&nbsp;6.4.&nbsp;&#35835;&#21462;&#25991;&#20214;</a></li></ul><p></p></li><li><a href="../#d0e14995">6.2.2.&nbsp;&#20851;&#38381;&#25991;&#20214;</a><p></p><ul><li><a href="../#d0e15000">&#20363;&nbsp;6.5.&nbsp;&#20851;&#38381;&#25991;&#20214;</a></li></ul><p></p></li><li><a href="../#d0e15122">6.2.3.&nbsp;&#22788;&#29702; <acronym class="acronym">I/O</acronym> &#38169;&#35823;</a><p></p><ul><li><a href="../#fileinfo.files.incode">&#20363;&nbsp;6.6.&nbsp;<code class="classname">MP3FileInfo</code> &#20013;&#30340;&#25991;&#20214;&#23545;&#35937;</a></li></ul><p></p></li><li><a href="../#d0e15243">6.2.4.&nbsp;&#20889;&#20837;&#25991;&#20214;</a><p></p><ul><li><a href="../#fileinfo.files.writeandappend">&#20363;&nbsp;6.7.&nbsp;&#20889;&#20837;&#25991;&#20214;</a></li></ul><p></p></li><li><a href="../#fileinfo.for">6.3.&nbsp;<code class="literal">for</code> &#24490;&#29615;</a><p></p><ul><li><a href="../#d0e15442">&#20363;&nbsp;6.8.&nbsp;<code class="literal">for</code> &#24490;&#29615;&#20171;&#32461;</a></li><li><a href="../#fileinfo.for.counter">&#20363;&nbsp;6.9.&nbsp;&#31616;&#21333;&#35745;&#25968;</a></li><li><a href="../#dictionaryiter.example">&#20363;&nbsp;6.10.&nbsp;&#36941;&#21382; dictionary</a></li><li><a href="../#fileinfo.multiassign.for.example">&#20363;&nbsp;6.11.&nbsp;<code class="classname">MP3FileInfo</code> &#20013;&#30340; <code class="literal">for</code> &#24490;&#29615;</a></li></ul><p></p></li><li><a href="../#fileinfo.modules">6.4.&nbsp;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code></a><p></p><ul><li><a href="../#d0e15882">&#20363;&nbsp;6.12.&nbsp;<code class="literal"><code class="filename">sys</code>.modules</code> &#20171;&#32461;</a></li><li><a href="../#d0e15969">&#20363;&nbsp;6.13.&nbsp;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code></a></li><li><a href="../#d0e16044">&#20363;&nbsp;6.14.&nbsp;<code class="literal">__module__</code> &#31867;&#23646;&#24615;</a></li><li><a href="../#d0e16107">&#20363;&nbsp;6.15.&nbsp;<code class="filename">fileinfo.py</code> &#20013;&#30340; <code class="literal"><code class="filename">sys</code>.modules</code></a></li></ul><p></p></li><li><a href="../#fileinfo.os">6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;</a><p></p><ul><li><a href="../#fileinfo.os.path.join.example">&#20363;&nbsp;6.16.&nbsp;&#26500;&#36896;&#36335;&#24452;&#21517;</a></li><li><a href="../#splittingpathnames.example">&#20363;&nbsp;6.17.&nbsp;&#20998;&#21106;&#36335;&#24452;&#21517;</a></li><li><a href="../#fileinfo.listdir.example">&#20363;&nbsp;6.18.&nbsp;&#21015;&#20986;&#30446;&#24405;</a></li><li><a href="../#d0e16563">&#20363;&nbsp;6.19.&nbsp;&#22312; <code class="filename">fileinfo.py</code> &#20013;&#21015;&#20986;&#30446;&#24405;</a></li><li><a href="../#fileinfo.os.glob.example">&#20363;&nbsp;6.20.&nbsp;&#20351;&#29992; <code class="filename">glob</code> &#21015;&#20986;&#30446;&#24405;</a></li></ul><p></p></li><li><a href="../#fileinfo.alltogether">6.6.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><p></p><ul><li><a href="../#fileinfo.nested">&#20363;&nbsp;6.21.&nbsp;<code class="function">listDirectory</code></a></li></ul><p></p></li></ul><p><a href="../#re">&#31532;&nbsp;7&nbsp;&#31456;&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;</a></p><ul><li><a href="../#re.matching">7.2.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;</a><p></p><ul><li><a href="../#d0e17108">&#20363;&nbsp;7.1.&nbsp;&#22312;&#23383;&#31526;&#20018;&#30340;&#32467;&#23614;&#21305;&#37197;</a></li><li><a href="../#d0e17300">&#20363;&nbsp;7.2.&nbsp;&#21305;&#37197;&#25972;&#20010;&#21333;&#35789;</a></li></ul><p></p></li><li><a href="../#d0e17763">7.3.1.&nbsp;&#26657;&#39564;&#21315;&#20301;&#25968;</a><p></p><ul><li><a href="../#d0e17771">&#20363;&nbsp;7.3.&nbsp;&#26657;&#39564;&#21315;&#20301;&#25968;</a></li></ul><p></p></li><li><a href="../#d0e17955">7.3.2.&nbsp;&#26657;&#39564;&#30334;&#20301;&#25968;</a><p></p><ul><li><a href="../#re.roman.hundreds">&#20363;&nbsp;7.4.&nbsp;&#26816;&#39564;&#30334;&#20301;&#25968;</a></li></ul><p></p></li><li><a href="../#re.nm">7.4.&nbsp;&#20351;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;</a><p></p><ul><li><a href="../#d0e18283">&#20363;&nbsp;7.5.&nbsp;&#32769;&#26041;&#27861;&#65306;&#27599;&#19968;&#20010;&#23383;&#31526;&#37117;&#26159;&#21487;&#36873;&#30340;</a></li><li><a href="../#d0e18385">&#20363;&nbsp;7.6.&nbsp;&#19968;&#20010;&#26032;&#30340;&#26041;&#27861;&#65306;&#20174; <code class="literal">n</code> &#21040; <code class="literal">m</code></a></li></ul><p></p></li><li><a href="../#d0e18499">7.4.1.&nbsp;&#26657;&#39564;&#21313;&#20301;&#25968;&#21644;&#20010;&#20301;&#25968;</a><p></p><ul><li><a href="../#re.tens.example">&#20363;&nbsp;7.7.&nbsp;&#26657;&#39564;&#21313;&#20301;&#25968;</a></li><li><a href="../#re.nm.example">&#20363;&nbsp;7.8.&nbsp;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;&#30830;&#35748;&#32599;&#39532;&#25968;&#23383;</a></li></ul><p></p></li><li><a href="../#re.verbose">7.5.&nbsp;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;</a><p></p><ul><li><a href="../#d0e18954">&#20363;&nbsp;7.9.&nbsp;&#24102;&#26377;&#20869;&#32852;&#27880;&#37322; (Inline Comments) &#30340;&#27491;&#21017;&#34920;&#36798;&#24335;</a></li></ul><p></p></li><li><a href="../#re.phone">7.6.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;</a><p></p><ul><li><a href="../#re.phone.example">&#20363;&nbsp;7.10.&nbsp;&#21457;&#29616;&#25968;&#23383;</a></li><li><a href="../#d0e19229">&#20363;&nbsp;7.11.&nbsp;&#21457;&#29616;&#20998;&#26426;&#21495;</a></li><li><a href="../#d0e19289">&#20363;&nbsp;7.12.&nbsp;&#22788;&#29702;&#19981;&#21516;&#20998;&#38548;&#31526;</a></li><li><a href="../#d0e19386">&#20363;&nbsp;7.13.&nbsp;&#22788;&#29702;&#27809;&#26377;&#20998;&#38548;&#31526;&#30340;&#25968;&#23383;</a></li><li><a href="../#d0e19501">&#20363;&nbsp;7.14.&nbsp;&#22788;&#29702;&#24320;&#22987;&#23383;&#31526;</a></li><li><a href="../#d0e19579">&#20363;&nbsp;7.15.&nbsp;&#30005;&#35805;&#21495;&#30721;&#65292;&#26080;&#35770;&#20309;&#26102;&#25105;&#37117;&#35201;&#25214;&#21040;&#23427;</a></li><li><a href="../#d0e19641">&#20363;&nbsp;7.16.&nbsp;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721; (&#26368;&#32456;&#29256;&#26412;)</a></li></ul><p></p></li></ul><p><a href="../#dialect">&#31532;&nbsp;8&nbsp;&#31456;&nbsp;<acronym class="acronym">HTML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#dialect.divein">8.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#dialect.basehtml.listing">&#20363;&nbsp;8.1.&nbsp;<code class="filename">BaseHTMLProcessor.py</code></a></li><li><a href="../#d0e19890">&#20363;&nbsp;8.2.&nbsp;<code class="filename">dialect.py</code></a></li><li><a href="../#d0e19896">&#20363;&nbsp;8.3.&nbsp;<code class="filename">dialect.py</code> &#30340;&#36755;&#20986;&#32467;&#26524;</a></li></ul><p></p></li><li><a href="../#dialect.sgmllib">8.2.&nbsp;<code class="filename">sgmllib.py</code> &#20171;&#32461;</a><p></p><ul><li><a href="../#d0e20253">&#20363;&nbsp;8.4.&nbsp;<code class="filename">sgmllib.py</code> &#30340;&#26679;&#20363;&#27979;&#35797;</a></li></ul><p></p></li><li><a href="../#dialect.extract">8.3.&nbsp;&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;</a><p></p><ul><li><a href="../#dialect.extract.urllib">&#20363;&nbsp;8.5.&nbsp;<code class="filename">urllib</code> &#20171;&#32461;</a></li><li><a href="../#dialect.extract.links">&#20363;&nbsp;8.6.&nbsp;<code class="filename">urllister.py</code> &#20171;&#32461;</a></li><li><a href="../#dialect.feed.example">&#20363;&nbsp;8.7.&nbsp;&#20351;&#29992; <code class="filename">urllister.py</code></a></li></ul><p></p></li><li><a href="../#dialect.basehtml">8.4.&nbsp;<code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;</a><p></p><ul><li><a href="../#dialect.basehtml.intro">&#20363;&nbsp;8.8.&nbsp;<code class="classname">BaseHTMLProcessor</code> &#20171;&#32461;</a></li><li><a href="../#dialect.output.example">&#20363;&nbsp;8.9.&nbsp;<code class="classname">BaseHTMLProcessor</code> &#36755;&#20986;&#32467;&#26524;</a></li></ul><p></p></li><li><a href="../#dialect.locals">8.5.&nbsp;<code class="function">locals</code> &#21644; <code class="function">globals</code></a><p></p><ul><li><a href="../#d0e21286">&#20363;&nbsp;8.10.&nbsp;<code class="function">locals</code> &#20171;&#32461;</a></li><li><a href="../#dialect.globals.example">&#20363;&nbsp;8.11.&nbsp;<code class="function">globals</code> &#20171;&#32461;</a></li><li><a href="../#dialect.locals.readonly.example">&#20363;&nbsp;8.12.&nbsp;<code class="function">locals</code> &#26159;&#21482;&#35835;&#30340;&#65292;<code class="function">globals</code> &#19981;&#26159;</a></li></ul><p></p></li><li><a href="../#dialect.dictsub">8.6.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a><p></p><ul><li><a href="../#d0e21685">&#20363;&nbsp;8.13.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#20171;&#32461;</a></li><li><a href="../#dialect.unknownstarttag">&#20363;&nbsp;8.14.&nbsp;<code class="filename">BaseHTMLProcessor.py</code> &#20013;&#30340;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;</a></li><li><a href="../#d0e21789">&#20363;&nbsp;8.15.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#30340;&#26356;&#22810;&#20869;&#23481;</a></li></ul><p></p></li><li><a href="../#dialect.quoting">8.7.&nbsp;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;</a><p></p><ul><li><a href="../#dialect.quoting.example">&#20363;&nbsp;8.16.&nbsp;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;</a></li></ul><p></p></li><li><a href="../#dialect.dialectizer">8.8.&nbsp;<code class="filename">dialect.py</code> &#20171;&#32461;</a><p></p><ul><li><a href="../#dialect.specifictags.example">&#20363;&nbsp;8.17.&nbsp;&#22788;&#29702;&#29305;&#21035;&#26631;&#35760;</a></li><li><a href="../#dialect.dialectizer.example">&#20363;&nbsp;8.18.&nbsp;<code class="classname">SGMLParser</code></a></li><li><a href="../#d0e22481">&#20363;&nbsp;8.19.&nbsp;&#35206;&#30422; <code class="function">handle_data</code> &#26041;&#27861;</a></li></ul><p></p></li><li><a href="../#dialect.alltogether">8.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><p></p><ul><li><a href="../#d0e22557">&#20363;&nbsp;8.20.&nbsp;<code class="function">translate</code> &#20989;&#25968;&#65292;&#31532; 1 &#37096;&#20998;</a></li><li><a href="../#d0e22602">&#20363;&nbsp;8.21.&nbsp;<code class="function">translate</code> &#20989;&#25968;&#65292;&#31532; 2 &#37096;&#20998;&#65306;&#22855;&#22937;&#32780;&#21448;&#22855;&#22937;</a></li><li><a href="../#d0e22785">&#20363;&nbsp;8.22.&nbsp;<code class="function">translate</code> &#20989;&#25968;&#65292;&#31532; 3 &#37096;&#20998;</a></li></ul><p></p></li></ul><p><a href="../#kgp">&#31532;&nbsp;9&nbsp;&#31456;&nbsp;<acronym class="acronym">XML</acronym> &#22788;&#29702;</a></p><ul><li><a href="../#kgp.divein">9.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e23015">&#20363;&nbsp;9.1.&nbsp;<code class="filename">kgp.py</code></a></li><li><a href="../#d0e23026">&#20363;&nbsp;9.2.&nbsp;<code class="filename">toolbox.py</code></a></li><li><a href="../#d0e23043">&#20363;&nbsp;9.3.&nbsp;<code class="filename">kgp.py</code> &#30340;&#26679;&#20363;&#36755;&#20986;</a></li><li><a href="../#d0e23063">&#20363;&nbsp;9.4.&nbsp;<code class="filename">kgp.py</code> &#30340;&#31616;&#21333;&#36755;&#20986;</a></li></ul><p></p></li><li><a href="../#kgp.packages">9.2.&nbsp;&#21253;</a><p></p><ul><li><a href="../#d0e23095">&#20363;&nbsp;9.5.&nbsp;&#36733;&#20837;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723; (&#20599;&#30629;&#19968;&#19979;)</a></li><li><a href="../#d0e23153">&#20363;&nbsp;9.6.&nbsp;&#21253;&#30340;&#25991;&#20214;&#24067;&#23616;</a></li><li><a href="../#d0e23196">&#20363;&nbsp;9.7.&nbsp;&#21253;&#20063;&#26159;&#27169;&#22359;</a></li></ul><p></p></li><li><a href="../#kgp.parse">9.3.&nbsp;<acronym class="acronym">XML</acronym> &#35299;&#26512;</a><p></p><ul><li><a href="../#d0e23416">&#20363;&nbsp;9.8.&nbsp;&#36733;&#20837;&#19968;&#20010; <acronym class="acronym">XML</acronym> &#25991;&#26723; (&#36825;&#27425;&#26159;&#30495;&#30340;)</a></li><li><a href="../#kgp.parse.gettingchildnodes.example">&#20363;&nbsp;9.9.&nbsp;&#33719;&#21462;&#23376;&#33410;&#28857;</a></li><li><a href="../#d0e23632">&#20363;&nbsp;9.10.&nbsp;<code class="function">toxml</code> &#29992;&#20110;&#20219;&#20309;&#33410;&#28857;</a></li><li><a href="../#kgp.parse.childnodescanbetext.example">&#20363;&nbsp;9.11.&nbsp;&#23376;&#33410;&#28857;&#21487;&#20197;&#26159;&#25991;&#26412;</a></li><li><a href="../#d0e23802">&#20363;&nbsp;9.12.&nbsp;&#25226;&#25991;&#26412;&#25366;&#20986;&#26469;</a></li></ul><p></p></li><li><a href="../#kgp.unicode">9.4.&nbsp;Unicode</a><p></p><ul><li><a href="../#d0e24013">&#20363;&nbsp;9.13.&nbsp;unicode &#20171;&#32461;</a></li><li><a href="../#d0e24080">&#20363;&nbsp;9.14.&nbsp;&#23384;&#20648;&#38750; <acronym class="acronym">ASCII</acronym> &#23383;&#31526;</a></li><li><a href="../#d0e24181">&#20363;&nbsp;9.15.&nbsp;<code class="filename">sitecustomize.py</code></a></li><li><a href="../#d0e24221">&#20363;&nbsp;9.16.&nbsp;&#35774;&#32622;&#40664;&#35748;&#32534;&#30721;&#30340;&#25928;&#26524;</a></li><li><a href="../#d0e24296">&#20363;&nbsp;9.17.&nbsp;&#25351;&#23450;<code class="filename">.py</code>&#25991;&#20214;&#30340;&#32534;&#30721;</a></li><li><a href="../#d0e24329">&#20363;&nbsp;9.18.&nbsp;<code class="filename">russiansample.xml</code></a></li><li><a href="../#d0e24364">&#20363;&nbsp;9.19.&nbsp;&#35299;&#26512; <code class="filename">russiansample.xml</code></a></li></ul><p></p></li><li><a href="../#kgp.search">9.5.&nbsp;&#25628;&#32034;&#20803;&#32032;</a><p></p><ul><li><a href="../#d0e24604">&#20363;&nbsp;9.20.&nbsp;<code class="filename">binary.xml</code></a></li><li><a href="../#d0e24637">&#20363;&nbsp;9.21.&nbsp;<code class="function">getElementsByTagName</code> &#20171;&#32461;</a></li><li><a href="../#d0e24699">&#20363;&nbsp;9.22.&nbsp;&#27599;&#20010;&#20803;&#32032;&#37117;&#26159;&#21487;&#25628;&#32034;&#30340;</a></li><li><a href="../#d0e24788">&#20363;&nbsp;9.23.&nbsp;&#25628;&#32034;&#23454;&#38469;&#19978;&#26159;&#36882;&#24402;&#30340;</a></li></ul><p></p></li><li><a href="../#kgp.attributes">9.6.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;</a><p></p><ul><li><a href="../#d0e24963">&#20363;&nbsp;9.24.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;</a></li><li><a href="../#d0e25098">&#20363;&nbsp;9.25.&nbsp;&#35775;&#38382;&#21333;&#20010;&#23646;&#24615;</a></li></ul><p></p></li></ul><p><a href="../#streams">&#31532;&nbsp;10&nbsp;&#31456;&nbsp;&#33050;&#26412;&#21644;&#27969;</a></p><ul><li><a href="../#kgp.openanything">10.1.&nbsp;&#25277;&#35937;&#36755;&#20837;&#28304;</a><p></p><ul><li><a href="../#d0e25300">&#20363;&nbsp;10.1.&nbsp;&#20174;&#25991;&#20214;&#20013;&#35299;&#26512; <acronym class="acronym">XML</acronym></a></li><li><a href="../#kgp.openanything.urllib">&#20363;&nbsp;10.2.&nbsp;&#35299;&#26512;&#26469;&#33258; <acronym class="acronym">URL</acronym> &#30340; <acronym class="acronym">XML</acronym></a></li><li><a href="../#d0e25505">&#20363;&nbsp;10.3.&nbsp;&#35299;&#26512;&#23383;&#31526;&#20018; <acronym class="acronym">XML</acronym> (&#23481;&#26131;&#20294;&#19981;&#28789;&#27963;&#30340;&#26041;&#24335;)</a></li><li><a href="../#kgp.openanything.stringio.example">&#20363;&nbsp;10.4.&nbsp;<code class="filename">StringIO</code> &#20171;&#32461;</a></li><li><a href="../#d0e25709">&#20363;&nbsp;10.5.&nbsp;&#35299;&#26512;&#23383;&#31526;&#20018; <acronym class="acronym">XML</acronym> (&#31867;&#25991;&#20214;&#23545;&#35937;&#26041;&#24335;)</a></li><li><a href="../#kgp.openanything.example">&#20363;&nbsp;10.6.&nbsp;<code class="function">openAnything</code></a></li><li><a href="../#d0e25908">&#20363;&nbsp;10.7.&nbsp;&#22312; <code class="filename">kgp.py</code> &#20013;&#20351;&#29992; <code class="function">openAnything</code></a></li></ul><p></p></li><li><a href="../#kgp.stdio">10.2.&nbsp;&#26631;&#20934;&#36755;&#20837;&#12289;&#36755;&#20986;&#21644;&#38169;&#35823;</a><p></p><ul><li><a href="../#d0e25966">&#20363;&nbsp;10.8.&nbsp;<code class="literal">stdout</code> &#21644; <code class="literal">stderr</code> &#20171;&#32461;</a></li><li><a href="../#d0e26093">&#20363;&nbsp;10.9.&nbsp;&#37325;&#23450;&#21521;&#36755;&#20986;</a></li><li><a href="../#d0e26193">&#20363;&nbsp;10.10.&nbsp;&#37325;&#23450;&#21521;&#38169;&#35823;&#20449;&#24687;</a></li><li><a href="../#kgp.stdio.print.example">&#20363;&nbsp;10.11.&nbsp;&#25171;&#21360;&#21040; <code class="literal">stderr</code></a></li><li><a href="../#d0e26323">&#20363;&nbsp;10.12.&nbsp;&#38142;&#25509;&#21629;&#20196;</a></li><li><a href="../#d0e26424">&#20363;&nbsp;10.13.&nbsp;&#22312; <code class="filename">kgp.py</code> &#20013;&#20174;&#26631;&#20934;&#36755;&#20837;&#35835;&#21462;</a></li></ul><p></p></li><li><a href="../#kgp.cache">10.3.&nbsp;&#26597;&#35810;&#32531;&#20914;&#33410;&#28857;</a><p></p><ul><li><a href="../#d0e26553">&#20363;&nbsp;10.14.&nbsp;<code class="function">loadGrammar</code></a></li><li><a href="../#d0e26625">&#20363;&nbsp;10.15.&nbsp;&#20351;&#29992; <code class="sgmltag-element">ref</code> &#20803;&#32032;&#32531;&#20914;</a></li></ul><p></p></li><li><a href="../#kgp.child">10.4.&nbsp;&#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;</a><p></p><ul><li><a href="../#d0e26690">&#20363;&nbsp;10.16.&nbsp;&#26597;&#25214;&#30452;&#25509;&#23376;&#20803;&#32032;</a></li></ul><p></p></li><li><a href="../#kgp.handler">10.5.&nbsp;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;</a><p></p><ul><li><a href="../#d0e26817">&#20363;&nbsp;10.17.&nbsp;&#24050;&#35299;&#26512; <acronym class="acronym">XML</acronym> &#23545;&#35937;&#30340;&#31867;&#21517;</a></li><li><a href="../#d0e26923">&#20363;&nbsp;10.18.&nbsp;<code class="function">parse</code>&#65292;&#36890;&#29992; <acronym class="acronym">XML</acronym> &#33410;&#28857;&#20998;&#21457;&#22120;</a></li><li><a href="../#d0e26960">&#20363;&nbsp;10.19.&nbsp;<code class="function">parse</code> &#20998;&#21457;&#22120;&#35843;&#29992;&#30340;&#20989;&#25968;</a></li></ul><p></p></li><li><a href="../#kgp.commandline">10.6.&nbsp;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;</a><p></p><ul><li><a href="../#d0e27060">&#20363;&nbsp;10.20.&nbsp;<code class="varname">sys.argv</code> &#20171;&#32461;</a></li><li><a href="../#d0e27081">&#20363;&nbsp;10.21.&nbsp;<code class="varname">sys.argv</code> &#30340;&#20869;&#23481;</a></li><li><a href="../#d0e27171">&#20363;&nbsp;10.22.&nbsp;<code class="filename">getopt</code> &#20171;&#32461;</a></li><li><a href="../#d0e27342">&#20363;&nbsp;10.23.&nbsp;&#22312; <code class="filename">kgp.py</code> &#20013;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;</a></li></ul><p></p></li></ul><p><a href="../#oa">&#31532;&nbsp;11&nbsp;&#31456;&nbsp;HTTP Web &#26381;&#21153;</a></p><ul><li><a href="../#oa.divein">11.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e27701">&#20363;&nbsp;11.1.&nbsp;<code class="filename">openanything.py</code></a></li></ul><p></p></li><li><a href="../#oa.review">11.2.&nbsp;&#36991;&#20813;&#36890;&#36807; HTTP &#37325;&#22797;&#22320;&#33719;&#21462;&#25968;&#25454;</a><p></p><ul><li><a href="../#d0e27729">&#20363;&nbsp;11.2.&nbsp;&#29992;&#30452;&#25509;&#32780;&#21407;&#22987;&#30340;&#26041;&#27861;&#19979;&#36733; feed</a></li></ul><p></p></li><li><a href="../#oa.debug">11.4.&nbsp;&#35843;&#35797; HTTP web &#26381;&#21153;</a><p></p><ul><li><a href="../#d0e27980">&#20363;&nbsp;11.3.&nbsp;&#35843;&#35797; HTTP</a></li></ul><p></p></li><li><a href="../#oa.useragent">11.5.&nbsp;&#35774;&#32622; <code class="literal">User-Agent</code></a><p></p><ul><li><a href="../#d0e28175">&#20363;&nbsp;11.4.&nbsp;<code class="filename">urllib2</code> &#20171;&#32461;</a></li><li><a href="../#d0e28299">&#20363;&nbsp;11.5.&nbsp;&#32473; <code class="classname">Request</code> &#28155;&#21152;&#22836;&#20449;&#24687;</a></li></ul><p></p></li><li><a href="../#oa.etags">11.6.&nbsp;&#22788;&#29702; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code></a><p></p><ul><li><a href="../#oa.etags.example.1">&#20363;&nbsp;11.6.&nbsp;&#27979;&#35797; <code class="literal">Last-Modified</code></a></li><li><a href="../#d0e28580">&#20363;&nbsp;11.7.&nbsp;&#23450;&#20041; URL &#22788;&#29702;&#22120;</a></li><li><a href="../#d0e28634">&#20363;&nbsp;11.8.&nbsp;&#20351;&#29992;&#33258;&#23450;&#20041; URL &#22788;&#29702;&#22120;</a></li><li><a href="../#oa.etags.example">&#20363;&nbsp;11.9.&nbsp;&#25903;&#25345; <code class="literal">ETag</code>/<code class="literal">If-None-Match</code></a></li></ul><p></p></li><li><a href="../#oa.redirect">11.7.&nbsp;&#22788;&#29702;&#37325;&#23450;&#21521;</a><p></p><ul><li><a href="../#d0e28926">&#20363;&nbsp;11.10.&nbsp;&#27809;&#26377;&#37325;&#23450;&#21521;&#22788;&#29702;&#30340;&#24773;&#20917;&#19979;&#65292;&#35775;&#38382; web &#26381;&#21153; </a></li><li><a href="../#d0e29062">&#20363;&nbsp;11.11.&nbsp;&#23450;&#20041;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;</a></li><li><a href="../#d0e29128">&#20363;&nbsp;11.12.&nbsp;&#20351;&#29992;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;&#26816;&#26597;&#27704;&#20037;&#37325;&#23450;&#21521;</a></li><li><a href="../#d0e29221">&#20363;&nbsp;11.13.&nbsp;&#20351;&#29992;&#37325;&#23450;&#21521;&#22788;&#29702;&#22120;&#26816;&#26597;&#20020;&#26102;&#37325;&#23450;&#21521;</a></li></ul><p></p></li><li><a href="../#oa.gzip">11.8.&nbsp;&#22788;&#29702;&#21387;&#32553;&#25968;&#25454;</a><p></p><ul><li><a href="../#d0e29332">&#20363;&nbsp;11.14.&nbsp;&#21578;&#35785;&#26381;&#21153;&#22120;&#20320;&#24819;&#33719;&#24471;&#21387;&#32553;&#25968;&#25454;</a></li><li><a href="../#d0e29417">&#20363;&nbsp;11.15.&nbsp;&#35299;&#21387;&#32553;&#25968;&#25454;</a></li><li><a href="../#d0e29584">&#20363;&nbsp;11.16.&nbsp;&#20174;&#26381;&#21153;&#22120;&#30452;&#25509;&#35299;&#21387;&#32553;&#25968;&#25454;</a></li></ul><p></p></li><li><a href="../#oa.alltogether">11.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><p></p><ul><li><a href="../#d0e29670">&#20363;&nbsp;11.17.&nbsp;<code class="function">openanything</code> &#20989;&#25968;</a></li><li><a href="../#d0e29768">&#20363;&nbsp;11.18.&nbsp;<code class="function">fetch</code> &#20989;&#25968;</a></li><li><a href="../#d0e29843">&#20363;&nbsp;11.19.&nbsp;&#20351;&#29992; <code class="filename">openanything.py</code></a></li></ul><p></p></li></ul><p><a href="../#soap">&#31532;&nbsp;12&nbsp;&#31456;&nbsp;<acronym class="acronym">SOAP</acronym> Web &#26381;&#21153;</a></p><ul><li><a href="../#soap.divein">12.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e30081">&#20363;&nbsp;12.1.&nbsp;<code class="filename">search.py</code></a></li><li><a href="../#d0e30094">&#20363;&nbsp;12.2.&nbsp;<code class="filename">search.py</code> &#30340;&#20351;&#29992;&#26679;&#20363;</a></li></ul><p></p></li><li><a href="../#d0e30152">12.2.1.&nbsp;&#23433;&#35013; <span class="application">PyXML</span></a><p></p><ul><li><a href="../#d0e30229">&#20363;&nbsp;12.3.&nbsp;&#26816;&#39564; <span class="application">PyXML</span> &#23433;&#35013;</a></li></ul><p></p></li><li><a href="../#d0e30255">12.2.2.&nbsp;&#23433;&#35013; <span class="application">fpconst</span></a><p></p><ul><li><a href="../#d0e30327">&#20363;&nbsp;12.4.&nbsp;&#26816;&#39564; <span class="application">fpconst</span> &#23433;&#35013;</a></li></ul><p></p></li><li><a href="../#d0e30353">12.2.3.&nbsp;&#23433;&#35013; <span class="application">SOAPpy</span></a><p></p><ul><li><a href="../#d0e30419">&#20363;&nbsp;12.5.&nbsp;&#26816;&#39564; <span class="application">SOAPpy</span> &#23433;&#35013;</a></li></ul><p></p></li><li><a href="../#soap.firststeps">12.3.&nbsp;&#27493;&#20837; <acronym class="acronym">SOAP</acronym></a><p></p><ul><li><a href="../#d0e30468">&#20363;&nbsp;12.6.&nbsp;&#33719;&#24471;&#29616;&#22312;&#30340;&#27668;&#28201;</a></li></ul><p></p></li><li><a href="../#soap.debug">12.4.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;</a><p></p><ul><li><a href="../#d0e30604">&#20363;&nbsp;12.7.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;</a></li></ul><p></p></li><li><a href="../#soap.introspection">12.6.&nbsp;&#20197; <acronym class="acronym">WSDL</acronym> &#36827;&#34892; <acronym class="acronym">SOAP</acronym> &#20869;&#30465;</a><p></p><ul><li><a href="../#d0e30935">&#20363;&nbsp;12.8.&nbsp;&#25581;&#31034;&#26377;&#25928;&#26041;&#27861;</a></li><li><a href="../#d0e31036">&#20363;&nbsp;12.9.&nbsp;&#25581;&#31034;&#19968;&#20010;&#26041;&#27861;&#30340;&#21442;&#25968;</a></li><li><a href="../#d0e31143">&#20363;&nbsp;12.10.&nbsp;&#25581;&#31034;&#26041;&#27861;&#36820;&#22238;&#20540;</a></li><li><a href="../#d0e31215">&#20363;&nbsp;12.11.&nbsp;&#36890;&#36807; <acronym class="acronym">WSDL</acronym> proxy &#35843;&#29992;&#19968;&#20010; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;</a></li></ul><p></p></li><li><a href="../#soap.google">12.7.&nbsp;&#25628;&#32034; Google</a><p></p><ul><li><a href="../#d0e31385">&#20363;&nbsp;12.12.&nbsp;&#20869;&#30465; Google &#32593;&#32476;&#26381;&#21153;</a></li><li><a href="../#d0e31570">&#20363;&nbsp;12.13.&nbsp;&#25628;&#32034; Google</a></li><li><a href="../#d0e31680">&#20363;&nbsp;12.14.&nbsp;&#20174;Google&#33719;&#24471;&#27425;&#35201;&#20449;&#24687;</a></li></ul><p></p></li><li><a href="../#soap.troubleshooting">12.8.&nbsp; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#25925;&#38556;&#25490;&#38500;</a><p></p><ul><li><a href="../#d0e31792">&#20363;&nbsp;12.15.&nbsp;&#20197;&#38169;&#35823;&#30340;&#35774;&#32622;&#35843;&#29992; Proxy &#26041;&#27861;</a></li><li><a href="../#d0e31878">&#20363;&nbsp;12.16.&nbsp;&#20197;&#38169;&#35823;&#21442;&#25968;&#35843;&#29992;&#26041;&#27861;</a></li><li><a href="../#d0e31958">&#20363;&nbsp;12.17.&nbsp;&#35843;&#29992;&#26102;&#26041;&#27861;&#25152;&#26399;&#24453;&#30340;&#36820;&#22238;&#20540;&#20010;&#25968;&#38169;&#35823;</a></li><li><a href="../#d0e32013">&#20363;&nbsp;12.18.&nbsp;&#35843;&#29992;&#26041;&#27861;&#36820;&#22238;&#19968;&#20010;&#24212;&#29992;&#29305;&#23450;&#30340;&#38169;&#35823;</a></li></ul><p></p></li></ul><p><a href="../#roman">&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;</a></p><ul><li><a href="../#roman.romantest">13.3.&nbsp;<code class="filename">romantest.py</code> &#20171;&#32461;</a><p></p><ul><li><a href="../#d0e32342">&#20363;&nbsp;13.1.&nbsp;<code class="filename">romantest.py</code></a></li></ul><p></p></li><li><a href="../#roman.success">13.4.&nbsp;&#27491;&#38754;&#27979;&#35797; (Testing for success)</a><p></p><ul><li><a href="../#roman.testtoromanknownvalues.example">&#20363;&nbsp;13.2.&nbsp;<code class="function">testToRomanKnownValues</code></a></li></ul><p></p></li><li><a href="../#roman.failure">13.5.&nbsp;&#36127;&#38754;&#27979;&#35797; (Testing for failure)</a><p></p><ul><li><a href="../#roman.tobadinput.example">&#20363;&nbsp;13.3.&nbsp;&#27979;&#35797; <code class="function">toRoman</code> &#30340;&#26080;&#25928;&#36755;&#20837;</a></li><li><a href="../#roman.frombadinput.example">&#20363;&nbsp;13.4.&nbsp;&#27979;&#35797; <code class="function">fromRoman</code> &#30340;&#26080;&#25928;&#36755;&#20837;</a></li></ul><p></p></li><li><a href="../#roman.sanity">13.6.&nbsp;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)</a><p></p><ul><li><a href="../#roman.sanity.example">&#20363;&nbsp;13.5.&nbsp;&#20197; <code class="function">toRoman</code> &#27979;&#35797; <code class="function">fromRoman</code> &#30340;&#36755;&#20986;</a></li><li><a href="../#d0e32914">&#20363;&nbsp;13.6.&nbsp;&#22823;&#23567;&#20889;&#27979;&#35797;</a></li></ul><p></p></li></ul><p><a href="../#roman1.5">&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</a></p><ul><li><a href="../#roman.stage1">14.1.&nbsp;<code class="filename">roman.py</code>, &#31532; 1 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e33028">&#20363;&nbsp;14.1.&nbsp;<code class="filename">roman1.py</code></a></li><li><a href="../#roman.stage1.output">&#20363;&nbsp;14.2.&nbsp;&#20197; <code class="filename">romantest1.py</code> &#27979;&#35797; <code class="filename">roman1.py</code> &#30340;&#36755;&#20986;</a></li></ul><p></p></li><li><a href="../#roman.stage2">14.2.&nbsp;<code class="filename">roman.py</code>, &#31532; 2 &#38454;&#27573;</a><p></p><ul><li><a href="../#roman.stage2.example">&#20363;&nbsp;14.3.&nbsp;<code class="filename">roman2.py</code></a></li><li><a href="../#d0e33360">&#20363;&nbsp;14.4.&nbsp;<code class="function">toRoman</code> &#22914;&#20309;&#24037;&#20316;</a></li><li><a href="../#d0e33398">&#20363;&nbsp;14.5.&nbsp;&#20197; <code class="filename">romantest2.py</code> &#27979;&#35797; <code class="filename">roman2.py</code> &#30340;&#36755;&#20986;</a></li></ul><p></p></li><li><a href="../#roman.stage3">14.3.&nbsp;<code class="filename">roman.py</code>, &#31532; 3 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e33525">&#20363;&nbsp;14.6.&nbsp;<code class="filename">roman3.py</code></a></li><li><a href="../#d0e33568">&#20363;&nbsp;14.7.&nbsp;&#35266;&#23519; <code class="function">toRoman</code> &#22914;&#20309;&#22788;&#29702;&#26080;&#25928;&#36755;&#20837;</a></li><li><a href="../#d0e33597">&#20363;&nbsp;14.8.&nbsp;&#29992; <code class="filename">romantest3.py</code> &#27979;&#35797; <code class="filename">roman3.py</code> &#30340;&#32467;&#26524;</a></li></ul><p></p></li><li><a href="../#roman.stage4">14.4.&nbsp;<code class="filename">roman.py</code>, &#31532; 4 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e33740">&#20363;&nbsp;14.9.&nbsp;<code class="filename">roman4.py</code></a></li><li><a href="../#d0e33769">&#20363;&nbsp;14.10.&nbsp;<code class="function">fromRoman</code> &#22914;&#20309;&#24037;&#20316;</a></li><li><a href="../#d0e33801">&#20363;&nbsp;14.11.&nbsp;&#29992; <code class="filename">romantest4.py</code> &#27979;&#35797; <code class="filename">roman4.py</code> &#30340;&#32467;&#26524;</a></li></ul><p></p></li><li><a href="../#roman.stage5">14.5.&nbsp;<code class="filename">roman.py</code>, &#31532; 5 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e34178">&#20363;&nbsp;14.12.&nbsp;<code class="filename">roman5.py</code></a></li><li><a href="../#d0e34248">&#20363;&nbsp;14.13.&nbsp;&#29992; <code class="filename">romantest5.py</code> &#27979;&#35797; <code class="filename">roman5.py</code> &#30340;&#32467;&#26524;</a></li></ul><p></p></li></ul><p><a href="../#roman2">&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;</a></p><ul><li><a href="../#roman.bugs">15.1.&nbsp;&#22788;&#29702; bugs</a><p></p><ul><li><a href="../#d0e34327">&#20363;&nbsp;15.1.&nbsp;&#20851;&#20110; Bug</a></li><li><a href="../#d0e34357">&#20363;&nbsp;15.2.&nbsp;&#27979;&#35797; bug (<code class="filename">romantest61.py</code>)</a></li><li><a href="../#d0e34379">&#20363;&nbsp;15.3.&nbsp;&#29992; <code class="filename">romantest61.py</code> &#27979;&#35797; <code class="filename">roman61.py</code> &#30340;&#32467;&#26524;</a></li><li><a href="../#d0e34399">&#20363;&nbsp;15.4.&nbsp;&#20462;&#25913; Bug (<code class="filename">roman62.py</code>)</a></li><li><a href="../#d0e34421">&#20363;&nbsp;15.5.&nbsp;&#29992; <code class="filename">romantest62.py</code> &#27979;&#35797; <code class="filename">roman62.py</code> &#30340;&#32467;&#26524;</a></li></ul><p></p></li><li><a href="../#roman.change">15.2.&nbsp;&#24212;&#23545;&#38656;&#27714;&#21464;&#21270;</a><p></p><ul><li><a href="../#d0e34478">&#20363;&nbsp;15.6.&nbsp;&#20462;&#25913;&#27979;&#35797;&#29992;&#20363;&#20197;&#36866;&#24212;&#26032;&#38656;&#27714; (<code class="filename">romantest71.py</code>)</a></li><li><a href="../#d0e34574">&#20363;&nbsp;15.7.&nbsp;&#29992; <code class="filename">romantest71.py</code> &#27979;&#35797; <code class="filename">roman71.py</code> &#30340;&#32467;&#26524;</a></li><li><a href="../#d0e34679">&#20363;&nbsp;15.8.&nbsp;&#20026;&#26032;&#30340;&#38656;&#27714;&#32534;&#20889;&#20195;&#30721; (<code class="filename">roman72.py</code>)</a></li><li><a href="../#roman.roman72.output">&#20363;&nbsp;15.9.&nbsp;&#29992; <code class="filename">romantest72.py</code> &#27979;&#35797; <code class="filename">roman72.py</code> &#30340;&#32467;&#26524;</a></li></ul><p></p></li><li><a href="../#roman.refactoring">15.3.&nbsp;&#37325;&#26500;</a><p></p><ul><li><a href="../#d0e34816">&#20363;&nbsp;15.10.&nbsp;&#32534;&#35793;&#27491;&#21017;&#34920;&#36798;&#24335;</a></li><li><a href="../#d0e34937">&#20363;&nbsp;15.11.&nbsp;<code class="filename">roman81.py</code> &#20013;&#24050;&#32534;&#35793;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;</a></li><li><a href="../#roman.stage8.1.output">&#20363;&nbsp;15.12.&nbsp;&#29992; <code class="filename">romantest81.py</code> &#27979;&#35797; <code class="filename">roman81.py</code> &#30340;&#32467;&#26524;</a></li><li><a href="../#d0e35062">&#20363;&nbsp;15.13.&nbsp;<code class="filename">roman82.py</code></a></li><li><a href="../#d0e35116">&#20363;&nbsp;15.14.&nbsp;&#20197; <code class="filename">romantest82.py</code> &#27979;&#35797; <code class="filename">roman82.py</code> &#30340;&#32467;&#26524;</a></li><li><a href="../#d0e35171">&#20363;&nbsp;15.15.&nbsp;<code class="filename">roman83.py</code></a></li><li><a href="../#d0e35210">&#20363;&nbsp;15.16.&nbsp;&#29992; <code class="filename">romantest83.py</code> &#27979;&#35797; <code class="filename">roman83.py</code> &#30340;&#32467;&#26524;</a></li></ul><p></p></li><li><a href="../#roman.postscript">15.4.&nbsp;&#21518;&#35760;</a><p></p><ul><li><a href="../#d0e35256">&#20363;&nbsp;15.17.&nbsp;<code class="filename">roman9.py</code></a></li><li><a href="../#d0e35274">&#20363;&nbsp;15.18.&nbsp;&#29992; <code class="filename">romantest9.py</code> &#27979;&#35797; <code class="filename">roman9.py</code> &#30340;&#32467;&#26524;</a></li></ul><p></p></li></ul><p><a href="../#regression">&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;</a></p><ul><li><a href="../#regression.divein">16.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e35447">&#20363;&nbsp;16.1.&nbsp;<code class="filename">regression.py</code></a></li><li><a href="../#d0e35465">&#20363;&nbsp;16.2.&nbsp;<code class="filename">regression.py</code> &#30340;&#26679;&#20363;&#36755;&#20986;</a></li></ul><p></p></li><li><a href="../#regression.path">16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;</a><p></p><ul><li><a href="../#d0e35531">&#20363;&nbsp;16.3.&nbsp;<code class="filename">fullpath.py</code></a></li><li><a href="../#d0e35572">&#20363;&nbsp;16.4.&nbsp;<code class="function">os.path.abspath</code> &#30340;&#36827;&#19968;&#27493;&#35299;&#37322;</a></li><li><a href="../#d0e35700">&#20363;&nbsp;16.5.&nbsp;<code class="filename">fullpath.py</code> &#30340;&#26679;&#20363;&#36755;&#20986;</a></li><li><a href="../#regression.path.cwd.example">&#20363;&nbsp;16.6.&nbsp;&#22312;&#24403;&#21069;&#30446;&#24405;&#36816;&#34892;&#33050;&#26412;</a></li></ul><p></p></li><li><a href="../#regression.filter">16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;</a><p></p><ul><li><a href="../#d0e35894">&#20363;&nbsp;16.7.&nbsp;<code class="function">filter</code> &#20171;&#32461;</a></li><li><a href="../#d0e36031">&#20363;&nbsp;16.8.&nbsp;<code class="filename">regression.py</code> &#20013;&#30340; <code class="function">filter</code></a></li><li><a href="../#d0e36132">&#20363;&nbsp;16.9.&nbsp;&#20197;&#21015;&#34920;&#35299;&#26512;&#27861;&#36807;&#28388;</a></li></ul><p></p></li><li><a href="../#regression.map">16.4.&nbsp;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;</a><p></p><ul><li><a href="../#d0e36163">&#20363;&nbsp;16.10.&nbsp;<code class="function">map</code> &#20171;&#32461;</a></li><li><a href="../#d0e36267">&#20363;&nbsp;16.11.&nbsp;<code class="function">map</code> &#19982;&#28151;&#21512;&#25968;&#25454;&#31867;&#22411;&#30340;&#21015;&#34920;</a></li><li><a href="../#d0e36303">&#20363;&nbsp;16.12.&nbsp;<code class="filename">regression.py</code> &#20013;&#30340; <code class="function">map</code></a></li></ul><p></p></li><li><a href="../#regression.import">16.6.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;</a><p></p><ul><li><a href="../#d0e36476">&#20363;&nbsp;16.13.&nbsp;&#21516;&#26102;&#23548;&#20837;&#22810;&#20010;&#27169;&#22359;</a></li><li><a href="../#d0e36501">&#20363;&nbsp;16.14.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;</a></li><li><a href="../#d0e36583">&#20363;&nbsp;16.15.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;&#21015;&#34920;</a></li></ul><p></p></li><li><a href="../#regression.alltogether">16.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;</a><p></p><ul><li><a href="../#d0e36698">&#20363;&nbsp;16.16.&nbsp;<code class="function">regressionTest</code> &#20989;&#25968;</a></li><li><a href="../#d0e36715">&#20363;&nbsp;16.17.&nbsp;&#27493;&#39588; 1&#65306;&#33719;&#24471;&#25152;&#26377;&#25991;&#20214;</a></li><li><a href="../#d0e36754">&#20363;&nbsp;16.18.&nbsp;&#27493;&#39588; 2&#65306;&#25214;&#21040;&#20320;&#20851;&#27880;&#30340;&#22810;&#20010;&#25991;&#20214;</a></li><li><a href="../#d0e36802">&#20363;&nbsp;16.19.&nbsp;&#27493;&#39588; 3&#65306;&#26144;&#23556;&#25991;&#20214;&#21517;&#21040;&#27169;&#22359;&#21517;</a></li><li><a href="../#d0e36886">&#20363;&nbsp;16.20.&nbsp;&#27493;&#39588; 4&#65306;&#26144;&#23556;&#27169;&#22359;&#21517;&#21040;&#27169;&#22359;</a></li><li><a href="../#d0e36947">&#20363;&nbsp;16.21.&nbsp;&#27493;&#39588; 5&#65306;&#23558;&#27169;&#22359;&#36733;&#20837;&#27979;&#35797;&#22871;&#20214;</a></li><li><a href="../#d0e37022">&#20363;&nbsp;16.22.&nbsp;&#27493;&#39588; 6&#65306;&#21578;&#30693; <code class="filename">unittest</code> &#20351;&#29992;&#20320;&#30340;&#27979;&#35797;&#22871;&#20214;</a></li></ul><p></p></li></ul><p><a href="../#plural">&#31532;&nbsp;17&nbsp;&#31456;&nbsp;&#21160;&#24577;&#20989;&#25968;</a></p><ul><li><a href="../#plural.stage1">17.2.&nbsp;<code class="filename">plural.py</code>, &#31532; 1 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e37260">&#20363;&nbsp;17.1.&nbsp;<code class="filename">plural1.py</code></a></li><li><a href="../#d0e37312">&#20363;&nbsp;17.2.&nbsp;<code class="function">re.sub</code> &#20171;&#32461;</a></li><li><a href="../#d0e37442">&#20363;&nbsp;17.3.&nbsp;&#22238;&#21040; <code class="filename">plural1.py</code></a></li><li><a href="../#d0e37555">&#20363;&nbsp;17.4.&nbsp;&#27491;&#21017;&#34920;&#36798;&#24335;&#20013;&#21542;&#23450;&#30340;&#26356;&#22810;&#24212;&#29992;</a></li><li><a href="../#d0e37658">&#20363;&nbsp;17.5.&nbsp;&#26356;&#22810;&#30340; <code class="function">re.sub</code></a></li></ul><p></p></li><li><a href="../#plural.stage2">17.3.&nbsp;<code class="filename">plural.py</code>, &#31532; 2 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e37780">&#20363;&nbsp;17.6.&nbsp;<code class="filename">plural2.py</code></a></li><li><a href="../#d0e37877">&#20363;&nbsp;17.7.&nbsp;&#21078;&#26512; <code class="function">plural</code> &#20989;&#25968;</a></li></ul><p></p></li><li><a href="../#plural.stage3">17.4.&nbsp;<code class="filename">plural.py</code>, &#31532; 3 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e37925">&#20363;&nbsp;17.8.&nbsp;<code class="filename">plural3.py</code></a></li></ul><p></p></li><li><a href="../#plural.stage4">17.5.&nbsp;<code class="filename">plural.py</code>, &#31532; 4 &#38454;&#27573;</a><p></p><ul><li><a href="../#plural.stage4.example.1">&#20363;&nbsp;17.9.&nbsp;<code class="filename">plural4.py</code></a></li><li><a href="../#d0e38085">&#20363;&nbsp;17.10.&nbsp;<code class="filename">plural4.py</code> &#32487;&#32493;</a></li><li><a href="../#d0e38132">&#20363;&nbsp;17.11.&nbsp;&#21078;&#26512;&#35268;&#21017;&#23450;&#20041;</a></li><li><a href="../#plural.finishing.up">&#20363;&nbsp;17.12.&nbsp;<code class="filename">plural4.py</code> &#30340;&#23436;&#25104;</a></li><li><a href="../#d0e38176">&#20363;&nbsp;17.13.&nbsp;&#22238;&#22836;&#30475; <code class="function">buildMatchAndApplyFunctions</code></a></li><li><a href="../#d0e38198">&#20363;&nbsp;17.14.&nbsp;&#35843;&#29992;&#20989;&#25968;&#26102;&#23637;&#24320;&#20803;&#32452;</a></li></ul><p></p></li><li><a href="../#plural.stage5">17.6.&nbsp;<code class="filename">plural.py</code>, &#31532; 5 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e38298">&#20363;&nbsp;17.15.&nbsp;<code class="filename">rules.en</code></a></li><li><a href="../#d0e38306">&#20363;&nbsp;17.16.&nbsp;<code class="filename">plural5.py</code></a></li></ul><p></p></li><li><a href="../#plural.stage6">17.7.&nbsp;<code class="filename">plural.py</code>, &#31532; 6 &#38454;&#27573;</a><p></p><ul><li><a href="../#d0e38429">&#20363;&nbsp;17.17.&nbsp;<code class="filename">plural6.py</code></a></li><li><a href="../#plural.introducing.generators">&#20363;&nbsp;17.18.&nbsp;&#20171;&#32461;&#29983;&#25104;&#22120;</a></li><li><a href="../#plural.fib.example">&#20363;&nbsp;17.19.&nbsp;&#20351;&#29992;&#29983;&#25104;&#22120;&#26367;&#20195;&#36882;&#24402;</a></li><li><a href="../#d0e38712">&#20363;&nbsp;17.20.&nbsp;<code class="literal">for</code> &#24490;&#29615;&#20013;&#30340;&#29983;&#25104;&#22120;</a></li><li><a href="../#d0e38793">&#20363;&nbsp;17.21.&nbsp;&#29983;&#25104;&#22120;&#29983;&#25104;&#21160;&#24577;&#20989;&#25968;</a></li></ul><p></p></li></ul><p><a href="../#soundex">&#31532;&nbsp;18&nbsp;&#31456;&nbsp;&#24615;&#33021;&#20248;&#21270;</a></p><ul><li><a href="../#soundex.divein">18.1.&nbsp;&#27010;&#35272;</a><p></p><ul><li><a href="../#d0e39037">&#20363;&nbsp;18.1.&nbsp;<code class="filename">soundex/stage1/soundex1a.py</code></a></li></ul><p></p></li><li><a href="../#soundex.timeit">18.2.&nbsp;&#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;</a><p></p><ul><li><a href="../#d0e39095">&#20363;&nbsp;18.2.&nbsp;<code class="filename">timeit</code> &#20171;&#32461;</a></li></ul><p></p></li><li><a href="../#soundex.stage1">18.3.&nbsp;&#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;</a><p></p><ul><li><a href="../#d0e39467">&#20363;&nbsp;18.3.&nbsp;&#30446;&#21069;&#20026;&#27490;&#26368;&#22909;&#30340;&#32467;&#26524;&#65306;<code class="filename">soundex/stage1/soundex1e.py</code></a></li></ul><p></p></li><li><a href="../#soundex.stage2">18.4.&nbsp;&#20248;&#21270;&#23383;&#20856;&#26597;&#25214;</a><p></p><ul><li><a href="../#d0e39676">&#20363;&nbsp;18.4.&nbsp;&#30446;&#21069;&#30340;&#26368;&#20339;&#32467;&#26524;&#65306;<code class="filename">soundex/stage2/soundex2c.py</code></a></li></ul><p></p></li><li><a href="../#soundex.stage3">18.5.&nbsp;&#20248;&#21270;&#21015;&#34920;&#25805;&#20316;</a><p></p><ul><li><a href="../#d0e39852">&#20363;&nbsp;18.5.&nbsp;&#30446;&#21069;&#30340;&#26368;&#20339;&#32467;&#26524;&#65306;<code class="filename">soundex/stage2/soundex2c.py</code></a></li></ul><p></p></li></ul></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="revhistory"></a>&#38468;&#24405;&nbsp;E.&nbsp;&#20462;&#35746;&#21382;&#21490;</h1></div></div></div><div class="revhistory"><table border="1" width="100%" summary="Revision history"><tr><th align="left" valign="top" colspan="2"><b>&#20462;&#35746;&#21382;&#21490;</b></th></tr><tr><td align="left">&#20462;&#35746; 5.4b, r2209</td><td align="left">2008-01-27</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li><a href="http://www.woodpecker.org.cn/moin/DiveIntoPythonZh/2007-12-13">http://www.woodpecker.org.cn/moin/DiveIntoPythonZh/2007-12-13</a></li><li><a href="http://www.woodpecker.org.cn/moin/DiveIntoPythonZh/2008-01-27">http://www.woodpecker.org.cn/moin/DiveIntoPythonZh/2008-01-27</a></li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 5.4b</td><td align="left">2007-09-01</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>XiaQ (xiaqqaix AT gmail DOT com) &#36827;&#34892;&#20102; Dive Into Python &#20013;&#25991;&#29256;&#30340;&#20462;&#35746;&#24037;&#20316;&#65292;&#37325;&#21457;&#24067;&#20026; 5.4b &#29256;&#12290;&#21487;&#20197;&#22312; Dive Into Python &#20013;&#25991;&#29256;&#30340;&#39033;&#30446;&#20027;&#39029; (<a href="http://wiki.woodpecker.org.cn/moin/DiveIntoPythonZh">http://wiki.woodpecker.org.cn/moin/DiveIntoPythonZh</a>)&#19978;&#25214;&#21040;&#19968;&#20221;&#23436;&#25972;&#30340; (&#21516;&#26102;&#20063;&#26159;&#26497;&#20854;&#20887;&#38271;&#30340;) &#20462;&#35746;&#28165;&#21333;&#12290;&#27880;&#24847;&#21407;&#33521;&#25991;&#29256;&#19981;&#21547; 5.4b &#29256;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 5.4 &#20013;&#25991;&#29256;</td><td align="left">2006-04-25</td></tr><tr><td align="left" colspan="2">
&#21442;&#21152;&#20102; Dive Into Python &#20013;&#25991;&#29256; 5.4 &#29256;&#32763;&#35793;&#30340;&#26377;&#65306;
<div class="itemizedlist"><ul><li>limodou (limodou AT gmail DOT com)</li><li>Zoom.Quiet (zoom.quiet AT gmail DOT com)</li><li>Jason Xie (jason AT sinoesl DOT org)</li><li>YuLin (yulin724 AT gmail DOT com)</li><li>Weigang LI (dimens AT gmail DOT com)</li><li>wolfg (wolfg1969 AT gmail DOT com)</li><li>Osmond (sinosmond AT gmail DOT com)</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 5.4</td><td align="left">2004-05-20</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.divein" title="12.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;12.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.install" title="12.2.&nbsp;&#23433;&#35013; SOAP &#24211;">&#31532;&nbsp;12.2&nbsp;&#33410; &#8220;&#23433;&#35013; SOAP &#24211;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.firststeps" title="12.3.&nbsp;&#27493;&#20837; SOAP">&#31532;&nbsp;12.3&nbsp;&#33410; &#8220;&#27493;&#20837; <acronym class="acronym">SOAP</acronym>&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.debug" title="12.4.&nbsp; SOAP &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;">&#31532;&nbsp;12.4&nbsp;&#33410; &#8220; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#26597;&#38169;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.wsdl" title="12.5.&nbsp;WSDL &#20171;&#32461;">&#31532;&nbsp;12.5&nbsp;&#33410; &#8220;<acronym class="acronym">WSDL</acronym> &#20171;&#32461;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.introspection" title="12.6.&nbsp;&#20197; WSDL &#36827;&#34892; SOAP &#20869;&#30465;">&#31532;&nbsp;12.6&nbsp;&#33410; &#8220;&#20197; <acronym class="acronym">WSDL</acronym> &#36827;&#34892; <acronym class="acronym">SOAP</acronym> &#20869;&#30465;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.google" title="12.7.&nbsp;&#25628;&#32034; Google">&#31532;&nbsp;12.7&nbsp;&#33410; &#8220;&#25628;&#32034; Google&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.troubleshooting" title="12.8.&nbsp; SOAP &#32593;&#32476;&#26381;&#21153;&#25925;&#38556;&#25490;&#38500;">&#31532;&nbsp;12.8&nbsp;&#33410; &#8220; <acronym class="acronym">SOAP</acronym> &#32593;&#32476;&#26381;&#21153;&#25925;&#38556;&#25490;&#38500;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soap.summary" title="12.9.&nbsp;&#23567;&#32467;">&#31532;&nbsp;12.9&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#regression" title="&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;">&#31532;&nbsp;16&nbsp;&#31456; <i>&#20989;&#25968;&#32534;&#31243;</i></a> &#21644; <a class="xref" href="#soundex" title="&#31532;&nbsp;18&nbsp;&#31456;&nbsp;&#24615;&#33021;&#20248;&#21270;">&#31532;&nbsp;18&nbsp;&#31456; <i>&#24615;&#33021;&#20248;&#21270;</i></a> &#20013;&#30340;&#22823;&#37327;&#25216;&#26415;&#35780;&#35770;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 5.3</td><td align="left">2004-05-12</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20026; <a class="xref" href="#soundex.stage1" title="18.3.&nbsp;&#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;18.3&nbsp;&#33410; &#8220;&#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;&#8221;</a> &#28155;&#21152;&#20102; <code class="methodname">isalpha()</code> &#30340;&#31034;&#20363;&#12290;&#24863;&#35874;&#20320;&#65292;Paul&#12290;</li><li>&#23545; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#21644; <a class="xref" href="#filehandling" title="&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;">&#31532;&nbsp;6&nbsp;&#31456; <i>&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;</i></a> &#36827;&#34892;&#20102;&#22823;&#37327;&#20462;&#25913;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#kgp.segue" title="9.7.&nbsp;Segue">&#31532;&nbsp;9.7&nbsp;&#33410; &#8220;Segue &#8221;</a> &#20013;&#30340; URL &#22320;&#22336;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 5.2</td><td align="left">2004-05-09</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#27491;&#20102; <a class="xref" href="#roman.stage1" title="14.1.&nbsp;roman.py, &#31532; 1 &#38454;&#27573;">&#31532;&nbsp;14.1&nbsp;&#33410; &#8220;<code class="filename">roman.py</code>, &#31532; 1 &#38454;&#27573;&#8221;</a> &#20013;&#30340;&#19968;&#20010; URL &#22320;&#22336;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soundex.divein" title="18.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;18.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soundex.timeit" title="18.2.&nbsp;&#20351;&#29992; timeit &#27169;&#22359;">&#31532;&nbsp;18.2&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="filename">timeit</code> &#27169;&#22359;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soundex.stage1" title="18.3.&nbsp;&#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;18.3&nbsp;&#33410; &#8220;&#20248;&#21270;&#27491;&#21017;&#34920;&#36798;&#24335;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soundex.stage2" title="18.4.&nbsp;&#20248;&#21270;&#23383;&#20856;&#26597;&#25214;">&#31532;&nbsp;18.4&nbsp;&#33410; &#8220;&#20248;&#21270;&#23383;&#20856;&#26597;&#25214;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soundex.stage3" title="18.5.&nbsp;&#20248;&#21270;&#21015;&#34920;&#25805;&#20316;">&#31532;&nbsp;18.5&nbsp;&#33410; &#8220;&#20248;&#21270;&#21015;&#34920;&#25805;&#20316;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soundex.stage4" title="18.6.&nbsp;&#20248;&#21270;&#23383;&#31526;&#20018;&#25805;&#20316;">&#31532;&nbsp;18.6&nbsp;&#33410; &#8220;&#20248;&#21270;&#23383;&#31526;&#20018;&#25805;&#20316;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#soundex.summary" title="18.7.&nbsp;&#23567;&#32467;">&#31532;&nbsp;18.7&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 5.1</td><td align="left">2004-05-05</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#35746;&#20102; <a class="xref" href="#re.tens.example" title="&#20363;&nbsp;7.7.&nbsp;&#26657;&#39564;&#21313;&#20301;&#25968;">&#20363;&nbsp;7.7 &#8220;&#26657;&#39564;&#21313;&#20301;&#25968;&#8221;</a> &#21644; <a class="xref" href="#re.nm.example" title="&#20363;&nbsp;7.8.&nbsp;&#29992; {n,m} &#35821;&#27861;&#30830;&#35748;&#32599;&#39532;&#25968;&#23383;">&#20363;&nbsp;7.8 &#8220;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;&#30830;&#35748;&#32599;&#39532;&#25968;&#23383;&#8221;</a>&#12290;</li><li>&#20462;&#35746;&#20102; <a class="xref" href="#re.phone.example" title="&#20363;&nbsp;7.10.&nbsp;&#21457;&#29616;&#25968;&#23383;">&#20363;&nbsp;7.10 &#8220;&#21457;&#29616;&#25968;&#23383;&#8221;</a> &#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#oa.etags.example.1" title="&#20363;&nbsp;11.6.&nbsp;&#27979;&#35797; Last-Modified">&#20363;&nbsp;11.6 &#8220;&#27979;&#35797; <code class="literal">Last-Modified</code>&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874;&#20320;&#65292;Jesir&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.list.append.vs.extend" title="&#20363;&nbsp;3.11.&nbsp;extend (&#25193;&#23637;) &#19982; append (&#36861;&#21152;) &#30340;&#24046;&#21035;">&#20363;&nbsp;3.11 &#8220;<code class="function">extend</code> (&#25193;&#23637;) &#19982; <code class="function">append</code> (&#36861;&#21152;) &#30340;&#24046;&#21035;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874;&#20320;&#65292;Daniel&#12290;</li><li>&#20462;&#25913;&#20102;&#22823;&#37327;&#25216;&#26415;&#35780;&#35770;&#12290;</li><li>&#23545; <a class="xref" href="#install" title="&#31532;&nbsp;1&nbsp;&#31456;&nbsp;&#23433;&#35013; Python">&#31532;&nbsp;1&nbsp;&#31456; <i>&#23433;&#35013; <span class="application">Python</span></i></a>&#12289;<a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a>&#12289;<a class="xref" href="#datatypes" title="&#31532;&nbsp;3&nbsp;&#31456;&nbsp;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;">&#31532;&nbsp;3&nbsp;&#31456; <i>&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;</i></a> &#21644; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#36827;&#34892;&#20102;&#22823;&#37327;&#20462;&#25913;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 5.0</td><td align="left">2004-04-16</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.divein" title="11.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;11.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.review" title="11.2.&nbsp;&#36991;&#20813;&#36890;&#36807; HTTP &#37325;&#22797;&#22320;&#33719;&#21462;&#25968;&#25454;">&#31532;&nbsp;11.2&nbsp;&#33410; &#8220;&#36991;&#20813;&#36890;&#36807; HTTP &#37325;&#22797;&#22320;&#33719;&#21462;&#25968;&#25454;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.features" title="11.3.&nbsp;HTTP &#30340;&#29305;&#24615;">&#31532;&nbsp;11.3&nbsp;&#33410; &#8220;HTTP &#30340;&#29305;&#24615;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.debug" title="11.4.&nbsp;&#35843;&#35797; HTTP web &#26381;&#21153;">&#31532;&nbsp;11.4&nbsp;&#33410; &#8220;&#35843;&#35797; HTTP web &#26381;&#21153;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.useragent" title="11.5.&nbsp;&#35774;&#32622; User-Agent">&#31532;&nbsp;11.5&nbsp;&#33410; &#8220;&#35774;&#32622; <code class="literal">User-Agent</code>&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.etags" title="11.6.&nbsp;&#22788;&#29702; Last-Modified &#21644; ETag">&#31532;&nbsp;11.6&nbsp;&#33410; &#8220;&#22788;&#29702; <code class="literal">Last-Modified</code> &#21644; <code class="literal">ETag</code>&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.redirect" title="11.7.&nbsp;&#22788;&#29702;&#37325;&#23450;&#21521;">&#31532;&nbsp;11.7&nbsp;&#33410; &#8220;&#22788;&#29702;&#37325;&#23450;&#21521;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.gzip" title="11.8.&nbsp;&#22788;&#29702;&#21387;&#32553;&#25968;&#25454;">&#31532;&nbsp;11.8&nbsp;&#33410; &#8220;&#22788;&#29702;&#21387;&#32553;&#25968;&#25454;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.alltogether" title="11.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;11.9&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#oa.summary" title="11.10.&nbsp;&#23567;&#32467;">&#31532;&nbsp;11.10&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>.</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#odbchelper.list.append.vs.extend" title="&#20363;&nbsp;3.11.&nbsp;extend (&#25193;&#23637;) &#19982; append (&#36861;&#21152;) &#30340;&#24046;&#21035;">&#20363;&nbsp;3.11 &#8220;<code class="function">extend</code> (&#25193;&#23637;) &#19982; <code class="function">append</code> (&#36861;&#21152;) &#30340;&#24046;&#21035;&#8221;</a>.</li><li>&#22312; <a class="xref" href="#install" title="&#31532;&nbsp;1&nbsp;&#31456;&nbsp;&#23433;&#35013; Python">&#31532;&nbsp;1&nbsp;&#31456; <i>&#23433;&#35013; <span class="application">Python</span></i></a> &#20013;&#20462;&#25913;&#20102;&#20851;&#20110;&#22914;&#20309;&#19979;&#36733; <span class="application">Python</span> &#30340;&#25551;&#36848;&#65292;&#20351;&#20854;&#26356;&#19968;&#33324;&#21270;&#65292;&#19988;&#20943;&#23569;&#20102;&#29256;&#26412;&#20381;&#36182;&#24615;&#12290;</li><li>&#22312; <a class="xref" href="#odbchelper.divein" title="2.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;2.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#21644; <a class="xref" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#31532;&nbsp;2.4&nbsp;&#33410; &#8220;&#19975;&#29289;&#30342;&#23545;&#35937;&#8221;</a> &#20013;&#65292;&#25226;&#26415;&#35821; "<span class="quote">module</span>" (&#27169;&#22359;) &#25913;&#20026;&#20102; "<span class="quote">program</span>" (&#31243;&#24207;)&#65292;&#22240;&#20026;&#25105;&#20204;&#27492;&#26102;&#23578;&#26410;&#20171;&#32461;&#27169;&#22359;&#12290;</li><li>&#22312; <a class="xref" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#31532;&nbsp;2.4&nbsp;&#33410; &#8220;&#19975;&#29289;&#30342;&#23545;&#35937;&#8221;</a> &#20013;&#65292;&#28155;&#21152;&#20102;&#25171;&#24320; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#30340;&#35814;&#32454;&#35828;&#26126;&#65292;&#21644;&#21407;&#26469;&#30340;&#20363;&#23376;&#21512;&#24182;&#22312;&#19968;&#36215;&#12290;</li><li>&#25226;&#25152;&#26377;&#24341;&#29992;&#21040;&#24067;&#23572;&#20540; <code class="constant">1</code> (&#30495;) &#21644; <code class="constant">0</code> (&#20551;) &#20998;&#21035;&#25913;&#20026;&#20102; <code class="constant">True</code> &#21644; <code class="constant">False</code>&#12290;</li><li>&#26356;&#26032;&#20102; <a class="xref" href="#odbchelper.stringformatting.coerce" title="&#20363;&nbsp;3.22.&nbsp;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#19982;&#23383;&#31526;&#20018;&#36830;&#25509;&#30340;&#27604;&#36739;">&#20363;&nbsp;3.22 &#8220;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#19982;&#23383;&#31526;&#20018;&#36830;&#25509;&#30340;&#27604;&#36739;&#8221;</a> &#65292;&#20197;&#23637;&#31034; <span class="application">Python</span> 2.3 &#25152;&#26174;&#31034;&#30340;<code class="literal">TypeError</code> &#28040;&#24687;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#plural.fib.example" title="&#20363;&nbsp;17.19.&nbsp;&#20351;&#29992;&#29983;&#25104;&#22120;&#26367;&#20195;&#36882;&#24402;">&#20363;&nbsp;17.19 &#8220;&#20351;&#29992;&#29983;&#25104;&#22120;&#26367;&#20195;&#36882;&#24402;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#re.summary" title="7.7.&nbsp;&#23567;&#32467;">&#31532;&nbsp;7.7&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#plural.stage4.example.1" title="&#20363;&nbsp;17.9.&nbsp;plural4.py">&#20363;&nbsp;17.9 &#8220;<code class="filename">plural4.py</code>&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.9</td><td align="left">2004-03-25</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#23436;&#25104;&#20102; <a class="xref" href="#regression.alltogether" title="16.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;16.7&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#regression.summary" title="16.8.&nbsp;&#23567;&#32467;">&#31532;&nbsp;16.8&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#25226;&#23545;&#21333;&#20803;&#27979;&#35797;&#30340;&#20171;&#32461;&#20998;&#25104;&#20102;&#20004;&#31456;&#65306; <a class="xref" href="#roman" title="&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;">&#31532;&nbsp;13&nbsp;&#31456; <i>&#21333;&#20803;&#27979;&#35797;</i></a> &#21644; <a class="xref" href="#roman1.5" title="&#31532;&nbsp;14&nbsp;&#31456;&nbsp;&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;">&#31532;&nbsp;14&nbsp;&#31456; <i>&#27979;&#35797;&#20248;&#20808;&#32534;&#31243;</i></a>&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#plural.finishing.up" title="&#20363;&nbsp;17.12.&nbsp;plural4.py &#30340;&#23436;&#25104;">&#20363;&nbsp;17.12 &#8220;<code class="filename">plural4.py</code> &#30340;&#23436;&#25104;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#plural.introducing.generators" title="&#20363;&nbsp;17.18.&nbsp;&#20171;&#32461;&#29983;&#25104;&#22120;">&#20363;&nbsp;17.18 &#8220;&#20171;&#32461;&#29983;&#25104;&#22120;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.8</td><td align="left">2004-03-25</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#23436;&#25104;&#20102; <a class="xref" href="#plural.stage6" title="17.7.&nbsp;plural.py, &#31532; 6 &#38454;&#27573;">&#31532;&nbsp;17.7&nbsp;&#33410; &#8220;<code class="filename">plural.py</code>, &#31532; 6 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#23436;&#25104;&#20102; <a class="xref" href="#plural.summary" title="17.8.&nbsp;&#23567;&#32467;">&#31532;&nbsp;17.8&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#20462;&#22797;&#20102; <a class="xref" href="#furtherreading" title="&#38468;&#24405;&nbsp;A.&nbsp;&#36827;&#19968;&#27493;&#38405;&#35835;">&#38468;&#24405;&nbsp;A, <i>&#36827;&#19968;&#27493;&#38405;&#35835;</i></a>&#12289;<a class="xref" href="#abstracts" title="&#38468;&#24405;&nbsp;B.&nbsp;&#20116;&#20998;&#38047;&#22238;&#39038;">&#38468;&#24405;&nbsp;B, <i>&#20116;&#20998;&#38047;&#22238;&#39038;</i></a>&#12289;<a class="xref" href="#tips" title="&#38468;&#24405;&nbsp;C.&nbsp;&#25216;&#24039;&#21644;&#31373;&#38376;">&#38468;&#24405;&nbsp;C, <i>&#25216;&#24039;&#21644;&#31373;&#38376;</i></a>&#21644;<a class="xref" href="#examples" title="&#38468;&#24405;&nbsp;D.&nbsp;&#31034;&#20363;&#28165;&#21333;">&#38468;&#24405;&nbsp;D, <i>&#31034;&#20363;&#28165;&#21333;</i></a>&#20013;&#30340;&#22833;&#25928;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.7</td><td align="left">2004-03-21</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.divein" title="17.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;17.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.stage1" title="17.2.&nbsp;plural.py, &#31532; 1 &#38454;&#27573;">&#31532;&nbsp;17.2&nbsp;&#33410; &#8220;<code class="filename">plural.py</code>, &#31532; 1 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.stage2" title="17.3.&nbsp;plural.py, &#31532; 2 &#38454;&#27573;">&#31532;&nbsp;17.3&nbsp;&#33410; &#8220;<code class="filename">plural.py</code>, &#31532; 2 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.stage3" title="17.4.&nbsp;plural.py, &#31532; 3 &#38454;&#27573;">&#31532;&nbsp;17.4&nbsp;&#33410; &#8220;<code class="filename">plural.py</code>, &#31532; 3 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.stage4" title="17.5.&nbsp;plural.py, &#31532; 4 &#38454;&#27573;">&#31532;&nbsp;17.5&nbsp;&#33410; &#8220;<code class="filename">plural.py</code>, &#31532; 4 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.stage5" title="17.6.&nbsp;plural.py, &#31532; 5 &#38454;&#27573;">&#31532;&nbsp;17.6&nbsp;&#33410; &#8220;<code class="filename">plural.py</code>, &#31532; 5 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.stage6" title="17.7.&nbsp;plural.py, &#31532; 6 &#38454;&#27573;">&#31532;&nbsp;17.7&nbsp;&#33410; &#8220;<code class="filename">plural.py</code>, &#31532; 6 &#38454;&#27573;&#8221;</a> (&#26410;&#23436;&#25104;)&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#plural.summary" title="17.8.&nbsp;&#23567;&#32467;">&#31532;&nbsp;17.8&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a> (&#26410;&#23436;&#25104;)&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.6</td><td align="left">2004-03-14</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#23436;&#25104;&#20102; <a class="xref" href="#re.nm" title="7.4.&nbsp;&#20351;&#29992; {n,m} &#35821;&#27861;">&#31532;&nbsp;7.4&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;&#8221;</a>&#12290;</li><li>&#23436;&#25104;&#20102; <a class="xref" href="#re.verbose" title="7.5.&nbsp;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;7.5&nbsp;&#33410; &#8220;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#8221;</a>&#12290;</li><li>&#23436;&#25104;&#20102; <a class="xref" href="#re.phone" title="7.6.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;">&#31532;&nbsp;7.6&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;&#8221;</a>&#12290;</li><li>&#25193;&#20889;&#20102; <a class="xref" href="#re.summary" title="7.7.&nbsp;&#23567;&#32467;">&#31532;&nbsp;7.7&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.5</td><td align="left">2004-03-07</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#re.intro" title="7.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;7.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#re.nm" title="7.4.&nbsp;&#20351;&#29992; {n,m} &#35821;&#27861;">&#31532;&nbsp;7.4&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">{n,m}</code> &#35821;&#27861;&#8221;</a> (&#26410;&#23436;&#25104;)&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#re.verbose" title="7.5.&nbsp;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;">&#31532;&nbsp;7.5&nbsp;&#33410; &#8220;&#26494;&#25955;&#27491;&#21017;&#34920;&#36798;&#24335;&#8221;</a> (&#26410;&#23436;&#25104;)&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#re.phone" title="7.6.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;">&#31532;&nbsp;7.6&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#35299;&#26512;&#30005;&#35805;&#21495;&#30721;&#8221;</a> (&#26410;&#23436;&#25104;)&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#re.summary" title="7.7.&nbsp;&#23567;&#32467;">&#31532;&nbsp;7.7&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#25226; <a class="xref" href="#re.matching" title="7.2.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;">&#31532;&nbsp;7.2&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;&#8221;</a> &#21644; <a class="xref" href="#re.roman" title="7.3.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;">&#31532;&nbsp;7.3&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#32599;&#39532;&#23383;&#27597;&#8221;</a> &#31227;&#20837;&#20102;&#27491;&#21017;&#34920;&#36798;&#24335;&#36825;&#19968;&#31456;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.os.glob.example" title="&#20363;&nbsp;6.20.&nbsp;&#20351;&#29992; glob &#21015;&#20986;&#30446;&#24405;">&#20363;&nbsp;6.20 &#8220;&#20351;&#29992; <code class="filename">glob</code> &#21015;&#20986;&#30446;&#24405;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.files.writeandappend" title="&#20363;&nbsp;6.7.&nbsp;&#20889;&#20837;&#25991;&#20214;">&#20363;&nbsp;6.7 &#8220;&#20889;&#20837;&#25991;&#20214;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.userdict.fromdict" title="&#20363;&nbsp;5.11.&nbsp;&#30452;&#25509;&#32487;&#25215;&#33258;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411; dict">&#20363;&nbsp;5.11 &#8220;&#30452;&#25509;&#32487;&#25215;&#33258;&#20869;&#24314;&#25968;&#25454;&#31867;&#22411; <code class="classname">dict</code>&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.stdio.print.example" title="&#20363;&nbsp;10.11.&nbsp;&#25171;&#21360;&#21040; stderr">&#20363;&nbsp;10.11 &#8220;&#25171;&#21360;&#21040; <code class="literal">stderr</code>&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#apihelper.getattr.dispatch" title="&#20363;&nbsp;4.12.&nbsp;&#20351;&#29992;getattr &#21019;&#24314;&#20998;&#21457;&#32773;">&#20363;&nbsp;4.12 &#8220;&#20351;&#29992;<code class="function">getattr</code> &#21019;&#24314;&#20998;&#21457;&#32773;&#8221;</a> &#21644; <a class="xref" href="#apihelper.getattr.default" title="&#20363;&nbsp;4.13.&nbsp;getattr &#32570;&#30465;&#20540;">&#20363;&nbsp;4.13 &#8220;<code class="function">getattr</code> &#32570;&#30465;&#20540;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#odbchelper.indenting.if" title="&#20363;&nbsp;2.6.&nbsp;if &#35821;&#21477;">&#20363;&nbsp;2.6 &#8220;<code class="literal">if</code> &#35821;&#21477;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#odbchelper.stringformatting.numbers" title="&#20363;&nbsp;3.23.&nbsp;&#25968;&#20540;&#30340;&#26684;&#24335;&#21270;">&#20363;&nbsp;3.23 &#8220;&#25968;&#20540;&#30340;&#26684;&#24335;&#21270;&#8221;</a>&#12290;</li><li>&#25226; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#20998;&#25104;&#20102;&#20004;&#31456;&#65306;<a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#21644; <a class="xref" href="#filehandling" title="&#31532;&nbsp;6&nbsp;&#31456;&nbsp;&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;">&#31532;&nbsp;6&nbsp;&#31456; <i>&#24322;&#24120;&#21644;&#25991;&#20214;&#22788;&#29702;</i></a>&#12290;</li><li>&#25226; <a class="xref" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">&#31532;&nbsp;9&nbsp;&#31456; <i><acronym class="acronym">XML</acronym> &#22788;&#29702;</i></a> &#20998;&#25104;&#20102;&#20004;&#31456;&#65306;<a class="xref" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">&#31532;&nbsp;9&nbsp;&#31456; <i><acronym class="acronym">XML</acronym> &#22788;&#29702;</i></a> &#21644; <a class="xref" href="#streams" title="&#31532;&nbsp;10&nbsp;&#31456;&nbsp;&#33050;&#26412;&#21644;&#27969;">&#31532;&nbsp;10&nbsp;&#31456; <i>&#33050;&#26412;&#21644;&#27969;</i></a>&#12290;</li><li>&#25226; <a class="xref" href="#roman" title="&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;">&#31532;&nbsp;13&nbsp;&#31456; <i>&#21333;&#20803;&#27979;&#35797;</i></a> &#20998;&#25104;&#20102;&#20004;&#31456;&#65306;<a class="xref" href="#roman" title="&#31532;&nbsp;13&nbsp;&#31456;&nbsp;&#21333;&#20803;&#27979;&#35797;">&#31532;&nbsp;13&nbsp;&#31456; <i>&#21333;&#20803;&#27979;&#35797;</i></a> &#21644; <a class="xref" href="#roman2" title="&#31532;&nbsp;15&nbsp;&#31456;&nbsp;&#37325;&#26500;">&#31532;&nbsp;15&nbsp;&#31456; <i>&#37325;&#26500;</i></a>&#12290;</li><li>&#25226; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#20013;&#30340; <code class="function">help</code> &#25913;&#21517;&#20026; <code class="function">info</code>&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dialect.locals" title="8.5.&nbsp;locals &#21644; globals">&#31532;&nbsp;8.5&nbsp;&#33410; &#8220;<code class="function">locals</code> &#21644; <code class="function">globals</code>&#8221;</a> &#20013;&#30340;&#22238;&#21521;&#24341;&#29992;&#12290;</li><li>&#20462;&#22797;&#20102; <a class="xref" href="#dialect.divein" title="8.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;8.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#20013;&#22833;&#25928;&#30340;&#31034;&#20363;&#38142;&#25509;&#12290;</li><li>&#20462;&#22797;&#20102; <a class="xref" href="#kgp.divein" title="9.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;9.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#31034;&#20363;&#20013;&#20002;&#22833;&#30340;&#33509;&#24178;&#34892;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dialect.sgmllib" title="8.2.&nbsp;sgmllib.py &#20171;&#32461;">&#31532;&nbsp;8.2&nbsp;&#33410; &#8220;<code class="filename">sgmllib.py</code> &#20171;&#32461;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.4</td><td align="left">2003-10-08</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.choosing" title="1.1.&nbsp;&#21738;&#19968;&#31181; Python &#36866;&#21512;&#24744;&#65311;">&#31532;&nbsp;1.1&nbsp;&#33410; &#8220;&#21738;&#19968;&#31181; <span class="application">Python</span> &#36866;&#21512;&#24744;&#65311;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.windows" title="1.2.&nbsp;Windows &#19978;&#30340; Python">&#31532;&nbsp;1.2&nbsp;&#33410; &#8220;Windows &#19978;&#30340; <span class="application">Python</span>&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.macosx" title="1.3.&nbsp;Mac OS X &#19978;&#30340; Python">&#31532;&nbsp;1.3&nbsp;&#33410; &#8220;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> X &#19978;&#30340; <span class="application">Python</span> &#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.macos9" title="1.4.&nbsp;Mac OS 9 &#19978;&#30340; Python">&#31532;&nbsp;1.4&nbsp;&#33410; &#8220;<abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> 9 &#19978;&#30340; <span class="application">Python</span> &#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.redhat" title="1.5.&nbsp;RedHat Linux &#19978;&#30340; Python">&#31532;&nbsp;1.5&nbsp;&#33410; &#8220;RedHat Linux &#19978;&#30340; <span class="application">Python</span> &#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.debian" title="1.6.&nbsp;Debian GNU/Linux &#19978;&#30340; Python">&#31532;&nbsp;1.6&nbsp;&#33410; &#8220;Debian <acronym class="acronym">GNU</acronym>/Linux &#19978;&#30340; <span class="application">Python</span> &#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.source" title="1.7.&nbsp;&#20174;&#28304;&#20195;&#30721;&#23433;&#35013; Python">&#31532;&nbsp;1.7&nbsp;&#33410; &#8220;&#20174;&#28304;&#20195;&#30721;&#23433;&#35013; <span class="application">Python</span> &#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#install.summary" title="1.9.&nbsp;&#23567;&#32467;">&#31532;&nbsp;1.9&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#21024;&#38500;&#20102;&#24207;&#35328;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.join.example" title="&#20363;&nbsp;3.27.&nbsp;odbchelper.py &#30340;&#36755;&#20986;&#32467;&#26524;">&#20363;&nbsp;3.27 &#8220;<code class="filename">odbchelper.py</code> &#30340;&#36755;&#20986;&#32467;&#26524;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li><li>&#20026; <a class="xref" href="#odbchelper.docstring" title="2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;">&#31532;&nbsp;2.3&nbsp;&#33410; &#8220;&#25991;&#26723;&#21270;&#20989;&#25968;&#8221;</a> &#28155;&#21152;&#20102;&#25351;&#21521; PEP 257&#30340;&#38142;&#25509;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#31532;&nbsp;3.4.2&nbsp;&#33410; &#8220;&#19968;&#27425;&#36171;&#22810;&#20540;&#8221;</a> &#20013;&#25351;&#21521; <em class="citetitle">How to Think Like a Computer Scientist</em> (<a href="http://www.ibiblio.org/obp/thinkCSpy/">http://www.ibiblio.org/obp/thinkCSpy/</a>) &#30340;&#38142;&#25509;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#odbchelper.tuple" title="3.3.&nbsp;Tuple &#20171;&#32461;">&#31532;&nbsp;3.3&nbsp;&#33410; &#8220;Tuple &#20171;&#32461;&#8221;</a> &#20013;&#20851;&#20110;&#38544;&#24335;&#26029;&#35328; (assert) &#30340;&#35780;&#27880;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.3</td><td align="left">2003-09-28</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#regression.import" title="16.6.&nbsp;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;">&#31532;&nbsp;16.6&nbsp;&#33410; &#8220;&#21160;&#24577;&#23548;&#20837;&#27169;&#22359;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#regression.alltogether" title="16.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;16.7&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a> (&#26410;&#23436;&#25104;)&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#about" title="&#38468;&#24405;&nbsp;F.&nbsp;&#20851;&#20110;&#26412;&#20070;">&#38468;&#24405;&nbsp;F, <i>&#20851;&#20110;&#26412;&#20070;</i></a> &#20013;&#30340;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.2.1</td><td align="left">2003-09-17</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#27491;&#20102;&#20027;&#39029;&#20013;&#30340;&#38142;&#25509;&#12290;</li><li>&#20462;&#22797;&#20102;&#35821;&#27861;&#39640;&#20142;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.2</td><td align="left">2003-09-12</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#27491;&#20102; <a class="xref" href="#regression.map" title="16.4.&nbsp;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;">&#31532;&nbsp;16.4&nbsp;&#33410; &#8220;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;&#8221;</a>&#12289;<a class="xref" href="#regression.filter" title="16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;">&#31532;&nbsp;16.3&nbsp;&#33410; &#8220;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;&#8221;</a>&#12289;<a class="xref" href="#re.matching" title="7.2.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;">&#31532;&nbsp;7.2&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;&#8221;</a> &#21644; <a class="xref" href="#kgp.commandline" title="10.6.&nbsp;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;">&#31532;&nbsp;10.6&nbsp;&#33410; &#8220;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874;&#20320;&#65292;Doug&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#fileinfo.class" title="5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;">&#31532;&nbsp;5.3&nbsp;&#33410; &#8220;&#31867;&#30340;&#23450;&#20041;&#8221;</a> &#20013;&#30340;&#22806;&#37096;&#38142;&#25509;&#12290;&#24863;&#35874;&#20320;&#65292;Harry&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#31532;&nbsp;4.5&nbsp;&#33410; &#8220;&#36807;&#28388;&#21015;&#34920;&#8221;</a> &#32467;&#23614;&#30340;&#25514;&#36766;&#12290;&#24863;&#35874;&#20320;&#65292;Paul&#12290;</li><li>&#20026; <a class="xref" href="#roman.failure" title="13.5.&nbsp;&#36127;&#38754;&#27979;&#35797; (Testing for failure)">&#31532;&nbsp;13.5&nbsp;&#33410; &#8220;&#36127;&#38754;&#27979;&#35797; (Testing for failure)&#8221;</a> &#28155;&#21152;&#20102;&#20960;&#21477;&#35805;&#65292;&#20197;&#24378;&#35843;&#25105;&#20204;&#27491;&#22312;&#32473; <code class="function">assertRaises</code> &#20256;&#36882;&#19968;&#20010;&#20989;&#25968;&#65292;&#32780;&#38750;&#20989;&#25968;&#21517;&#31216;&#12290;&#24863;&#35874;&#20320;&#65292;Stephen&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dialect.dialectizer" title="8.8.&nbsp;dialect.py &#20171;&#32461;">&#31532;&nbsp;8.8&nbsp;&#33410; &#8220;<code class="filename">dialect.py</code> &#20171;&#32461;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874;&#20320;&#65292;Wellie&#12290;</li><li>&#20462;&#27491;&#20102;&#20851;&#20110;&#26041;&#35328;&#31034;&#20363;&#30340;&#33509;&#24178;&#38142;&#25509;&#12290;</li><li>&#20462;&#27491;&#20102;&#20851;&#20110;&#32599;&#39532;&#25968;&#23383;&#21382;&#21490;&#30340;&#22806;&#37096;&#38142;&#25509;&#12290;&#24863;&#35874;&#19990;&#30028;&#21508;&#22320;&#30340;&#32599;&#39532;&#25968;&#23383;&#29233;&#22909;&#32773;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.1</td><td align="left">2002-07-28</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.cache" title="10.3.&nbsp;&#26597;&#35810;&#32531;&#20914;&#33410;&#28857;">&#31532;&nbsp;10.3&nbsp;&#33410; &#8220;&#26597;&#35810;&#32531;&#20914;&#33410;&#28857;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.child" title="10.4.&nbsp;&#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;">&#31532;&nbsp;10.4&nbsp;&#33410; &#8220;&#26597;&#25214;&#33410;&#28857;&#30340;&#30452;&#25509;&#23376;&#33410;&#28857;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.handler" title="10.5.&nbsp;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;">&#31532;&nbsp;10.5&nbsp;&#33410; &#8220;&#26681;&#25454;&#33410;&#28857;&#31867;&#22411;&#21019;&#24314;&#19981;&#21516;&#30340;&#22788;&#29702;&#22120;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.commandline" title="10.6.&nbsp;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;">&#31532;&nbsp;10.6&nbsp;&#33410; &#8220;&#22788;&#29702;&#21629;&#20196;&#34892;&#21442;&#25968;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.alltogether" title="10.7.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;10.7&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.summary" title="10.8.&nbsp;&#23567;&#32467;">&#31532;&nbsp;10.8&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#fileinfo.os" title="6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;">&#31532;&nbsp;6.5&nbsp;&#33410; &#8220;&#19982;&#30446;&#24405;&#20849;&#20107;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24212;&#35813;&#26159; <code class="function">os.getcwd()</code>&#65292;&#32780;&#19981;&#26159; <code class="function">os.path.getcwd()</code>&#12290;&#24863;&#35874;&#20320;&#65292;Abhishek&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.join" title="3.7.&nbsp;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;">&#31532;&nbsp;3.7&nbsp;&#33410; &#8220;&#36830;&#25509; list &#19982;&#20998;&#21106;&#23383;&#31526;&#20018;&#8221;</a> &#20013;&#30340;&#25490;&#21360;&#38169;&#35823;&#12290;&#24403;&#22312; <span class="application">Python</span> <acronym class="acronym">IDE</acronym> &#20013;&#27714;&#20540; (&#32780;&#38750;&#25171;&#21360;) &#30340;&#26102;&#20505;&#65292;&#23427;&#20250;&#22312;&#36755;&#20986;&#30340;&#20004;&#20391;&#21152;&#19978;&#21333;&#24341;&#21495;&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#apihelper.alltogether" title="4.8.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;4.8&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a> &#20013;&#30340; <code class="function">str</code> &#31034;&#20363;&#65292;&#20197;&#20351;&#29992;&#19968;&#20010;&#29992;&#25143;&#23450;&#20041;&#30340;&#20989;&#25968;&#65292;&#22240;&#20026; <span class="application">Python</span> 2.2 &#20250;&#20026;&#20869;&#32622;&#30340;&#23383;&#20856;&#27169;&#22359;&#23450;&#20041;&#19968;&#20010; <code class="literal">doc string</code>&#65292;&#20174;&#32780;&#23548;&#33268;&#21407;&#26469;&#37027;&#20010;&#31034;&#20363;&#30340;&#22833;&#25928;&#12290;&#24863;&#35874; Eric&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#kgp.unicode" title="9.4.&nbsp;Unicode">&#31532;&nbsp;9.4&nbsp;&#33410; &#8220;Unicode&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#65292;&#8220;anyway&#8221;&#25913;&#20026;&#8220;anywhere&#8221;&#12290;&#24863;&#35874; Frank&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#roman.sanity" title="13.6.&nbsp;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)">&#31532;&nbsp;13.6&nbsp;&#33410; &#8220;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#65292;&#25105;&#21407;&#25226;&#8220;accept&#8221;&#37325;&#22797;&#20102;&#19968;&#27425;&#12290;&#24863;&#35874; Ralph.</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#31532;&nbsp;15.3&nbsp;&#33410; &#8220;&#37325;&#26500;&#8221;</a> &#20013;&#30340;&#25490;&#21360;&#38169;&#35823;&#65292;<code class="literal">C?C?C?</code> &#21305;&#37197;&#38646;&#33267;&#19977;&#20010; <code class="literal">C</code>&#65292;&#32780;&#19981;&#26159;&#22235;&#20010;&#12290;&#24863;&#35874; Ralph&#12290;</li><li>&#37325;&#20889;&#20102; <a class="xref" href="#odbchelper.list.slicing.example" title="&#20363;&nbsp;3.9.&nbsp;Slice &#31616;&#20889;">&#20363;&nbsp;3.9 &#8220;Slice &#31616;&#20889;&#8221;</a> &#20013;&#23545;&#20998;&#29255;&#30340;&#35299;&#35828;&#65292;&#20351;&#20043;&#26356;&#21152;&#28165;&#26224;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#31532;&nbsp;5.5&nbsp;&#33410; &#8220;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;&#8221;</a> &#20013;&#30340;&#21382;&#21490;&#35780;&#27880;&#12290;&#29616;&#22312; <span class="application">Python</span> 2.2 &#25903;&#25345;&#30452;&#25509;&#23376;&#31867;&#21270;&#20869;&#32622;&#25968;&#25454;&#31867;&#22411;&#20102;&#12290;</li><li>&#20026; <a class="xref" href="#fileinfo.userdict.init.example" title="&#20363;&nbsp;5.9.&nbsp;&#23450;&#20041; UserDict &#31867;">&#20363;&nbsp;5.9 &#8220;&#23450;&#20041; <code class="classname">UserDict</code> &#31867;&#8221;</a> &#28155;&#21152;&#20102;&#23545;&#23383;&#20856;&#30340;&#26041;&#27861; <code class="function">update</code> &#30340;&#35299;&#35828;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#22312; <a class="xref" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#31532;&nbsp;5.5&nbsp;&#33410; &#8220;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;&#8221;</a> &#20013;&#38416;&#26126;&#20102; <span class="application">Python</span> &#23545;&#37325;&#36733;&#30340;&#19981;&#25903;&#25345;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dialect.basehtml.intro" title="&#20363;&nbsp;8.8.&nbsp;BaseHTMLProcessor &#20171;&#32461;">&#20363;&nbsp;8.8 &#8220;<code class="classname">BaseHTMLProcessor</code> &#20171;&#32461;&#8221;</a> &#20013;&#30340;&#25490;&#21360;&#38169;&#35823;&#12290;<acronym class="acronym">HTML</acronym> &#27880;&#37322;&#20197;&#20004;&#20010; (&#32780;&#38750;&#19968;&#20010;) &#27178;&#26464;&#21644;&#19968;&#20010;&#25324;&#21495;&#32467;&#26463;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#dialect.locals" title="8.5.&nbsp;locals &#21644; globals">&#31532;&nbsp;8.5&nbsp;&#33410; &#8220;<code class="function">locals</code> &#21644; <code class="function">globals</code>&#8221;</a> &#20013;&#20851;&#20110;&#23884;&#22871;&#20316;&#29992;&#22495;&#30340;&#27880;&#35760;&#12290;<span class="application">Python</span> 2.2 &#24050;&#32463;&#21457;&#24067;&#20102;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dialect.unknownstarttag" title="&#20363;&nbsp;8.14.&nbsp;BaseHTMLProcessor.py &#20013;&#30340;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;">&#20363;&nbsp;8.14 &#8220;<code class="filename">BaseHTMLProcessor.py</code> &#20013;&#30340;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#8221;</a>; &#20013;&#30340;&#25490;&#21360;&#38169;&#35823;&#65306;&#26412;&#24212;&#35813;&#26159;&#19968;&#36830;&#20018;&#31354;&#26684;&#65292;&#25105;&#35823;&#25171;&#20026;&#19968;&#20010;&#20102;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#31532;&nbsp;5.5&nbsp;&#33410; &#8220;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;&#8221;</a> &#30340;&#26631;&#39064;&#20197;&#26631;&#24535;&#22522;&#31867;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#31532;&nbsp;15.3&nbsp;&#33410; &#8220;&#37325;&#26500;&#8221;</a> &#20013;&#30340;&#26631;&#39064;&#20197;&#25552;&#31034;&#19979;&#36733; <code class="filename">unittest</code>&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#regression.path.cwd.example" title="&#20363;&nbsp;16.6.&nbsp;&#22312;&#24403;&#21069;&#30446;&#24405;&#36816;&#34892;&#33050;&#26412;">&#20363;&nbsp;16.6 &#8220;&#22312;&#24403;&#21069;&#30446;&#24405;&#36816;&#34892;&#33050;&#26412;&#8221;</a> &#20013;&#30340;&#25490;&#29256;&#38169;&#35823;&#65307;&#31354;&#26684;&#34987;&#35823;&#25171;&#20026;&#20102;&#21046;&#34920;&#31526;&#65307;&#34892;&#21495;&#20063;&#27809;&#26377;&#23545;&#20934;&#12290;&#24863;&#35874; Petr&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">&#31532;&nbsp;3.2&nbsp;&#33410; &#8220;List &#20171;&#32461;&#8221;</a> &#20013;&#39318;&#23383;&#27597;&#26410;&#22823;&#20889;&#30340;&#38169;&#35823;&#12290;&#24212;&#35813;&#26159; <code class="literal">True</code> &#21644; <code class="literal">False</code>&#65292;&#32780;&#38750; <code class="literal">true</code> &#21644; <code class="literal">false</code>&#12290;&#24863;&#35874;&#25152;&#26377;&#25351;&#20986;&#36825;&#19968;&#28857;&#30340;&#35835;&#32773;&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#odbchelper.dict" title="3.1.&nbsp;Dictionary &#20171;&#32461;">&#31532;&nbsp;3.1&nbsp;&#33410; &#8220;Dictionary &#20171;&#32461;&#8221;</a>&#12289;<a class="xref" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">&#31532;&nbsp;3.2&nbsp;&#33410; &#8220;List &#20171;&#32461;&#8221;</a> &#21644; <a class="xref" href="#odbchelper.tuple" title="3.3.&nbsp;Tuple &#20171;&#32461;">&#31532;&nbsp;3.3&nbsp;&#33410; &#8220;Tuple &#20171;&#32461;&#8221;</a> &#30340;&#23567;&#33410;&#26631;&#39064;&#12290;&#8220;Dictionaries 101&#8221;&#34920;&#26126;&#36825;&#26159; Dictionary &#30340;&#20837;&#38376;&#25945;&#31243;&#12290;&#32654;&#22269;&#30340;&#22823;&#23398;&#24448;&#24448;&#29992;&#8220;101&#8221;&#26631;&#31034;&#26080;&#38656;&#30693;&#35782;&#32972;&#26223;&#30340;&#20837;&#38376;&#35838;&#31243;&#65292;&#20294;&#26174;&#28982;&#36825;&#20165;&#20165;&#26159;&#20010;&#32654;&#22269;&#20256;&#32479;&#65292;&#25152;&#20197;&#27809;&#24517;&#35201;&#35753;&#25105;&#30340;&#22269;&#38469;&#35835;&#32773;&#20204;&#36153;&#21170;&#29468;&#27979;&#12290;&#8213;&#8213;&#24403;&#25105;&#19968;&#24180;&#21322;&#21069;&#24320;&#22987;&#20889;&#36825;&#26412;&#20070;&#26102;&#65292;&#20174;&#26410;&#24819;&#21040;&#20250;&#25317;&#26377;&#22269;&#38469;&#35835;&#32773;&#12290;</li><li>&#25226;&#26679;&#24335;&#34920;&#21319;&#32423;&#21040; <span class="application">DocBook</span> <acronym class="acronym">XSL</acronym> 1.52 &#29256;&#12290;</li><li>&#21319;&#32423;&#21040; &#30001; Michael Kay &#32534;&#21046;&#30340; <span class="application"><acronym class="acronym">SAXON</acronym></span> <acronym class="acronym">XSLT</acronym> &#35299;&#26512;&#22120; 6.52 &#29256;&#12290;</li><li>&#35843;&#25972;&#20102;&#26679;&#24335;&#34920;&#30340;&#30456;&#20851;&#37096;&#20998;&#12290;</li><li>&#19978;&#27425;&#20462;&#35746;&#21518;&#65292;&#22905;&#31572;&#24212;&#20102;&#12290;&#23130;&#31036;&#26126;&#24180;&#26149;&#22825;&#20030;&#34892;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.0-2</td><td align="left">2002-04-26</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#27491;&#20102; <a class="xref" href="#apihelper.andor.intro.example" title="&#20363;&nbsp;4.15.&nbsp;and &#20171;&#32461;">&#20363;&nbsp;4.15 &#8220;<code class="literal">and</code> &#20171;&#32461;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.objects.sys.path" title="&#20363;&nbsp;2.4.&nbsp;&#27169;&#22359;&#23548;&#20837;&#30340;&#25628;&#32034;&#36335;&#24452;">&#20363;&nbsp;2.4 &#8220;&#27169;&#22359;&#23548;&#20837;&#30340;&#25628;&#32034;&#36335;&#24452;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li><li>&#20462;&#22797;&#20102; Windows &#24110;&#21161;&#25991;&#20214; (&#26679;&#24335;&#34920;&#30340;&#25913;&#21160;&#24341;&#36215;&#20102;&#30446;&#24405;&#30340;&#20002;&#22833;)&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 4.0</td><td align="left">2002-04-19</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#25193;&#20889;&#20102; <a class="xref" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#31532;&nbsp;2.4&nbsp;&#33410; &#8220;&#19975;&#29289;&#30342;&#23545;&#35937;&#8221;</a>&#65292;&#35814;&#32454;&#20171;&#32461;&#20102;&#23548;&#20837;&#25628;&#32034;&#36335;&#24452;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.negative.example" title="&#20363;&nbsp;3.7.&nbsp;&#36127;&#30340; list &#32034;&#24341;">&#20363;&nbsp;3.7 &#8220;&#36127;&#30340; list &#32034;&#24341;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874; Brian &#30340;&#26657;&#27491;&#12290;</li><li>&#37325;&#20889;&#20102; <a class="xref" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">&#31532;&nbsp;3.2&nbsp;&#33410; &#8220;List &#20171;&#32461;&#8221;</a> &#20013;&#20851;&#20110;&#30495;&#20540;&#30340;&#25552;&#31034;&#12290;&#29616;&#22312; <span class="application">Python</span> &#26377;&#21333;&#29420;&#30340;&#24067;&#23572;&#31867;&#22411;&#20102;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#fileinfo.fromimport" title="5.2.&nbsp;&#20351;&#29992; from module import &#23548;&#20837;&#27169;&#22359;">&#31532;&nbsp;5.2&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;&#8221;</a> &#20013;&#19982; <span class="application">Java</span> &#30340;&#35821;&#27861;&#27604;&#36739;&#37096;&#20998;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874; Rick &#30340;&#26657;&#27491;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#31532;&nbsp;5.5&nbsp;&#33410; &#8220;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;&#8221;</a> &#20013;&#30340;&#27880;&#35299;&#65292;&#35828;&#26126;&#20102;&#23376;&#31867;&#24635;&#26159;&#37325;&#20889;&#22522;&#31867;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#fileinfo.classattributes.writeable.example" title="&#20363;&nbsp;5.18.&nbsp;&#20462;&#25913;&#31867;&#23646;&#24615;">&#20363;&nbsp;5.18 &#8220;&#20462;&#25913;&#31867;&#23646;&#24615;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874; Kevin &#30340;&#26657;&#27491;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.exception" title="6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;">&#31532;&nbsp;6.1&nbsp;&#33410; &#8220;&#24322;&#24120;&#22788;&#29702;&#8221;</a> &#20013;&#30340;&#27880;&#35299;&#65292;&#35828;&#26126;&#20102;&#21487;&#20197;&#33258;&#24049;&#23450;&#20041;&#24322;&#24120;&#24182;&#35302;&#21457;&#23427;&#12290;&#24863;&#35874; Rony &#30340;&#24314;&#35758;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dialect.specifictags.example" title="&#20363;&nbsp;8.17.&nbsp;&#22788;&#29702;&#29305;&#21035;&#26631;&#35760;">&#20363;&nbsp;8.17 &#8220;&#22788;&#29702;&#29305;&#21035;&#26631;&#35760;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;&#24863;&#35874; Rick &#30340;&#26657;&#27491;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.dialectizer.example" title="&#20363;&nbsp;8.18.&nbsp;SGMLParser">&#20363;&nbsp;8.18 &#8220;<code class="classname">SGMLParser</code>&#8221;</a> &#20013;&#30340;&#27880;&#35299;&#65292;&#35814;&#32454;&#35828;&#26126;&#20102;&#36820;&#22238;&#20540;&#12290;&#24863;&#35874; Howard &#30340;&#24314;&#35758;&#12290;</li><li>&#22312; <a class="xref" href="#kgp.openanything.example" title="&#20363;&nbsp;10.6.&nbsp;openAnything">&#20363;&nbsp;10.6 &#8220;<code class="function">openAnything</code>&#8221;</a> &#20013;&#65292;&#28155;&#21152;&#20102; <code class="classname">StringIO</code> &#21021;&#22987;&#21270;&#24335;&#20013;&#30340; <code class="function">str</code> &#20989;&#25968;&#12290;&#24863;&#35874; Ganesan &#30340;&#20027;&#24847;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.romantest" title="13.3.&nbsp;romantest.py &#20171;&#32461;">&#31532;&nbsp;13.3&nbsp;&#33410; &#8220;<code class="filename">romantest.py</code> &#20171;&#32461;&#8221;</a> &#20013;&#30340;&#38142;&#25509;&#65292;&#35299;&#37322;&#20102;&#20026;&#20160;&#20040;&#27979;&#35797;&#29992;&#20363;&#35201;&#25918;&#22312;&#21478;&#19968;&#20010;&#25991;&#20214;&#20013;&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#regression.path" title="16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;">&#31532;&nbsp;16.2&nbsp;&#33410; &#8220;&#25214;&#21040;&#36335;&#24452;&#8221;</a>&#65292;&#29992; <code class="function">os.path.dirname</code> &#20195;&#26367;&#20102; <code class="literal">os.path.split</code>&#12290;&#24863;&#35874; Marc &#30340;&#20027;&#24847;&#12290;</li><li>&#28155;&#21152;&#20102;&#20195;&#30721;&#31034;&#20363; (<code class="filename">piglatin.py</code>&#12289;<code class="filename">parsephone.py</code> &#21644; <code class="filename">plural.py</code>)&#65292;&#20026;&#27491;&#21017;&#34920;&#36798;&#24335;&#19968;&#31456;&#20316;&#20934;&#22791;&#12290;</li><li>&#26356;&#26032;&#24182;&#25193;&#20805;&#20102;&#20027;&#39029;&#19978;&#20851;&#20110; Python &#30340;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.9</td><td align="left">2002-01-01</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.unicode" title="9.4.&nbsp;Unicode">&#31532;&nbsp;9.4&nbsp;&#33410; &#8220;Unicode&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.search" title="9.5.&nbsp;&#25628;&#32034;&#20803;&#32032;">&#31532;&nbsp;9.5&nbsp;&#33410; &#8220;&#25628;&#32034;&#20803;&#32032;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.attributes" title="9.6.&nbsp;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;">&#31532;&nbsp;9.6&nbsp;&#33410; &#8220;&#35775;&#38382;&#20803;&#32032;&#23646;&#24615;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.openanything" title="10.1.&nbsp;&#25277;&#35937;&#36755;&#20837;&#28304;">&#31532;&nbsp;10.1&nbsp;&#33410; &#8220;&#25277;&#35937;&#36755;&#20837;&#28304;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.stdio" title="10.2.&nbsp;&#26631;&#20934;&#36755;&#20837;&#12289;&#36755;&#20986;&#21644;&#38169;&#35823;">&#31532;&nbsp;10.2&nbsp;&#33410; &#8220;&#26631;&#20934;&#36755;&#20837;&#12289;&#36755;&#20986;&#21644;&#38169;&#35823;&#8221;</a>&#12290;</li><li>&#22312; <a class="xref" href="#fileinfo.for" title="6.3.&nbsp;for &#24490;&#29615;">&#31532;&nbsp;6.3&nbsp;&#33410; &#8220;<code class="literal">for</code> &#24490;&#29615;&#8221;</a> &#20013;&#65292;&#20026; <code class="literal">for</code> &#24490;&#29615;&#31034;&#20363;&#28155;&#21152;&#20102;&#31616;&#21333;&#35745;&#25968;&#30340;&#20363;&#23376; (&#22909;&#30340;&#29992;&#27861;&#21644;&#19981;&#22909;&#30340;&#29992;&#27861;)&#12290;&#24863;&#35874; Kevin &#30340;&#20027;&#24847;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.items" title="&#20363;&nbsp;3.25.&nbsp;keys, values &#21644; items &#20989;&#25968;">&#20363;&nbsp;3.25 &#8220;<code class="function">keys</code>, <code class="function">values</code> &#21644; <code class="function">items</code> &#20989;&#25968;&#8221;</a> &#20013;&#30340;&#25490;&#21360;&#38169;&#35823; (<code class="literal">params.values()</code> &#30340;&#20004;&#20010;&#20803;&#32032;&#34987;&#39072;&#20498;&#20102;)&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#apihelper.builtin" title="4.3.&nbsp;&#20351;&#29992; type&#12289;str&#12289;dir &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;">&#31532;&nbsp;4.3&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="function">type</code>&#12289;<code class="function">str</code>&#12289;<code class="function">dir</code> &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;&#8221;</a> &#20013;&#20851;&#20110; <code class="filename">__builtin__</code> &#27169;&#22359;&#30340;&#38169;&#35823;&#12290;&#24863;&#35874; Denis &#30340;&#26657;&#27491;&#12290;</li><li>&#20026; <a class="xref" href="#regression.path" title="16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;">&#31532;&nbsp;16.2&nbsp;&#33410; &#8220;&#25214;&#21040;&#36335;&#24452;&#8221;</a> &#28155;&#21152;&#20102;&#26356;&#22810;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;&#24403;&#21069;&#30446;&#24405;&#19979;&#36816;&#34892;&#21333;&#20803;&#27979;&#35797;&#65292;&#32780;&#19981;&#24517;&#36827;&#20837; <code class="filename">regression.py</code> &#25152;&#22312;&#30340;&#30446;&#24405;&#12290;</li><li>&#22312; <a class="xref" href="#odbchelper.negative.example" title="&#20363;&nbsp;3.7.&nbsp;&#36127;&#30340; list &#32034;&#24341;">&#20363;&nbsp;3.7 &#8220;&#36127;&#30340; list &#32034;&#24341;&#8221;</a> &#20013;&#65292;&#20462;&#25913;&#20102;&#22914;&#20309;&#30001;&#27491;&#32034;&#24341;&#24471;&#21040;&#36127;&#32034;&#24341;&#30340;&#35299;&#37322;&#12290;&#24863;&#35874; Renauld &#30340;&#24314;&#35758;&#12290;</li><li>&#26356;&#26032;&#20102;&#20027;&#39029;&#19978; <span class="application">Python</span> &#30340;&#19979;&#36733;&#38142;&#25509;&#12290;</li><li>&#20026;&#20027;&#39029;&#28155;&#21152;&#20102;&#25351;&#21521; Bruce Eckel &#30340; <em class="citetitle">Thinking in Python</em> (<a href="http://www.mindview.net/Books/TIPython">http://www.mindview.net/Books/TIPython</a>) &#21021;&#31295;&#30340;&#38142;&#25509;&#12290;&#36825;&#26159;&#19968;&#26412;&#19981;&#21487;&#24605;&#35758;&#30340; (&#20063;&#26159;&#39640;&#38454;&#30340;) &#20070;&#65292;&#35762;&#36848;&#20102;&#35774;&#35745;&#27169;&#24335;&#20197;&#21450;&#22914;&#20309;&#29992; <span class="application">Python</span> &#23454;&#29616;&#23427;&#20204;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.8</td><td align="left">2001-11-18</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#regression.path" title="16.2.&nbsp;&#25214;&#21040;&#36335;&#24452;">&#31532;&nbsp;16.2&nbsp;&#33410; &#8220;&#25214;&#21040;&#36335;&#24452;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#regression.filter" title="16.3.&nbsp;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;">&#31532;&nbsp;16.3&nbsp;&#33410; &#8220;&#37325;&#35782;&#21015;&#34920;&#36807;&#28388;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#regression.map" title="16.4.&nbsp;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;">&#31532;&nbsp;16.4&nbsp;&#33410; &#8220;&#37325;&#35782;&#21015;&#34920;&#26144;&#23556;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#regression.datacentric" title="16.5.&nbsp;&#25968;&#25454;&#20013;&#24515;&#24605;&#24819;&#32534;&#31243;">&#31532;&nbsp;16.5&nbsp;&#33410; &#8220;&#25968;&#25454;&#20013;&#24515;&#24605;&#24819;&#32534;&#31243;&#8221;</a>&#12290;</li><li>&#25193;&#20805;&#20102; <a class="xref" href="#regression.divein" title="16.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;16.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#20013;&#30340;&#26679;&#20363;&#36755;&#20986;&#12290;</li><li>&#23436;&#25104;&#20102; <a class="xref" href="#kgp.parse" title="9.3.&nbsp;XML &#35299;&#26512;">&#31532;&nbsp;9.3&nbsp;&#33410; &#8220;<acronym class="acronym">XML</acronym> &#35299;&#26512;&#8221;</a>&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.7</td><td align="left">2001-09-30</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.packages" title="9.2.&nbsp;&#21253;">&#31532;&nbsp;9.2&nbsp;&#33410; &#8220;&#21253;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#kgp.parse" title="9.3.&nbsp;XML &#35299;&#26512;">&#31532;&nbsp;9.3&nbsp;&#33410; &#8220;<acronym class="acronym">XML</acronym> &#35299;&#26512;&#8221;</a>&#12290;</li><li>&#25226; <a class="xref" href="#kgp.divein" title="9.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;9.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#8220;&#25171;&#25195;&#24178;&#20928;&#8221;&#20102;&#12290;&#24863;&#35874; Matt &#30340;&#24314;&#35758;&#12290;</li><li>&#22312; <a class="xref" href="#fileinfo.fromimport" title="5.2.&nbsp;&#20351;&#29992; from module import &#23548;&#20837;&#27169;&#22359;">&#31532;&nbsp;5.2&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;&#8221;</a> &#20013;&#65292;&#28155;&#21152;&#20102;&#20851;&#20110; <span class="application">Java</span> &#30340;&#25552;&#31034;&#12290;&#24863;&#35874; Ori &#30340;&#24314;&#35758;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#apihelper.alltogether" title="4.8.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;4.8&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a> &#20013;&#30340;&#38169;&#35823;&#12290;&#25105;&#26366;&#26263;&#31034;&#36807;&#65292;&#22312; <span class="application">Python</span> &#20013;&#20320;&#19981;&#33021;&#20351;&#29992; <code class="literal">is None</code> &#26469;&#21028;&#26029;&#21464;&#37327;&#26159;&#21542;&#20026; null&#12290;&#23454;&#38469;&#19978;&#21487;&#20197;&#65307;&#32780;&#19988;&#23427;&#27604; <code class="literal">== None</code> &#24555;&#12290;&#24863;&#35874; Ori &#25351;&#20986;&#38169;&#35823;&#12290;</li><li>&#28548;&#28165;&#20102; <a class="xref" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">&#31532;&nbsp;3.2&nbsp;&#33410; &#8220;List &#20171;&#32461;&#8221;</a>&#65306;&#25105;&#26366;&#35828; <code class="literal">li = li + other</code> &#19982; <code class="literal">li.extend(other)</code> &#31561;&#20215;&#12290;&#25805;&#20316;&#32467;&#26524;&#30340;&#30830;&#30456;&#21516;&#65307;&#20294; <code class="function">extend</code> &#26356;&#24555;&#65292;&#22240;&#20026;&#23427;&#19981;&#20250;&#21019;&#24314;&#26032; list&#12290;&#24863;&#35874; Denis &#25351;&#20986;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">&#31532;&nbsp;3.2&nbsp;&#33410; &#8220;List &#20171;&#32461;&#8221;</a> &#20013;&#30340;&#38169;&#35823;&#65306;&#25105;&#26366;&#35828; <code class="literal">li += other</code> &#19982; <code class="literal">li = li + other</code> &#31561;&#20215;&#12290;&#23454;&#38469;&#19978;&#65292;&#23427;&#19982; <code class="literal">li.extend(other)</code> &#31561;&#20215;&#65292;&#22240;&#20026;&#23427;&#19981;&#20250;&#21019;&#24314;&#26032; list&#12290;&#24863;&#35874; Denis &#25351;&#20986;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#22240;&#25105;&#30340;&#25042;&#24816;&#32780;&#24341;&#36215;&#30340;&#25490;&#29256;&#38169;&#35823;&#12290;&#24403;&#25105;&#20889;&#36825;&#19968;&#31456;&#26102;&#65292;&#25105;&#27809;&#26377;&#22312;&#23383;&#31526;&#20018;&#23383;&#38754;&#37327;&#30340;&#20004;&#20391;&#21152;&#21333;&#24341;&#21495;&#12290;&#23427;&#20204;&#20250;&#34987;&#36171;&#20104;&#29305;&#27530;&#23383;&#20307;&#65292;&#20294;&#22312;&#36825;&#26412;&#20070;&#30340;&#19968;&#20123;&#32534;&#35793;&#29256;&#26412; (&#22914;&#32431;&#25991;&#26412;) &#20013;&#36825;&#19981;&#22863;&#25928;&#12290;&#24863;&#35874; Denis &#30340;&#24314;&#35758;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.funcdef" title="2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;">&#31532;&nbsp;2.2&nbsp;&#33410; &#8220;&#20989;&#25968;&#22768;&#26126;&#8221;</a> &#20013;&#30340;&#38169;&#35823;&#12290;&#25105;&#26366;&#35828;&#38745;&#24577;&#31867;&#22411;&#35821;&#35328;&#24635;&#26159;&#26174;&#31034;&#22320;&#35201;&#27714;&#32473;&#20986;&#21464;&#37327;&#30340;&#25968;&#25454;&#31867;&#22411;&#65307;&#20107;&#23454;&#19978;&#24182;&#38750;&#24635;&#26159;&#22914;&#27492;&#12290;&#26377;&#20123;&#38745;&#24577;&#31867;&#22411;&#35821;&#35328;&#20250;&#22312;&#32534;&#35793;&#26102;&#26681;&#25454;&#20195;&#30721;&#30830;&#23450;&#21464;&#37327;&#31867;&#22411;&#12290;&#24863;&#35874; Tony &#25351;&#20986;&#12290;</li><li>&#28155;&#21152;&#20102;&#25351;&#21521; &#35199;&#29677;&#29273;&#25991;&#29256; (<a href="http://es.diveintopython.org/">http://es.diveintopython.org/</a>) &#30340;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.6.4</td><td align="left">2001-09-06</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20026; <code class="classname">BaseHTMLProcessor</code> &#28155;&#21152;&#22788;&#29702;&#38750; <acronym class="acronym">HTML</acronym> &#23454;&#20307;&#24341;&#29992;&#30340;&#20195;&#30721;&#65292;&#24182;&#22312; <a class="xref" href="#dialect.basehtml" title="8.4.&nbsp;BaseHTMLProcessor.py &#20171;&#32461;">&#31532;&nbsp;8.4&nbsp;&#33410; &#8220;<code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;&#8221;</a> &#20013;&#28155;&#21152;&#20102;&#20851;&#20110;&#23427;&#30340;&#27880;&#35299;&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#dialect.globals.example" title="&#20363;&nbsp;8.11.&nbsp;globals &#20171;&#32461;">&#20363;&nbsp;8.11 &#8220;<code class="function">globals</code> &#20171;&#32461;&#8221;</a>&#65292;&#20351;&#20043;&#22312;&#36755;&#20986;&#20013;&#21253;&#25324; <code class="filename">htmlentitydefs</code>&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.6.3</td><td align="left">2001-09-04</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#27491;&#20102; <a class="xref" href="#kgp.divein" title="9.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;9.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#20013;&#30340;&#25340;&#20889;&#38169;&#35823;&#12290;</li><li>&#28155;&#21152;&#20102;&#25351;&#21521; &#38889;&#25991;&#29256; (<a href="http://kr.diveintopython.org/html/index.htm">http://kr.diveintopython.org/html/index.htm</a>) &#30340;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.6.2</td><td align="left">2001-08-31</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#27491;&#20102; <a class="xref" href="#roman.sanity" title="13.6.&nbsp;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)">&#31532;&nbsp;13.6&nbsp;&#33410; &#8220;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)&#8221;</a> &#20013;&#30340;&#25490;&#21360;&#38169;&#35823; (&#26368;&#21518;&#19968;&#28857;&#35201;&#27714;&#21015;&#20102;&#20004;&#27425;)&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.6</td><td align="left">2001-08-31</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#23436;&#25104;&#20102; <a class="xref" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">&#31532;&nbsp;8&nbsp;&#31456; <i><acronym class="acronym">HTML</acronym> &#22788;&#29702;</i></a>&#65307;&#22312;&#20854;&#26411;&#23614;&#28155;&#21152;&#20102; <a class="xref" href="#dialect.alltogether" title="8.9.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;8.9&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a> &#21644; <a class="xref" href="#dialect.summary" title="8.10.&nbsp;&#23567;&#32467;">&#31532;&nbsp;8.10&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.postscript" title="15.4.&nbsp;&#21518;&#35760;">&#31532;&nbsp;15.4&nbsp;&#33410; &#8220;&#21518;&#35760;&#8221;</a>&#12290;</li><li>&#22312; <a class="xref" href="#kgp" title="&#31532;&nbsp;9&nbsp;&#31456;&nbsp;XML &#22788;&#29702;">&#31532;&nbsp;9&nbsp;&#31456; <i><acronym class="acronym">XML</acronym> &#22788;&#29702;</i></a> &#24320;&#22836;&#28155;&#21152;&#20102; <a class="xref" href="#kgp.divein" title="9.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;9.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li><li>&#22312; <a class="xref" href="#regression" title="&#31532;&nbsp;16&nbsp;&#31456;&nbsp;&#20989;&#25968;&#32534;&#31243;">&#31532;&nbsp;16&nbsp;&#31456; <i>&#20989;&#25968;&#32534;&#31243;</i></a> &#24320;&#22836;&#28155;&#21152;&#20102; <a class="xref" href="#regression.divein" title="16.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;16.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li><li>&#20462;&#27491;&#20102;&#19968;&#20010;&#38271;&#26399;&#23384;&#22312;&#30340; bug&#65306;<a class="xref" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">&#31532;&nbsp;8&nbsp;&#31456; <i><acronym class="acronym">HTML</acronym> &#22788;&#29702;</i></a> &#20013;&#30340;&#31034;&#20363;&#34987;&#38169;&#35823;&#22320;&#30528;&#33394;&#20102;&#12290;</li><li>&#28155;&#21152;&#20102;&#25351;&#21521; &#27861;&#25991;&#29256; (<a href="http://fr.diveintopython.org/toc.html">http://fr.diveintopython.org/toc.html</a>) &#30340;&#38142;&#25509;&#12290;&#20182;&#20204;&#20570;&#23545;&#20102;&#65306;&#20182;&#20204;&#32763;&#35793;&#20102; <acronym class="acronym">XML</acronym> &#28304;&#25991;&#20214;&#65292;&#36825;&#26679;&#25105;&#30340;&#26500;&#24314;&#33050;&#26412;&#24471;&#20197;&#37325;&#29992;&#65292;&#20182;&#20204;&#30340;&#25104;&#26524;&#23601;&#21487;&#20197;&#29992;&#20845;&#31181;&#26684;&#24335;&#21457;&#24067;&#12290;</li><li>&#21319;&#32423;&#21040; <span class="application">DocBook</span> <acronym class="acronym">XSL</acronym> 1.43 &#29256;&#30340;&#26679;&#24335;&#34920;&#12290;</li><li>&#21319;&#32423;&#21040; &#30001; Michael Kay &#32534;&#21046;&#30340; <span class="application"><acronym class="acronym">SAXON</acronym></span> <acronym class="acronym">XSLT</acronym> &#35299;&#26512;&#22120; 6.43 &#29256;&#12290;</li><li>&#23545;&#26679;&#24335;&#34920;&#36827;&#34892;&#20102;&#22823;&#35268;&#27169;&#32763;&#20462;&#65306;&#25918;&#24323;&#20102;&#21407;&#26469;&#30340;&#22522;&#20110;&#34920;&#26684;&#30340;&#25490;&#29256;&#65292;&#36716;&#21521;&#23618;&#21472;&#26679;&#24335;&#34920;&#12290;&#19981;&#24184;&#30340;&#26159;&#65292; <acronym class="acronym">CSS</acronym> &#24635;&#26159;&#20250;&#20986;&#20860;&#23481;&#24615;&#38382;&#39064;&#65292;&#25152;&#20197;&#22312;&#27599;&#20010;&#39029;&#38754;&#30340;&#39318;&#23614;&#37096;&#20998;&#37117;&#20445;&#30041;&#30340;&#34920;&#26684;&#12290;&#32534;&#35793;&#21518;&#30340; <acronym class="acronym">HTML</acronym> &#29256;&#26412;&#22312; <span class="application">Netscape</span> 4 &#30475;&#36215;&#26469;&#26356;&#31967;&#31957;&#20102;&#65307;&#20294;&#22312;&#22823;&#22810;&#25968;&#29616;&#20195;&#27983;&#35272;&#22120;&#20013;&#8213;&#8213;&#21253;&#25324; <span class="application">Netscape</span> 6&#12289;<span class="application">Mozilla</span>&#12289;<span class="application">Internet Explorer</span> 5&#12289;<span class="application">Opera</span> 5&#12289;<span class="application">Konqueror</span> &#21644; <span class="application">iCab</span>&#8213;&#8213;&#20013;&#34920;&#29616;&#33391;&#22909;&#12290;&#22312; Lynx &#20013;&#23436;&#20840;&#21487;&#35835;&#12290;&#25105;&#29233; Lynx&#65281;&#23427;&#26159;&#25105;&#20351;&#29992;&#30340;&#31532;&#19968;&#20010;&#27983;&#35272;&#22120;&#12290;&#20320;&#27704;&#36828;&#19981;&#20250;&#24536;&#35760;&#20320;&#30340;&#31532;&#19968;&#27425;&#12290;</li><li>&#36801;&#31227;&#21040; <span class="application">Ant</span> (<a href="http://jakarta.apache.org/ant/">http://jakarta.apache.org/ant/</a>) &#24179;&#21488;&#19978;&#65292;&#20197;&#20415;&#25511;&#21046;&#36827;&#31243;&#8213;&#8213;&#25105;&#29616;&#22312;&#21487;&#26159;&#22312;&#20845;&#31181;&#26684;&#24335;&#21644;&#20004;&#31181;&#35821;&#35328;&#20013;&#25506;&#38505;&#12290;</li><li>&#25972;&#29702;&#20102;&#25152;&#26377;&#30340;&#19979;&#36733;&#26723;&#26696;&#65307;&#36825;&#20043;&#21069;&#25105;&#20026;&#27599;&#20010;&#24179;&#21488;&#37117;&#21457;&#24067;&#20102;&#19981;&#21516;&#30340;&#25991;&#20214;&#65292;&#22240;&#20026; <span class="application">Python</span> &#30340; <code class="filename">zipfile</code> &#27169;&#22359;&#21019;&#24314;&#30340; .zip &#25991;&#20214;&#19981;&#26631;&#20934;&#65292;&#22240;&#27492;&#19981;&#33021;&#34987; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#19978;&#30340; <span class="application">Aladdin Expander</span> &#25171;&#24320;&#12290;&#20294; <span class="application">Ant</span> &#21019;&#24314;&#30340; .zip &#23436;&#20840;&#26631;&#20934;&#65292;&#20860;&#23481;&#24615;&#33391;&#22909;&#12290;&#22909;&#26679;&#30340;&#65292;<span class="application">Ant</span>&#65281;</li><li>&#25105;&#20204;&#25226; <acronym class="acronym">XML</acronym> &#28304;&#12289;<acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920;&#21644;&#30456;&#20851;&#30340;&#33050;&#26412;&#21644;&#24211;&#25918;&#22312;&#20102; SourceForge&#12290;&#23545;&#20110;&#21916;&#27426;&#20882;&#38505;&#30340;&#20154;&#20204;&#65292;&#24403;&#28982;&#26377; <acronym class="acronym">CVS</acronym> &#25509;&#20837;&#12290;</li><li>&#22312;&#19982; <acronym class="acronym">GPL</acronym> &#35843;&#21644;&#30340; Python 2.1.1 license (<a href="http://www.python.org/2.1.1/license.html">http://www.python.org/2.1.1/license.html</a>) &#19979;&#37325;&#26032;&#21457;&#24067;&#20102;&#20195;&#30721;&#12290;&#24863;&#35874;&#20320;&#65292;Guido&#65307;&#20154;&#20204;&#30830;&#23454;&#20851;&#24515;&#65292;&#32780;&#23427;&#30830;&#23454;&#35201;&#32039;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.5</td><td align="left">2001-06-26</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#22312; <a class="xref" href="#odbchelper.funcdef" title="2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;">&#31532;&nbsp;2.2&nbsp;&#33410; &#8220;&#20989;&#25968;&#22768;&#26126;&#8221;</a> &#20013;&#28155;&#21152;&#20102;&#23545; &#24378;/&#24369;/&#38745;&#24577;/&#21160;&#24577; &#25968;&#25454;&#31867;&#22411;&#30340;&#27880;&#35299;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#odbchelper.dict" title="3.1.&nbsp;Dictionary &#20171;&#32461;">&#31532;&nbsp;3.1&nbsp;&#33410; &#8220;Dictionary &#20171;&#32461;&#8221;</a> &#20013;&#20851;&#20110;&#22823;&#23567;&#20889;&#25935;&#24863;&#30340;&#31034;&#20363;&#12290;</li><li>&#22312; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#20013;&#20351;&#29992;&#20102; <code class="function">os.path.normcase</code>&#65292;&#20197;&#20860;&#23481;&#23545;&#22823;&#23567;&#20889;&#19981;&#25935;&#24863;&#30340;&#31967;&#31957;&#30340;&#25805;&#20316;&#31995;&#32479;&#12290;</li><li>&#20462;&#27491;&#20102; <acronym class="acronym">PDF</acronym> &#29256;&#26412;&#20013;&#20195;&#30721;&#30340;&#32553;&#36827;&#38382;&#39064;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.4</td><td align="left">2001-05-31</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.stage5" title="14.5.&nbsp;roman.py, &#31532; 5 &#38454;&#27573;">&#31532;&nbsp;14.5&nbsp;&#33410; &#8220;<code class="filename">roman.py</code>, &#31532; 5 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.bugs" title="15.1.&nbsp;&#22788;&#29702; bugs">&#31532;&nbsp;15.1&nbsp;&#33410; &#8220;&#22788;&#29702; bugs&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.change" title="15.2.&nbsp;&#24212;&#23545;&#38656;&#27714;&#21464;&#21270;">&#31532;&nbsp;15.2&nbsp;&#33410; &#8220;&#24212;&#23545;&#38656;&#27714;&#21464;&#21270;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.refactoring" title="15.3.&nbsp;&#37325;&#26500;">&#31532;&nbsp;15.3&nbsp;&#33410; &#8220;&#37325;&#26500;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.summary" title="15.5.&nbsp;&#23567;&#32467;">&#31532;&nbsp;15.5&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#21448;&#20462;&#27491;&#19968;&#20010;&#26679;&#24335;&#34920; bug &#65306;&#23884;&#22871;&#30340; <code class="sgmltag-element">&lt;/span&gt;</code> &#26631;&#35760;&#24635;&#26159;&#20002;&#22833;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.3</td><td align="left">2001-05-24</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.divein" title="13.2.&nbsp;&#28145;&#20837;">&#31532;&nbsp;13.2&nbsp;&#33410; &#8220;&#28145;&#20837;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.romantest" title="13.3.&nbsp;romantest.py &#20171;&#32461;">&#31532;&nbsp;13.3&nbsp;&#33410; &#8220;<code class="filename">romantest.py</code> &#20171;&#32461;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.success" title="13.4.&nbsp;&#27491;&#38754;&#27979;&#35797; (Testing for success)">&#31532;&nbsp;13.4&nbsp;&#33410; &#8220;&#27491;&#38754;&#27979;&#35797; (Testing for success)&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.failure" title="13.5.&nbsp;&#36127;&#38754;&#27979;&#35797; (Testing for failure)">&#31532;&nbsp;13.5&nbsp;&#33410; &#8220;&#36127;&#38754;&#27979;&#35797; (Testing for failure)&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.sanity" title="13.6.&nbsp;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)">&#31532;&nbsp;13.6&nbsp;&#33410; &#8220;&#23436;&#22791;&#24615;&#26816;&#27979; (Testing for sanity)&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.stage1" title="14.1.&nbsp;roman.py, &#31532; 1 &#38454;&#27573;">&#31532;&nbsp;14.1&nbsp;&#33410; &#8220;<code class="filename">roman.py</code>, &#31532; 1 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.stage2" title="14.2.&nbsp;roman.py, &#31532; 2 &#38454;&#27573;">&#31532;&nbsp;14.2&nbsp;&#33410; &#8220;<code class="filename">roman.py</code>, &#31532; 2 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.stage3" title="14.3.&nbsp;roman.py, &#31532; 3 &#38454;&#27573;">&#31532;&nbsp;14.3&nbsp;&#33410; &#8220;<code class="filename">roman.py</code>, &#31532; 3 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#roman.stage4" title="14.4.&nbsp;roman.py, &#31532; 4 &#38454;&#27573;">&#31532;&nbsp;14.4&nbsp;&#33410; &#8220;<code class="filename">roman.py</code>, &#31532; 4 &#38454;&#27573;&#8221;</a>&#12290;</li><li>&#22312;&#20860;&#23481; <span class="application">Netscape</span>/<span class="application">Mozilla</span> &#30340;&#24378;&#28872;&#35201;&#27714;&#19979;&#65292;&#35843;&#25972;&#20102;&#26679;&#24335;&#34920;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.2</td><td align="left">2001-05-03</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.dialectizer" title="8.8.&nbsp;dialect.py &#20171;&#32461;">&#31532;&nbsp;8.8&nbsp;&#33410; &#8220;<code class="filename">dialect.py</code> &#20171;&#32461;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#re.matching" title="7.2.&nbsp;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;">&#31532;&nbsp;7.2&nbsp;&#33410; &#8220;&#20010;&#26696;&#30740;&#31350;&#65306;&#34903;&#36947;&#22320;&#22336;&#8221;</a>&#12290;</li><li>&#20462;&#27491;&#20102; <code class="function">handle_decl</code> &#26041;&#27861;&#20013;&#30340; bug&#65306;&#23427;&#20250;&#20135;&#29983;&#19981;&#27491;&#30830;&#30340;&#22768;&#26126; (&#25226;&#31354;&#26684;&#21152;&#22312;&#30340;&#19981;&#35813;&#20986;&#29616;&#30340;&#22320;&#26041;)&#12290;</li><li>&#20462;&#27491;&#20102; <acronym class="acronym">CSS</acronym> (2.9 &#20171;&#32461;&#36807;) &#20013;&#30340; bug&#65306;&#32972;&#26223;&#33394;&#20002;&#22833;&#20102;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.1</td><td align="left">2001-04-18</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20026; <a class="link" href="#dialect.divein" title="8.1.&nbsp;&#27010;&#35272;"><code class="filename">BaseHTMLProcessor.py</code></a> &#28155;&#21152;&#22788;&#29702;&#22768;&#26126;&#30340;&#20195;&#30721;&#65307;&#29616;&#22312; <span class="application">Python</span> 2.1 &#20063;&#25903;&#25345;&#36825;&#27573;&#20195;&#30721;&#20102;&#12290;</li><li>&#28155;&#21152; <a class="xref" href="#dialect.locals" title="8.5.&nbsp;locals &#21644; globals">&#31532;&nbsp;8.5&nbsp;&#33410; &#8220;<code class="function">locals</code> &#21644; <code class="function">globals</code>&#8221;</a> &#20013;&#20851;&#20110;&#23884;&#22871;&#20316;&#29992;&#22495;&#30340;&#27880;&#35299;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dialect.basehtml.listing" title="&#20363;&nbsp;8.1.&nbsp;BaseHTMLProcessor.py">&#20363;&nbsp;8.1 &#8220;<code class="filename">BaseHTMLProcessor.py</code>&#8221;</a> &#20013;&#30340;&#19968;&#20010;&#38544;&#31192;&#30340; bug&#65306;&#24102;&#26377;&#23383;&#31526;&#23454;&#20307;&#30340;&#23646;&#24615;&#20540;&#19981;&#20250;&#34987;&#21512;&#36866;&#22320;&#36716;&#20041;&#12290;</li><li>&#23545;&#20110;&#26412;&#20070;&#20013;&#30340;&#31034;&#20363;&#65292;&#29616;&#22312;&#25512;&#33616; (&#24182;&#19981;&#35201;&#27714;) <span class="application">Python</span> 2.1&#65292;&#22240;&#20026;&#23427;&#25903;&#25345; <code class="filename">sgmllib.py</code> &#20013;&#30340;&#22768;&#26126;&#12290;</li><li>&#26356;&#26032;&#20102; &#20027;&#39029; (<a href="http://diveintopython.org/">http://diveintopython.org/</a>) &#19978;&#30340;&#38142;&#25509;&#65292;&#20351;&#20854;&#25351;&#21521;&#24050;&#32463;&#21457;&#24067;&#30340; <span class="application">Python</span> 2.1&#12290;</li><li>&#32473;&#25991;&#20214;&#21152;&#19978;&#20102;&#26102;&#38388;&#25139;&#65292;&#20197;&#24110;&#21161;&#37325;&#21457;&#24067;&#36825;&#26412;&#20070;&#30340;&#20154;&#20204;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 3.0</td><td align="left">2001-04-16</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#23545; <a class="xref" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">&#31532;&nbsp;8&nbsp;&#31456; <i><acronym class="acronym">HTML</acronym> &#22788;&#29702;</i></a> &#20013;&#30340;&#20195;&#30721;&#20462;&#27491;&#20102;&#20960;&#20010;&#23567;&#38169;&#35823;&#12290;</li><li>&#22312; &#20027;&#39029; (<a href="http://diveintopython.org/">http://diveintopython.org/</a>) &#19978;&#28155;&#21152;&#20102;&#25351;&#21521;&#20013;&#25991;&#29256;&#30340;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.9</td><td align="left">2001-04-13</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.locals" title="8.5.&nbsp;locals &#21644; globals">&#31532;&nbsp;8.5&nbsp;&#33410; &#8220;<code class="function">locals</code> &#21644; <code class="function">globals</code>&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.dictsub" title="8.6.&nbsp;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;">&#31532;&nbsp;8.6&nbsp;&#33410; &#8220;&#22522;&#20110; dictionary &#30340;&#23383;&#31526;&#20018;&#26684;&#24335;&#21270;&#8221;</a>&#12290;</li><li>&#32039;&#32553;&#20102; <a class="xref" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">&#31532;&nbsp;8&nbsp;&#31456; <i><acronym class="acronym">HTML</acronym> &#22788;&#29702;</i></a> &#20013;&#30340;&#20195;&#30721;&#65292;&#29305;&#21035;&#26159; <code class="classname">ChefDialectizer</code>&#65292;&#20197;&#20351;&#29992;&#26356;&#23569;&#12289;&#26356;&#31616;&#21333;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#12290;</li><li>&#20462;&#27491;&#20102;&#19968;&#20010;&#26679;&#24335;&#34920; bug&#65306;&#23427;&#20351;&#24471;&#29983;&#25104; <acronym class="acronym">PDF</acronym> &#29256;&#26412;&#26102;&#25554;&#20837;&#20102;&#19981;&#24517;&#35201;&#30340;&#31354;&#30333;&#39029;&#12290;</li><li>&#20462;&#27491;&#20102;&#19968;&#20010;&#33050;&#26412; bug&#65306;&#23427;&#21093;&#38500;&#20102; &#20027;&#39029; (<a href="http://diveintopython.org/">http://diveintopython.org/</a>) &#19978;&#30340; <code class="literal">DOCTYPE</code>&#12290;</li><li>&#28155;&#21152;&#20102;&#25351;&#21521; <span class="application">Python</span> Cookbook (<a href="http://www.activestate.com/ASPN/Python/Cookbook/">http://www.activestate.com/ASPN/Python/Cookbook/</a>) &#30340;&#38142;&#25509;&#65292;&#24182;&#20026; <a class="xref" href="#furtherreading" title="&#38468;&#24405;&nbsp;A.&nbsp;&#36827;&#19968;&#27493;&#38405;&#35835;">&#38468;&#24405;&nbsp;A, <i>&#36827;&#19968;&#27493;&#38405;&#35835;</i></a> &#28155;&#21152;&#20102;&#19968;&#20123;&#38142;&#25509;&#12290;</li><li>&#25913;&#29992; Google (<a href="http://www.google.com/services/free.html">http://www.google.com/services/free.html</a>) &#20195;&#29702; <code class="systemitem">http://diveintopython.org/</code> &#30340;&#31449;&#20869;&#25628;&#32034;&#12290;</li><li>&#21319;&#32423;&#21040; <span class="application">DocBook</span> <acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920; 1.36 &#29256;&#8213;&#8213;&#27604;&#23427;&#25152;&#23459;&#31216;&#30340;&#40635;&#28902;&#22810;&#20102;&#12290;&#21487;&#33021;&#36824;&#26377;&#28508;&#20239;&#30340; bug&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.8</td><td align="left">2001-03-26</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.extract" title="8.3.&nbsp;&#20174; HTML &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;">&#31532;&nbsp;8.3&nbsp;&#33410; &#8220;&#20174; <acronym class="acronym">HTML</acronym> &#25991;&#26723;&#20013;&#25552;&#21462;&#25968;&#25454;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.basehtml" title="8.4.&nbsp;BaseHTMLProcessor.py &#20171;&#32461;">&#31532;&nbsp;8.4&nbsp;&#33410; &#8220;<code class="filename">BaseHTMLProcessor.py</code> &#20171;&#32461;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.quoting" title="8.7.&nbsp;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;">&#31532;&nbsp;8.7&nbsp;&#33410; &#8220;&#32473;&#23646;&#24615;&#20540;&#21152;&#24341;&#21495;&#8221;</a>&#12290;</li><li>&#32039;&#32553;&#20102; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#20013;&#30340;&#20195;&#30721;&#65306;&#20351;&#29992;&#30340;&#20869;&#32622;&#20989;&#25968; <code class="function">callable</code> &#26469;&#20195;&#26367;&#25163;&#24037;&#26816;&#27979;&#12290;</li><li>&#25226; <a class="xref" href="#fileinfo.fromimport" title="5.2.&nbsp;&#20351;&#29992; from module import &#23548;&#20837;&#27169;&#22359;">&#31532;&nbsp;5.2&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">from <em class="replaceable">module</em> import</code> &#23548;&#20837;&#27169;&#22359;&#8221;</a> &#20174; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#31227;&#21040;&#20102; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a>&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#fileinfo.divein" title="5.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;5.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#20013;&#30340;&#25490;&#21360;&#38169;&#35823; (&#34917;&#22238;&#20102;&#20882;&#21495;)&#12290;</li><li>&#28155;&#21152;&#20102;&#20960;&#20010;&#39069;&#22806;&#30340;&#20379;&#19979;&#36733;&#30340;&#26679;&#20363;&#33050;&#26412;&#12290;</li><li>&#28155;&#21152;&#20102; Windows Help &#36755;&#20986;&#26684;&#24335;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.7</td><td align="left">2001-03-16</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.sgmllib" title="8.2.&nbsp;sgmllib.py &#20171;&#32461;">&#31532;&nbsp;8.2&nbsp;&#33410; &#8220;<code class="filename">sgmllib.py</code> &#20171;&#32461;&#8221;</a>&#12290;</li><li>&#32039;&#32553;&#20102; <a class="xref" href="#dialect" title="&#31532;&nbsp;8&nbsp;&#31456;&nbsp;HTML &#22788;&#29702;">&#31532;&nbsp;8&nbsp;&#31456; <i><acronym class="acronym">HTML</acronym> &#22788;&#29702;</i></a> &#20013;&#30340;&#20195;&#30721;&#12290;</li><li>&#20462;&#25913;&#20102; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#20013;&#30340;&#20195;&#30721;&#65306;&#29992;&#20102; <code class="function">items</code> &#26041;&#27861;&#20195;&#26367;&#20102; <code class="function">keys</code>&#12290;</li><li>&#25226; <a class="xref" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#31532;&nbsp;3.4.2&nbsp;&#33410; &#8220;&#19968;&#27425;&#36171;&#22810;&#20540;&#8221;</a> &#19968;&#33410;&#31227;&#21040;&#20102; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a>&#12290;</li><li>&#32534;&#36753;&#20102;&#20851;&#20110;&#23383;&#31526;&#20018; <code class="function">join</code> &#26041;&#27861;&#30340;&#35780;&#27880;&#65292;&#25552;&#20379;&#20102; <em class="citetitle">The Whole <span class="application">Python</span> <acronym class="acronym">FAQ</acronym></em> (<a href="http://www.python.org/doc/FAQ.html">http://www.python.org/doc/FAQ.html</a>) &#20013;&#35299;&#37322;why <code class="function">join</code> is a string method (<a href="http://www.python.org/cgi-bin/faqw.py?query=4.96&amp;querytype=simple&amp;casefold=yes&amp;req=search">http://www.python.org/cgi-bin/faqw.py?query=4.96&amp;querytype=simple&amp;casefold=yes&amp;req=search</a>) (&#20026;&#20160;&#20040; <code class="function">join</code> &#26159;&#23383;&#31526;&#20018;&#26041;&#27861;) &#32780;&#19981;&#26159; list &#26041;&#27861;&#30340;&#36825;&#19968;&#26032;&#26465;&#30446;&#12290;</li><li>&#37325;&#20889;&#20102; <a class="xref" href="#apihelper.andor" title="4.6.&nbsp;and &#21644; or &#30340;&#29305;&#27530;&#24615;&#36136;">&#31532;&nbsp;4.6&nbsp;&#33410; &#8220;<code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#29305;&#27530;&#24615;&#36136;&#8221;</a>&#65292;&#24378;&#35843;&#20102; <code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#22522;&#26412;&#24615;&#36136;&#65307;&#24182;&#19988;&#19981;&#20877;&#24378;&#35843; <code class="literal">and-or</code> &#25216;&#24039;&#12290;</li><li>&#25226;&#35821;&#35328;&#27604;&#36739;&#37325;&#26032;&#32452;&#32455;&#20026;&#20102; <code class="sgmltag-element">note</code>&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.6</td><td align="left">2001-02-28</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#32473; <acronym class="acronym">PDF</acronym> &#21644; <span class="application">Word</span> &#29256;&#26412;&#21152;&#20837;&#20102;&#24425;&#33394;&#30340;&#31034;&#20363;&#25991;&#26412;&#12289;&#25913;&#36827;&#21518;&#30340;&#30446;&#24405;&#65292;&#20197;&#21450;&#32553;&#36827;&#33391;&#22909;&#30340; <code class="sgmltag-element">tip</code> &#21644; <code class="sgmltag-element">note</code>&#12290;</li><li>&#29616;&#22312; <span class="application">Word</span> &#29256;&#26412;&#26159;&#27491;&#23447;&#30340; <span class="application">Word</span> &#26684;&#24335;&#20102;&#65292;&#19982; <span class="application">Word 97</span> &#23436;&#20840;&#20860;&#23481;&#12290;</li><li>&#37096;&#20998;&#22320;&#35299;&#20915; <acronym class="acronym">PDF</acronym> &#21644;&#32431;&#25991;&#26412;&#29256;&#26412;&#20013;&#30340;&#29305;&#27530;&#23383;&#31526; (&#20687; TM &#31526;&#21495;&#21644;&#33457;&#25324;&#21495;) &#38169;&#35823;&#30340;&#38382;&#39064;&#12290;</li><li>&#28155;&#21152;&#20102;&#25351;&#21521;&#25903;&#25345; <acronym class="acronym">UNIX</acronym> &#30340; <span class="application">Word</span> &#29256;&#26412;&#30340;&#19979;&#36733;&#38142;&#25509;&#8213;&#8213;&#26377;&#20123;&#23567;&#39740;&#24819;&#25226;&#23427;&#23548;&#20837;&#21040; <span class="application">StarOffice</span> &#25110;&#20854;&#23427;&#20160;&#20040;&#29615;&#22659;&#20013;&#21435;&#12290;</li><li>&#20462;&#27491;&#20102;&#20960;&#20010;&#20002;&#22833;&#26631;&#39064;&#30340; <code class="sgmltag-element">&#27880;&#35760;</code>&#12290;</li><li>&#20462;&#27491;&#20102;&#19968;&#20010; bug&#65306;&#23427;&#20250;&#23548;&#33268; <span class="application">Internet Explorer</span> 5 for <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#31034;&#20363;&#20013;&#30340;&#24425;&#33394;&#25991;&#23383;&#21457;&#29983;&#23383;&#20307;&#38169;&#20081;&#12290;(&#20320;&#22909;&#65311;&#65281;&#65311;Microsoft&#65311;&#22909;&#65292;&#20320;&#20498;&#35828;&#35828;&#30475;&#65292;&#21040;&#24213;&#26159; <code class="sgmltag-element">&lt;pre&gt;</code> &#30340;&#21738;&#19968;&#37096;&#20998;&#20320;&#19981;&#25026;&#65311;)</li><li>&#20462;&#22797;&#20102; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#26723;&#26696;&#30340;&#19979;&#36733;&#38142;&#25509;&#12290;</li><li>&#22312;&#27599;&#31456;&#30340;&#31532;&#19968;&#20010;&#31034;&#20363;&#31243;&#24207;&#21069;&#65292;&#37117;&#28155;&#21152;&#20102;&#19979;&#36733;&#31034;&#20363;&#31243;&#24207;&#30340;&#38142;&#25509;&#12290;(&#25105;&#30340;&#26085;&#24535;&#26174;&#31034;&#20154;&#20204;&#24448;&#24448;&#20250;&#36339;&#36807;&#26412;&#21487;&#20197;&#19979;&#36733;&#23427;&#20204;&#30340;&#37027;&#20004;&#20010;&#39029;&#38754; (&#21363;&#65306; &#20027;&#39029; (<a href="http://diveintopython.org/">http://diveintopython.org/</a>) &#21644;&#24207;&#35328;)&#65292;&#28982;&#21518;&#22312;&#38405;&#35835;&#26102;&#24778;&#24908;&#22833;&#25514;&#22320;&#23547;&#25214;&#19979;&#36733;&#22320;&#22336;&#12290;)</li><li>&#36827;&#19968;&#27493;&#32039;&#32553;&#20102; &#20027;&#39029; (<a href="http://diveintopython.org/">http://diveintopython.org/</a>) &#21644;&#24207;&#35328;&#8213;&#8213;&#20294;&#24895;&#20154;&#20204;&#19981;&#20250;&#20877;&#22240;&#20026;&#20854;&#26434;&#20081;&#19981;&#22570;&#32780;&#36339;&#36807;&#23427;&#20204;&#12290;</li><li>&#20294;&#24895;&#26089;&#28857;&#32467;&#26463;&#36825;&#27809;&#23436;&#27809;&#20102;&#30340;&#35843;&#35797;&#65292;&#22238;&#21040;&#20889;&#20316;&#27491;&#36712;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.5</td><td align="left">2001-02-23</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.modules" title="6.4.&nbsp;&#20351;&#29992; sys.modules">&#31532;&nbsp;6.4&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal"><code class="filename">sys</code>.modules</code>&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.os" title="6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;">&#31532;&nbsp;6.5&nbsp;&#33410; &#8220;&#19982;&#30446;&#24405;&#20849;&#20107;&#8221;</a>&#12290;</li><li>&#25226; <a class="xref" href="#splittingpathnames.example" title="&#20363;&nbsp;6.17.&nbsp;&#20998;&#21106;&#36335;&#24452;&#21517;">&#20363;&nbsp;6.17 &#8220;&#20998;&#21106;&#36335;&#24452;&#21517;&#8221;</a> &#20174; <a class="xref" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#31532;&nbsp;3.4.2&nbsp;&#33410; &#8220;&#19968;&#27425;&#36171;&#22810;&#20540;&#8221;</a> &#31227;&#21040;&#20102; <a class="xref" href="#fileinfo.os" title="6.5.&nbsp;&#19982;&#30446;&#24405;&#20849;&#20107;">&#31532;&nbsp;6.5&nbsp;&#33410; &#8220;&#19982;&#30446;&#24405;&#20849;&#20107;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.alltogether" title="6.6.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;6.6&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.summary" title="5.10.&nbsp;&#23567;&#32467;">&#31532;&nbsp;5.10&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#dialect.divein" title="8.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;8.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#dictionaryiter.example" title="&#20363;&nbsp;6.10.&nbsp;&#36941;&#21382; dictionary">&#20363;&nbsp;6.10 &#8220;&#36941;&#21382; dictionary&#8221;</a> &#20013;&#30340;&#31243;&#24207;&#28165;&#21333;&#8213;&#8213;&#23569;&#20102;&#19968;&#20010;&#20882;&#21495;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.4.1</td><td align="left">2001-02-12</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20462;&#25913;&#20102;&#26032;&#38395;&#32452;&#38142;&#25509;&#65292;&#20351;&#29992;&#20102; "<span class="quote">news:</span>" &#21327;&#35758;&#12290;<code class="systemitem">deja.com</code> &#24050;&#27515;&#12290;</li><li>&#22312;&#19979;&#36733;&#38142;&#25509;&#26049;&#26631;&#26126;&#20102;&#25991;&#20214;&#22823;&#23567;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.4</td><td align="left">2001-02-12</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20026;&#22823;&#22810;&#25968;&#31456;&#33410;&#28155;&#21152;&#20102; "<span class="quote">&#36827;&#19968;&#27493;&#38405;&#35835;</span>"&#65292;&#24182;&#22312; <a class="xref" href="#furtherreading" title="&#38468;&#24405;&nbsp;A.&nbsp;&#36827;&#19968;&#27493;&#38405;&#35835;">&#38468;&#24405;&nbsp;A, <i>&#36827;&#19968;&#27493;&#38405;&#35835;</i></a> &#20013;&#27719;&#24635;&#12290;</li><li>&#22312;&#32431;&#25991;&#26412;&#26684;&#24335;&#30340;&#22806;&#37096;&#38142;&#25509;&#26049;&#28155;&#21152;&#20102; <acronym class="acronym">URL</acronym> &#22320;&#22336;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.3</td><td align="left">2001-02-09</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#37325;&#20889;&#20102; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#20013;&#30340;&#37096;&#20998;&#20195;&#30721;&#65292;&#20351;&#29992;&#20102;&#31867;&#30340;&#23646;&#24615;&#65292;&#24182;&#32473;&#20986;&#20102;&#19968;&#20010;&#26356;&#22909;&#30340;&#22810;&#20540;&#36171;&#20540;&#30340;&#20363;&#23376;&#12290;</li><li>&#37325;&#26032;&#32452;&#32455;&#20102; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a>&#65292;&#25226;&#31867;&#30340;&#37096;&#20998;&#25552;&#21069;&#20102;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.classattributes" title="5.8.&nbsp;&#31867;&#23646;&#24615;&#20171;&#32461;">&#31532;&nbsp;5.8&nbsp;&#33410; &#8220;&#31867;&#23646;&#24615;&#20171;&#32461;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.exception" title="6.1.&nbsp;&#24322;&#24120;&#22788;&#29702;">&#31532;&nbsp;6.1&nbsp;&#33410; &#8220;&#24322;&#24120;&#22788;&#29702;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.files" title="6.2.&nbsp;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;">&#31532;&nbsp;6.2&nbsp;&#33410; &#8220;&#19982;&#25991;&#20214;&#23545;&#35937;&#20849;&#20107;&#8221;</a>&#12290;</li><li>&#25226; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#20013;&#30340; "<span class="quote">&#22238;&#39038;</span>" &#37096;&#20998;&#21512;&#24182;&#21040;&#20102; <a class="xref" href="#fileinfo.divein" title="5.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;5.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a> &#20013;&#12290;</li><li>&#32473;&#25152;&#26377;&#30340;&#31243;&#24207;&#28165;&#21333;&#21644;&#31034;&#20363;&#36873;&#25321;&#20102;&#37197;&#33394;&#26041;&#26696;&#12290;</li><li>&#20462;&#27491;&#20102; <a class="xref" href="#odbchelper.funcdef" title="2.2.&nbsp;&#20989;&#25968;&#22768;&#26126;">&#31532;&nbsp;2.2&nbsp;&#33410; &#8220;&#20989;&#25968;&#22768;&#26126;&#8221;</a> &#20013;&#30340;&#37325;&#22823;&#38169;&#35823;&#65306;&#20989;&#25968;&#20250;&#38544;&#24335;&#22320;&#36820;&#22238;&#19968;&#20010; <code class="literal">None</code>&#65292;&#25152;&#20197;&#20320; <span class="emphasis"><em>&#21487;&#20197;</em></span> &#22312;&#19981;&#35302;&#21457;&#24322;&#24120;&#30340;&#21069;&#25552;&#19979;&#25226;&#23427;&#30340;&#36820;&#22238;&#20540;&#36171;&#32473;&#19968;&#20010;&#21464;&#37327;&#12290;</li><li>&#25193;&#20889;&#20102; <a class="xref" href="#odbchelper.docstring" title="2.3.&nbsp;&#25991;&#26723;&#21270;&#20989;&#25968;">&#31532;&nbsp;2.3&nbsp;&#33410; &#8220;&#25991;&#26723;&#21270;&#20989;&#25968;&#8221;</a>&#12289;<a class="xref" href="#odbchelper.objects" title="2.4.&nbsp;&#19975;&#29289;&#30342;&#23545;&#35937;">&#31532;&nbsp;2.4&nbsp;&#33410; &#8220;&#19975;&#29289;&#30342;&#23545;&#35937;&#8221;</a> &#21644; <a class="xref" href="#odbchelper.vardef" title="3.4.&nbsp;&#21464;&#37327;&#22768;&#26126;">&#31532;&nbsp;3.4&nbsp;&#33410; &#8220;&#21464;&#37327;&#22768;&#26126;&#8221;</a>&#65292;&#20351;&#20043;&#26356;&#21152;&#28165;&#26224;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.2</td><td align="left">2001-02-02</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#32534;&#36753;&#20102; <a class="xref" href="#apihelper.getattr" title="4.4.&nbsp;&#36890;&#36807; getattr &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;">&#31532;&nbsp;4.4&nbsp;&#33410; &#8220;&#36890;&#36807; <code class="function">getattr</code> &#33719;&#21462;&#23545;&#35937;&#24341;&#29992;&#8221;</a>&#12290;</li><li>&#20026; <code class="sgmltag-element">xref</code> &#26631;&#35760;&#28155;&#21152;&#20102;&#26631;&#39064;&#65292;&#25152;&#20197;&#23427;&#20204;&#20063;&#33021;&#26174;&#31034;&#21487;&#29233;&#30340;&#25552;&#31034;&#26694;&#20102;&#12290;</li><li>&#20462;&#25913;&#20102;&#20462;&#35746;&#21382;&#21490;&#39029;&#38754;&#30340;&#20027;&#39064;&#39118;&#26684;&#12290;</li><li>&#20462;&#27491;&#20102;&#25105;&#26152;&#22825;&#22312;&#25105;&#30340; <acronym class="acronym">HTML</acronym> &#20013;&#25552;&#21040;&#30340; bug&#65306;&#21518;&#26399;&#22788;&#29702;&#33050;&#26412;&#23558;&#20250;&#23548;&#33268;&#26080;&#25928;&#30340; <acronym class="acronym">HTML</acronym> &#23383;&#31526;&#24341;&#29992;&#65292;&#29978;&#33267;&#35753;&#19968;&#20123;&#27983;&#35272;&#22120;&#26080;&#27861;&#26174;&#31034;&#12290;</li><li>&#21319;&#32423;&#21040; <span class="application">DocBook</span> <acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920; 1.29 &#29256;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.1</td><td align="left">2001-02-01</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#37325;&#20889;&#20102; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#20013;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#29992; <code class="function">getattr</code> &#20195;&#26367;&#20102; <code class="function">exec</code> &#21644; <code class="function">eval</code>&#65292;&#24182;&#37325;&#20889;&#20102;&#30456;&#24212;&#30340;&#35299;&#37322;&#25991;&#23383;&#12290;</li><li>&#22312; <a class="xref" href="#odbchelper.list" title="3.2.&nbsp;List &#20171;&#32461;">&#31532;&nbsp;3.2&nbsp;&#33410; &#8220;List &#20171;&#32461;&#8221;</a> &#20013;&#28155;&#21152;&#20102;&#21015;&#34920;&#25805;&#20316;&#30340;&#31034;&#20363;&#12290;</li><li>&#22312;&#31456;&#33410;&#26411;&#23614;&#30340;&#23567;&#33410;&#37096;&#20998; (<a class="xref" href="#odbchelper.summary" title="3.8.&nbsp;&#23567;&#32467;">&#31532;&nbsp;3.8&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a> &#21644; <a class="xref" href="#apihelper.summary" title="4.9.&nbsp;&#23567;&#32467;">&#31532;&nbsp;4.9&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>) &#28155;&#21152;&#20102;&#25351;&#21521;&#30456;&#20851;&#20869;&#23481;&#30340;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 2.0</td><td align="left">2001-01-31</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#25226; <a class="xref" href="#fileinfo.specialmethods" title="5.6.&nbsp;&#19987;&#29992;&#31867;&#26041;&#27861;">&#31532;&nbsp;5.6&nbsp;&#33410; &#8220;&#19987;&#29992;&#31867;&#26041;&#27861;&#8221;</a> &#20998;&#25104;&#20102;&#19977;&#33410;&#65306; <a class="xref" href="#fileinfo.userdict" title="5.5.&nbsp;&#25506;&#32034; UserDict&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;">&#31532;&nbsp;5.5&nbsp;&#33410; &#8220;&#25506;&#32034; <code class="classname">UserDict</code>&#65306;&#19968;&#20010;&#23553;&#35013;&#31867;&#8221;</a>&#12289;<a class="xref" href="#fileinfo.specialmethods" title="5.6.&nbsp;&#19987;&#29992;&#31867;&#26041;&#27861;">&#31532;&nbsp;5.6&nbsp;&#33410; &#8220;&#19987;&#29992;&#31867;&#26041;&#27861;&#8221;</a> &#21644; <a class="xref" href="#fileinfo.morespecial" title="5.7.&nbsp;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;">&#31532;&nbsp;5.7&nbsp;&#33410; &#8220;&#39640;&#32423;&#19987;&#29992;&#31867;&#26041;&#27861;&#8221;</a>&#12290;</li><li>&#20462;&#25913;&#20102;&#20851;&#20110; <a class="link" href="#fileinfo.create" title="5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;">&#22403;&#22334;&#25910;&#38598;</a> &#30340;&#27880;&#35299;&#20197;&#25351;&#20986; <span class="application">Python</span> 2.0 &#21450;&#20854;&#21518;&#32493;&#29256;&#26412;&#33258;&#21160;&#22788;&#29702;&#24490;&#29615;&#24341;&#29992;&#65292;&#26080;&#38656;&#25163;&#24037;&#32534;&#30721;&#12290;</li><li>&#20462;&#22797;&#20102; <acronym class="acronym">UNIX</acronym> &#19979;&#36733;&#65292;&#20351;&#20043;&#21253;&#25324;&#20102;&#25152;&#26377;&#30456;&#20851;&#25991;&#20214;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.9</td><td align="left">2001-01-15</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#21024;&#38500;&#20102; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#30340;&#27010;&#35770;&#12290;</li><li>&#21024;&#38500;&#20102; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#30340;&#27010;&#35770;&#12290;</li><li>&#21024;&#38500;&#20102; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#30340;&#27010;&#35770;&#12290;</li><li>&#22823;&#20992;&#38420;&#26023;&#22320;&#25913;&#21160;&#25991;&#26412;&#12290;&#25105;&#20284;&#20046;&#24635;&#26159;&#36305;&#39064;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.8</td><td align="left">2001-01-12</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#20026; <a class="xref" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#31532;&nbsp;3.4.2&nbsp;&#33410; &#8220;&#19968;&#27425;&#36171;&#22810;&#20540;&#8221;</a> &#28155;&#21152;&#20102;&#26356;&#22810;&#31034;&#20363;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.class" title="5.3.&nbsp;&#31867;&#30340;&#23450;&#20041;">&#31532;&nbsp;5.3&nbsp;&#33410; &#8220;&#31867;&#30340;&#23450;&#20041;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.create" title="5.4.&nbsp;&#31867;&#30340;&#23454;&#20363;&#21270;">&#31532;&nbsp;5.4&nbsp;&#33410; &#8220;&#31867;&#30340;&#23454;&#20363;&#21270;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.specialmethods" title="5.6.&nbsp;&#19987;&#29992;&#31867;&#26041;&#27861;">&#31532;&nbsp;5.6&nbsp;&#33410; &#8220;&#19987;&#29992;&#31867;&#26041;&#27861;&#8221;</a>&#12290;</li><li>&#19968;&#20123;&#23567;&#30340;&#26679;&#24335;&#34920;&#35843;&#25972;&#65292;&#21253;&#25324;&#20026; <code class="sgmltag-element">link</code> &#26631;&#35760;&#28155;&#21152;&#20102;&#26631;&#39064;&#12290;&#35201;&#26159;&#20320;&#30340;&#27983;&#35272;&#22120;&#22815;&#37239;&#30340;&#35805;&#65292;&#23427;&#20250;&#29992;&#19968;&#20010;&#21487;&#29233;&#30340;&#25552;&#31034;&#26694;&#26174;&#31034;&#38142;&#25509;&#30446;&#26631;&#30340;&#25551;&#36848;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.71</td><td align="left">2001-01-03</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#23545;&#26679;&#24335;&#34920;&#36827;&#34892;&#20102;&#20960;&#22788;&#20462;&#25913;&#65292;&#25552;&#39640;&#20102;&#23545;&#27983;&#35272;&#22120;&#30340;&#20860;&#23481;&#24615;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.7</td><td align="left">2001-01-02</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#odbchelper" title="&#31532;&nbsp;2&nbsp;&#31456;&nbsp;&#31532;&#19968;&#20010; Python &#31243;&#24207;">&#31532;&nbsp;2&nbsp;&#31456; <i>&#31532;&#19968;&#20010; <span class="application">Python</span> &#31243;&#24207;</i></a> &#30340;&#27010;&#35272;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a> &#30340;&#27010;&#35272;&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#30340;&#23567;&#32467;&#37096;&#20998;[&#21518;&#26469;&#21024;&#38500;&#20102;]&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.private" title="5.9.&nbsp;&#31169;&#26377;&#20989;&#25968;">&#31532;&nbsp;5.9&nbsp;&#33410; &#8220;&#31169;&#26377;&#20989;&#25968;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.for" title="6.3.&nbsp;for &#24490;&#29615;">&#31532;&nbsp;6.3&nbsp;&#33410; &#8220;<code class="literal">for</code> &#24490;&#29615;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#odbchelper.multiassign" title="3.4.2.&nbsp;&#19968;&#27425;&#36171;&#22810;&#20540;">&#31532;&nbsp;3.4.2&nbsp;&#33410; &#8220;&#19968;&#27425;&#36171;&#22810;&#20540;&#8221;</a>&#12290;</li><li>&#32534;&#20889;&#20102;&#25226;&#20070;&#36755;&#20986;&#20026;&#21333;&#20010; <acronym class="acronym">HTML</acronym> &#25991;&#20214;&#12289;<acronym class="acronym">PDF</acronym>&#12289;<span class="application">Microsoft Word 97</span> &#21644;&#32431;&#25991;&#26412;&#30340;&#33050;&#26412;&#12290;</li><li>&#27880;&#20876;&#20102;&#22495;&#21517; <code class="systemitem">diveintopython.org</code> &#24182;&#25226;&#20070;&#8213;&#8213;&#22312;&#32447;&#30340;&#21644;&#31163;&#32447;&#30340;&#8213;&#8213;&#37117;&#31227;&#21040;&#20102;&#37027;&#37324;&#12290;</li><li>&#20462;&#25913;&#20102; <acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920;&#65292;&#20197;&#20462;&#25913;&#22312;&#27599;&#20010;&#39029;&#38754;&#39318;&#23614;&#26174;&#31034;&#30340;&#23548;&#33322;&#38142;&#25509;&#12290;&#39029;&#39318;&#21152;&#19978;&#20102;&#22495;&#21517;&#12289;&#29256;&#26412;&#21495;&#65292;&#20197;&#21450;&#36339;&#21040;&#31456;&#30446;&#24405;&#12289;&#24635;&#30446;&#24405;&#21644;&#20027;&#39029;&#30340;&#24555;&#36895;&#38142;&#25509;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.6</td><td align="left">2000-12-11</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#apihelper.alltogether" title="4.8.&nbsp;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;">&#31532;&nbsp;4.8&nbsp;&#33410; &#8220;&#20840;&#37096;&#25918;&#22312;&#19968;&#36215;&#8221;</a>&#12290;</li><li>&#23436;&#25104;&#20102; <a class="xref" href="#apihelper" title="&#31532;&nbsp;4&nbsp;&#31456;&nbsp;&#33258;&#30465;&#30340;&#23041;&#21147;">&#31532;&nbsp;4&nbsp;&#31456; <i>&#33258;&#30465;&#30340;&#23041;&#21147;</i></a>&#65306;&#22312;&#32467;&#23614;&#28155;&#21152;&#20102; <a class="xref" href="#apihelper.summary" title="4.9.&nbsp;&#23567;&#32467;">&#31532;&nbsp;4.9&nbsp;&#33410; &#8220;&#23567;&#32467;&#8221;</a>&#12290;</li><li>&#22312; <a class="xref" href="#fileinfo" title="&#31532;&nbsp;5&nbsp;&#31456;&nbsp;&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;">&#31532;&nbsp;5&nbsp;&#31456; <i>&#23545;&#35937;&#21644;&#38754;&#21521;&#23545;&#35937;</i></a> &#30340;&#24320;&#22836;&#28155;&#21152;&#20102; <a class="xref" href="#fileinfo.divein" title="5.1.&nbsp;&#27010;&#35272;">&#31532;&nbsp;5.1&nbsp;&#33410; &#8220;&#27010;&#35272;&#8221;</a>&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.5</td><td align="left">2000-11-22</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#apihelper.andor" title="4.6.&nbsp;and &#21644; or &#30340;&#29305;&#27530;&#24615;&#36136;">&#31532;&nbsp;4.6&nbsp;&#33410; &#8220;<code class="literal">and</code> &#21644; <code class="literal">or</code> &#30340;&#29305;&#27530;&#24615;&#36136;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102; <a class="xref" href="#apihelper.lambda" title="4.7.&nbsp;&#20351;&#29992; lambda &#20989;&#25968;">&#31532;&nbsp;4.7&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="literal">lambda</code> &#20989;&#25968;&#8221;</a>&#12290;</li><li>&#28155;&#21152;&#20102;&#38468;&#24405; <a class="link" href="#abstracts" title="&#38468;&#24405;&nbsp;B.&nbsp;&#20116;&#20998;&#38047;&#22238;&#39038;">&#20116;&#20998;&#38047;&#22238;&#39038;</a>&#12290;</li><li>&#28155;&#21152;&#20102;&#38468;&#24405; <a class="link" href="#tips" title="&#38468;&#24405;&nbsp;C.&nbsp;&#25216;&#24039;&#21644;&#31373;&#38376;">&#25216;&#24039;&#21644;&#31373;&#38376;</a>&#12290;</li><li>&#28155;&#21152;&#20102;&#38468;&#24405; <a class="link" href="#examples" title="&#38468;&#24405;&nbsp;D.&nbsp;&#31034;&#20363;&#28165;&#21333;">&#31034;&#20363;&#28165;&#21333;</a>&#12290;</li><li>&#28155;&#21152;&#20102;&#38468;&#24405; <a class="link" href="#revhistory" title="&#38468;&#24405;&nbsp;E.&nbsp;&#20462;&#35746;&#21382;&#21490;">&#20462;&#35746;&#21382;&#21490;</a>&#12290;</li><li>&#25193;&#20889;&#20102; <a class="xref" href="#odbchelper.map" title="3.6.&nbsp;&#26144;&#23556; list">&#31532;&nbsp;3.6&nbsp;&#33410; &#8220;&#26144;&#23556; list&#8221;</a> &#20013;&#26144;&#23556;&#21015;&#34920;&#30340;&#31034;&#20363;&#12290;</li><li>&#25226;&#26356;&#22810;&#30340;&#24120;&#29992;&#26415;&#35821;&#21152;&#20837;&#20102; XML &#23454;&#20307;&#12290;</li><li>&#21319;&#32423;&#21040; <span class="application">DocBook</span> <acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920; 1.25 &#29256;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.4</td><td align="left">2000-11-14</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102; <a class="xref" href="#apihelper.filter" title="4.5.&nbsp;&#36807;&#28388;&#21015;&#34920;">&#31532;&nbsp;4.5&nbsp;&#33410; &#8220;&#36807;&#28388;&#21015;&#34920;&#8221;</a>&#12290;</li><li>&#20026; <a class="xref" href="#apihelper.builtin" title="4.3.&nbsp;&#20351;&#29992; type&#12289;str&#12289;dir &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;">&#31532;&nbsp;4.3&nbsp;&#33410; &#8220;&#20351;&#29992; <code class="function">type</code>&#12289;<code class="function">str</code>&#12289;<code class="function">dir</code> &#21644;&#20854;&#23427;&#20869;&#32622;&#20989;&#25968;&#8221;</a> &#28155;&#21152;&#20102; <code class="function">dir</code> &#25991;&#26723;&#12290;</li><li>&#22312; <a class="xref" href="#odbchelper.tuple" title="3.3.&nbsp;Tuple &#20171;&#32461;">&#31532;&nbsp;3.3&nbsp;&#33410; &#8220;Tuple &#20171;&#32461;&#8221;</a> &#20013;&#65292;&#28155;&#21152;&#20102; <code class="function">in</code> &#30340;&#31034;&#20363;&#12290;</li><li>&#28155;&#21152;&#20102; <span class="application">MacPython</span> &#29615;&#22659;&#19979; <code class="literal">if</code> <code class="literal">__name__</code> &#25216;&#24039;&#30340;&#39069;&#22806;&#35828;&#26126;&#12290;</li><li>&#36716;&#21521;&#20102; &#30001; Michael Kay &#32534;&#21046;&#30340; <span class="application"><acronym class="acronym">SAXON</acronym></span> <acronym class="acronym">XSLT</acronym> &#35299;&#26512;&#22120;&#12290;</li><li>&#21319;&#32423;&#21040; <span class="application">DocBook</span> <acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920; 1.24 &#29256;&#12290;</li><li>&#28155;&#21152;&#20102; db-html &#22788;&#29702;&#30340;&#35828;&#26126;&#65306;&#22312;&#27599;&#20010;&#31456;&#12289;&#33410;&#20013;&#37117;&#21152;&#19978;&#20102;&#26174;&#31034;&#30340;&#25991;&#20214;&#21517;&#65292;&#36991;&#20813;&#22312;&#28155;&#21152;&#25110;&#37325;&#25490;&#33410;&#26102;&#23548;&#33268;&#28145;&#23618;&#38142;&#25509;&#23454;&#25928;&#12290;</li><li>&#25226;&#19968;&#20123;&#24120;&#29992;&#26415;&#35821;&#21152;&#20837;&#20102; XML &#23454;&#20307;&#12290;</li><li>&#25226;&#20960;&#20010; <code class="sgmltag-element">literal</code> &#26631;&#35760;&#25913;&#20026;&#20102; <code class="sgmltag-element">constant</code>&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.3</td><td align="left">2000-11-09</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102;&#20851;&#20110;&#21160;&#24577;&#20195;&#30721;&#25191;&#34892;&#30340;&#37096;&#20998;&#12290;</li><li>&#22312;&#25152;&#26377;&#26377;&#24517;&#35201;&#30340;&#22320;&#26041;&#65292;&#37117;&#28155;&#21152;&#20102;&#23545;&#26412;&#20070;&#20854;&#23427;&#37096;&#20998;&#30340;&#24341;&#29992;&#38142;&#25509;&#12290;</li><li>&#25193;&#20889;&#20102; <a class="link" href="#apihelper.divein" title="4.1.&nbsp;&#27010;&#35272;">&#31532; 2 &#31456;&#27010;&#35272;</a>&#65292;&#35299;&#37322;&#20102;&#36825;&#20010;&#20989;&#25968;&#30340;&#23454;&#38469;&#20316;&#29992;&#12290;</li><li>&#26174;&#31034;&#22320;&#22768;&#26126;&#31034;&#20363;&#20195;&#30721;&#26159;&#22312; <acronym class="acronym">GNU</acronym> General Public License &#19979;&#21457;&#24067;&#30340;&#65307;&#28155;&#21152;&#20102;&#35813; License &#30340;&#38468;&#24405;&#12290; [Note 8/16/2001&#65306;&#20195;&#30721;&#22312;&#19982; <acronym class="acronym">GPL</acronym> &#35843;&#21644;&#30340; <span class="application">Python</span> license &#19979;&#37325;&#26032;&#21457;&#24067;&#20102;&#12290;]</li><li>&#20462;&#25913;&#20102;&#38142;&#25509;&#65292;&#20197;&#20351;&#29992; <code class="sgmltag-element">xref</code> &#26631;&#35760;&#8213;&#8213;&#25105;&#24324;&#26126;&#30333;&#24590;&#20040;&#20351;&#29992;&#20102;&#36825;&#20010;&#26631;&#35760;&#20102;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.2</td><td align="left">2000-11-06</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#28155;&#21152;&#20102;&#31532; 2 &#31456;&#30340;&#21069;&#22235;&#37096;&#20998;&#12290;</li><li>&#36827;&#19968;&#27493;&#32039;&#32553;&#20102;&#20102;&#24207;&#35328;&#65292;&#24182;&#28155;&#21152;&#20102;&#25351;&#21521; <span class="application">Python</span> &#30340; <abbr class="abbrev">Mac</abbr> <acronym class="acronym">OS</acronym> &#29256;&#26412;&#30340;&#38142;&#25509;&#12290;</li><li>&#25193;&#20889;&#20102;&#8220;&#26144;&#23556;&#21015;&#34920;&#8221;&#21644;&#8220;&#36830;&#25509;&#23383;&#31526;&#20018;&#8221;&#20013;&#30340;&#31034;&#20363;&#65292;&#20351;&#20854;&#26356;&#23500;&#36923;&#36753;&#24615;&#12290;</li><li>&#28155;&#21152;&#20102;&#31532; 1 &#31456;&#23567;&#32467;&#20013;&#30340;&#36755;&#20986;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.1</td><td align="left">2000-10-31</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#23436;&#25104;&#20102;&#31532; 1 &#31456;&#20851;&#20110;&#26144;&#23556;&#12289;&#36830;&#25509;&#30340;&#37096;&#20998;&#65292;&#20197;&#21450;&#25972;&#31456;&#23567;&#32467;&#12290;</li><li>&#22312;&#24207;&#35328;&#20351;&#29992;&#20102;&#36739;&#32531;&#21644;&#30340;&#25514;&#36766;&#65292;&#24182;&#28155;&#21152;&#20102;&#38024;&#23545;&#38750;&#31243;&#24207;&#21592;&#30340;&#20837;&#38376;&#25945;&#31243;&#30340;&#38142;&#25509;&#12290;</li><li>&#20462;&#27491;&#20102;&#20960;&#22788;&#25340;&#20889;&#38169;&#35823;&#12290;</li></ul></div>
</td></tr><tr><td align="left">&#20462;&#35746; 1.0</td><td align="left">2000-10-30</td></tr><tr><td align="left" colspan="2">
<div class="itemizedlist"><ul><li>&#21407;&#22987;&#21457;&#24067;</li></ul></div>
</td></tr></table></div></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="about"></a>&#38468;&#24405;&nbsp;F.&nbsp;&#20851;&#20110;&#26412;&#20070;</h1></div></div></div><p>
&#26412;&#20070;&#30340;&#33521;&#25991;&#29256;&#26159;&#29992; <span class="application">Emacs</span> (<a href="http://www.gnu.org/software/emacs/">http://www.gnu.org/software/emacs/</a>) &#20197; <span class="application">DocBook</span> <acronym class="acronym">XML</acronym> (<a href="http://www.oasis-open.org/docbook/">http://www.oasis-open.org/docbook/</a>) &#26684;&#24335;&#20889;&#25104;&#30340;, &#20351;&#29992; 
&#30001; Norman Walsh &#32534;&#21046;&#30340; <acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920; (<a href="http://www.nwalsh.com/xsl/">http://www.nwalsh.com/xsl/</a>) &#30340;&#32463;&#36807;&#23458;&#25143;&#21270;&#30340;&#29256;&#26412;&#30001; &#30001; Michael Kay &#32534;&#21046;&#30340; <span class="application"><acronym class="acronym">SAXON</acronym></span> <acronym class="acronym">XSLT</acronym> &#35299;&#26512;&#22120; (<a href="http://saxon.sourceforge.net/">http://saxon.sourceforge.net/</a>) &#36716;&#21270;&#20026; <acronym class="acronym">HTML</acronym>&#12290;&#22312;&#27492;&#22522;&#30784;&#19978;, &#20351;&#29992; <span class="application">HTMLDoc</span> (<a href="http://www.easysw.com/htmldoc/">http://www.easysw.com/htmldoc/</a>) &#23558;&#20854;&#36716;&#21270;&#20026; <acronym class="acronym">PDF</acronym>; &#20351;&#29992; <span class="application">w3m</span> (<a href="http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/eng/">http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/eng/</a>) &#23558;&#20854;&#36716;&#21270;&#20026;&#26080;&#26684;&#24335;&#25991;&#26412; (plain text)&#12290;(&#26412;&#20070;&#30340;&#31616;&#20307;&#20013;&#25991;&#29256;&#26159;&#20351;&#29992;&#35793;&#32773;&#20064;&#24815;&#20351;&#29992;&#30340;&#32534;&#36753;&#22120;&#23545; <acronym class="acronym">XML</acronym> &#28304;&#20195;&#30721;&#36827;&#34892;&#32763;&#35793;, &#24182;&#20351;&#29992;&#21407;&#20070;&#20316;&#32773;&#25552;&#20379;&#30340;&#21019;&#24314;&#33050;&#26412;&#36755;&#20986;&#20102; html &#29256;&#21644; htmlflat &#29256;&#65292;&#20351;&#29992; HTML Help Workshop &#29983;&#25104;&#20102;chm&#29256;&#26412;&#12290;)&#31243;&#24207;&#28165;&#21333;&#21644;&#20363;&#23376;&#20351;&#29992;&#20102;&#30001; Just van Rossum &#32534;&#20889;&#30340; <code class="filename">pyfontify.py</code> &#31243;&#24207;&#30340;&#25913;&#36827;&#29256;&#26412;&#36827;&#34892;&#20102;&#35821;&#27861;&#30528;&#33394;, &#27492;&#31243;&#24207;&#21253;&#21547;&#22312;&#31034;&#20363;&#33050;&#26412;&#20013;&#12290; </p><p>
&#22914;&#26524;&#24744;&#23545;&#23398;&#20064;&#29992; <span class="application">DocBook</span> &#36827;&#34892;&#25216;&#26415;&#26041;&#38754;&#30340;&#20889;&#20316;&#24863;&#20852;&#36259;, &#21487;&#20197; &#19979;&#36733;&#26412;&#20070;&#30340; <acronym class="acronym">XML</acronym> &#28304;&#20195;&#30721; (<a href="http://diveintopython.org/download/diveintopython-xmlzh-cn-5.4b.zip">http://diveintopython.org/download/diveintopython-xmlzh-cn-5.4b.zip</a>) &#21644; &#21019;&#24314;&#33050;&#26412; (<a href="http://diveintopython.org/download/diveintopython-commonzh-cn-5.4b.zip">http://diveintopython.org/download/diveintopython-commonzh-cn-5.4b.zip</a>), &#23427;&#21253;&#21547;&#20102;&#29992;&#20110;&#21019;&#24314;&#26412;&#20070;&#21508;&#31181;&#36755;&#20986;&#26684;&#24335;&#30340;&#32463;&#36807;&#23458;&#25143;&#21270;&#30340; <acronym class="acronym">XSL</acronym> &#26679;&#24335;&#34920;&#12290;&#24744;&#36824;&#24212;&#35813;&#38405;&#35835;&#26435;&#23041;&#33879;&#20316;, <em class="citetitle"><span class="application">DocBook</span>: The Definitive Guide</em> (<a href="http://www.docbook.org/">http://www.docbook.org/</a>)&#12290;&#22914;&#26524;&#24744;&#25171;&#31639;&#29992; <span class="application">DocBook</span> &#36827;&#34892;&#20219;&#20309;&#27491;&#24335;&#30340;&#20889;&#20316;, &#25105;&#24314;&#35758;&#24744;&#35746;&#38405; <span class="application">DocBook</span> &#37038;&#20214;&#21015;&#34920; (<a href="http://lists.oasis-open.org/archives/">http://lists.oasis-open.org/archives/</a>)&#12290;</p></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="gfdl"></a>&#38468;&#24405;&nbsp;G.&nbsp;<acronym class="acronym">GNU</acronym> Free Documentation License</h1></div></div></div><p>Version 1.1, March 2000</p><div class="blockquote"><blockquote class="blockquote"><p>Copyright (C) 2000  Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.</p></blockquote></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40184"></a>G.0.&nbsp;Preamble</h2></div></div></div><p>The purpose of this License is to make a manual, textbook,
    or other written document "free" in the sense of freedom: to
    assure everyone the effective freedom to copy and redistribute it,
    with or without modifying it, either commercially or
    noncommercially.  Secondarily, this License preserves for the
    author and publisher a way to get credit for their work, while not
    being considered responsible for modifications made by
    others.</p><p>This License is a kind of "copyleft", which means that
    derivative works of the document must themselves be free in the
    same sense.  It complements the GNU General Public License, which
    is a copyleft license designed for free software.</p><p>We have designed this License in order to use it for manuals
    for free software, because free software needs free documentation:
    a free program should come with manuals providing the same
    freedoms that the software does.  But this License is not limited
    to software manuals; it can be used for any textual work,
    regardless of subject matter or whether it is published as a
    printed book.  We recommend this License principally for works
    whose purpose is instruction or reference.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40193"></a>G.1.&nbsp;Applicability and definitions</h2></div></div></div><p>This License applies to any manual or other work that
    contains a notice placed by the copyright holder saying it can be
    distributed under the terms of this License.  The "Document",
    below, refers to any such manual or work.  Any member of the
    public is a licensee, and is addressed as "you".</p><p>A "Modified Version" of the Document means any work
    containing the Document or a portion of it, either copied
    verbatim, or with modifications and/or translated into another
    language.</p><p>A "Secondary Section" is a named appendix or a front-matter
    section of the Document that deals exclusively with the
    relationship of the publishers or authors of the Document to the
    Document's overall subject (or to related matters) and contains
    nothing that could fall directly within that overall subject.
    (For example, if the Document is in part a textbook of
    mathematics, a Secondary Section may not explain any mathematics.)
    The relationship could be a matter of historical connection with
    the subject or with related matters, or of legal, commercial,
    philosophical, ethical or political position regarding
    them.</p><p>The "Invariant Sections" are certain Secondary Sections
    whose titles are designated, as being those of Invariant Sections,
    in the notice that says that the Document is released under this
    License.</p><p>The "Cover Texts" are certain short passages of text that
    are listed, as Front-Cover Texts or Back-Cover Texts, in the
    notice that says that the Document is released under this
    License.</p><p>A "Transparent" copy of the Document means a
    machine-readable copy, represented in a format whose specification
    is available to the general public, whose contents can be viewed
    and edited directly and straightforwardly with generic text
    editors or (for images composed of pixels) generic paint programs
    or (for drawings) some widely available drawing editor, and that
    is suitable for input to text formatters or for automatic
    translation to a variety of formats suitable for input to text
    formatters.  A copy made in an otherwise Transparent file format
    whose markup has been designed to thwart or discourage subsequent
    modification by readers is not Transparent.  A copy that is not
    "Transparent" is called "Opaque".</p><p>Examples of suitable formats for Transparent copies include
    plain ASCII without markup, Texinfo input format, LaTeX input
    format, SGML or XML using a publicly available DTD, and
    standard-conforming simple HTML designed for human modification.
    Opaque formats include PostScript, PDF, proprietary formats that
    can be read and edited only by proprietary word processors, SGML
    or XML for which the DTD and/or processing tools are not generally
    available, and the machine-generated HTML produced by some word
    processors for output purposes only.</p><p>The "Title Page" means, for a printed book, the title page
    itself, plus such following pages as are needed to hold, legibly,
    the material this License requires to appear in the title page.
    For works in formats which do not have any title page as such,
    "Title Page" means the text near the most prominent appearance of
    the work's title, preceding the beginning of the body of the
    text.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40213"></a>G.2.&nbsp;Verbatim copying</h2></div></div></div><p>You may copy and distribute the Document in any medium,
    either commercially or noncommercially, provided that this
    License, the copyright notices, and the license notice saying this
    License applies to the Document are reproduced in all copies, and
    that you add no other conditions whatsoever to those of this
    License.  You may not use technical measures to obstruct or
    control the reading or further copying of the copies you make or
    distribute.  However, you may accept compensation in exchange for
    copies.  If you distribute a large enough number of copies you
    must also follow the conditions in section 3.</p><p>You may also lend copies, under the same conditions stated
    above, and you may publicly display copies.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40221"></a>G.3.&nbsp;Copying in quantity</h2></div></div></div><p>If you publish printed copies of the Document numbering more
    than 100, and the Document's license notice requires Cover Texts,
    you must enclose the copies in covers that carry, clearly and
    legibly, all these Cover Texts: Front-Cover Texts on the front
    cover, and Back-Cover Texts on the back cover.  Both covers must
    also clearly and legibly identify you as the publisher of these
    copies.  The front cover must present the full title with all
    words of the title equally prominent and visible.  You may add
    other material on the covers in addition.  Copying with changes
    limited to the covers, as long as they preserve the title of the
    Document and satisfy these conditions, can be treated as verbatim
    copying in other respects.</p><p>If the required texts for either cover are too voluminous to
    fit legibly, you should put the first ones listed (as many as fit
    reasonably) on the actual cover, and continue the rest onto
    adjacent pages.</p><p>If you publish or distribute Opaque copies of the Document
    numbering more than 100, you must either include a
    machine-readable Transparent copy along with each Opaque copy, or
    state in or with each Opaque copy a publicly-accessible
    computer-network location containing a complete Transparent copy
    of the Document, free of added material, which the general
    network-using public has access to download anonymously at no
    charge using public-standard network protocols.  If you use the
    latter option, you must take reasonably prudent steps, when you
    begin distribution of Opaque copies in quantity, to ensure that
    this Transparent copy will remain thus accessible at the stated
    location until at least one year after the last time you
    distribute an Opaque copy (directly or through your agents or
    retailers) of that edition to the public.</p><p>It is requested, but not required, that you contact the
    authors of the Document well before redistributing any large
    number of copies, to give them a chance to provide you with an
    updated version of the Document.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40233"></a>G.4.&nbsp;Modifications</h2></div></div></div><p>You may copy and distribute a Modified Version of the
    Document under the conditions of sections 2 and 3 above, provided
    that you release the Modified Version under precisely this
    License, with the Modified Version filling the role of the
    Document, thus licensing distribution and modification of the
    Modified Version to whoever possesses a copy of it.  In addition,
    you must do these things in the Modified Version:</p><div class="orderedlist"><ol type="A"><li>Use in the Title Page
      (and on the covers, if any) a title distinct from that of the
      Document, and from those of previous versions (which should, if
      there were any, be listed in the History section of the
      Document).  You may use the same title as a previous version if
      the original publisher of that version gives permission.</li><li>List on the Title Page,
      as authors, one or more persons or entities responsible for
      authorship of the modifications in the Modified Version,
      together with at least five of the principal authors of the
      Document (all of its principal authors, if it has less than
      five).</li><li>State on the Title page
      the name of the publisher of the Modified Version, as the
      publisher.</li><li>Preserve all the
      copyright notices of the Document.</li><li>Add an appropriate
      copyright notice for your modifications adjacent to the other
      copyright notices.</li><li>Include, immediately
      after the copyright notices, a license notice giving the public
      permission to use the Modified Version under the terms of this
      License, in the form shown in the Addendum below.</li><li>Preserve in that license
      notice the full lists of Invariant Sections and required Cover
      Texts given in the Document's license notice.</li><li>Include an unaltered
      copy of this License.</li><li>Preserve the section
      entitled "History", and its title, and add to it an item stating
      at least the title, year, new authors, and publisher of the
      Modified Version as given on the Title Page.  If there is no
      section entitled "History" in the Document, create one stating
      the title, year, authors, and publisher of the Document as given
      on its Title Page, then add an item describing the Modified
      Version as stated in the previous sentence.</li><li>Preserve the network
      location, if any, given in the Document for public access to a
      Transparent copy of the Document, and likewise the network
      locations given in the Document for previous versions it was
      based on.  These may be placed in the "History" section.  You
      may omit a network location for a work that was published at
      least four years before the Document itself, or if the original
      publisher of the version it refers to gives permission.</li><li>In any section entitled
      "Acknowledgements" or "Dedications", preserve the section's
      title, and preserve in the section all the substance and tone of
      each of the contributor acknowledgements and/or dedications
      given therein.</li><li>Preserve all the
      Invariant Sections of the Document, unaltered in their text and
      in their titles.  Section numbers or the equivalent are not
      considered part of the section titles.</li><li>Delete any section
      entitled "Endorsements".  Such a section may not be included in
      the Modified Version.</li><li>Do not retitle any
      existing section as "Endorsements" or to conflict in title with
      any Invariant Section.</li></ol></div><p>If the Modified Version includes new front-matter sections
    or appendices that qualify as Secondary Sections and contain no
    material copied from the Document, you may at your option
    designate some or all of these sections as invariant.  To do this,
    add their titles to the list of Invariant Sections in the Modified
    Version's license notice.  These titles must be distinct from any
    other section titles.</p><p>You may add a section entitled "Endorsements", provided it
    contains nothing but endorsements of your Modified Version by
    various parties--for example, statements of peer review or that
    the text has been approved by an organization as the authoritative
    definition of a standard.</p><p>You may add a passage of up to five words as a Front-Cover
    Text, and a passage of up to 25 words as a Back-Cover Text, to the
    end of the list of Cover Texts in the Modified Version.  Only one
    passage of Front-Cover Text and one of Back-Cover Text may be
    added by (or through arrangements made by) any one entity.  If the
    Document already includes a cover text for the same cover,
    previously added by you or by arrangement made by the same entity
    you are acting on behalf of, you may not add another; but you may
    replace the old one, on explicit permission from the previous
    publisher that added the old one.</p><p>The author(s) and publisher(s) of the Document do not by
    this License give permission to use their names for publicity for
    or to assert or imply endorsement of any Modified Version.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40290"></a>G.5.&nbsp;Combining documents</h2></div></div></div><p>You may combine the Document with other documents released
    under this License, under the terms defined in section 4 above for
    modified versions, provided that you include in the combination
    all of the Invariant Sections of all of the original documents,
    unmodified, and list them all as Invariant Sections of your
    combined work in its license notice.</p><p>The combined work need only contain one copy of this
    License, and multiple identical Invariant Sections may be replaced
    with a single copy.  If there are multiple Invariant Sections with
    the same name but different contents, make the title of each such
    section unique by adding at the end of it, in parentheses, the
    name of the original author or publisher of that section if known,
    or else a unique number.  Make the same adjustment to the section
    titles in the list of Invariant Sections in the license notice of
    the combined work.</p><p>In the combination, you must combine any sections entitled
    "History" in the various original documents, forming one section
    entitled "History"; likewise combine any sections entitled
    "Acknowledgements", and any sections entitled "Dedications".  You
    must delete all sections entitled "Endorsements."</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40300"></a>G.6.&nbsp;Collections of documents</h2></div></div></div><p>You may make a collection consisting of the Document and
    other documents released under this License, and replace the
    individual copies of this License in the various documents with a
    single copy that is included in the collection, provided that you
    follow the rules of this License for verbatim copying of each of
    the documents in all other respects.</p><p>You may extract a single document from such a collection,
    and distribute it individually under this License, provided you
    insert a copy of this License into the extracted document, and
    follow this License in all other respects regarding verbatim
    copying of that document.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40308"></a>G.7.&nbsp;Aggregation with independent works</h2></div></div></div><p>A compilation of the Document or its derivatives with other
    separate and independent documents or works, in or on a volume of
    a storage or distribution medium, does not as a whole count as a
    Modified Version of the Document, provided no compilation
    copyright is claimed for the compilation.  Such a compilation is
    called an "aggregate", and this License does not apply to the
    other self-contained works thus compiled with the Document, on
    account of their being thus compiled, if they are not themselves
    derivative works of the Document.</p><p>If the Cover Text requirement of section 3 is applicable to
    these copies of the Document, then if the Document is less than
    one quarter of the entire aggregate, the Document's Cover Texts
    may be placed on covers that surround only the Document within the
    aggregate.  Otherwise they must appear on covers around the whole
    aggregate.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40316"></a>G.8.&nbsp;Translation</h2></div></div></div><p>Translation is considered a kind of modification, so you may
    distribute translations of the Document under the terms of section
    4.  Replacing Invariant Sections with translations requires
    special permission from their copyright holders, but you may
    include translations of some or all Invariant Sections in addition
    to the original versions of these Invariant Sections.  You may
    include a translation of this License provided that you also
    include the original English version of this License.  In case of
    a disagreement between the translation and the original English
    version of this License, the original English version will
    prevail.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40322"></a>G.9.&nbsp;Termination</h2></div></div></div><p>You may not copy, modify, sublicense, or distribute the
    Document except as expressly provided for under this License.  Any
    other attempt to copy, modify, sublicense or distribute the
    Document is void, and will automatically terminate your rights
    under this License.  However, parties who have received copies, or
    rights, from you under this License will not have their licenses
    terminated so long as such parties remain in full
    compliance.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40328"></a>G.10.&nbsp;Future revisions of this license</h2></div></div></div><p>The Free Software Foundation may publish new, revised
    versions of the GNU Free Documentation License from time to time.
    Such new versions will be similar in spirit to the present
    version, but may differ in detail to address new problems or
    concerns.  See http://www.gnu.org/copyleft/ (<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>).</p><p>Each version of the License is given a distinguishing
    version number.  If the Document specifies that a particular
    numbered version of this License "or any later version" applies to
    it, you have the option of following the terms and conditions
    either of that specified version or of any later version that has
    been published (not as a draft) by the Free Software Foundation.
    If the Document does not specify a version number of this License,
    you may choose any version ever published (not as a draft) by the
    Free Software Foundation.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40339"></a>G.11.&nbsp;How to use this License for your documents</h2></div></div></div><p>To use this License in a document you have written, include
    a copy of the License in the document and put the following
    copyright and license notices just after the title page:</p><div class="blockquote"><blockquote class="blockquote"><p>
      Copyright (c)  YEAR  YOUR NAME.
      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with the Invariant Sections being LIST THEIR TITLES, with the
      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
      A copy of the license is included in the section entitled "GNU
      Free Documentation License".
</p></blockquote></div><p>If you have no Invariant Sections, write "with no Invariant
    Sections" instead of saying which ones are invariant.  If you have
    no Front-Cover Texts, write "no Front-Cover Texts" instead of
    "Front-Cover Texts being LIST"; likewise for Back-Cover
    Texts.</p><p>If your document contains nontrivial examples of program
    code, we recommend releasing these examples in parallel under your
    choice of free software license, such as the GNU General Public
    License, to permit their use in free software.</p></div></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="gfdl_zh"></a>&#38468;&#24405;&nbsp;H.&nbsp;<acronym class="acronym">GNU</acronym> &#33258;&#30001;&#25991;&#26723;&#21327;&#35758;</h1></div></div></div><p>1.1 &#29256;, 2000 &#24180; 5 &#26376;</p><div class="blockquote"><blockquote class="blockquote"><p>copyright (C) 2000  Free Software Foundation, Inc.</p><p>59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</p><p>&#20219;&#20309;&#20154;&#37117;&#21487;&#20197;&#22797;&#21046;&#21644;&#21457;&#34892;&#36825;&#19968;&#21327;&#35758;&#25991;&#26723;&#30340;&#21407;&#22987;&#21103;&#26412;&#65292;&#20294;&#19981;&#20801;&#35768;&#23545;&#23427;&#36827;&#34892;&#20462;&#25913;&#12290;</p></blockquote></div><p>This is an unofficial translation of the GNU Free Documentation License (GFDL) into Chinese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for works that uses the GFDL --only the original English text of the GFDL does that. However, I hope that this translation will help Chinese speakers understand the GFDL better.</p><p>&#36825;&#26159; GNU &#33258;&#30001;&#25991;&#26723;&#21327;&#35758;&#30340;&#38750;&#23448;&#26041;&#20013;&#25991;&#32763;&#35793;&#12290;&#23427;&#19981;&#30001;&#33258;&#30001;&#36719;&#20214;&#22522;&#37329;&#20250;&#20986;&#29256;&#65292;&#22240;&#27492;&#19981;&#20195;&#34920;&#20351;&#29992; GFDL &#30340;&#33879;&#20316;&#30340;&#27861;&#24459;&#21512;&#21516;&#8213;&#8213;&#21482;&#26377; GFDL &#30340;&#33521;&#25991;&#21407;&#25991;&#20855;&#26377;&#27492;&#25928;&#21147;&#12290;&#28982;&#32780;&#25105;&#20204;&#24076;&#26395;&#27492;&#32763;&#35793;&#26377;&#21161;&#20110;&#35828;&#20013;&#25991;&#30340;&#20154;&#26356;&#22909;&#22320;&#29702;&#35299; GFDL &#12290;</p><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40371"></a>H.0.&nbsp;&#24207;</h2></div></div></div><p>&#26412;&#21327;&#35758;&#30340;&#30446;&#30340;&#22312;&#20110;&#20445;&#35777;&#19968;&#26412;&#25163;&#20876;&#12289;&#25945;&#31243;&#65292;&#25110;&#20854;&#23427;&#20219;&#20309;&#20070;&#38754;&#25991;&#26723;&#22312;&#22914;&#19979;&#24847;&#20041;&#19978;&#30340;&#8220;&#33258;&#30001;&#8221;&#65306;&#30830;&#20445;&#20219;&#20309;&#20154;&#22797;&#21046;&#12289;&#37325;&#21457;&#34892;&#23427;&#30340;&#33258;&#30001;&#65292;&#19981;&#35770;&#26159;&#21542;&#32463;&#36807;&#20462;&#25913;&#65292;&#19981;&#35770;&#26159;&#21542;&#20986;&#20110;&#21830;&#19994;&#30446;&#30340;&#65307;&#20854;&#27425;&#65292;&#36825;&#19968;&#21327;&#35758;&#20445;&#25252;&#25991;&#26723;&#30340;&#20316;&#32773;&#21644;&#20986;&#29256;&#32773;&#30340;&#20449;&#35465;&#19981;&#21463;&#20182;&#20154;&#20462;&#25913;&#30340;&#24433;&#21709;&#12290;</p><p>&#26412;&#21327;&#35758;&#26159;&#19968;&#31181;&#8220;copyleft&#8221;&#65292;&#36825;&#24847;&#21619;&#30528;&#65306;&#25991;&#26723;&#30340;&#27966;&#29983;&#29289;&#21644;&#25991;&#26723;&#26412;&#36523;&#24517;&#39035;&#36981;&#24490;&#21516;&#31181;&#24847;&#20041;&#19978;&#30340;&#33258;&#30001;&#12290;&#26412;&#21327;&#35758;&#26159;&#23545; GNU &#36890;&#29992;&#20844;&#20849;&#21327;&#35758;&#30340;&#34917;&#20805;&#65292;&#21518;&#32773;&#26159;&#20026;&#33258;&#30001;&#36719;&#20214;&#25776;&#20889;&#30340;&#8220;copyleft&#8221;&#21327;&#35758;&#12290;</p><p>&#25105;&#20204;&#25776;&#20889;&#36825;&#19968;&#21327;&#35758;&#30340;&#26368;&#21021;&#30446;&#30340;&#26159;&#29992;&#20110;&#33258;&#30001;&#36719;&#20214;&#30340;&#25163;&#20876;&#65292;&#22240;&#20026;&#33258;&#30001;&#36719;&#20214;&#38656;&#35201;&#33258;&#30001;&#25991;&#26723;&#65306;&#33258;&#30001;&#36719;&#20214;&#24212;&#24403;&#24102;&#26377;&#21516;&#26679;&#33258;&#30001;&#30340;&#25991;&#26723;&#12290;&#20294;&#36825;&#19968;&#21327;&#35758;&#30340;&#36866;&#29992;&#33539;&#22260;&#19981;&#23616;&#38480;&#20110;&#36719;&#20214;&#25991;&#26723;&#65307;&#20219;&#20309;&#20070;&#38754;&#33879;&#20316;&#37117;&#21487;&#20197;&#20351;&#29992;&#26412;&#21327;&#35758;&#65292;&#19981;&#35770;&#23427;&#28041;&#21450;&#21738;&#19968;&#20027;&#39064;&#65292;&#19981;&#35770;&#23427;&#26159;&#21542;&#20250;&#20986;&#29256;&#20026;&#32440;&#36136;&#20070;&#31821;&#12290;&#25105;&#20204;&#24314;&#35758;&#37027;&#20123;&#20197;&#25351;&#23548;&#25110;&#21442;&#32771;&#20026;&#30446;&#30340;&#30340;&#25991;&#26723;&#20316;&#21697;&#20351;&#29992;&#26412;&#21327;&#35758;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40380"></a>H.1.&nbsp;&#36866;&#29992;&#33539;&#22260;&#21644;&#23450;&#20041;</h2></div></div></div><p>&#26412;&#21327;&#35758;&#36866;&#29992;&#20110;&#20219;&#20309;&#25163;&#20876;&#25110;&#32773;&#20854;&#23427;&#33879;&#20316;&#65292;&#21482;&#35201;&#29256;&#26435;&#20154;&#22768;&#26126;&#20102;&#20197;&#26412;&#21327;&#35758;&#21457;&#34892;&#12290;&#19979;&#25991;&#25152;&#35828;&#30340;&#8220;&#25991;&#26723;&#8221;&#26159;&#25351;&#20219;&#20309;&#27492;&#31867;&#25163;&#20876;&#25110;&#33879;&#20316;&#12290;&#20219;&#20309;&#20844;&#20247;&#25104;&#21592;&#37117;&#26159;&#21327;&#35758;&#30340;&#21463;&#30410;&#32773;&#65292;&#25105;&#20204;&#23558;&#29992;&#8220;&#20320;&#8221;&#26469;&#31216;&#21628;&#12290;</p><p>&#25991;&#26723;&#30340;&#8220;&#20462;&#25913;&#29256;&#8221;(Modified Version) &#25351;&#20219;&#20309;&#21253;&#25324;&#25991;&#26723;&#25110;&#20854;&#19968;&#37096;&#20998;&#30340;&#33879;&#20316;&#65292;&#19981;&#35770;&#26159;&#21407;&#26679;&#22797;&#21046;&#30340;&#65292;&#36824;&#26159;&#21152;&#20837;&#20102;&#20462;&#25913;&#21644;/&#25110;&#32763;&#35793;&#12290;</p><p>&#8220;&#38468;&#23646;&#37096;&#20998;&#8221; (Secondary Section) &#25351;&#25991;&#26723;&#20013;&#25351;&#23450;&#30340;&#38468;&#24405;&#25110;&#24207;&#35328;&#37096;&#20998;&#65292;&#29992;&#20110;&#19987;&#38376;&#21465;&#36848;&#20316;&#32773;&#25110;&#20986;&#29256;&#32773;&#19982;&#25991;&#26723;&#20027;&#39064; (&#25110;&#20854;&#30456;&#20851;&#20107;&#39033;) &#20043;&#38388;&#30340;&#20851;&#31995;&#65292;&#19981;&#21253;&#21547;&#35813;&#20027;&#39064;&#20869;&#30340;&#20219;&#20309;&#20855;&#20307;&#20869;&#23481;&#12290;(&#20363;&#22914;&#65292;&#22914;&#26524;&#25991;&#26723;&#26159;&#25968;&#23398;&#25945;&#26448;&#30340;&#19968;&#37096;&#20998;&#65292;&#37027;&#20040;&#38468;&#23646;&#37096;&#20998;&#21487;&#33021;&#19981;&#20250;&#35762;&#36848;&#20219;&#20309;&#25968;&#23398;&#30693;&#35782;&#12290;)&#19978;&#38754;&#25152;&#35828;&#30340;&#20851;&#31995;&#21487;&#33021;&#26159;&#19982;&#25991;&#26723;&#20027;&#39064; (&#25110;&#20854;&#30456;&#20851;&#20107;&#39033;) &#20043;&#38388;&#30340;&#21382;&#21490;&#20851;&#32852;&#65292;&#25110;&#23545;&#23427;&#30340;&#27861;&#24459;&#12289;&#21830;&#19994;&#12289;&#21746;&#23398;&#12289;&#20262;&#29702;&#25110;&#25919;&#27835;&#35266;&#28857;&#12290;</p><p>&#8220;&#19981;&#21464;&#37096;&#20998;&#8221;(Invariant Sections) &#26159;&#8220;&#38468;&#23646;&#37096;&#20998;&#8221;&#30340;&#19968;&#20010;&#29305;&#23450;&#23376;&#38598;&#65292;&#30001;&#20351;&#29992;&#26412;&#21327;&#35758;&#30340;&#22768;&#26126;&#26681;&#25454;&#20854;&#26631;&#39064;&#25351;&#23450;&#12290;</p><p>&#8220;&#23553;&#38754;&#25991;&#26412;&#8221;(Cover Texts) &#26159;&#29305;&#23450;&#30340;&#30701;&#31687;&#25991;&#23383;&#65292;&#22312;&#20351;&#29992;&#26412;&#21327;&#35758;&#30340;&#22768;&#26126;&#20013;&#21015;&#20026;&#8220;&#21069;&#23553;&#38754;&#25991;&#26412;&#8221;&#25110;&#8220;&#23553;&#24213;&#25991;&#26412;&#8221;&#12290;</p><p>&#25991;&#26723;&#30340;&#8220;&#36879;&#26126;&#8221;(Transparent) &#21103;&#26412;&#25351;&#36825;&#26679;&#30340;&#21103;&#26412;&#65306;&#21487;&#20197;&#30001;&#26426;&#22120;&#38405;&#35835;&#65307;&#20854;&#26684;&#24335;&#26631;&#20934;&#26159;&#20844;&#20247;&#21487;&#24471;&#30340;&#65292;&#20854;&#20869;&#23481;&#21487;&#20197;&#29992;&#19968;&#33324;&#30340;&#25991;&#26412;&#32534;&#36753;&#22120;&#65292;&#25110; (&#23545;&#20110;&#20687;&#32032;&#22270;&#35937;) &#19968;&#33324;&#30340;&#32472;&#22270;&#31243;&#24207; &#65292;&#25110; (&#23545;&#20110;&#32472;&#30011;&#20316;&#21697;) &#24191;&#27867;&#20351;&#29992;&#30340;&#22270;&#35937;&#32534;&#36753;&#22120;&#30452;&#25509;&#25171;&#24320;&#26597;&#30475;&#21644;&#32534;&#36753;&#65307;&#33021;&#30452;&#25509;&#36755;&#20837;&#25991;&#26412;&#26684;&#24335;&#22120;&#65292;&#25110;&#21487;&#33258;&#21160;&#21270;&#32763;&#35793;&#20026;&#22810;&#31181;&#33021;&#36755;&#20837;&#25991;&#26412;&#26684;&#24335;&#22120;&#30340;&#26684;&#24335;&#12290;&#22914;&#26524;&#26576;&#19968;&#21103;&#26412;&#20197;&#38750;&#36879;&#26126;&#25991;&#20214;&#26684;&#24335;&#21046;&#20316;&#65292;&#21518;&#32773;&#30340;&#30446;&#30340;&#22312;&#20110;&#38459;&#25376;&#25110;&#19981;&#40723;&#21169;&#35835;&#32773;&#36827;&#34892;&#21518;&#26399;&#30340;&#20462;&#25913;&#65292;&#21017;&#35813;&#21103;&#26412;&#19981;&#26159;&#36879;&#26126;&#30340;&#65292;&#21363;&#8220;&#38750;&#36879;&#26126;&#8221;(Opaque) &#30340;&#12290;</p><p>&#36879;&#26126;&#21103;&#26412;&#24212;&#24403;&#37319;&#29992;&#30340;&#21512;&#36866;&#26684;&#24335;&#30340;&#20363;&#23376;&#65306;&#19981;&#24102;&#26631;&#35760;&#30340;&#32431; ASCII &#25991;&#26412;&#12289;Texinfo &#36755;&#20837;&#26684;&#24335;&#12289;LaTeX &#36755;&#20837;&#26684;&#24335;&#12289;&#37319;&#29992;&#20844;&#20247;&#21487;&#24471;&#30340; DTD &#30340; SGML &#25110; XML&#65292;&#20197;&#21450;&#36981;&#24490;&#26631;&#20934;&#30340;&#31616;&#21333;&#30340;&#20026;&#20154;&#31867;&#20462;&#25913;&#25152;&#35774;&#35745;&#30340; HTML&#12290;&#38750;&#36879;&#26126;&#30340;&#26684;&#24335;&#21253;&#25324; PostScript&#12289;PDF&#12289;&#21482;&#33021;&#34987;&#19987;&#26377;&#25991;&#23383;&#22788;&#29702;&#22120;&#38405;&#35835;&#21644;&#32534;&#36753;&#30340;&#19987;&#26377;&#26684;&#24335;&#12289;&#37319;&#29992;&#20844;&#20247;&#19981;&#21487;&#24471;&#30340; DTD &#21644;/&#25110;&#22788;&#29702;&#24037;&#20855;&#30340; SGML &#25110; XML&#12289;&#26426;&#22120;&#29983;&#25104;&#30340;&#65292;&#20165;&#34987;&#19968;&#20123;&#25991;&#23383;&#22788;&#29702;&#22120;&#29992;&#20110;&#36755;&#20986;&#30340; HTML&#12290;</p><p>&#8220;&#25161;&#39029;&#8221;(Title Page)&#25351;&#30340;&#26159;&#8213;&#8213;&#23545;&#20110;&#32440;&#29256;&#20070;&#26469;&#35828;&#8213;&#8213;&#25161;&#39029;&#26412;&#36523;&#65292;&#21152;&#19978;&#26412;&#21327;&#35758;&#35201;&#27714;&#20986;&#29616;&#22312;&#25161;&#39029;&#20013;&#30340;&#26448;&#26009;&#25152;&#22312;&#30340;&#39029;&#38754;&#12290;&#23545;&#37027;&#20123;&#26684;&#24335;&#19978;&#27809;&#26377;&#27492;&#31867;&#25161;&#39029;&#30340;&#20316;&#21697;&#65292;&#8220;&#25161;&#39029;&#8221;&#25351;&#30340;&#26159;&#20986;&#29616;&#22312;&#20316;&#21697;&#26368;&#26174;&#33879;&#26631;&#39064;&#38468;&#36817;&#65292;&#27491;&#25991;&#21069;&#30340;&#25991;&#23383;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40400"></a>H.2.&nbsp;&#21407;&#26679;&#22797;&#21046;</h2></div></div></div><p>&#20320;&#21487;&#20197;&#20197;&#20219;&#20309;&#23186;&#20171;&#22797;&#21046;&#21644;&#21457;&#34892;&#25991;&#26723;&#8213;&#8213;&#19981;&#35770;&#26159;&#21542;&#20986;&#20110;&#21830;&#19994;&#30446;&#30340;&#8213;&#8213;&#21482;&#35201;&#22312;&#27599;&#20010;&#21103;&#26412;&#20013;&#21253;&#21547;&#26412;&#21327;&#35758;&#12289;&#29256;&#26435;&#22768;&#26126;&#21644;&#37319;&#29992;&#26412;&#21327;&#35758;&#30340;&#22768;&#26126;&#65292;&#21516;&#26102;&#19981;&#32473;&#26412;&#21327;&#35758;&#38468;&#21152;&#20219;&#20309;&#20854;&#23427;&#26465;&#20214;&#12290;&#20320;&#19981;&#33021;&#20351;&#29992;&#25216;&#26415;&#25163;&#27573;&#22952;&#30861;&#25110;&#25511;&#21046;&#20320;&#25152;&#21046;&#20316;&#25110;&#21457;&#34892;&#30340;&#21103;&#26412;&#30340;&#38405;&#35835;&#21644;&#32487;&#32493;&#22797;&#21046;&#12290;&#28982;&#32780;&#65292;&#20320;&#21487;&#20197;&#20026;&#20320;&#30340;&#22797;&#21046;&#25509;&#21463;&#20607;&#37329;&#12290;&#22914;&#26524;&#20320;&#21457;&#34892;&#20102;&#22823;&#37327;&#30340;&#21103;&#26412;&#65292;&#20320;&#36824;&#35201;&#36981;&#24490;&#31532; 3 &#37096;&#20998;&#20013;&#30340;&#26465;&#20214;&#12290;</p><p>&#20320;&#20063;&#21487;&#20197;&#20511;&#20986;&#21103;&#26412;&#8213;&#8213;&#26465;&#20214;&#21644;&#19978;&#38754;&#25152;&#35828;&#30340;&#30456;&#21516;&#8213;&#8213;&#36824;&#21487;&#20197;&#20844;&#24320;&#23637;&#31034;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40408"></a>H.3.&nbsp;&#22823;&#37327;&#22797;&#21046;</h2></div></div></div><p>&#22914;&#26524;&#20320;&#20986;&#29256;&#30340;&#21360;&#21047;&#30340;&#25991;&#26723;&#21103;&#26412;&#25968;&#36229;&#36807; 100&#65292;&#32780;&#19988;&#25991;&#26723;&#30340;&#21327;&#35758;&#22768;&#26126;&#35201;&#27714;&#21253;&#25324;&#23553;&#38754;&#25991;&#26412;&#65292;&#20320;&#24517;&#39035;&#20026;&#27599;&#20221;&#21103;&#26412;&#37117;&#35013;&#19978;&#21253;&#21547;&#28165;&#26970;&#26131;&#35748;&#30340;&#23553;&#38754;&#25991;&#26412;&#30340;&#23553;&#38754;&#65306;&#21069;&#23553;&#38754;&#25991;&#26412;&#25918;&#22312;&#21069;&#23553;&#38754;&#65292;&#23553;&#24213;&#25991;&#26412;&#25918;&#22312;&#23553;&#24213;&#12290;&#20004;&#20010;&#23553;&#38754;&#37117;&#24517;&#39035;&#28165;&#26970;&#26131;&#35748;&#22320;&#25351;&#20986;&#20320;&#26159;&#36825;&#20123;&#21103;&#26412;&#30340;&#20986;&#29256;&#32773;&#12290;&#21069;&#23553;&#38754;&#24517;&#39035;&#21360;&#19978;&#23436;&#25972;&#30340;&#26631;&#39064;&#65292;&#27599;&#20010;&#21333;&#35789;&#37117;&#21516;&#26679;&#26174;&#33879;&#21644;&#26131;&#35748;&#12290;&#20320;&#21487;&#20197;&#22312;&#23553;&#38754;&#19978;&#28155;&#21152;&#20854;&#23427;&#20869;&#23481;&#12290;&#22914;&#26524;&#26576;&#19968;&#22797;&#21046;&#30340;&#25913;&#21160;&#20165;&#38480;&#20110;&#23553;&#38754;&#65292;&#19988;&#20445;&#30041;&#20102;&#21407;&#26377;&#26631;&#39064;&#24182;&#31526;&#21512;&#19978;&#36848;&#26465;&#20214;&#65292;&#37027;&#20040;&#22312;&#20854;&#23427;&#26041;&#38754;&#23601;&#21487;&#20197;&#34987;&#35748;&#20026;&#26159;&#21407;&#26679;&#22797;&#21046;&#12290;</p><p>&#22914;&#26524;&#35201;&#27714;&#21253;&#25324;&#30340;&#23553;&#38754;&#25991;&#26412; (&#21069;&#23553;&#38754;&#30340;&#25110;&#23553;&#24213;&#30340;) &#36807;&#20110;&#20887;&#38271;&#20197;&#33268;&#19981;&#33021;&#28385;&#36275;&#26131;&#35748;&#30340;&#23646;&#24615;&#65292;&#20320;&#24212;&#24403;&#25226;&#21015;&#22312;&#21069;&#38754;&#30340;&#20869;&#23481; (&#25968;&#37327;&#23613;&#37327;&#21512;&#36866;&#22320;) &#25918;&#22312;&#23553;&#38754;&#19978;&#65292;&#20313;&#19979;&#30340;&#20869;&#23481;&#25918;&#22312;&#21518;&#32493;&#39029;&#38754;&#19978;&#12290;</p><p>&#22914;&#26524;&#20320;&#20986;&#29256;&#25110;&#21457;&#34892;&#30340;&#38750;&#36879;&#26126;&#25991;&#26723;&#30340;&#21103;&#26412;&#25968;&#36229;&#36807; 100&#65292;&#20320;&#24517;&#39035;&#25110;&#32773;&#20026;&#27599;&#20010;&#38750;&#36879;&#26126;&#21103;&#26412;&#38468;&#24102;&#19968;&#20221;&#21487;&#26426;&#35835;&#30340;&#36879;&#26126;&#21103;&#26412;&#65307;&#25110;&#32773;&#22312;&#27599;&#20010;&#38750;&#36879;&#26126;&#21103;&#26412;&#20869;&#65292;&#25110;&#38468;&#24102;&#21103;&#26412;&#25351;&#20986;&#19968;&#20010;&#20844;&#20247;&#21487;&#36827;&#20837;&#30340;&#35745;&#31639;&#26426;&#32593;&#32476;&#22320;&#22336;&#65292;&#21518;&#32773;&#21253;&#21547;&#20102;&#19968;&#20221;&#23436;&#25972;&#30340;&#19981;&#24102;&#38468;&#21152;&#26448;&#26009;&#30340;&#36879;&#26126;&#25991;&#26723;&#21103;&#26412;&#65292;&#19968;&#33324;&#30340;&#32593;&#32476;&#20351;&#29992;&#32773;&#20351;&#29992;&#20844;&#20849;&#26631;&#20934;&#30340;&#32593;&#32476;&#25509;&#21475;&#65292;&#26080;&#38656;&#20184;&#36153;&#21363;&#21487;&#21311;&#21517;&#19979;&#36733;&#12290;&#22914;&#26524;&#20320;&#36873;&#29992;&#20102;&#21518;&#19968;&#31181;&#21150;&#27861;&#65292;&#20320;&#24517;&#39035;&#22312;&#24320;&#22987;&#21457;&#34892;&#38750;&#36879;&#26126;&#21103;&#26412;&#26102;&#37319;&#21462;&#19968;&#20123;&#35880;&#24910;&#30340;&#25514;&#26045;&#65292;&#20197;&#30830;&#20445;&#22788;&#22312;&#20320;&#25152;&#25351;&#26126;&#30340;&#22320;&#22336;&#30340;&#36879;&#26126;&#21103;&#26412;&#22312;&#20320;&#21457;&#34892;&#26368;&#21518;&#19968;&#26412;&#21103;&#26412; (&#19981;&#35770;&#26159;&#30452;&#25509;&#21457;&#34892;&#30340;&#65292;&#36824;&#26159;&#36890;&#36807;&#20195;&#29702;&#21830;&#25110;&#38646;&#21806;&#21830;&#21457;&#34892;&#30340;) &#21518;&#33267;&#23569;&#19968;&#24180;&#20869;&#20173;&#28982;&#21487;&#29992;&#12290;</p><p>&#35831;&#27714;&#65292;&#20294;&#19981;&#24378;&#21046;&#35201;&#27714;&#65292;&#20320;&#22312;&#37325;&#21457;&#34892;&#22823;&#37327;&#21103;&#26412;&#20043;&#21069;&#32852;&#31995;&#25991;&#26723;&#30340;&#20316;&#32773;&#65292;&#20197;&#20415;&#20182;&#20204;&#33021;&#32473;&#20320;&#25552;&#20379;&#25991;&#26723;&#30340;&#26356;&#26032;&#29256;&#26412;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40420"></a>H.4.&nbsp;&#20462;&#25913;</h2></div></div></div><p>&#28385;&#36275;&#20102;&#31532; 2 &#21644;&#31532; 3 &#37096;&#20998;&#20013;&#30340;&#35201;&#27714;&#65292;&#20320;&#23601;&#21487;&#20197;&#22797;&#21046;&#21644;&#21457;&#34892;&#25991;&#26723;&#30340;&#20462;&#25913;&#29256;&#65292;&#20854;&#21069;&#25552;&#26159;&#20320;&#31934;&#30830;&#22320;&#25226;&#20462;&#25913;&#29256;&#20197;&#26412;&#21327;&#35758;&#21457;&#24067;&#65292;&#27492;&#26102;&#20462;&#25913;&#29256;&#23601;&#25198;&#28436;&#20102;&#25991;&#26723;&#30340;&#35282;&#33394;&#65292;&#26412;&#21327;&#35758;&#25152;&#35268;&#23450;&#30340;&#21457;&#34892;&#21644;&#20462;&#25913;&#26465;&#27454;&#23601;&#23545;&#20462;&#25913;&#29256;&#30340;&#25345;&#26377;&#32773;&#26377;&#25928;&#12290;&#27492;&#22806;&#20320;&#24517;&#39035;&#23545;&#20462;&#25913;&#29256;&#20570;&#21040;&#65306;</p><div class="orderedlist"><ol type="A"><li>&#22312;&#25161;&#39029; (&#20197;&#21450;&#23553;&#38754;&#65292;&#22914;&#26524;&#26377;&#30340;&#35805;) &#19978;&#20351;&#29992;&#21644;&#25991;&#26723;&#19981;&#21516;&#30340;&#26631;&#39064;&#65292;&#21516;&#26102;&#20063;&#21644;&#19978;&#19968;&#29256;&#26412;&#19981;&#21516; (&#19978;&#19968;&#29256;&#26412;&#24212;&#24403;&#34987;&#21015;&#22312;&#25991;&#26723;&#30340;&#21382;&#21490;&#37096;&#20998;&#20013;&#65292;&#22914;&#26524;&#26377;&#30340;&#35805;)&#12290;&#22914;&#26524;&#24471;&#21040;&#20102;&#19978;&#19968;&#29256;&#26412;&#30340;&#20986;&#29256;&#32773;&#30340;&#35768;&#21487;&#65292;&#20320;&#20063;&#21487;&#20197;&#20351;&#29992;&#21516;&#19978;&#29256;&#26412;&#30456;&#21516;&#30340;&#26631;&#39064;&#12290;</li><li>&#22312;&#25161;&#39029;&#19978;&#21015;&#20986;&#19968;&#20010;&#25110;&#22810;&#20010;&#20026;&#20462;&#25913;&#29256;&#30340;&#33879;&#20316;&#26435;&#36127;&#36131;&#30340;&#20316;&#32773;&#65292;&#24182;&#21015;&#20986;&#33267;&#23569;&#20116;&#20010;&#20027;&#35201;&#20316;&#32773; (&#22914;&#26524;&#19981;&#36275;&#20116;&#20010;&#21017;&#21015;&#20986;&#25152;&#26377;&#20316;&#32773;)&#12290;</li><li>&#22312;&#25161;&#39029;&#19978;&#25351;&#20986;&#20462;&#25913;&#29256;&#30340;&#20986;&#29256;&#32773;&#65292;&#24182;&#20197;&#20854;&#20316;&#20026;&#20070;&#30340;&#20986;&#29256;&#32773;&#12290;</li><li>&#20445;&#30041;&#25991;&#26723;&#30340;&#25152;&#26377;&#29256;&#26435;&#22768;&#26126;&#12290;</li><li>&#22312;&#20854;&#23427;&#29256;&#26435;&#22768;&#26126;&#26049;&#36793;&#65292;&#28155;&#21152;&#19978;&#21512;&#36866;&#30340;&#38024;&#23545;&#20320;&#30340;&#20462;&#25913;&#30340;&#29256;&#26435;&#22768;&#26126;&#12290;</li><li>&#22312;&#29256;&#26435;&#22768;&#26126;&#21644;&#21518;&#38754;&#32039;&#25509;&#30528;&#21253;&#25324;&#19968;&#27573;&#21327;&#35758;&#22768;&#26126;&#65292;&#20801;&#35768;&#20197;&#26412;&#21327;&#35758;&#20351;&#29992;&#20462;&#25913;&#29256;&#65292;&#20854;&#26684;&#24335;&#22914;&#38468;&#24405;&#20013;&#25152;&#31034;&#12290;</li><li>&#23436;&#25972;&#22320;&#20445;&#30041;&#25991;&#26723;&#30340;&#21327;&#35758;&#22768;&#26126;&#20013;&#32473;&#20986;&#30340;&#19981;&#21464;&#37096;&#20998;&#21644;&#35201;&#27714;&#21253;&#25324;&#30340;&#23553;&#38754;&#25991;&#26412;&#12290;</li><li>&#21253;&#21547;&#26412;&#21327;&#35758;&#30340;&#19968;&#20221;&#26410;&#32463;&#25913;&#21160;&#30340;&#21103;&#26412;&#12290;</li><li>&#20445;&#30041;&#8220;&#21382;&#21490;&#8221;&#37096;&#20998;&#21450;&#20854;&#26631;&#39064;&#65292;&#24182;&#20026;&#20854;&#28155;&#21152;&#19968;&#39033;&#65292;&#33267;&#23569;&#21253;&#25324;&#25161;&#39029;&#20013;&#25152;&#25351;&#20986;&#30340;&#26631;&#39064;&#12289;&#24180;&#20221;&#12289;&#26032;&#20316;&#32773;&#21644;&#20986;&#29256;&#32773;&#12290;&#22914;&#26524;&#25991;&#26723;&#20013;&#27809;&#26377;&#26631;&#39064;&#20026;&#8220;&#21382;&#21490;&#8221;&#30340;&#37096;&#20998;&#65292;&#21019;&#24314;&#19968;&#20010;&#65292;&#22768;&#26126;&#25991;&#26723;&#30340;&#25161;&#39029;&#20013;&#25152;&#25351;&#20986;&#30340;&#26631;&#39064;&#12289;&#24180;&#20221;&#12289;&#20316;&#32773;&#21644;&#20986;&#29256;&#32773;&#65292;&#20877;&#28155;&#21152;&#19968;&#39033;&#65292;&#20197;&#25551;&#36848;&#20462;&#25913;&#29256;&#65292;&#27491;&#22914;&#19978;&#25991;&#25152;&#36848;&#12290;</li><li>&#20445;&#30041;&#25991;&#26723;&#20013;&#32473;&#20986;&#30340;&#29992;&#20197;&#33719;&#21462;&#25991;&#26723;&#30340;&#36879;&#26126;&#21103;&#26412;&#30340;&#32593;&#32476;&#22320;&#22336;&#8213;&#8213;&#22914;&#26524;&#26377;&#30340;&#35805;&#65307;&#21516;&#26679;&#21253;&#25324;&#20462;&#25913;&#29256;&#25152;&#22522;&#20110;&#30340;&#21069;&#19968;&#29256;&#26412;&#25152;&#32473;&#20986;&#30340;&#22320;&#22336;&#12290;&#36825;&#20123;&#37117;&#21487;&#20197;&#25918;&#22312;&#8220;&#21382;&#21490;&#8221;&#37096;&#20998;&#37324;&#38754;&#12290;&#22914;&#26524;&#33879;&#20316;&#26159;&#22312;&#25991;&#26723;&#26412;&#36523;&#33267;&#23569;&#22235;&#24180;&#21069;&#20986;&#29256;&#30340;&#65292;&#25110;&#32773;&#35813;&#29256;&#26412;&#30340;&#21407;&#20986;&#29256;&#32773;&#20801;&#35768;&#65292;&#20320;&#21487;&#20197;&#30053;&#21435;&#23427;&#30340;&#22320;&#22336;&#12290;</li><li>&#20445;&#30041;&#21407;&#25991;&#26723;&#20013;&#30340;&#8220;&#40483;&#35874;&#8221;&#25110;&#8220;&#36129;&#29486;&#8221;&#37096;&#20998;&#30340;&#26631;&#39064;&#65292;&#20197;&#21450;&#20854;&#20013;&#32473;&#20104;&#27599;&#19968;&#20010;&#36129;&#29486;&#32773;&#30340;&#40483;&#35874;&#21644;/&#25110;&#29486;&#36766;&#30340;&#35201;&#26088;&#21644;&#35821;&#27668;&#12290;</li><li>&#20445;&#30041;&#25991;&#26723;&#30340;&#25152;&#26377;&#19981;&#21464;&#37096;&#20998;&#65292;&#25991;&#23383;&#21644;&#26631;&#39064;&#22343;&#19981;&#33021;&#25913;&#21160;&#12290;&#31456;&#33410;&#21495;&#25110;&#20854;&#31561;&#20215;&#29289;&#19981;&#34987;&#35270;&#20026;&#31456;&#33410;&#26631;&#39064;&#30340;&#19968;&#37096;&#20998;&#12290;</li><li>&#21024;&#38500;&#25152;&#26377;&#39064;&#20026;&#8220;&#36190;&#35465;&#8221;&#30340;&#31456;&#33410;&#12290;&#36825;&#26679;&#30340;&#31456;&#33410;&#19981;&#33021;&#21253;&#25324;&#22312;&#20462;&#25913;&#29256;&#20013;&#12290;</li><li>&#19981;&#35201;&#25226;&#20219;&#20309;&#24050;&#26377;&#31456;&#33410;&#39064;&#20026;&#8220;&#36190;&#35465;&#8221;&#65292;&#25110;&#19982;&#19981;&#21464;&#37096;&#20998;&#20013;&#30340;&#26631;&#39064;&#20914;&#31361;&#12290;</li></ol></div><p>&#22914;&#26524;&#20462;&#25913;&#29256;&#21253;&#25324;&#26032;&#30340;&#24207;&#35328;&#25110;&#38468;&#24405;&#65292;&#19988;&#28385;&#36275;&#38468;&#23646;&#37096;&#20998;&#30340;&#26465;&#20214;&#65292;&#19981;&#21253;&#21547;&#20174;&#25991;&#26723;&#20013;&#22797;&#21046;&#30340;&#26448;&#26009;&#65292;&#20320;&#21487;&#20197; (&#20063;&#21487;&#20197;&#19981;) &#25226;&#23427;&#20204;&#30340;&#19968;&#37096;&#20998;&#25110;&#20840;&#20307;&#25351;&#23450;&#20026;&#19981;&#21464;&#30340;&#12290;&#35201;&#20570;&#21040;&#36825;&#19968;&#28857;&#65292;&#38656;&#35201;&#25226;&#23427;&#20204;&#30340;&#26631;&#39064;&#28155;&#21152;&#21040;&#20462;&#25913;&#29256;&#30340;&#21327;&#35758;&#22768;&#26126;&#30340;&#19981;&#21464;&#37096;&#20998;&#21015;&#34920;&#20013;&#12290;&#36825;&#20123;&#26631;&#39064;&#24517;&#39035;&#21644;&#20854;&#23427;&#31456;&#33410;&#26631;&#39064;&#19981;&#21516;&#12290;</p><p>&#20320;&#21487;&#20197;&#28155;&#21152;&#39064;&#20026;&#8220;&#36190;&#35465;&#8221;&#30340;&#19968;&#20010;&#31456;&#33410;&#65292;&#21482;&#35201;&#23427;&#21482;&#21253;&#25324;&#19981;&#21516;&#32676;&#20307;&#23545;&#20320;&#30340;&#20462;&#25913;&#29256;&#30340;&#36190;&#35465;&#8213;&#8213;&#20363;&#22914;&#65292;&#21516;&#31867;&#20316;&#21697;&#30340;&#23545;&#27604;&#65292;&#25110;&#32773;&#20320;&#30340;&#25991;&#23383;&#24050;&#34987;&#26576;&#20010;&#32452;&#32455;&#25110;&#23448;&#26041;&#26426;&#26500;&#25209;&#20934;&#20026;&#26576;&#20010;&#26631;&#20934;&#30340;&#23450;&#20041;&#30340;&#21407;&#25991;&#12290;</p><p>&#20320;&#21487;&#20197;&#22312;&#20462;&#25913;&#29256;&#23553;&#38754;&#25991;&#26412;&#30340;&#26368;&#21518;&#28155;&#21152;&#19968;&#23567;&#27573;&#8213;&#8213;&#26368;&#22810;&#20116;&#20010;&#21333;&#35789;&#8213;&#8213;&#20316;&#20026;&#21069;&#23553;&#38754;&#25991;&#26412;&#65292;&#21478;&#19968;&#23567;&#27573;&#8213;&#8213;&#26368;&#22810; 25 &#20010;&#21333;&#35789;&#8213;&#8213;&#20316;&#20026;&#23553;&#24213;&#25991;&#26412;&#12290;&#19968;&#20010;&#23454;&#20307;&#21482;&#33021;&#28155;&#21152; (&#25110;&#25972;&#29702;&#20986;) &#21069;&#23553;&#38754;&#25991;&#26412;&#30340;&#19968;&#27573;&#21644;&#23553;&#24213;&#25991;&#26412;&#30340;&#19968;&#27573;&#12290;&#22914;&#26524;&#25991;&#26723;&#30340;&#26576;&#19968;&#23553;&#38754;&#24050;&#32463;&#21253;&#25324;&#20102;&#20320;&#25110;&#20320;&#25152;&#20195;&#34920;&#30340;&#21516;&#19968;&#20010;&#23454;&#20307;&#20043;&#21069;&#25152;&#28155;&#21152; (&#25110;&#25972;&#29702;&#20986;) &#30340;&#19968;&#27573;&#23553;&#38754;&#25991;&#26412;&#65292;&#20320;&#19981;&#33021;&#20877;&#24448;&#36825;&#19968;&#23553;&#38754;&#19978;&#28155;&#21152;&#65307;&#20294;&#20320;&#21487;&#20197;&#26367;&#25442;&#25481;&#26087;&#30340;&#25991;&#26412;&#65292;&#21482;&#35201;&#24471;&#21040;&#20102;&#28155;&#21152;&#35813;&#25991;&#26412;&#30340;&#20986;&#29256;&#32773;&#30340;&#26126;&#30830;&#35768;&#21487;&#12290;</p><p>&#25991;&#26723;&#30340;&#20316;&#32773;&#21644;&#20986;&#29256;&#32773;&#20351;&#29992;&#26412;&#21327;&#35758;&#65292;&#24182;&#19981;&#36830;&#21516;&#32473;&#20104;&#27492;&#35768;&#21487;&#65306;&#20844;&#24320;&#20351;&#29992;&#20182;&#20204;&#30340;&#21517;&#23383;&#26469;&#30830;&#20445;&#25110;&#26263;&#31034;&#23545;&#20462;&#25913;&#29256;&#30340;&#32943;&#23450;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40477"></a>H.5.&nbsp;&#21512;&#24182;&#25991;&#26723;</h2></div></div></div><p>&#20320;&#21487;&#20197;&#25226;&#25991;&#26723;&#20197;&#21450;&#20854;&#23427;&#20197;&#26412;&#21327;&#35758;&#21457;&#24067;&#30340;&#25991;&#26723;&#21512;&#24182;&#36215;&#26469;&#65292;&#21069;&#25552;&#26159;&#31526;&#21512;&#31532; 4 &#37096;&#20998;&#20013;&#20851;&#20110;&#20462;&#25913;&#29256;&#30340;&#26465;&#20214;&#65292;&#24182;&#22312;&#21512;&#24182;&#20316;&#21697;&#20013;&#19981;&#32463;&#20462;&#25913;&#22320;&#21253;&#21547;&#25152;&#26377;&#21407;&#25991;&#26723;&#30340;&#25152;&#26377;&#19981;&#21464;&#37096;&#20998;&#65292;&#24182;&#22312;&#21512;&#24182;&#20316;&#21697;&#30340;&#21327;&#35758;&#22768;&#26126;&#20013;&#25226;&#23427;&#20204;&#20840;&#37096;&#21015;&#20026;&#19981;&#21464;&#37096;&#20998;&#12290;</p><p>&#21512;&#24182;&#20316;&#21697;&#21482;&#38656;&#21253;&#21547;&#26412;&#21327;&#35758;&#30340;&#19968;&#20221;&#21103;&#26412;&#65292;&#37325;&#22797;&#30340;&#19981;&#21464;&#37096;&#20998;&#21487;&#20197;&#21512;&#24182;&#20026;&#19968;&#20010;&#12290;&#22914;&#26524;&#20960;&#20010;&#19981;&#21464;&#37096;&#20998;&#30340;&#26631;&#39064;&#30456;&#21516;&#32780;&#20869;&#23481;&#19981;&#21516;&#65292;&#21017;&#24212;&#22312;&#26631;&#39064;&#30340;&#26411;&#23614;&#28155;&#21152;&#20854;&#21407;&#20316;&#32773;&#25110;&#20986;&#29256;&#32773;&#30340;&#21517;&#23383; (&#29992;&#25324;&#21495;&#25324;&#36215;&#26469;)&#8213;&#8213;&#22914;&#26524;&#26159;&#24050;&#30693;&#30340;&#8213;&#8213;&#26469;&#21306;&#20998;&#65292;&#21542;&#21017;&#23601;&#29992;&#19968;&#20010;&#29420;&#26377;&#30340;&#25968;&#23383;&#26469;&#21306;&#20998;&#12290;&#23545;&#21512;&#24182;&#20316;&#21697;&#30340;&#21327;&#35758;&#22768;&#26126;&#30340;&#19981;&#21464;&#37096;&#20998;&#21015;&#34920;&#20013;&#20986;&#29616;&#30340;&#31456;&#33410;&#26631;&#39064;&#20316;&#21516;&#26679;&#30340;&#35843;&#25972;&#12290;</p><p>&#21512;&#24182;&#26102;&#65292;&#20320;&#24517;&#39035;&#25226;&#21508;&#20010;&#21407;&#25991;&#26723;&#30340;&#8220;&#21382;&#21490;&#8221;&#37096;&#20998;&#21512;&#24182;&#20026;&#19968;&#20010;&#8220;&#21382;&#21490;&#8221;&#37096;&#20998;&#65307;&#23545;&#20219;&#20309;&#39064;&#20026;&#8220;&#40483;&#35874;&#8221;&#21644;&#8220;&#29486;&#36766;&#8221;&#30340;&#37096;&#20998;&#20316;&#21516;&#26679;&#30340;&#21512;&#24182;&#12290;&#20320;&#24517;&#39035;&#21024;&#38500;&#25152;&#26377;&#39064;&#20026;&#8220;&#36190;&#35465;&#8221;&#30340;&#37096;&#20998;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40487"></a>H.6.&nbsp;&#25991;&#26723;&#21512;&#38598;</h2></div></div></div><p>&#20320;&#21487;&#20197;&#25226;&#25991;&#26723;&#20197;&#21450;&#20854;&#23427;&#20197;&#26412;&#21327;&#35758;&#21457;&#24067;&#30340;&#25991;&#26723;&#21512;&#20026;&#19968;&#38598;&#65292;&#25226;&#20998;&#31435;&#30340;&#26412;&#21327;&#35758;&#30340;&#21103;&#26412;&#21512;&#20026;&#19968;&#20010;&#21253;&#21547;&#22312;&#21512;&#38598;&#20013;&#65292;&#21069;&#25552;&#26159;&#23545;&#27599;&#20010;&#25991;&#26723;&#30340;&#20854;&#23427;&#25152;&#26377;&#26041;&#38754;&#65292;&#37117;&#24212;&#36981;&#24490;&#26412;&#21327;&#35758;&#20851;&#20110;&#21407;&#26679;&#22797;&#21046;&#30340;&#35268;&#23450;&#12290;</p><p>&#20320;&#21487;&#20197;&#20174;&#36825;&#26679;&#30340;&#21512;&#38598;&#20013;&#25277;&#21462;&#20986;&#19968;&#20010;&#25991;&#26723;&#65292;&#24182;&#20197;&#26412;&#21327;&#35758;&#21333;&#29420;&#21457;&#34892;&#65292;&#21069;&#25552;&#26159;&#20320;&#25226;&#26412;&#21327;&#35758;&#30340;&#21103;&#26412;&#25554;&#20837;&#21040;&#20102;&#25277;&#21462;&#20986;&#30340;&#25991;&#26723;&#20013;&#65292;&#24182;&#22312;&#20854;&#23427;&#25152;&#26377;&#26041;&#38754;&#65292;&#37117;&#24212;&#36981;&#24490;&#26412;&#21327;&#35758;&#20851;&#20110;&#21407;&#26679;&#22797;&#21046;&#30340;&#35268;&#23450;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40495"></a>H.7.&nbsp;&#29420;&#31435;&#33879;&#20316;&#32858;&#38598;</h2></div></div></div><p>&#25991;&#26723;&#25110;&#20854;&#27966;&#29983;&#29289;&#19982;&#20854;&#23427;&#20998;&#31435;&#25991;&#26723;&#25110;&#33879;&#20316;&#30340;&#27719;&#32534;&#65292;&#20197;&#19968;&#20010;&#25991;&#24211;&#25110;&#19968;&#20010;&#22823;&#23186;&#20307;&#30340;&#24418;&#24335;&#21457;&#34892;&#65292;&#22914;&#26524;&#20854;&#33258;&#36523;&#27809;&#26377;&#27719;&#32534;&#29256;&#26435;&#22768;&#26126;&#65292;&#20854;&#25972;&#20307;&#19981;&#34987;&#35270;&#20026;&#25991;&#26723;&#30340;&#20462;&#25913;&#29256;&#12290;&#36825;&#26679;&#30340;&#27719;&#32534;&#31216;&#20026;&#8220;&#32858;&#38598;&#8221;&#65292;&#26412;&#21327;&#35758;&#19981;&#32422;&#26463;&#21644;&#25991;&#26723;&#27719;&#32534;&#22312;&#19968;&#36215;&#30340;&#20854;&#23427;&#38750;&#27966;&#29983;&#20316;&#21697;&#12290;</p><p>&#22914;&#26524;&#31532; 3 &#37096;&#20998;&#20013;&#20851;&#20110;&#23553;&#38754;&#25991;&#26412;&#30340;&#35201;&#27714;&#23545;&#20110;&#36825;&#20123; (&#32858;&#38598;&#20013;&#30340;) &#25991;&#26723;&#21103;&#26412;&#26159;&#21487;&#34892;&#30340;&#65292;&#20294;&#25991;&#26723;&#21482;&#21344;&#32858;&#38598;&#30340;&#19981;&#21040; 1/4 &#30340;&#37096;&#20998;&#65292;&#37027;&#20040;&#25991;&#26723;&#30340;&#23553;&#38754;&#25991;&#26412;&#21487;&#20197;&#34987;&#32622;&#20110;&#32858;&#38598;&#20869;&#37096;&#65292;&#21482;&#22260;&#32469;&#22312;&#25991;&#26723;&#33258;&#36523;&#21608;&#22260;&#12290;&#21542;&#21017;&#65292;&#23427;&#20204;&#24517;&#39035;&#20986;&#29616;&#22312;&#32858;&#38598;&#30340;&#23553;&#38754;&#19978;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40503"></a>H.8.&nbsp;&#32763;&#35793;</h2></div></div></div><p>&#32763;&#35793;&#34987;&#35748;&#20026;&#26159;&#20462;&#25913;&#30340;&#19968;&#31181;&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#20381;&#25454;&#31532; 4 &#20998;&#37096;&#20998;&#21457;&#34892;&#25991;&#26723;&#30340;&#32763;&#35793;&#29256;&#12290;&#25226;&#19981;&#21464;&#37096;&#20998;&#26367;&#25442;&#20026;&#32763;&#35793;&#29256;&#26412;&#38656;&#35201;&#24471;&#21040;&#29256;&#26435;&#25345;&#26377;&#32773;&#30340;&#29305;&#21035;&#35768;&#21487;&#65292;&#20294;&#20320;&#21487;&#20197;&#21253;&#25324;&#37096;&#20998;&#25110;&#20840;&#37096;&#19981;&#21464;&#37096;&#20998;&#30340;&#32763;&#35793;&#29256;&#26412;&#20316;&#20026;&#34917;&#20805;&#12290;&#20320;&#20063;&#21487;&#20197;&#21253;&#25324;&#26412;&#21327;&#35758;&#30340;&#19968;&#20221;&#32763;&#35793;&#65292;&#20294;&#21516;&#26102;&#20063;&#35201;&#21253;&#25324;&#26412;&#21327;&#35758;&#30340;&#33521;&#35821;&#29256;&#26412;&#12290;&#22914;&#26524;&#32763;&#35793;&#29256;&#26412;&#21644;&#33521;&#35821;&#21407;&#29256;&#26377;&#20219;&#20309;&#20986;&#20837;&#65292;&#24403;&#20197;&#33521;&#35821;&#21407;&#29256;&#20026;&#20934;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40509"></a>H.9.&nbsp;&#32456;&#27490;&#21327;&#35758;</h2></div></div></div><p>&#20320;&#21482;&#33021;&#22312;&#26126;&#30830;&#36981;&#24490;&#26412;&#21327;&#35758;&#30340;&#21069;&#25552;&#19979;&#65292;&#23545;&#25991;&#26723;&#36827;&#34892;&#22797;&#21046;&#12289;&#20462;&#25913;&#12289;&#27966;&#29983;&#21327;&#35758;&#25110;&#21457;&#34892;&#12290;&#20854;&#23427;&#20219;&#20309;&#20219;&#20309;&#22797;&#21046;&#12289;&#20462;&#25913;&#12289;&#27966;&#29983;&#21327;&#35758;&#25110;&#21457;&#34892;&#30340;&#20225;&#22270;&#37117;&#26159;&#26080;&#25928;&#30340;&#65292;&#24182;&#20250;&#33258;&#21160;&#32456;&#27490;&#26412;&#21327;&#35758;&#25480;&#20104;&#20320;&#30340;&#26435;&#21147;&#12290;&#28982;&#32780;&#22914;&#26524;&#20320;&#36829;&#21453;&#20102;&#26412;&#21327;&#35758;&#65292;&#37027;&#20123;&#26681;&#25454;&#27492;&#21327;&#35758;&#20174;&#20320;&#22788;&#25509;&#21463;&#20102;&#21103;&#26412;&#25110;&#32773;&#26435;&#21147;&#30340;&#20154;&#20204;&#65292;&#21482;&#35201;&#36981;&#24490;&#26412;&#21327;&#35758;&#65292;&#20182;&#20204;&#30340;&#21327;&#35758;&#23558;&#19981;&#20250;&#34987;&#32456;&#27490;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40515"></a>H.10.&nbsp;&#21327;&#35758;&#23558;&#26469;&#30340;&#20462;&#35746;</h2></div></div></div><p>&#33258;&#30001;&#36719;&#20214;&#22522;&#37329;&#20250;&#21487;&#33021;&#20250;&#19981;&#26102;&#20986;&#29256; GNU &#33258;&#30001;&#25991;&#26723;&#21327;&#35758;&#30340;&#26032;&#30340;&#12289;&#20462;&#35746;&#36807;&#30340;&#29256;&#26412;&#12290;&#36825;&#26679;&#30340;&#26032;&#29256;&#26412;&#22312;&#20854;&#31934;&#31070;&#19978;&#20250;&#19982;&#36825;&#19968;&#29256;&#26412;&#30456;&#20284;&#65292;&#20294;&#20026;&#23545;&#20184;&#26032;&#30340;&#38382;&#39064;&#25110;&#21033;&#23475;&#20851;&#31995;&#65292;&#22312;&#32454;&#33410;&#19978;&#21487;&#33021;&#20250;&#26377;&#25152;&#19981;&#21516;&#12290;&#21442;&#30475; http://www.gnu.org/copyleft/ (<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>)&#12290;</p><p>&#21327;&#35758;&#30340;&#27599;&#19968;&#29256;&#26412;&#37117;&#20250;&#34987;&#36171;&#20104;&#19968;&#20010;&#20197;&#31034;&#21306;&#21035;&#30340;&#29256;&#26412;&#21495;&#12290;&#22914;&#26524;&#25991;&#26723;&#25351;&#23450;&#21644;&#26412;&#21327;&#35758;&#30340;&#29256;&#26412;&#21495;&#21152;&#19978;&#8220;&#25110;&#32773;&#26356;&#26032;&#30340;&#29256;&#26412;&#8221;&#65292;&#20320;&#21487;&#20197;&#36981;&#24490;&#25351;&#23450;&#30340;&#29256;&#26412;&#21644;&#33258;&#30001;&#36719;&#20214;&#22522;&#37329;&#20250;&#20986;&#29256;&#30340;&#26032;&#29256;&#26412; (&#19981;&#21253;&#25324;&#33609;&#31295;) &#20013;&#30340;&#20219;&#24847;&#19968;&#20010;&#12290;&#22914;&#26524;&#25991;&#26723;&#27809;&#26377;&#25351;&#23450;&#29256;&#26412;&#21495;&#65292;&#20320;&#21487;&#20197;&#20174;&#33258;&#30001;&#36719;&#20214;&#22522;&#37329;&#20250;&#26366;&#32463;&#20986;&#29256;&#36807;&#30340;&#29256;&#26412; (&#19981;&#21253;&#25324;&#33609;&#31295;) &#20013;&#20219;&#36873;&#19968;&#20010;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40526"></a>H.11.&nbsp;&#22914;&#20309;&#20026;&#20320;&#30340;&#25991;&#26723;&#20351;&#29992;&#26412;&#21327;&#35758;</h2></div></div></div><p>&#35201;&#20026;&#20320;&#25152;&#20889;&#30340;&#25991;&#26723;&#20351;&#29992;&#26412;&#21327;&#35758;&#65292;&#22312;&#25991;&#26723;&#20013;&#21253;&#25324;&#26412;&#21327;&#35758;&#30340;&#19968;&#20221;&#21103;&#26412;&#65292;&#24182;&#25226;&#22914;&#19979;&#29256;&#26435;&#21644;&#21327;&#35758;&#22768;&#26126;&#25918;&#22312;&#25161;&#39029;&#21518;&#65306;</p><div class="blockquote"><blockquote class="blockquote"><p>Copyright (c)  YEAR  YOUR NAME.</p><p>Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".</p></blockquote></div><div class="blockquote"><blockquote class="blockquote"><p>&#21442;&#32771;&#35793;&#25991;&#65306;</p><p>Copyright (c)  YEAR  YOUR NAME.</p><p>&#20801;&#35768;&#22312; GNU &#33258;&#30001;&#25991;&#26723;&#21327;&#35758; (1.1 &#29256;&#65292;&#25110;&#33258;&#30001;&#36719;&#20214;&#22522;&#37329;&#20250;&#20986;&#29256;&#30340;&#20219;&#20309;&#26356;&#26032;&#29256;&#26412;) &#30340;&#35768;&#21487;&#19979;&#22797;&#21046;&#12289;&#21457;&#34892;&#19988;/&#25110;&#20462;&#25913;&#26412;&#25991;&#26723;&#65307;&#26412;&#25991;&#26723;&#30340;&#19981;&#21464;&#37096;&#20998;&#21253;&#25324;[&#23427;&#20204;&#30340;&#26631;&#39064;&#21015;&#22312;&#36825;&#37324;]&#65292;&#21069;&#23553;&#38754;&#25991;&#26412;&#26159;[&#21015;&#22312;&#36825;&#37324;]&#65292;&#23553;&#24213;&#25991;&#26412;&#26159;[&#21015;&#22312;&#36825;&#37324;]&#12290;&#35813;&#21327;&#35758;&#30340;&#19968;&#20221;&#21103;&#26412;&#21253;&#21547;&#22312;&#39064;&#20026;&#8220;GNU Free Documentation License&#8221;&#30340;&#31456;&#33410;&#20013;&#12290;</p></blockquote></div><p>&#22914;&#26524;&#27809;&#26377;&#19981;&#21464;&#37096;&#20998;&#65292;&#23601;&#20889;&#8220;with no Invariant Sections&#8221;(&#27809;&#26377;&#19981;&#21464;&#37096;&#20998;) &#32780;&#19981;&#26159;&#25351;&#26126;&#19981;&#21464;&#37096;&#20998;&#65307;&#22914;&#26524;&#27809;&#26377;&#21069;&#23553;&#38754;&#25991;&#26412;&#65292;&#23601;&#20889;&#8220;no Front-Cover Texts&#8221;(&#27809;&#26377;&#21069;&#23553;&#38754;&#25991;&#26412;) &#32780;&#19981;&#26159;&#8220;Front-Cover Texts being LIST&#8221;(&#21069;&#23553;&#38754;&#25991;&#26412;&#26159;[&#21015;&#22312;&#36825;&#37324;])&#65307;&#23553;&#24213;&#25991;&#26412;&#20063;&#26159;&#19968;&#26679;&#12290;</p><p>&#22914;&#26524;&#20320;&#30340;&#25991;&#26723;&#21253;&#21547;&#26377;&#20215;&#20540;&#30340;&#26679;&#20363;&#31243;&#24207;&#20195;&#30721;&#65292;&#25105;&#20204;&#24314;&#35758;&#20320;&#25226;&#36825;&#20123;&#26679;&#20363;&#29992;&#24179;&#34892;&#30340;&#33258;&#30001;&#36719;&#20214;&#21327;&#35758;&#21457;&#24067;&#65292;&#20197;&#20351;&#24471;&#23427;&#20204;&#21487;&#20197;&#22312;&#33258;&#30001;&#36719;&#20214;&#20013;&#34987;&#20351;&#29992;&#65292;&#20363;&#22914; GNU &#36890;&#29992;&#20844;&#20849;&#21327;&#35758;&#12290;</p></div></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="license"></a>&#38468;&#24405;&nbsp;I.&nbsp;<span class="application">Python</span> license</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40554"></a>I.A.&nbsp;History of the software</h2></div></div></div><p>Python was created in the early 1990s by Guido van Rossum at Stichting
Mathematisch Centrum (CWI) in the Netherlands as a successor of a
language called ABC.  Guido is Python's principal author, although it
includes many contributions from others.  The last version released
from CWI was Python 1.2.  In 1995, Guido continued his work on Python
at the Corporation for National Research Initiatives (CNRI) in Reston,
Virginia where he released several versions of the software.  Python
1.6 was the last of the versions released by CNRI.  In 2000, Guido and
the Python core development team moved to BeOpen.com to form the
BeOpen PythonLabs team.  Python 2.0 was the first and only release
from BeOpen.com.</p><p>Following the release of Python 1.6, and after Guido van Rossum left
CNRI to work with commercial software developers, it became clear that
the ability to use Python with software available under the GNU Public
License (GPL) was very desirable.  CNRI and the Free Software
Foundation (FSF) interacted to develop enabling wording changes to the
Python license.  Python 1.6.1 is essentially the same as Python 1.6,
with a few minor bug fixes, and with a different license that enables
later versions to be GPL-compatible.  Python 2.1 is a derivative work
of Python 1.6.1, as well as of Python 2.0.</p><p>After Python 2.0 was released by BeOpen.com, Guido van Rossum and the
other PythonLabs developers joined Digital Creations.  All
intellectual property added from this point on, starting with Python
2.1 and its alpha and beta releases, is owned by the Python Software
Foundation (PSF), a non-profit modeled after the Apache Software
Foundation.  See http://www.python.org/psf/ for more information about
the PSF.</p><p>Thanks to the many outside volunteers who have worked under Guido's
direction to make these releases possible.</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40565"></a>I.B.&nbsp;Terms and conditions for accessing or otherwise using Python</h2></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40569"></a>I.B.1.&nbsp;PSF license agreement</h3></div></div></div><div class="orderedlist"><ol type="1"><li>This LICENSE AGREEMENT is between the Python Software Foundation
("PSF"), and the Individual or Organization ("Licensee") accessing and
otherwise using Python 2.1.1 software in source or binary form and its
associated documentation.</li><li>Subject to the terms and conditions of this License Agreement, PSF
hereby grants Licensee a nonexclusive, royalty-free, world-wide
license to reproduce, analyze, test, perform and/or display publicly,
prepare derivative works, distribute, and otherwise use Python 2.1.1
alone or in any derivative version, provided, however, that PSF's
License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
2001 Python Software Foundation; All Rights Reserved" are retained in
Python 2.1.1 alone or in any derivative version prepared by Licensee.</li><li>In the event Licensee prepares a derivative work that is based on
or incorporates Python 2.1.1 or any part thereof, and wants to make
the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to Python 2.1.1.</li><li>PSF is making Python 2.1.1 available to Licensee on an "AS IS"
basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.1.1 WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.</li><li>PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
2.1.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.1.1,
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.</li><li>This License Agreement will automatically terminate upon a material
breach of its terms and conditions.</li><li>Nothing in this License Agreement shall be deemed to create any
relationship of agency, partnership, or joint venture between PSF and
Licensee.  This License Agreement does not grant permission to use PSF
trademarks or trade name in a trademark sense to endorse or promote
products or services of Licensee, or any third party.</li><li>By copying, installing or otherwise using Python 2.1.1, Licensee
agrees to be bound by the terms and conditions of this License
Agreement.</li></ol></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40597"></a>I.B.2.&nbsp;BeOpen Python open source license agreement version 1</h3></div></div></div><div class="orderedlist"><ol type="1"><li>This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
Individual or Organization ("Licensee") accessing and otherwise using
this software in source or binary form and its associated
documentation ("the Software").</li><li>Subject to the terms and conditions of this BeOpen Python License
Agreement, BeOpen hereby grants Licensee a non-exclusive,
royalty-free, world-wide license to reproduce, analyze, test, perform
and/or display publicly, prepare derivative works, distribute, and
otherwise use the Software alone or in any derivative version,
provided, however, that the BeOpen Python License is retained in the
Software, alone or in any derivative version prepared by Licensee.</li><li>BeOpen is making the Software available to Licensee on an "AS IS"
basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.</li><li>BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.</li><li>This License Agreement will automatically terminate upon a material
breach of its terms and conditions.</li><li>This License Agreement shall be governed by and interpreted in all
respects by the law of the State of California, excluding conflict of
law provisions.  Nothing in this License Agreement shall be deemed to
create any relationship of agency, partnership, or joint venture
between BeOpen and Licensee.  This License Agreement does not grant
permission to use BeOpen trademarks or trade names in a trademark
sense to endorse or promote products or services of Licensee, or any
third party.  As an exception, the "BeOpen Python" logos available at
http://www.pythonlabs.com/logos.html may be used according to the
permissions granted on that web page.</li><li>By copying, installing or otherwise using the software, Licensee
agrees to be bound by the terms and conditions of this License
Agreement.</li></ol></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40622"></a>I.B.3.&nbsp;CNRI open source GPL-compatible license agreement</h3></div></div></div><div class="orderedlist"><ol type="1"><li>This LICENSE AGREEMENT is between the Corporation for National
Research Initiatives, having an office at 1895 Preston White Drive,
Reston, VA 20191 ("CNRI"), and the Individual or Organization
("Licensee") accessing and otherwise using Python 1.6.1 software in
source or binary form and its associated documentation.</li><li>Subject to the terms and conditions of this License Agreement, CNRI
hereby grants Licensee a nonexclusive, royalty-free, world-wide
license to reproduce, analyze, test, perform and/or display publicly,
prepare derivative works, distribute, and otherwise use Python 1.6.1
alone or in any derivative version, provided, however, that CNRI's
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
1995-2001 Corporation for National Research Initiatives; All Rights
Reserved" are retained in Python 1.6.1 alone or in any derivative
version prepared by Licensee.  Alternately, in lieu of CNRI's License
Agreement, Licensee may substitute the following text (omitting the
quotes): "Python 1.6.1 is made available subject to the terms and
conditions in CNRI's License Agreement.  This Agreement together with
Python 1.6.1 may be located on the Internet using the following
unique, persistent identifier (known as a handle): 1895.22/1013.  This
Agreement may also be obtained from a proxy server on the Internet
using the following URL: http://hdl.handle.net/1895.22/1013".</li><li>In the event Licensee prepares a derivative work that is based on
or incorporates Python 1.6.1 or any part thereof, and wants to make
the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to Python 1.6.1.</li><li>CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.</li><li>CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.</li><li>This License Agreement will automatically terminate upon a material
breach of its terms and conditions.</li><li>This License Agreement shall be governed by the federal
intellectual property law of the United States, including without
limitation the federal copyright law, and, to the extent such
U.S. federal law does not apply, by the law of the Commonwealth of
Virginia, excluding Virginia's conflict of law provisions.
Notwithstanding the foregoing, with regard to derivative works based
on Python 1.6.1 that incorporate non-separable material that was
previously distributed under the GNU General Public License (GPL), the
law of the Commonwealth of Virginia shall govern this License
Agreement only as to issues arising under or with respect to
Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
License Agreement shall be deemed to create any relationship of
agency, partnership, or joint venture between CNRI and Licensee.  This
License Agreement does not grant permission to use CNRI trademarks or
trade name in a trademark sense to endorse or promote products or
services of Licensee, or any third party.</li><li>By clicking on the "ACCEPT" button where indicated, or by copying,
installing or otherwise using Python 1.6.1, Licensee agrees to be
bound by the terms and conditions of this License Agreement.</li></ol></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40650"></a>I.B.4.&nbsp;CWI permissions statement and disclaimer</h3></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
The Netherlands.  All rights reserved.</p></blockquote></div><p>Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Stichting Mathematisch
Centrum or CWI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.</p><p>STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</p></div></div></div><div class="appendix" lang="zh-cn"><div class="titlepage"><div><div><h1 class="title"><a name="license_zh"></a>&#38468;&#24405;&nbsp;J.&nbsp;<span class="application">Python</span> &#21327;&#35758;</h1></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40666"></a>J.0.&nbsp;&#20851;&#20110;&#35793;&#25991;&#30340;&#22768;&#26126;</h2></div></div></div><p>&#26412;&#35793;&#25991;&#20165;&#20379;&#21442;&#32771;&#65292;&#19981;&#20195;&#34920; <span class="application">Python</span> &#21327;&#35758;&#26412;&#36523;&#12290;&#23427;&#19981;&#20855;&#22791;&#20219;&#20309;&#27861;&#24459;&#25928;&#21147;&#8213;&#8213;&#21482;&#26377; <span class="application">Python</span> &#21327;&#35758;&#30340;&#33521;&#25991;&#21407;&#25991;&#20855;&#26377;&#27492;&#25928;&#21147;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40677"></a>J.A.&nbsp;&#36719;&#20214;&#30340;&#21382;&#21490;</h2></div></div></div><p>Python &#26159; Guido van Rossum &#20110; 20 &#19990;&#32426; 90 &#24180;&#20195;&#26089;&#26399;&#22312;&#33655;&#20848;&#30340; Stichting Mathematisch Centrum (CWI) &#21457;&#26126;&#30340;&#65292;&#20316;&#20026;&#19968;&#38376;&#21483; ABC &#30340;&#35821;&#35328;&#30340;&#21518;&#32487;&#12290;Guido &#26159; Python &#30340;&#20027;&#35201;&#20316;&#32773;&#65292;&#23613;&#31649;&#23427;&#21253;&#25324;&#20102;&#24456;&#22810;&#20182;&#20154;&#30340;&#36129;&#29486;&#12290;CWI &#21457;&#24067;&#30340;&#26368;&#21518;&#29256;&#26412;&#26159; Python 1.2&#12290;1995 &#24180;&#65292;Guido &#22312; Reston,Virginia &#30340; Corporation for National Research Initiatives (CNRI) &#32487;&#32493;&#36827;&#34892; Python &#30340;&#24037;&#20316;&#65292;&#20182;&#22312;&#27492;&#21448;&#21457;&#24067;&#20102;&#36825;&#20010;&#36719;&#20214;&#30340;&#22810;&#20010;&#29256;&#26412;&#12290;Python 1.6 &#26159; CNRI &#21457;&#24067;&#30340;&#26368;&#21518;&#29256;&#26412;&#12290;2000 &#24180;&#65292;Guido &#21644; Python &#30340;&#26680;&#24515;&#22242;&#38431;&#36716;&#31227;&#21040;&#20102; BeOpen.com&#65292;&#24418;&#25104;&#20102; BeOpen PythonLabs &#22242;&#38431;&#12290;Python 2.0 &#31532;&#19968;&#20010;&#20063;&#26159;&#21807;&#19968;&#19968;&#20010; BeOpen.com &#21457;&#24067;&#30340;&#29256;&#26412;&#12290;</p><p>Python 1.6 &#21457;&#24067;&#21518;&#65292;Guido van Rossum &#31163;&#24320;&#20102; CNRI&#65292;&#21516;&#21830;&#19994;&#36719;&#20214;&#24320;&#21457;&#21592;&#19968;&#21516;&#24037;&#20316;&#12290;&#35753; Python &#21644;&#20197; GNU Public License (GPL) &#21457;&#24067;&#30340;&#36719;&#20214;&#19968;&#36215;&#24037;&#20316;&#30340;&#38656;&#27714;&#36880;&#28176;&#26126;&#26391;&#36215;&#26469;&#12290;CNRI &#21644;&#33258;&#30001;&#36719;&#20214;&#22522;&#37329;&#20250; (Free Software Foundation, FSF) &#36827;&#34892;&#20102;&#25509;&#35302;&#65292;&#24471;&#21040;&#23545; Python &#21327;&#35758;&#25913;&#21160;&#25514;&#36766;&#30340;&#35768;&#21487;&#12290;Python 1.6.1 &#26412;&#36136;&#19978;&#19982; Python 1.6 &#26159;&#30456;&#21516;&#30340;&#65292;&#21482;&#20462;&#27491;&#20102;&#23567;&#37096;&#20998; bug&#65292;&#20294;&#21364;&#26159;&#29992;&#19981;&#21516;&#30340;&#21327;&#35758;&#21457;&#24067;&#65292;&#20174;&#32780;&#21518;&#32493;&#30340;&#29256;&#26412;&#37117;&#20860;&#23481; GPL &#20102;&#12290;Python 2.1 &#26159; Python 1.6.1 &#30340;&#34893;&#29983;&#29289;&#65292;Python 2.0 &#20063;&#26159;&#12290;</p><p>Python 2.0 &#22312; BeOpen.com &#21457;&#24067;&#21518;&#65292;Guido van Rossum &#21644;&#20854;&#23427;&#30340; PythonLabs &#24320;&#21457;&#32773;&#21152;&#20837;&#20102; Digital Creations&#12290;&#20174; Python 2.1 &#21450;&#20854; alpha &#21644; beta &#21457;&#24067;&#24320;&#22987;&#65292;&#27492;&#21518;&#21152;&#20837;&#30340;&#25152;&#26377;&#30693;&#35782;&#20135;&#26435;&#37117;&#30001; Python &#36719;&#20214;&#22522;&#37329;&#20250; (Python Software Foundation, PSF) &#25152;&#26377;&#65292;&#21518;&#32773;&#26159;&#19968;&#20010;&#38750;&#30408;&#21033;&#30340;&#32452;&#32455;&#65292;&#20197; Apache &#36719;&#20214;&#22522;&#37329;&#20250;&#20026;&#26679;&#26495;&#12290;&#20851;&#20110; PSF &#30340;&#26356;&#22810;&#20449;&#24687;&#21487;&#20197;&#21442;&#30475; http://www.python.org/psf/&#12290;</p><p>&#24863;&#35874;&#25104;&#21315;&#19978;&#19975;&#30340;&#22806;&#37096;&#24535;&#24895;&#32773;&#65292;&#20182;&#20204;&#22312; Guido &#30340;&#25351;&#24341;&#19979;&#20351;&#24471;&#25152;&#26377;&#36825;&#20123;&#21457;&#24067;&#25104;&#20026;&#21487;&#33021;&#12290;</p></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e40689"></a>J.B.&nbsp;&#20351;&#29992; Python &#30340;&#26465;&#27454;&#21644;&#26465;&#20214;</h2></div></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40693"></a>J.B.1.&nbsp;PSF &#21327;&#35758;</h3></div></div></div><div class="orderedlist"><ol type="1"><li>&#26412;&#21327;&#35758;&#26159; Python &#36719;&#20214;&#22522;&#37329;&#20250; (&#8220;PSF&#8221;) &#21516;&#20351;&#29992; Python 2.1.1 &#36719;&#20214;&#8213;&#8213;&#28304;&#30721;&#25110;&#20108;&#36827;&#21046;&#24418;&#24335;&#8213;&#8213;&#21450;&#20854;&#30456;&#20851;&#25991;&#26723;&#30340;&#20010;&#20154;&#25110;&#32452;&#32455; (&#8220;&#33719;&#35768;&#32773;&#8221;) &#20043;&#38388;&#36798;&#25104;&#30340;&#22865;&#32422;&#12290;</li><li>&#22312;&#26381;&#20174;&#26412;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#30340;&#21069;&#25552;&#19979;&#65292;PSF &#29305;&#27492;&#32473;&#20104;&#33719;&#35768;&#32773;&#26080;&#20363;&#22806;&#12289;&#26080;&#29256;&#31246;&#12289;&#20840;&#29699;&#30340;&#35768;&#21487;&#65292;&#20197;&#22797;&#21046;&#12289;&#20998;&#26512;&#12289;&#27979;&#35797;&#12289;&#36816;&#34892;&#21644;/&#25110;&#20844;&#24320;&#23637;&#20986;&#12289;&#34893;&#29983;&#12289;&#21457;&#34892;&#65292;&#25110;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992;&#21333;&#29420;&#30340; Python 2.1.1 &#25110;&#20854;&#34893;&#29983;&#29256;&#26412;&#65292;&#21069;&#25552;&#26159; PSF &#30340;&#21327;&#35758;&#21644; PSF &#30340;&#29256;&#26435;&#22768;&#26126; (&#8220;Copyright (c) 2001 Python Software Foundation; All Rights Reserved&#8221;) &#20445;&#30041;&#22312;&#21333;&#29420;&#30340; Python 2.1.1 &#25110;&#20854;&#30001;&#33719;&#35768;&#32773;&#29305;&#21046;&#30340;&#34893;&#29983;&#29256;&#26412;&#20013;&#12290;</li><li>&#22914;&#26524;&#33719;&#35768;&#32773;&#21046;&#20316;&#20102;&#19968;&#22522;&#20110;&#25110;&#21253;&#25324; Python 2.1.1 &#25110;&#20854;&#19968;&#37096;&#20998;&#30340;&#34893;&#29983;&#29289;&#65292;&#21516;&#26102;&#24819;&#35201;&#20351;&#20854;&#33021;&#20026;&#20182;&#20154;&#25152;&#24471;&#65292;&#26412;&#21327;&#35758;&#29305;&#27492;&#21516;&#24847;&#22312;&#20854;&#20013;&#21253;&#21547;&#20851;&#20110;&#23545; Python 2.1.1 &#25152;&#20316;&#25913;&#21160;&#30340;&#31616;&#30701;&#27010;&#35201;&#12290;</li><li>PSF &#20351;&#33719;&#35768;&#32773;&#33021;&#22815;&#20351;&#29992; Python 2.1.1&#65292;&#20854;&#22522;&#30784;&#26159;&#8220;AS IS&#8221;&#21407;&#21017;&#12290;PSF &#19981;&#20316;&#20219;&#20309;&#25551;&#36848;&#25110;&#20445;&#35777;&#65292;&#19981;&#35770;&#26159;&#26126;&#30830;&#30340;&#36824;&#26159;&#26263;&#21547;&#30340;&#12290;&#20363;&#22914;&#8213;&#8213;&#20294;&#20915;&#19981;&#38480;&#20110;&#27492;&#8213;&#8213;PSF &#19981;&#20316;&#24182;&#19988;&#21542;&#35748;&#22914;&#19979;&#25551;&#36848;&#25110;&#20445;&#35777;&#65306;&#20135;&#21697;&#30340;&#38144;&#36335;&#65292;&#20135;&#21697;&#26159;&#21542;&#36866;&#21512;&#20110;&#26576;&#19968;&#29992;&#36884;&#65292;&#20197;&#21450; Python 2.1.1 &#19981;&#20250;&#20405;&#29359;&#20219;&#20309;&#31532;&#19977;&#26041;&#30340;&#26435;&#21147;&#12290;</li><li>PSF &#23558;&#19981;&#23545;&#33719;&#35768;&#32773;&#25110;&#20854;&#23427;&#20219;&#20309; Python 2.1.1 &#30340;&#29992;&#25143;&#65292;&#20026;&#20462;&#25913;&#12289;&#21457;&#34892;&#25110;&#32773;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992; Python 2.1.1 &#25110;&#20854;&#34893;&#29983;&#29289;&#25152;&#24341;&#36215;&#30340;&#20219;&#20309;&#24847;&#22806;&#30340;&#12289;&#29305;&#27530;&#30340;&#65292;&#25110;&#30452;&#25509;&#30340;&#25439;&#23475;&#25110;&#20002;&#22833;&#36127;&#25285;&#20219;&#20309;&#36131;&#20219;&#65292;&#21363;&#20351;&#23545;&#27492;&#31181;&#21487;&#33021;&#24615;&#30693;&#24773;&#12290;</li><li>&#19968;&#26086;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#36973;&#21040;&#23454;&#36136;&#24615;&#30340;&#30772;&#22351;&#65292;&#26412;&#21327;&#35758;&#23558;&#33258;&#21160;&#32456;&#27490;&#12290;</li><li>&#21327;&#35758;&#20013;&#30340;&#20219;&#20309;&#20869;&#23481;&#37117;&#19981;&#35270;&#20026;&#35201;&#22312; PSF &#21644;&#33719;&#35768;&#32773;&#20043;&#38388;&#21019;&#36896;&#20195;&#29702;&#12289;&#21512;&#20316;&#25110;&#32773;&#21512;&#36164;&#30340;&#20851;&#31995;&#12290;&#26412;&#21327;&#35758;&#19981;&#25480;&#20104;&#27492;&#35768;&#21487;&#65306;&#20351;&#29992; PSF &#21830;&#26631;&#65292;&#25110;&#22312;&#21830;&#26631;&#20013;&#20197;&#21830;&#26631;&#30340;&#24847;&#20041;&#20351;&#29992;&#20854;&#21830;&#26631;&#21517;&#65292;&#20197;&#36190;&#35465;&#25110;&#23459;&#25196;&#33719;&#35768;&#32773;&#25110;&#20219;&#20309;&#31532;&#19977;&#26041;&#30340;&#20135;&#21697;&#25110;&#26381;&#21153;&#12290;</li><li>&#36890;&#36807;&#22797;&#21046;&#12289;&#23433;&#35013;&#65292;&#25110;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992; Python 2.1.1&#65292;&#33719;&#35768;&#32773;&#21516;&#24847;&#21463;&#21040;&#26412;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#30340;&#32422;&#26463;&#12290;</li></ol></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40721"></a>J.B.2.&nbsp;BeOpen Python &#24320;&#28304;&#21327;&#35758;&#31532; 1 &#29256;</h3></div></div></div><div class="orderedlist"><ol type="1"><li>&#26412;&#21327;&#35758;&#26159; BeOpen.com (&#8220;BeOpen&#8221;&#65292;&#20854;&#21150;&#20844;&#23460;&#20301;&#20110; 160 Saratoga Avenue, Santa Clara, CA 95051) &#21516;&#20351;&#29992;&#26412;&#36719;&#20214;&#8213;&#8213;&#28304;&#30721;&#25110;&#20108;&#36827;&#21046;&#24418;&#24335;&#8213;&#8213;&#21450;&#20854;&#30456;&#20851;&#25991;&#26723; (&#8220;&#26412;&#36719;&#20214;&#8221;) &#30340;&#20010;&#20154;&#25110;&#32452;&#32455; (&#8220;&#33719;&#35768;&#32773;&#8221;) &#20043;&#38388;&#36798;&#25104;&#30340;&#22865;&#32422;&#12290;</li><li>&#22312;&#26381;&#20174; BeOpen Python &#21327;&#35758;&#30340;&#21069;&#25552;&#19979;&#65292;BeOpen &#29305;&#27492;&#32473;&#20104;&#33719;&#35768;&#32773;&#26080;&#20363;&#22806;&#12289;&#26080;&#29256;&#31246;&#12289;&#20840;&#29699;&#30340;&#35768;&#21487;&#65292;&#20197;&#22797;&#21046;&#12289;&#20998;&#26512;&#12289;&#27979;&#35797;&#12289;&#36816;&#34892;&#21644;/&#25110;&#20844;&#24320;&#23637;&#20986;&#12289;&#34893;&#29983;&#12289;&#21457;&#34892;&#65292;&#25110;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992;&#21333;&#29420;&#30340;&#26412;&#36719;&#20214;&#25110;&#20854;&#34893;&#29983;&#29256;&#26412;&#65292;&#21069;&#25552;&#26159; BeOpen Python &#20445;&#30041;&#22312;&#21333;&#29420;&#30340;&#26412;&#36719;&#20214;&#25110;&#20854;&#30001;&#33719;&#35768;&#32773;&#29305;&#21046;&#30340;&#34893;&#29983;&#29256;&#26412;&#20013;&#12290;</li><li>BeOpen &#20351;&#33719;&#35768;&#32773;&#33021;&#22815;&#20351;&#29992;&#26412;&#36719;&#20214;&#65292;&#20854;&#22522;&#30784;&#26159;&#8220;AS IS&#8221;&#21407;&#21017;&#12290;BeOpen &#19981;&#20316;&#20219;&#20309;&#25551;&#36848;&#25110;&#20445;&#35777;&#65292;&#19981;&#35770;&#26159;&#26126;&#30830;&#30340;&#36824;&#26159;&#26263;&#21547;&#30340;&#12290;&#20363;&#22914;&#8213;&#8213;&#20294;&#20915;&#19981;&#38480;&#20110;&#27492;&#8213;&#8213;BeOpen &#19981;&#20316;&#24182;&#19988;&#21542;&#35748;&#22914;&#19979;&#25551;&#36848;&#25110;&#20445;&#35777;&#65306;&#20135;&#21697;&#30340;&#38144;&#36335;&#65292;&#20135;&#21697;&#26159;&#21542;&#36866;&#21512;&#20110;&#26576;&#19968;&#29992;&#36884;&#65292;&#20197;&#21450;&#26412;&#36719;&#20214;&#19981;&#20250;&#20405;&#29359;&#20219;&#20309;&#31532;&#19977;&#26041;&#30340;&#26435;&#21147;&#12290;</li><li>PSF &#23558;&#19981;&#23545;&#33719;&#35768;&#32773;&#25110;&#20854;&#23427;&#20219;&#20309;&#26412;&#36719;&#20214;&#30340;&#29992;&#25143;&#65292;&#20026;&#20462;&#25913;&#12289;&#21457;&#34892;&#25110;&#32773;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992;&#26412;&#36719;&#20214;&#25110;&#20854;&#34893;&#29983;&#29289;&#25152;&#24341;&#36215;&#30340;&#20219;&#20309;&#24847;&#22806;&#30340;&#12289;&#29305;&#27530;&#30340;&#65292;&#25110;&#30452;&#25509;&#30340;&#25439;&#23475;&#25110;&#20002;&#22833;&#36127;&#25285;&#20219;&#20309;&#36131;&#20219;&#65292;&#21363;&#20351;&#23545;&#27492;&#31181;&#21487;&#33021;&#24615;&#30693;&#24773;&#12290;</li><li>&#19968;&#26086;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#36973;&#21040;&#23454;&#36136;&#24615;&#30340;&#30772;&#22351;&#65292;&#26412;&#21327;&#35758;&#23558;&#33258;&#21160;&#32456;&#27490;&#12290;</li><li>&#26412;&#21327;&#35758;&#24212;&#24403;&#21463;&#21040; California &#24030;&#27861;&#24459;&#30340;&#31649;&#29702;&#21644;&#35299;&#37322;&#65292;&#38500;&#38750;&#27861;&#24459;&#26465;&#27454;&#21457;&#29983;&#20102;&#30683;&#30462;&#12290;&#21327;&#35758;&#20013;&#30340;&#20219;&#20309;&#20869;&#23481;&#37117;&#19981;&#35270;&#20026;&#35201;&#22312; BeOpen &#21644;&#33719;&#35768;&#32773;&#20043;&#38388;&#21019;&#36896;&#20195;&#29702;&#12289;&#21512;&#20316;&#25110;&#32773;&#21512;&#36164;&#30340;&#20851;&#31995;&#12290;&#26412;&#21327;&#35758;&#19981;&#25480;&#20104;&#27492;&#35768;&#21487;&#65306;&#20351;&#29992; BeOpen &#21830;&#26631;&#65292;&#25110;&#22312;&#21830;&#26631;&#20013;&#20197;&#21830;&#26631;&#30340;&#24847;&#20041;&#20351;&#29992;&#20854;&#21830;&#26631;&#21517;&#65292;&#20197;&#36190;&#35465;&#25110;&#23459;&#25196;&#33719;&#35768;&#32773;&#25110;&#20219;&#20309;&#31532;&#19977;&#26041;&#30340;&#20135;&#21697;&#25110;&#26381;&#21153;&#12290;&#20316;&#20026;&#20363;&#22806;&#65292;&#20986;&#29616;&#22312; http://www.pythonlabs.com/logos.html &#30340;&#8220;BeOpen Python&#8221;&#26631;&#24535;&#21487;&#20197;&#25353;&#29031;&#35813;&#32593;&#39029;&#19978;&#25152;&#25480;&#20104;&#30340;&#35768;&#21487;&#20351;&#29992;&#12290;</li><li>&#36890;&#36807;&#22797;&#21046;&#12289;&#23433;&#35013;&#65292;&#25110;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992;&#26412;&#36719;&#20214;&#65292;&#33719;&#35768;&#32773;&#21516;&#24847;&#21463;&#21040;&#26412;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#30340;&#32422;&#26463;&#12290;</li></ol></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40746"></a>J.B.3.&nbsp;CNRI &#24320;&#28304; GPL &#20860;&#23481;&#21327;&#35758;</h3></div></div></div><div class="orderedlist"><ol type="1"><li>&#26412;&#21327;&#35758;&#26159; Corporation for National Research Initiatives (&#8220;CNRI&#8221;&#65292;&#20854;&#21150;&#20844;&#23460;&#20301;&#20110; 1895 Preston White Drive, Reston, VA 20191) &#21516;&#20351;&#29992; Python 1.6.1&#8213;&#8213;&#28304;&#30721;&#25110;&#20108;&#36827;&#21046;&#24418;&#24335;&#8213;&#8213;&#21450;&#20854;&#30456;&#20851;&#25991;&#26723;&#30340;&#20010;&#20154;&#25110;&#32452;&#32455;&#20043;&#38388;&#36798;&#25104;&#30340;&#22865;&#32422;&#12290;</li><li>&#22312;&#26381;&#20174;&#26412;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#30340;&#21069;&#25552;&#19979;&#65292;CNRI &#29305;&#27492;&#32473;&#20104;&#33719;&#35768;&#32773;&#26080;&#20363;&#22806;&#12289;&#26080;&#29256;&#31246;&#12289;&#20840;&#29699;&#30340;&#35768;&#21487;&#65292;&#20197;&#22797;&#21046;&#12289;&#20998;&#26512;&#12289;&#27979;&#35797;&#12289;&#36816;&#34892;&#21644;/&#25110;&#20844;&#24320;&#23637;&#20986;&#12289;&#34893;&#29983;&#12289;&#21457;&#34892;&#65292;&#25110;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992;&#21333;&#29420;&#30340; Python 1.6.1 &#25110;&#20854;&#34893;&#29983;&#29256;&#26412;&#65292;&#21069;&#25552;&#26159; CNRI &#30340;&#21327;&#35758;&#21644; CNRI &#30340;&#29256;&#26435;&#22768;&#26126; (&#8220;Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved&#8221;) &#20445;&#30041;&#22312;&#21333;&#29420;&#30340; Python 1.6.1 &#25110;&#20854;&#30001;&#33719;&#35768;&#32773;&#29305;&#21046;&#30340;&#34893;&#29983;&#29256;&#26412;&#20013;&#12290;&#20316;&#20026;&#26367;&#20195;&#65292;&#22312;&#24212;&#24403;&#20986;&#29616; CNRI &#21327;&#35758;&#20043;&#22788;&#65292;&#33719;&#35768;&#32773;&#21487;&#20197;&#29992;&#19979;&#21015;&#25991;&#26412;&#21152;&#20197;&#26367;&#20195;&#65306;(&#19981;&#21547;&#24341;&#21495;)&#65306;&#8220;Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement.  This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013.  This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013&#8221;(Python 1.6.1 &#24517;&#39035;&#22312;&#26381;&#20174; CNRI &#30340;&#21327;&#35758;&#30340;&#21069;&#25552;&#19979;&#26041;&#21487;&#20351;&#29992;&#12290;&#36825;&#19968;&#21327;&#35758;&#21644; Python 1.6.1 &#19968;&#36215;&#65292;&#29992;&#19968;&#20010;&#21807;&#19968;&#30340;&#12289;&#19981;&#21464;&#30340;&#26631;&#35782;&#31526; (&#20063;&#21483;&#26631;&#35782;&#21477;&#26564;) &#21363;&#21487;&#22312; Internet &#19978;&#25214;&#21040;&#65306;1895.22/1013&#12290;&#36825;&#19968;&#21327;&#35758;&#21487;&#20197;&#36890;&#36807;&#20195;&#29702;&#26381;&#21153;&#22120;&#20174; Internet &#19978;&#24471;&#21040;&#65292;&#36890;&#36807;&#35775;&#38382;&#22914;&#19979; URL&#65306;http://hdl.handle.net/1895.22/1013)&#12290;</li><li>&#22914;&#26524;&#33719;&#35768;&#32773;&#21046;&#20316;&#20102;&#19968;&#22522;&#20110;&#25110;&#21253;&#25324; Python 1.6.1 &#25110;&#20854;&#19968;&#37096;&#20998;&#30340;&#34893;&#29983;&#29289;&#65292;&#21516;&#26102;&#24819;&#35201;&#20351;&#20854;&#33021;&#20026;&#20182;&#20154;&#25152;&#24471;&#65292;&#26412;&#21327;&#35758;&#29305;&#27492;&#21516;&#24847;&#22312;&#20854;&#20013;&#21253;&#21547;&#20851;&#20110;&#23545; Python 1.6.1 &#25152;&#20316;&#25913;&#21160;&#30340;&#31616;&#30701;&#27010;&#35201;&#12290;</li><li>CNRI &#20351;&#33719;&#35768;&#32773;&#33021;&#22815;&#20351;&#29992; 1.6.1&#65292;&#20854;&#22522;&#30784;&#26159;&#8220;AS IS&#8221;&#21407;&#21017;&#12290;CNRI &#19981;&#20316;&#20219;&#20309;&#25551;&#36848;&#25110;&#20445;&#35777;&#65292;&#19981;&#35770;&#26159;&#26126;&#30830;&#30340;&#36824;&#26159;&#26263;&#21547;&#30340;&#12290;&#20363;&#22914;&#8213;&#8213;&#20294;&#20915;&#19981;&#38480;&#20110;&#27492;&#8213;&#8213;CNRI &#19981;&#20316;&#24182;&#19988;&#21542;&#35748;&#22914;&#19979;&#25551;&#36848;&#25110;&#20445;&#35777;&#65306;&#20135;&#21697;&#30340;&#38144;&#36335;&#65292;&#20135;&#21697;&#26159;&#21542;&#36866;&#21512;&#20110;&#26576;&#19968;&#29992;&#36884;&#65292;&#20197;&#21450; Python 1.6.1 &#19981;&#20250;&#20405;&#29359;&#20219;&#20309;&#31532;&#19977;&#26041;&#30340;&#26435;&#21147;&#12290;</li><li>CNRI &#23558;&#19981;&#23545;&#33719;&#35768;&#32773;&#25110;&#20854;&#23427;&#20219;&#20309; Python 1.6.1 &#30340;&#29992;&#25143;&#65292;&#20026;&#20462;&#25913;&#12289;&#21457;&#34892;&#25110;&#32773;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992; Python 1.6.1 &#25110;&#20854;&#34893;&#29983;&#29289;&#25152;&#24341;&#36215;&#30340;&#20219;&#20309;&#24847;&#22806;&#30340;&#12289;&#29305;&#27530;&#30340;&#65292;&#25110;&#30452;&#25509;&#30340;&#25439;&#23475;&#25110;&#20002;&#22833;&#36127;&#25285;&#20219;&#20309;&#36131;&#20219;&#65292;&#21363;&#20351;&#23545;&#27492;&#31181;&#21487;&#33021;&#24615;&#30693;&#24773;&#12290;</li><li>&#19968;&#26086;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#36973;&#21040;&#23454;&#36136;&#24615;&#30340;&#30772;&#22351;&#65292;&#26412;&#21327;&#35758;&#23558;&#33258;&#21160;&#32456;&#27490;&#12290;</li><li>&#26412;&#21327;&#35758;&#24212;&#24403;&#21463;&#21040;&#32654;&#22269;&#32852;&#37030;&#30693;&#35782;&#20135;&#26435;&#27861;&#24459;&#30340;&#31649;&#29702;&#65292;&#21253;&#25324;&#20294;&#19981;&#38480;&#20110;&#32852;&#37030;&#29256;&#26435;&#27861;&#8213;&#8213;&#25110;&#32773;&#65292;&#22312;&#32852;&#37030;&#27861;&#24459;&#19981;&#36215;&#20316;&#29992;&#30340;&#22320;&#26041;&#65292;&#22914; Virginia &#24030;&#65292;&#30001; Commonwealth of Virginia &#21046;&#23450;&#30340;&#27861;&#24459;&#65292;&#38500;&#38750;&#20854;&#26465;&#27454;&#21457;&#29983;&#20102;&#30683;&#30462;&#12290;&#23613;&#31649;&#22914;&#21069;&#25152;&#36848;&#65292;&#32771;&#34385;&#21040;&#22522;&#20110; Python 1.6.1 &#30340;&#21253;&#21547;&#19981;&#21487;&#20998;&#21106;&#30340;&#20197; GNU &#36890;&#29992;&#20844;&#20849;&#21327;&#35758; (GPL) &#21457;&#24067;&#30340;&#26448;&#26009;&#30340;&#34893;&#29983;&#29289;&#65292;&#30001; Commonwealth of Virginia &#21046;&#23450;&#30340;&#27861;&#24459;&#21482;&#31649;&#29702;&#20351;&#29992;&#26412;&#21327;&#35758;&#26102;&#19982;&#31532; 4&#12289;5&#12289;7 &#31456;&#20013;&#30340;&#20869;&#23481;&#26377;&#20851;&#30340;&#20107;&#39033;&#12290;&#21327;&#35758;&#20013;&#30340;&#20219;&#20309;&#20869;&#23481;&#37117;&#19981;&#35270;&#20026;&#35201;&#22312; CNRI &#21644;&#33719;&#35768;&#32773;&#20043;&#38388;&#21019;&#36896;&#20195;&#29702;&#12289;&#21512;&#20316;&#25110;&#32773;&#21512;&#36164;&#30340;&#20851;&#31995;&#12290;&#26412;&#21327;&#35758;&#19981;&#25480;&#20104;&#27492;&#35768;&#21487;&#65306;&#20351;&#29992; CNRI &#21830;&#26631;&#65292;&#25110;&#22312;&#21830;&#26631;&#20013;&#20197;&#21830;&#26631;&#30340;&#24847;&#20041;&#20351;&#29992;&#20854;&#21830;&#26631;&#21517;&#65292;&#20197;&#36190;&#35465;&#25110;&#23459;&#25196;&#33719;&#35768;&#32773;&#25110;&#20219;&#20309;&#31532;&#19977;&#26041;&#30340;&#20135;&#21697;&#25110;&#26381;&#21153;&#12290;</li><li>&#36890;&#36807;&#21333;&#20987;&#26631;&#31034;&#20986;&#8220;&#25509;&#21463;&#8221;&#30340;&#25353;&#38062;&#12289;&#25110;&#32773;&#22797;&#21046;&#12289;&#23433;&#35013;&#65292;&#25110;&#20197;&#20854;&#23427;&#26041;&#24335;&#20351;&#29992; Python 1.6.1&#65292;&#33719;&#35768;&#32773;&#21516;&#24847;&#21463;&#21040;&#26412;&#21327;&#35758;&#30340;&#26465;&#27454;&#21644;&#26465;&#20214;&#30340;&#32422;&#26463;&#12290;</li></ol></div></div><div class="section" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="d0e40774"></a>J.B.4.&nbsp;CWI &#35768;&#21487;&#22768;&#26126;&#19982;&#20813;&#36131;&#22768;&#26126;</h3></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands.  All rights reserved.</p></blockquote></div><p>&#22312;&#27492;&#29305;&#35768;&#20197;&#20219;&#20309;&#30446;&#30340;&#12289;&#19981;&#20184;&#36153;&#22320;&#20351;&#29992;&#12289;&#22797;&#21046;&#12289;&#20462;&#25913;&#21644;&#21457;&#34892;&#26412;&#36719;&#20214;&#21450;&#20854;&#25991;&#26723;&#65292;&#20854;&#21069;&#25552;&#26159;&#19978;&#36848;&#29256;&#26435;&#22768;&#26126;&#20986;&#29616;&#22312;&#25152;&#26377;&#30340;&#21103;&#26412;&#20013;&#65292;&#29256;&#26435;&#22768;&#26126;&#21644;&#27492;&#35768;&#21487;&#22768;&#26126;&#20986;&#29616;&#22312;&#25903;&#25345;&#25991;&#26723;&#20013;&#12290;&#22312;&#26410;&#32463;&#20070;&#38754;&#29305;&#35768;&#65292;Stichting Mathematisch Centrum &#25110; CWI &#30340;&#21517;&#23383;&#19981;&#34987;&#29992;&#20110;&#24191;&#21578;&#25110;&#36719;&#20214;&#21457;&#34892;&#30340;&#30456;&#20851;&#23459;&#20256;&#20107;&#23452;&#12290;</p><p>Stichting Mathematisch Centrum &#21542;&#35748;&#25152;&#26377;&#23545;&#27492;&#36719;&#20214;&#30340;&#20445;&#35777;&#65292;&#21253;&#25324;&#25152;&#26377;&#26263;&#21547;&#30340;&#23545;&#20135;&#21697;&#30340;&#38144;&#36335;&#12289;&#26159;&#21542;&#36866;&#21512;&#20110;&#26576;&#19968;&#29992;&#36884;&#30340;&#20445;&#35777;&#12290;&#26080;&#35770;&#22914;&#20309;&#65292;Stichting Mathematisch Centrum &#37117;&#19981;&#20026;&#20219;&#20309;&#24847;&#22806;&#30340;&#12289;&#38388;&#25509;&#30340;&#65292;&#25110;&#30452;&#25509;&#30340;&#25439;&#23475;&#25110;&#30001;&#20219;&#20309;&#30001;&#20351;&#29992;&#26435;&#12289;&#25968;&#25454;&#25110;&#21033;&#30410;&#30340;&#25439;&#22833;&#25152;&#36896;&#25104;&#30340;&#25439;&#23475;&#36127;&#25285;&#20219;&#20309;&#36131;&#20219;&#65292;&#19981;&#35770;&#26159;&#21542;&#36798;&#25104;&#20102;&#21512;&#21516;&#65292;&#36824;&#26159;&#30001;&#20110;&#30095;&#24573;&#22823;&#24847;&#25110;&#32773;&#20854;&#23427;&#30340;&#20405;&#26435;&#34892;&#20026;&#65292;&#19981;&#35770;&#21644;&#20351;&#29992;&#25110;&#36816;&#34892;&#26412;&#36719;&#20214;&#26159;&#21542;&#26377;&#20851;&#12290;</p></div></div></div></div></body></html>