锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品国产V片在线观看,久久国产亚洲高清观看,精品久久香蕉国产线看观看亚洲http://www.tkk7.com/fhtdy2004/category/39267.html緇忛獙嫻呰杽錛岃愬績縐瘡錛涜鎬т笉濂斤紝璁拌鏂囧瓧zh-cnSat, 18 Jun 2011 22:12:50 GMTSat, 18 Jun 2011 22:12:50 GMT60Python瀛︿範絎旇錛堜簩錛?/title><link>http://www.tkk7.com/fhtdy2004/archive/2009/08/22/292232.html</link><dc:creator>Frank_Fang</dc:creator><author>Frank_Fang</author><pubDate>Sat, 22 Aug 2009 15:48:00 GMT</pubDate><guid>http://www.tkk7.com/fhtdy2004/archive/2009/08/22/292232.html</guid><wfw:comment>http://www.tkk7.com/fhtdy2004/comments/292232.html</wfw:comment><comments>http://www.tkk7.com/fhtdy2004/archive/2009/08/22/292232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fhtdy2004/comments/commentRss/292232.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fhtdy2004/services/trackbacks/292232.html</trackback:ping><description><![CDATA[<p>python 寮傚父銆佹鍒欒〃杈懼紡<br /> <a >http://docs.python.org/library/re.html</a><br /> <a >http://docs.python.org/howto/regex.html#regex-howto</a><br /> <br /> 渚?6.1. 鎵撳紑涓涓笉瀛樺湪鐨勬枃浠?br /> >>> fsock = open("/notthere", "r")      <br /> Traceback (innermost last):<br />   File "<interactive input>", line 1, in ?<br /> IOError: [Errno 2] No such file or directory: '/notthere'<br /> >>> try:<br /> ...     fsock = open("/notthere")       <br /> ... except IOError:                     <br /> ...     print "The file does not exist, exiting gracefully"<br /> ... print "This line will always print" <br /> The file does not exist, exiting gracefully<br /> This line will always print</p> <p><br /> # Bind the name getpass to the appropriate function<br />   try:<br />       import termios, TERMIOS                     <br />   except ImportError:<br />       try:<br />           import msvcrt                           <br />       except ImportError:<br />           try:<br />               from EasyDialogs import AskPassword <br />           except ImportError:<br />               getpass = default_getpass           <br />           else:                                   <br />               getpass = AskPassword<br />       else:<br />           getpass = win_getpass<br />   else:<br />       getpass = unix_getpass</p> <p> </p> <p>渚?6.10. 閬嶅巻 dictionary<br /> >>> import os<br /> >>> for k, v in os.environ.items():       <br /> ...     print "%s=%s" % (k, v)<br /> USERPROFILE=C:\Documents and Settings\mpilgrim<br /> OS=Windows_NT<br /> COMPUTERNAME=MPILGRIM<br /> USERNAME=mpilgrim</p> <p>[...鐣?..]<br /> >>> print "\n".join(["%s=%s" % (k, v)<br /> ...     for k, v in os.environ.items()]) <br /> USERPROFILE=C:\Documents and Settings\mpilgrim<br /> OS=Windows_NT<br /> COMPUTERNAME=MPILGRIM</p> <p> </p> <p>渚?6.13. 浣跨敤 sys.modules<br /> >>> import fileinfo         <br /> >>> print '\n'.join(sys.modules.keys())<br /> win32api<br /> os.path<br /> os<br /> fileinfo<br /> exceptions</p> <p>>>> fileinfo<br /> <module 'fileinfo' from 'fileinfo.pyc'><br /> >>> sys.modules["fileinfo"] <br /> <module 'fileinfo' from 'fileinfo.pyc'></p> <p><br /> 涓嬮潰鐨勪緥瀛愬皢灞曠ず閫氳繃緇撳悎浣跨敤 __module__ 綾誨睘鎬у拰 sys.modules dictionary 鏉ヨ幏鍙栧凡鐭ョ被鎵鍦ㄧ殑妯″潡銆?</p> <p>渚?6.14. __module__ 綾誨睘鎬?<br /> >>> from fileinfo import MP3FileInfo<br /> >>> MP3FileInfo.__module__              <br /> 'fileinfo'<br /> >>> sys.modules[MP3FileInfo.__module__] <br /> <module 'fileinfo' from 'fileinfo.pyc'>  姣忎釜 Python 綾婚兘鎷ユ湁涓涓唴緗殑綾誨睘鎬?__module__錛屽畠瀹氫箟浜嗚繖涓被鐨勬ā鍧楃殑鍚嶅瓧銆?nbsp; <br />   灝嗗畠涓?sys.modules 瀛楀吀澶嶅悎浣跨敤錛屼綘鍙互寰楀埌瀹氫箟浜嗘煇涓被鐨勬ā鍧楃殑寮曠敤銆?nbsp; </p> <p> </p> <p>渚?6.16. 鏋勯犺礬寰勫悕<br /> >>> import os<br /> >>> os.path.join("c:\\music\\ap\\", "mahadeva.mp3")  <br /> 'c:\\music\\ap\\mahadeva.mp3'<br /> >>> os.path.join("c:\\music\\ap", "mahadeva.mp3")   <br /> 'c:\\music\\ap\\mahadeva.mp3'<br /> >>> os.path.expanduser("~")                         <br /> 'c:\\Documents and Settings\\mpilgrim\\My Documents'<br /> >>> os.path.join(os.path.expanduser("~"), "Python") <br /> 'c:\\Documents and Settings\\mpilgrim\\My Documents\\Python'</p> <p> </p> <p>渚?7.2. 鍖歸厤鏁翠釜鍗曡瘝<br /> >>> s = '100 BROAD'<br /> >>> re.sub('ROAD$', 'RD.', s)<br /> '100 BRD.'<br /> >>> re.sub('\\bROAD$', 'RD.', s)  <br /> '100 BROAD'<br /> >>> re.sub(r'\bROAD$', 'RD.', s)  <br /> '100 BROAD'<br /> >>> s = '100 BROAD ROAD APT. 3'<br /> >>> re.sub(r'\bROAD$', 'RD.', s)  <br /> '100 BROAD ROAD APT. 3'<br /> >>> re.sub(r'\bROAD\b', 'RD.', s) <br /> '100 BROAD RD. APT 3'</p> <p>鎴戠湡姝f兂瑕佸仛鐨勬槸錛屽綋 'ROAD' 鍑虹幇鍦ㄥ瓧絎︿覆鐨勬湯灝撅紝騫朵笖鏄綔涓轟竴涓嫭绔嬬殑鍗曡瘝鏃訛紝鑰屼笉鏄竴浜涢暱鍗曡瘝鐨勪竴閮ㄥ垎錛屾墠瀵逛粬榪涜鍖歸厤銆備負浜嗗湪姝e垯琛ㄨ揪寮忎腑琛ㄨ揪榪欎釜鎰忔濓紝浣犲埄鐢?\b錛屽畠鐨勫惈涔夋槸“鍗曡瘝鐨勮竟鐣屽繀欏誨湪榪欓噷”銆傚湪 Python 涓紝鐢變簬瀛楃 '\' 鍦ㄤ竴涓瓧絎︿覆涓繀欏昏漿涔夛紝榪欎細鍙樺緱闈炲父楹葷儲銆傛湁鏃跺欙紝榪欑被闂琚О涓?#8220;鍙嶆枩綰跨伨闅?#8221;錛岃繖涔熸槸 Perl 涓鍒欒〃杈懼紡姣?Python 鐨勬鍒欒〃杈懼紡瑕佺浉瀵瑰鏄撶殑鍘熷洜涔嬩竴銆傚彟涓鏂歸潰錛孭erl 涔熸販娣嗕簡姝e垯琛ㄨ揪寮忓拰鍏朵粬璇硶錛屽洜姝わ紝濡傛灉浣犲彂鐜頒竴涓?bug錛屽緢闅懼紕娓呮絀剁珶鏄竴涓娉曢敊璇紝榪樻槸涓涓鍒欒〃杈懼紡閿欒銆?nbsp; <br />   涓轟簡閬垮厤鍙嶆枩綰跨伨闅撅紝浣犲彲浠ュ埄鐢ㄦ墍璋撶殑“鍘熷瀛楃涓?#8221;錛屽彧瑕佷負瀛楃涓叉坊鍔犱竴涓墠緙 r 灝卞彲浠ヤ簡銆傝繖灝嗗憡璇?Python錛屽瓧絎︿覆涓殑鎵鏈夊瓧絎﹂兘涓嶈漿涔夛紱'\t' 鏄竴涓埗琛ㄧ錛岃?r'\t' 鏄竴涓湡姝g殑鍙嶆枩綰垮瓧絎?'\'錛岀揣璺熺潃涓涓瓧姣?'t'銆傛垜鎺ㄨ崘鍙澶勭悊姝e垯琛ㄨ揪寮忥紝灝變嬌鐢ㄥ師濮嬪瓧絎︿覆錛涘惁鍒欙紝浜嬫儏浼氬緢蹇彉寰楁販涔?(騫朵笖姝e垯琛ㄨ揪寮忚嚜宸變篃浼氬緢蹇鑷繁鎼炰貢浜?銆?nbsp; </p> <p> </p> <p>渚?7.4. 媯楠岀櫨浣嶆暟<br /> >>> import re<br /> >>> pattern = '^M?M?M?(CM|CD|D?C?C?C?)$' <br /> >>> re.search(pattern, 'MCM')            <br /> <SRE_Match object at 01070390><br /> >>> re.search(pattern, 'MD')             <br /> <SRE_Match object at 01073A50><br /> >>> re.search(pattern, 'MMMCCC')         <br /> <SRE_Match object at 010748A8><br /> >>> re.search(pattern, 'MCMC')           <br /> >>> re.search(pattern, '')               <br /> <SRE_Match object at 01071D98></p> <p> </p> <p>渚?7.5. 鑰佹柟娉曪細姣忎竴涓瓧絎﹂兘鏄彲閫夌殑<br /> >>> import re<br /> >>> pattern = '^M?M?M?$'<br /> >>> re.search(pattern, 'M')    <br /> <_sre.SRE_Match object at 0x008EE090><br /> >>> pattern = '^M?M?M?$'<br /> >>> re.search(pattern, 'MM')   <br /> <_sre.SRE_Match object at 0x008EEB48><br /> >>> pattern = '^M?M?M?$'<br /> >>> re.search(pattern, 'MMM')  <br /> <_sre.SRE_Match object at 0x008EE090><br /> >>> re.search(pattern, 'MMMM') <br /> >>> </p> <p><br /> 渚?7.6. 涓涓柊鐨勬柟娉曪細浠?n 鍒?m<br /> >>> pattern = '^M{0,3}$'       <br /> >>> re.search(pattern, 'M')    <br /> <_sre.SRE_Match object at 0x008EEB48><br /> >>> re.search(pattern, 'MM')   <br /> <_sre.SRE_Match object at 0x008EE090><br /> >>> re.search(pattern, 'MMM')  <br /> <_sre.SRE_Match object at 0x008EEDA8><br /> >>> re.search(pattern, 'MMMM') <br /> >>> </p> <p><br /> 瀵逛簬涓綅鏁扮殑姝e垯琛ㄨ揪寮忔湁綾諱技鐨勮〃杈炬柟寮忥紝鎴戝皢鐪佺暐緇嗚妭錛岀洿鎺ュ睍紺虹粨鏋溿?/p> <p>>>> pattern = '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$'<br /> 鐢ㄥ彟涓縐?{n,m} 璇硶琛ㄨ揪榪欎釜姝e垯琛ㄨ揪寮忎細濡備綍鍛紵榪欎釜渚嬪瓙灞曠ず鏂扮殑璇硶銆?</p> <p>渚?7.8. 鐢?{n,m} 璇硶紜緗楅┈鏁板瓧 <br /> >>> pattern = '^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'<br /> >>> re.search(pattern, 'MDLV')             <br /> <_sre.SRE_Match object at 0x008EEB48><br /> >>> re.search(pattern, 'MMDCLXVI')         <br /> <_sre.SRE_Match object at 0x008EEB48></p> <p><br /> 渚?7.9. 甯︽湁鍐呰仈娉ㄩ噴 (Inline Comments) 鐨勬鍒欒〃杈懼紡<br /> >>> pattern = """<br />     ^                   # beginning of string<br />     M{0,3}              # thousands - 0 to 3 M's<br />     (CM|CD|D?C{0,3})    # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),<br />                         #            or 500-800 (D, followed by 0 to 3 C's)<br />     (XC|XL|L?X{0,3})    # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),<br />                         #        or 50-80 (L, followed by 0 to 3 X's)<br />     (IX|IV|V?I{0,3})    # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),<br />                         #        or 5-8 (V, followed by 0 to 3 I's)<br />     $                   # end of string<br />     """<br /> >>> re.search(pattern, 'M', re.VERBOSE)                <br /> <_sre.SRE_Match object at 0x008EEB48><br /> >>> re.search(pattern, 'MCMLXXXIX', re.VERBOSE)        <br /> <_sre.SRE_Match object at 0x008EEB48><br /> >>> re.search(pattern, 'MMMDCCCLXXXVIII', re.VERBOSE)  <br /> <_sre.SRE_Match object at 0x008EEB48><br /> >>> re.search(pattern, 'M')                            <br />   褰撲嬌鐢ㄦ澗鏁f鍒欒〃杈懼紡鏃訛紝鏈閲嶈鐨勪竴浠朵簨鎯呭氨鏄細蹇呴』浼犻掍竴涓澶栫殑鍙傛暟 re.VERBOSE錛岃鍙傛暟鏄畾涔夊湪 re 妯″潡涓殑涓涓父閲忥紝鏍囧織鐫寰呭尮閰嶇殑姝e垯琛ㄨ揪寮忔槸涓涓澗鏁f鍒欒〃杈懼紡銆傛濡備綘鐪嬪埌鐨勶紝榪欎釜妯″紡涓紝鏈夊緢澶氱┖鏍?(鎵鏈夌殑絀烘牸閮借蹇界暐)錛屽拰鍑犱釜娉ㄩ噴 (鎵鏈夌殑娉ㄩ噴涔熻蹇界暐)銆傚鏋滃拷鐣ユ墍鏈夌殑絀烘牸鍜屾敞閲婏紝瀹冨氨鍜屽墠闈㈢珷鑺傞噷鐨勬鍒欒〃杈懼紡瀹屽叏鐩稿悓錛屼絾鏄叿鏈夋洿濂界殑鍙鎬с?nbsp; <br /> >>> re.search(pattern, 'M')        <br /> 榪欎釜娌℃湁鍖歸厤銆備負浠涔堝憿錛熷洜涓烘病鏈?re.VERBOSE 鏍囪錛屾墍浠?re.search 鍑芥暟鎶婃ā寮忎綔涓轟竴涓揣鍑戞鍒欒〃杈懼紡榪涜鍖歸厤銆侾ython 涓嶈兘鑷姩媯嫻嬩竴涓鍒欒〃杈懼紡鏄負鏉炬暎綾誨瀷榪樻槸绱у噾綾誨瀷銆侾ython 榛樿姣忎竴涓鍒欒〃杈懼紡閮芥槸绱у噾綾誨瀷鐨勶紝闄ら潪浣犳樉寮忓湴鏍囨槑涓涓鍒欒〃杈懼紡涓烘澗鏁g被鍨嬨?</p> <p> </p> <p>渚?7.16. 瑙f瀽鐢佃瘽鍙風爜 (鏈緇堢増鏈?<br /> >>> phonePattern = re.compile(r'''<br />                 # don't match beginning of string, number can start anywhere<br />     (\d{3})     # area code is 3 digits (e.g. '800')<br />     \D*         # optional separator is any number of non-digits<br />     (\d{3})     # trunk is 3 digits (e.g. '555')<br />     \D*         # optional separator<br />     (\d{4})     # rest of number is 4 digits (e.g. '1212')<br />     \D*         # optional separator<br />     (\d*)       # extension is optional and can be any number of digits<br />     $           # end of string<br />     ''', re.VERBOSE)<br /> >>> phonePattern.search('work 1-(800) 555.1212 #1234').groups()        <br /> ('800', '555', '1212', '1234')<br /> >>> phonePattern.search('800-555-1212')                                <br /> ('800', '555', '1212', '')</p> <p> </p> <p><br /> 鐜板湪錛屼綘搴旇鐔熸倝涓嬪垪鎶宸э細</p> <p>^ 鍖歸厤瀛楃涓茬殑寮濮嬨?<br /> $ 鍖歸厤瀛楃涓茬殑緇撳熬銆?<br /> \b 鍖歸厤涓涓崟璇嶇殑杈圭晫銆?<br /> \d 鍖歸厤浠繪剰鏁板瓧銆?<br /> \D 鍖歸厤浠繪剰闈炴暟瀛楀瓧絎︺?<br /> x? 鍖歸厤涓涓彲閫夌殑 x 瀛楃 (鎹㈣█涔嬶紝瀹冨尮閰?1 嬈℃垨鑰?0 嬈?x 瀛楃)銆?<br /> x* 鍖歸厤0嬈℃垨鑰呭嬈?x 瀛楃銆?<br /> x+ 鍖歸厤1嬈℃垨鑰呭嬈?x 瀛楃銆?<br /> x{n,m} 鍖歸厤 x 瀛楃錛岃嚦灝?n 嬈★紝鑷沖 m 嬈°?<br /> (a|b|c) 瑕佷箞鍖歸厤 a錛岃涔堝尮閰?b錛岃涔堝尮閰?c銆?<br /> (x) 涓鑸儏鍐典笅琛ㄧず涓涓蹇嗙粍 (remembered group)銆備綘鍙互鍒╃敤 re.search 鍑芥暟榪斿洖瀵硅薄鐨?groups() 鍑芥暟鑾峰彇瀹冪殑鍊箋?<br /> <br /> http://www.woodpecker.org.cn/diveintopython/regular_expressions/phone_numbers.html<br /> <br /> <table style="width: 802px; height: 1872px" cellspacing="0" cellpadding="1" width="802" border="1"> <caption> <h5 class="docTableTitle">Regular expression pattern syntax</h5> </caption> <colgroup span="2"> <tbody> <tr> <th class="docTableHeader"> <p class="docText">Element</p> </th> <th class="docTableHeader"> <p class="docText">Meaning</p> </th> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5256"></a><a name="pythonian-CHP-9-ITERM-5257"></a> <pre>.</pre> </td> <td class="docTableCell"> <p class="docText">Matches any character except <tt>\n</tt> (if <tt>DOTALL</tt>, also matches <tt>\n</tt>)</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5258"></a><a name="pythonian-CHP-9-ITERM-5259"></a> <pre>^</pre> </td> <td class="docTableCell"> <p class="docText">Matches start of string (if <tt>MULTILINE</tt>, also matches after <tt>\n</tt>)</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5260"></a><a name="pythonian-CHP-9-ITERM-5261"></a> <pre>$</pre> </td> <td class="docTableCell"> <p class="docText">Matches end of string (if <tt>MULTILINE</tt>, also matches before <tt>\n</tt>)</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5262"></a><a name="pythonian-CHP-9-ITERM-5263"></a> <pre>*</pre> </td> <td class="docTableCell"> <p class="docText">Matches zero or more cases of the previous regular expression; greedy (match as many as possible)</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5264"></a><a name="pythonian-CHP-9-ITERM-5265"></a> <pre>+</pre> </td> <td class="docTableCell"> <p class="docText">Matches one or more cases of the previous regular expression; greedy (match as many as possible)</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5266"></a><a name="pythonian-CHP-9-ITERM-5267"></a> <pre>?</pre> </td> <td class="docTableCell"> <p class="docText">Matches zero or one case of the previous regular expression; greedy (match one if possible)</p> </td> </tr> <tr> <td class="docTableCell"> <p class="docText"><tt>*?</tt><a name="pythonian-CHP-9-ITERM-5268"></a> <a name="pythonian-CHP-9-ITERM-5269"></a><a name="pythonian-CHP-9-ITERM-5270"></a><a name="pythonian-CHP-9-ITERM-5271"></a>, <tt>+?</tt>, <tt>??</tt></p> </td> <td class="docTableCell"> <p class="docText">Non-greedy versions of <tt>*</tt>, <tt>+</tt>, and <tt>?</tt> (match as few as possible)</p> </td> </tr> <tr> <td class="docTableCell"> <pre>{<tt><em>m</em></tt>,<tt><em>n</em></tt>}</pre> </td> <td class="docTableCell"> <p class="docText">Matches <tt><em>m</em></tt> to <tt><em>n</em></tt> cases of the previous regular expression (greedy)</p> </td> </tr> <tr> <td class="docTableCell"> <pre>{<tt><em>m</em></tt>,<tt><em>n</em></tt>}?</pre> </td> <td class="docTableCell"> <p class="docText">Matches <tt><em>m</em></tt> to <tt><em>n</em></tt> cases of the previous regular expression (non-greedy)</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5272"></a><a name="pythonian-CHP-9-ITERM-5273"></a> <pre>[...]</pre> </td> <td class="docTableCell"> <p class="docText">Matches any one of a set of characters contained within the brackets</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5274"></a><a name="pythonian-CHP-9-ITERM-5275"></a> <pre>|</pre> </td> <td class="docTableCell"> <p class="docText">Matches expression either preceding it or following it</p> </td> </tr> <tr> <td class="docTableCell"><a name="pythonian-CHP-9-ITERM-5276"></a><a name="pythonian-CHP-9-ITERM-5277"></a> <pre>(...)</pre> </td> <td class="docTableCell"> <p class="docText">Matches the regular expression within the parentheses and also indicates a group</p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?iLmsux)</pre> </td> <td class="docTableCell"> <p class="docText">Alternate way to set optional flags; no effect on match</p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?:...)</pre> </td> <td class="docTableCell"> <p class="docText">Like <tt>(...)</tt>, but does not indicate a group</p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?P<<tt><em>id</em></tt>>...)</pre> </td> <td class="docTableCell"> <p class="docText">Like <tt>(...)</tt>, but the group also gets the name <tt><em>id</em></tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?P=<tt><em>id</em></tt>)</pre> </td> <td class="docTableCell"> <p class="docText">Matches whatever was previously matched by group named <tt><em>id</em></tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?#...)</pre> </td> <td class="docTableCell"> <p class="docText">Content of parentheses is just a comment; no effect on match</p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?=...)</pre> </td> <td class="docTableCell"> <p class="docText">Lookahead assertion; matches if regular expression <tt>..</tt>. matches what comes next, but does not consume any part of the string</p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?!...)</pre> </td> <td class="docTableCell"> <p class="docText">Negative lookahead assertion; matches if regular expression <tt>..</tt>. does not match what comes next, and does not consume any part of the string</p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?<=...)</pre> </td> <td class="docTableCell"> <p class="docText">Lookbehind assertion; matches if there is a match for regular expression <tt>..</tt>. ending at the current position (<tt>..</tt>. must match a fixed length)</p> </td> </tr> <tr> <td class="docTableCell"> <pre>(?<!...)</pre> </td> <td class="docTableCell"> <p class="docText">Negative lookbehind assertion; matches if there is no match for regular expression <tt>..</tt>. ending at the current position (<tt>..</tt>. must match a fixed length)</p> </td> </tr> <tr> <td class="docTableCell"> <pre>\<tt><em>number</em></tt></pre> </td> <td class="docTableCell"> <p class="docText">Matches whatever was previously matched by group numbered <tt><em>number</em></tt> (groups are automatically numbered from 1 up to 99)</p> </td> </tr> <tr> <td class="docTableCell"> <pre>\A</pre> </td> <td class="docTableCell"> <p class="docText">Matches an empty string, but only at the start of the whole string</p> </td> </tr> <tr> <td class="docTableCell"> <pre>\b</pre> </td> <td class="docTableCell"> <p class="docText">Matches an empty string, but only at the start or end of a word (a maximal sequence of alphanumeric characters; see also <tt>\w</tt>)</p> </td> </tr> <tr> <td class="docTableCell"> <pre>\B</pre> </td> <td class="docTableCell"> <p class="docText">Matches an empty string, but not at the start or end of a word</p> </td> </tr> <tr> <td class="docTableCell"> <p class="docText">\d</p> </td> <td class="docTableCell"> <p class="docText">Matches one digit, like the set <tt>[0-9]</tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>\D</pre> </td> <td class="docTableCell"> <p class="docText">Matches one non-digit, like the set <tt>[^0-9]</tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>\s</pre> </td> <td class="docTableCell"> <p class="docText">Matches a whitespace character, like the set <tt>[</tt> <tt>\t\n\r\f\v]</tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>\S</pre> </td> <td class="docTableCell"> <p class="docText">Matches a non-white character, like the set <tt>[^</tt> <tt>\t\n\r\f\v]</tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>\w</pre> </td> <td class="docTableCell"> <p class="docText">Matches one alphanumeric character; unless <tt>LOCALE</tt> or <tt>UNICODE</tt> is set, <tt>\w</tt> is like <tt>[a-zA-Z0-9_]</tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>\W</pre> </td> <td class="docTableCell"> <p class="docText">Matches one non-alphanumeric character, the reverse of <tt>\w</tt></p> </td> </tr> <tr> <td class="docTableCell"> <pre>\Z</pre> </td> <td class="docTableCell"> <p class="docText">Matches an empty string, but only at the end of the whole string</p> </td> </tr> <tr> <td class="docTableCell"> <pre>\\</pre> </td> <td class="docTableCell"> <p class="docText">Matches one backslash character</p> </td> </tr> </colgroup> </tbody> </table> <a name="pythonian-CHP-9-SECT-7.2"></a></p> <img src ="http://www.tkk7.com/fhtdy2004/aggbug/292232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fhtdy2004/" target="_blank">Frank_Fang</a> 2009-08-22 23:48 <a href="http://www.tkk7.com/fhtdy2004/archive/2009/08/22/292232.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Python瀛︿範絎旇涓http://www.tkk7.com/fhtdy2004/archive/2009/08/22/292168.htmlFrank_FangFrank_FangFri, 21 Aug 2009 16:02:00 GMThttp://www.tkk7.com/fhtdy2004/archive/2009/08/22/292168.htmlhttp://www.tkk7.com/fhtdy2004/comments/292168.htmlhttp://www.tkk7.com/fhtdy2004/archive/2009/08/22/292168.html#Feedback0http://www.tkk7.com/fhtdy2004/comments/commentRss/292168.htmlhttp://www.tkk7.com/fhtdy2004/services/trackbacks/292168.html鍙戠幇寰堝鍏徃瑕佹眰鎺屾彙涓闂ㄨ剼鏈璦錛屼竴鐩翠篃鎯蟲悶鎼炶繖涓紝鐪婥++錛孡inux C緙栫▼涔熷彧鏄負浜嗗緋葷粺鏇村姞鐨勪簡瑙o紝鍞夛紝鎴戠殑宸ヤ綔瀹氫綅濂藉儚涓鐩撮兘涓嶆庝箞鏄庣‘錛屾槸瑕佹悶涓嚜宸辨渶鎿呴暱鐨勪簡錛屼互鍚庢湁鏃墮棿鍐嶆悶linuxC錛屾壘宸ヤ綔絎竴浣嶃傘傘傚伐浣滃熀鏈畾浣嶅湪 Java+python錛屽ぇ閮ㄥ垎鍏徃涔熶笉浼氳姹備竴涓漢鏃㈠仛Java涔熷仛C++銆傚啀璇磋繖璇█涔熸槸澶у悓灝忓紓錛屽叧閿繕鏄紪紼嬫濇兂


d = {"server":"mpilgrim", "database":"master"}

li = ["a", "b", "mpilgrim", "z", "example"]


Tuple 鏄笉鍙彉鐨?list銆備竴鏃﹀垱寤轟簡涓涓?tuple錛屽氨涓嶈兘浠ヤ換浣曟柟寮忔敼鍙樺畠
 t = ("a", "b", "mpilgrim", "z", "example")


榪炴帴 list 涓庡垎鍓插瓧絎︿覆
>>> li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> s = ";".join(li)
>>> s
'server=mpilgrim;uid=sa;database=master;pwd=secret'
>>> s.split(";")   
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> s.split(";", 1)
['server=mpilgrim', 'uid=sa;database=master;pwd=secret']

 


浣跨敤 type銆乻tr銆乨ir 鍜屽叾瀹冨唴緗嚱鏁?/p>

4.3.2. str 鍑芥暟
str 灝嗘暟鎹己鍒惰漿鎹負瀛楃涓層傛瘡縐嶆暟鎹被鍨嬮兘鍙互寮哄埗杞崲涓哄瓧絎︿覆銆?

渚?4.6. str 浠嬬粛
>>> str(1)         
'1'
>>> horsemen = ['war', 'pestilence', 'famine']
>>> horsemen
['war', 'pestilence', 'famine']
>>> horsemen.append('Powerbuilder')
>>> str(horsemen)  
"['war', 'pestilence', 'famine', 'Powerbuilder']"
>>> str(odbchelper)
"<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>"
>>> str(None)      
'None'  瀵逛簬綆鍗曠殑鏁版嵁綾誨瀷姣斿鏁村瀷錛屼綘鍙互棰勬枡鍒?str 鐨勬甯稿伐浣滐紝鍥犱負鍑犱箮姣忕璇█閮芥湁涓涓?/p>

灝嗘暣鍨嬭漿鍖栦負瀛楃涓茬殑鍑芥暟銆?nbsp;
  鐒惰?str 鍙互浣滅敤浜庝換浣曟暟鎹被鍨嬬殑浠諱綍瀵硅薄銆傝繖閲屽畠浣滅敤浜庝竴涓浂紕庢瀯寤虹殑鍒楄〃銆?nbsp;
  str 榪樺厑璁鎬綔鐢ㄤ簬妯″潡銆傛敞鎰忔ā鍧楃殑瀛楃涓插艦寮忚〃紺哄寘鍚簡妯″潡鍦ㄧ鐩樹笂鐨勮礬寰勫悕錛屾墍浠ヤ綘鐨勬樉紺?/p>

緇撴灉灝嗕細鏈夋墍涓嶅悓銆?nbsp;
  str 鐨勪竴涓粏灝忎絾閲嶈鐨勮涓烘槸瀹冨彲浠ヤ綔鐢ㄤ簬 None錛孨one 鏄?Python 鐨?null 鍊箋傝繖涓皟鐢ㄨ繑鍥炲瓧絎?/p>

涓?'None'銆備綘灝嗕細浣跨敤榪欎竴鐐規潵鏀硅繘浣犵殑 info 鍑芥暟錛岃繖涓鐐逛綘寰堝揩灝變細鐪嬪埌銆?nbsp;


dir 鍑芥暟榪斿洖浠繪剰瀵硅薄鐨勫睘鎬у拰鏂規硶鍒楄〃錛屽寘鎷ā鍧楀璞°佸嚱鏁板璞°佸瓧絎︿覆瀵硅薄銆佸垪琛ㄥ璞°佸瓧

鍏稿璞?…… 鐩稿綋澶氱殑涓滆タ銆?

渚?4.7. dir 浠嬬粛
>>> li = []
>>> dir(li)          
['append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']
>>> d = {}
>>> dir(d)           
['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values']
>>> import odbchelper
>>> dir(odbchelper)  
['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']

 

鏈鍚庢槸 callable 鍑芥暟錛屽畠鎺ユ敹浠諱綍瀵硅薄浣滀負鍙傛暟錛屽鏋滃弬鏁板璞℃槸鍙皟鐢ㄧ殑錛岃繑鍥?True錛涘惁鍒欒繑鍥?

False銆傚彲璋冪敤瀵硅薄鍖呮嫭鍑芥暟銆佺被鏂規硶錛岀敋鑷崇被鑷韓 (涓嬩竴绔犲皢鏇村鐨勫叧娉ㄧ被)銆?

渚?4.8. callable 浠嬬粛
>>> import string
>>> string.punctuation          
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> string.join                 
<function join at 00C55A7C>
>>> callable(string.punctuation)
False
>>> callable(string.join)       
True


浣犲凡緇忕煡閬?Python 鍑芥暟鏄璞°備綘涓嶇煡閬撶殑鏄紝浣跨敤 getattr 鍑芥暟錛屽彲浠ュ緱鍒頒竴涓洿鍒拌繍琛屾椂鎵嶇煡

閬撳悕縐扮殑鍑芥暟鐨勫紩鐢ㄣ?

渚?4.10. getattr 浠嬬粛
>>> li = ["Larry", "Curly"]
>>> li.pop                      
<built-in method pop of list object at 010DF884>
>>> getattr(li, "pop")          
<built-in method pop of list object at 010DF884>
>>> getattr(li, "append")("Moe")
>>> li
["Larry", "Curly", "Moe"]
>>> getattr({}, "clear")        
<built-in method clear of dictionary object at 00F113D4>
>>> getattr((), "pop")          
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'pop'

 

4.4.1. 鐢ㄤ簬妯″潡鐨?getattr
getattr 涓嶄粎浠呴傜敤浜庡唴緗暟鎹被鍨嬶紝涔熷彲浣滅敤浜庢ā鍧椼?

渚?4.11. apihelper.py 涓殑 getattr 鍑芥暟
>>> import odbchelper
>>> odbchelper.buildConnectionString            
<function buildConnectionString at 00D18DD4>
>>> getattr(odbchelper, "buildConnectionString")
<function buildConnectionString at 00D18DD4>
>>> object = odbchelper
>>> method = "buildConnectionString"
>>> getattr(object, method)                     
<function buildConnectionString at 00D18DD4>
>>> type(getattr(object, method))               
<type 'function'>
>>> import types
>>> type(getattr(object, method)) == types.FunctionType
True
>>> callable(getattr(object, method))           
True


浣跨敤 getattr錛屼綘鑳藉鑾峰緱鍚屼竴鍑芥暟鐨勫悓涓寮曠敤銆傞氬父錛実etattr(object, "attribute") 絳変環浜?

object.attribute銆傚鏋?object 鏄竴涓ā鍧楃殑璇濓紝閭d箞 attribute 鍙兘鏄畾涔夊湪妯″潡涓殑浠諱綍涓滆タ錛氬嚱鏁?/p>

銆佺被鎴栬呭叏灞鍙橀噺銆?/p>


灝辨槸鐩稿綋浜庡嚱鏁扮殑鎸囬拡
渚?4.12. 浣跨敤getattr 鍒涘緩鍒嗗彂鑰?

import statsout

def output(data, format="text"):                             
    output_function = getattr(statsout, "output_%s" % format)
    return output_function(data)                             
  output 鍑芥暟鎺ユ敹涓涓繀澶囧弬鏁?data錛屽拰涓涓彲閫夊弬鏁?format銆傚鏋滄病鏈夋寚瀹?format 鍙傛暟錛屽叾緙虹渷

鍊兼槸 text 騫跺畬鎴愭櫘閫氭枃鏈緭鍑哄嚱鏁扮殑璋冪敤銆?nbsp;
  浣犲彲浠ヨ繛鎺?format 鍙傛暟鍊煎拰 "output_" 鏉ュ垱寤轟竴涓嚱鏁板悕縐頒綔涓哄弬鏁板鹼紝鐒跺悗浠?statsout 妯″潡涓彇

寰楄鍑芥暟銆傝繖縐嶆柟寮忓厑璁鎬粖鍚庡緢瀹規槗鍦版墿灞曠▼搴忎互鏀寔鍏跺畠鐨勮緭鍑烘牸寮忥紝鑰屼笖鏃犻渶淇敼鍒嗗彂鍑芥暟銆?/p>

鎵瑕佸仛鐨勪粎浠呮槸鍚?statsout 涓坊鍔犱竴涓嚱鏁幫紝姣斿 output_pdf錛屼箣鍚庡彧瑕佸皢 “pdf” 浣滀負 format 鐨勫弬

鏁板間紶閫掔粰 output 鍑芥暟鍗沖彲銆?nbsp;
  鐜板湪浣犲彲浠ョ畝鍗曞湴璋冪敤杈撳嚭鍑芥暟錛屽氨鍍忚皟鐢ㄥ叾瀹冨嚱鏁頒竴鏍楓俹utput_function 鍙橀噺鏄寚鍚?statsout 妯?/p>

鍧椾腑鐩稿簲鍑芥暟鐨勫紩鐢ㄣ?nbsp;

浣犳槸鍚﹀彂鐜板墠闈㈢ず渚嬬殑涓涓?Bug錛熷嵆瀛楃涓插拰鍑芥暟涔嬮棿鐨勬澗鑰﹀悎錛岃屼笖娌℃湁閿欒媯鏌ャ傚鏋滅敤鎴蜂紶

鍏ヤ竴涓牸寮忓弬鏁幫紝浣嗘槸鍦?statsout 涓病鏈夊畾涔夌浉搴旂殑鏍煎紡杈撳嚭鍑芥暟錛屼細鍙戠敓浠涔堝憿錛熻繕濂斤紝getattr

浼氳繑鍥?None錛屽畠浼氬彇浠d竴涓湁鏁堝嚱鏁板茍琚祴鍊肩粰 output_function錛岀劧鍚庝笅涓琛岃皟鐢ㄥ嚱鏁扮殑璇彞灝嗕細

澶辮觸騫舵姏鍑轟竴涓紓甯搞傝繖縐嶆柟寮忎笉濂姐?

鍊煎緱搴嗗垢鐨勬槸錛実etattr 鑳藉浣跨敤鍙夌殑絎笁涓弬鏁幫紝涓涓己鐪佽繑鍥炲箋?/p>

 

[mapping-expression for element in source-list if filter-expression]

>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
>>> [elem for elem in li if len(elem) > 1]      
['mpilgrim', 'foo']
>>> [elem for elem in li if elem != "b"]        
['a', 'mpilgrim', 'foo', 'c', 'd', 'd']
>>> [elem for elem in li if li.count(elem) == 1]
['a', 'mpilgrim', 'foo', 'c']


浣跨敤 and 鏃訛紝鍦ㄥ竷灝旂幆澧冧腑浠庡乏鍒板彸婕旂畻琛ㄨ揪寮忕殑鍊箋?銆?'銆乕]銆?)銆亄}銆丯one 鍦ㄥ竷灝旂幆澧冧腑涓哄亣錛?/p>

鍏跺畠浠諱綍涓滆タ閮戒負鐪熴傝繕濂斤紝鍑犱箮鏄墍鏈変笢瑗褲傞粯璁ゆ儏鍐典笅錛屽竷灝旂幆澧冧腑鐨勭被瀹炰緥涓虹湡錛屼絾鏄綘鍙?/p>

浠ュ湪綾諱腑瀹氫箟鐗瑰畾鐨勬柟娉曚嬌寰楃被瀹炰緥鐨勬紨綆楀間負鍋囥?/p>


4.6.1. 浣跨敤 and-or 鎶宸?
渚?4.17. and-or 鎶宸т粙緇?
>>> a = "first"
>>> b = "second"
>>> 1 and a or b
'first'
>>> 0 and a or b
'second'
  榪欎釜璇硶鐪嬭搗鏉ョ被浼間簬 C 璇█涓殑 bool ? a : b 琛ㄨ揪寮忋傛暣涓〃杈懼紡浠庡乏鍒板彸榪涜婕旂畻錛屾墍浠ュ厛榪?/p>

琛?and 琛ㄨ揪寮忕殑婕旂畻銆? and 'first' 婕旂畻鍊間負 'first'錛岀劧鍚?'first' or 'second' 鐨勬紨綆楀間負 'first'銆?nbsp;
  0 and 'first' 婕旂畻鍊間負 False錛岀劧鍚?0 or 'second' 婕旂畻鍊間負 'second'銆?nbsp;

鐒惰岋紝鐢變簬榪欑 Python 琛ㄨ揪寮忓崟鍗曞彧鏄繘琛屽竷灝旈昏緫榪愮畻錛屽茍涓嶆槸璇█鐨勭壒瀹氭瀯鎴愶紝榪欐槸 and-or

鎶宸у拰 C 璇█涓殑 bool ? a : b 璇硶闈炲父閲嶈鐨勪笉鍚屻傚鏋?a 涓哄亣錛岃〃杈懼紡灝變笉浼氭寜浣犳湡鏈涚殑閭f牱

宸ヤ綔浜嗐?浣犺兘鐭ラ亾鎴戣榪欎釜闂鎶樿吘榪囧悧錛熶笉姝竴嬈★紵)

 

 

 


Python 鏀寔涓縐嶆湁瓚g殑璇硶錛屽畠鍏佽浣犲揩閫熷畾涔夊崟琛岀殑鏈灝忓嚱鏁般傝繖浜涘彨鍋?lambda 鐨勫嚱鏁幫紝鏄粠

Lisp 鍊熺敤鏉ョ殑錛屽彲浠ョ敤鍦ㄤ換浣曢渶瑕佸嚱鏁扮殑鍦版柟銆?br /> 渚?4.20. lambda 鍑芥暟浠嬬粛
>>> def f(x):
...     return x*2
...    
>>> f(3)
6
>>> g = lambda x: x*2 
>>> g(3)
6
>>> (lambda x: x*2)(3)
6

鎬葷殑鏉ヨ錛宭ambda 鍑芥暟鍙互鎺ユ敹浠繪剰澶氫釜鍙傛暟 (鍖呮嫭鍙夊弬鏁? 騫朵笖榪斿洖鍗曚釜琛ㄨ揪寮忕殑鍊箋俵ambda

鍑芥暟涓嶈兘鍖呭惈鍛戒護錛屽寘鍚殑琛ㄨ揪寮忎笉鑳借秴榪囦竴涓備笉瑕佽瘯鍥懼悜 lambda 鍑芥暟涓鍏ュお澶氱殑涓滆タ錛涘

鏋滀綘闇瑕佹洿澶嶆潅鐨勪笢瑗匡紝搴旇瀹氫箟涓涓櫘閫氬嚱鏁幫紝鐒跺悗鎯寵瀹冨闀垮氨澶氶暱銆?

 


渚?4.25. 鎵撳嵃鍒楄〃
>>> li = ['a', 'b', 'c']
>>> print "\n".join(li)
a
b
c  鍦ㄤ綘澶勭悊鍒楄〃鏃訛紝榪欑‘瀹炴槸涓涓湁鐢ㄧ殑璋冭瘯鎶宸с傚湪 Python 涓紝浣犱細鍗佸垎棰戠箒鍦版搷浣滃垪琛ㄣ?nbsp;

 

鍦?2.2.1 鐗堟湰涔嬪墠錛孭ython 娌℃湁鍗曠嫭鐨勫竷灝旀暟鎹被鍨嬨備負浜嗗譏琛ヨ繖涓己闄鳳紝Python 鍦ㄥ竷灝旂幆澧?(濡?if

璇彞) 涓嚑涔庢帴鍙楁墍鏈変笢瑗匡紝閬靛驚涓嬮潰鐨勮鍒欙細
0 涓?false; 鍏跺畠鎵鏈夋暟鍊肩殕涓?true銆?
絀轟覆 ("") 涓?false; 鍏跺畠鎵鏈夊瓧絎︿覆鐨嗕負 true銆?
絀?list ([]) 涓?false; 鍏跺畠鎵鏈?list 鐨嗕負 true銆?
絀?tuple (()) 涓?false; 鍏跺畠鎵鏈?tuple 鐨嗕負 true銆?
絀?dictionary ({}) 涓?false; 鍏跺畠鎵鏈?dictionary 鐨嗕負 true銆?

 


涓嬮潰鏄?from module import 鐨勫熀鏈娉曪細


from UserDict import UserDict
瀹冧笌浣犳墍鐔熺煡鐨?import module 璇硶寰堢浉浼鹼紝浣嗘槸鏈変竴涓噸瑕佺殑鍖哄埆錛歎serDict 琚洿鎺ュ鍏ュ埌灞閮?/p>

鍚嶅瓧絀洪棿鍘諱簡錛屾墍浠ュ畠鍙互鐩存帴浣跨敤錛岃屼笉闇瑕佸姞涓婃ā鍧楀悕鐨勯檺瀹氥備綘鍙互瀵煎叆鐙珛鐨勯」鎴栦嬌鐢?

from module import * 鏉ュ鍏ユ墍鏈変笢瑗褲?

Python 涓殑 from module import * 鍍?Java 涓殑 import module.* 錛汸ython 涓殑 import module 鍍?Java

涓殑 import module

浠涔堟椂鍊欎綘搴旇浣跨敤 from module import錛?

濡傛灉浣犺緇忓父璁塊棶妯″潡鐨勫睘鎬у拰鏂規硶錛屼笖涓嶆兂涓閬嶅張涓閬嶅湴鏁插叆妯″潡鍚嶏紝浣跨敤 from module import

銆?
濡傛灉浣犳兂瑕佹湁閫夋嫨鍦板鍏ユ煇浜涘睘鎬у拰鏂規硶錛岃屼笉鎯寵鍏跺畠鐨勶紝浣跨敤 from module import銆?
濡傛灉妯″潡鍖呭惈鐨勫睘鎬у拰鏂規硶涓庝綘鐨勬煇涓ā鍧楀悓鍚嶏紝浣犲繀欏諱嬌鐢?import module 鏉ラ伩鍏嶅悕瀛楀啿紿併?/p>

灝介噺灝戠敤 from module import * 錛屽洜涓哄垽瀹氫竴涓壒孌婄殑鍑芥暟鎴栧睘鎬ф槸浠庡摢鏉ョ殑鏈変簺鍥伴毦錛屽茍涓斾細閫?/p>

鎴愯皟璇曞拰閲嶆瀯閮芥洿鍥伴毦銆?/p>


from UserDict import UserDict

class FileInfo(UserDict):
鍦?Python 涓紝綾葷殑鍩虹被鍙槸綆鍗曞湴鍒楀湪綾誨悕鍚庨潰鐨勫皬鎷彿閲屻備笉鍍忓湪 Java 涓湁涓涓壒孌婄殑

extends 鍏抽敭瀛椼?nbsp;

Python 鏀寔澶氶噸緇ф壙銆傚湪綾誨悕鍚庨潰鐨勫皬鎷彿涓紝浣犲彲浠ュ垪鍑鴻澶氫綘鎯寵鐨勭被鍚嶏紝浠ラ楀彿鍒嗛殧銆?


class FileInfo(UserDict):
    "store file metadata"
    def __init__(self, filename=None):
        UserDict.__init__(self)       
        self["name"] = filename       
                                         涓浜涗吉闈㈠悜瀵硅薄璇█錛屽儚 Powerbuilder 鏈変竴縐?#8220;鎵╁睍”鏋勯犲嚱鏁板拰鍏跺畠浜嬩歡鐨?/p>

姒傚康錛屽嵆鐖剁被鐨勬柟娉曞湪瀛愮被鐨勬柟娉曟墽琛屽墠琚嚜鍔ㄨ皟鐢ㄣ侾ython 涓嶆槸榪欐牱錛屼綘蹇呴』鏄劇ず鍦拌皟鐢ㄥ湪鐖剁被涓殑鍚堥傛柟娉曘?nbsp;
  鎴戝憡璇夎繃浣狅紝榪欎釜綾誨儚瀛楀吀涓鏍峰伐浣滐紝閭d箞榪欓噷灝辨槸絎竴涓嵃璞°傛垜浠皢鍙傛暟 filename 璧嬪肩粰瀵硅薄 name 鍏抽敭瀛楋紝浣滀負瀹冪殑鍊箋?nbsp; 娉ㄦ剰 __init__ 鏂規硶浠庝笉榪斿洖涓涓箋?nbsp;

Java涓槸鑷姩璋冪敤榛樿鐨勬棤鍙傜殑鐖剁被鐨勬瀯閫犲嚱鏁?/p>

 


渚?5.9. 瀹氫箟 UserDict 綾?

class UserDict:                               
    def __init__(self, dict=None):             
        self.data = {}  ×××××××××××××××××××××××××××××××××××瀹氫箟綾葷殑瀹炰緥鍙橀噺                         
        if dict is not None: self.update(dict) 
  娉ㄦ剰 UserDict 鏄竴涓熀綾伙紝涓嶆槸浠庝換浣曞叾浠栫被緇ф壙鑰屾潵銆?nbsp;
  榪欏氨鏄垜浠湪 FileInfo 綾諱腑榪涜浜嗚鐩栫殑 __init__ 鏂規硶銆傛敞鎰忚繖涓埗綾葷殑鍙傛暟鍒楄〃涓庡瓙綾諱笉鍚屻傚緢

濂斤紝姣忎釜瀛愮被鍙互鎷ユ湁鑷凡鐨勫弬鏁伴泦錛屽彧瑕佷嬌鐢ㄦ紜殑鍙傛暟璋冪敤鐖剁被灝卞彲浠ヤ簡銆傝繖閲岀埗綾繪湁涓涓畾

涔夊垵濮嬪肩殑鏂規硶 (閫氳繃鍦?dict 鍙傛暟涓紶鍏ヤ竴涓瓧鍏?錛岃繖涓鏂規硶鎴戜滑鐨?FileInfo 娌℃湁鐢ㄤ笂銆?br />


××××××××××××××××××××××××××××××××涓嶫ava鐨勪笉鍚?#215;××××××××××××××××××××××××××××××××××
涓嶫ava鐨勪笉鍚岋紝
1錛孭ython涓被鐨勭被灞炴ф槸鏄湪綾葷殑鍚庨潰鐩存帴瀹氫箟鐨?br /> 2錛岃屽疄渚嬪彉閲忔槸鍦ㄥ湪__init__鏂規硶涓洿鎺ュ畾涔夌殑浣跨敤濡備笅鏂瑰紡self.instancevariable=***瀹氫箟,
3錛岀劧鍚嶱ython涓疄渚嬫柟娉曢兘瑕佹樉紺虹殑鍔犱笂self錛堢浉褰撲簬Java鐨則his)鍙傛暟錛屾柟娉曚腑寮曠敤瀹炰緥鍙?span style="color: red">閲忔椂涔熻閫氳繃self鏉ュ紩鐢?/span>

Python 鏀寔鏁版嵁灞炴?(鍦?Java 鍙仛 “瀹炰緥鍙橀噺”錛屽湪 C++ 涓彨 “鏁版嵁鎴愬憳”)錛屽畠鏄敱鏌愪釜鐗瑰畾鐨勭被瀹?/p>

渚嬫墍鎷ユ湁鐨勬暟鎹傚湪鏈緥涓紝姣忎釜 UserDict 瀹炰緥灝嗘嫢鏈変竴涓?data 鏁版嵁灞炴с傝浠庣被澶栫殑浠g爜寮曠敤

榪欎釜灞炴э紝闇瑕佺敤瀹炰緥鐨勫悕瀛楅檺瀹氬畠錛宨nstance.data錛岄檺瀹氱殑鏂規硶涓庝綘鐢ㄦā鍧楃殑鍚嶅瓧鏉ラ檺瀹氬嚱鏁頒竴

鏍楓傝鍦ㄧ被鐨勫唴閮ㄥ紩鐢ㄤ竴涓暟鎹睘鎬э紝鎴戜滑浣跨敤 self 浣滀負闄愬畾絎︺備範鎯笂錛屾墍鏈夌殑鏁版嵁灞炴ч兘鍦?

__init__ 鏂規硶涓垵濮嬪寲涓烘湁鎰忎箟鐨勫箋傜劧鑰岋紝榪欏茍涓嶆槸蹇呴』鐨勶紝鍥犱負鏁版嵁灞炴э紝鍍忓眬閮ㄥ彉閲忎竴鏍鳳紝

褰撲綘棣栨璧嬬粰瀹冨肩殑鏃跺欑獊鐒朵駭鐢熴?nbsp;
×××××××××××××××××××××××××××××××××涓嶫ava鐨勪笉鍚?#215;×××××××××××××××××××××××××××××××××

Java 鏀寔閫氳繃鍙傛暟鍒楄〃鐨勯噸杞斤紝涔熷氨鏄?涓涓被鍙互鏈夊悓鍚嶇殑澶氫釜鏂規硶錛屼絾榪欎簺鏂規硶鎴栬呮槸鍙傛暟涓?/p>

鏁頒笉鍚岋紝鎴栬呮槸鍙傛暟鐨勭被鍨嬩笉鍚屻?br /> Python 涓ょ閮戒笉鏀寔錛屾諱箣鏄病鏈変換浣曞艦寮忕殑鍑芥暟閲嶈澆銆備竴涓?__init__ 鏂規硶灝辨槸涓涓?__init__ 鏂規硶

錛屼笉綆″畠鏈変粈涔堟牱鐨勫弬鏁般傛瘡涓被鍙兘鏈変竴涓?__init__ 鏂規硶錛屽茍涓斿鏋滀竴涓瓙綾繪嫢鏈変竴涓?__init__

鏂規硶錛屽畠鎬繪槸 瑕嗙洊鐖剁被鐨?__init__ 鏂規硶錛岀敋鑷沖瓙綾誨彲浠ョ敤涓嶅悓鐨勫弬鏁板垪琛ㄦ潵瀹氫箟瀹冦?

鎯蟲兂涓轟粈涔堜笉鏀寔鏂規硶閲嶈澆錛屾槸鍥犱負Python鐨勫弬鏁板彲浠ュ畾涔夐粯璁ゅ疄鍙傦紝鏈夌己鐪佸?/strong>
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
搴旇鎬繪槸鍦?__init__ 鏂規硶涓粰涓涓疄渚嬬殑鎵鏈夋暟鎹睘鎬ц祴浜堜竴涓垵濮嬪箋傝繖鏍峰仛灝嗕細鑺傜渷浣犲湪鍚庨潰

璋冭瘯鐨勬椂闂達紝涓嶅繀涓烘崟鎹夊洜浣跨敤鏈垵濮嬪寲 (涔熷氨鏄笉瀛樺湪) 鐨勫睘鎬ц屽鑷寸殑 AttributeError 寮傚父璐規椂璐?/p>

鍔涖?
class MP3FileInfo(FileInfo):
mp3file.__class__  is fileinfo.MP3FileInfo true
mp3file.__class__  is fileinfo.FileInfo         false
isinstance(mp3file,fileinfo.MP3FileInfo)  true
isinstance(mp3file,fileinfo.FileInfo)          true

li=[1,2,3]
li2[1,2,3]
li==li2 true   鐩稿綋浜嶫ava鐨別quals()
li is li2 false 鐩稿綋浜嶫ava鐨?=


5.7. 楂樼駭涓撶敤綾繪柟娉?
闄や簡 __getitem__ 鍜?__setitem__ 涔嬪 Python 榪樻湁鏇村鐨勪笓鐢ㄥ嚱鏁般傛煇浜涘彲浠ヨ浣犳ā鎷熷嚭浣犵敋鑷沖彲

鑳戒笉鐭ラ亾鐨勫姛鑳姐?

涓嬮潰鐨勪緥瀛愬皢灞曠ず UserDict 涓浜涘叾浠栦笓鐢ㄦ柟娉曘?

渚?5.16. UserDict 涓洿澶氱殑涓撶敤鏂規硶
    def __repr__(self): return repr(self.data)    
    def __cmp__(self, dict):                      
        if isinstance(dict, UserDict):           
            return cmp(self.data, dict.data)     
        else:                                    
            return cmp(self.data, dict)          
    def __len__(self): return len(self.data)      
    def __delitem__(self, key): del self.data[key]   __repr__ 鏄竴涓笓鐢ㄧ殑鏂規硶錛屽湪褰撹皟鐢?repr

(instance) 鏃惰璋冪敤銆俽epr 鍑芥暟鏄竴涓唴緗嚱鏁幫紝瀹冭繑鍥炰竴涓璞$殑瀛楃涓茶〃紺恒傚畠鍙互鐢ㄥ湪浠諱綍

瀵硅薄涓婏紝涓嶄粎浠呮槸綾葷殑瀹炰緥銆備綘宸茬粡瀵?repr 鐩稿綋鐔熸倝浜嗭紝灝界浣犱笉鐭ラ亾瀹冦傚湪浜や簰寮忕獥鍙d腑錛屽綋浣?/p>

鍙暡鍏ヤ竴涓彉閲忓悕錛屾帴鐫鎸塃NTER錛孭ython 浣跨敤 repr 鏉ユ樉紺哄彉閲忕殑鍊箋傝嚜宸茬敤涓浜涙暟鎹潵鍒涘緩涓

涓瓧鍏?d 錛岀劧鍚庣敤 print repr(d) 鏉ョ湅涓鐪嬪惂銆?nbsp;
  __cmp__ 鍦ㄦ瘮杈冪被瀹炰緥鏃惰璋冪敤銆傞氬父錛屼綘鍙互閫氳繃浣跨敤 == 姣旇緝浠繪剰涓や釜 Python 瀵硅薄錛屼笉鍙槸

綾誨疄渚嬨傛湁涓浜涜鍒欙紝瀹氫箟浜嗕綍鏃跺唴緗暟鎹被鍨嬭璁や負鏄浉絳夌殑錛屼緥濡傦紝瀛楀吀鍦ㄦ湁鐫鍏ㄩ儴鐩稿悓鐨勫叧

閿瓧鍜屽兼椂鏄浉絳夌殑銆傚浜庣被瀹炰緥錛屼綘鍙互瀹氫箟 __cmp__ 鏂規硶錛岃嚜宸茬紪鍐欐瘮杈冮昏緫錛岀劧鍚庝綘鍙互

浣跨敤 == 鏉ユ瘮杈冧綘鐨勭被錛孭ython 灝嗕細鏇夸綘璋冪敤浣犵殑 __cmp__ 涓撶敤鏂規硶銆?nbsp;
  __len__ 鍦ㄨ皟鐢?len(instance) 鏃惰璋冪敤銆俵en 鏄竴涓唴緗嚱鏁幫紝鍙互榪斿洖涓涓璞$殑闀垮害銆傚畠鍙互

鐢ㄤ簬浠諱綍琚涓虹悊搴旀湁闀垮害鐨勫璞°傚瓧絎︿覆鐨?len 鏄畠鐨勫瓧絎︿釜鏁幫紱瀛楀吀鐨?len 鏄畠鐨勫叧閿瓧鐨勪釜

鏁幫紱鍒楄〃鎴栧簭鍒楃殑 len 鏄厓绱犵殑涓暟銆傚浜庣被瀹炰緥錛屽畾涔?__len__ 鏂規硶錛屾帴鐫鑷凡緙栧啓闀垮害鐨勮綆?/p>

錛岀劧鍚庤皟鐢?len(instance)錛孭ython 灝嗘浛浣犺皟鐢ㄤ綘鐨?__len__ 涓撶敤鏂規硶銆?nbsp;
  __delitem__ 鍦ㄨ皟鐢?del instance[key] 鏃惰皟鐢?錛屼綘鍙兘璁板緱瀹冧綔涓轟粠瀛楀吀涓垹闄ゅ崟涓厓绱犵殑鏂規硶銆?/p>

褰撲綘鍦ㄧ被瀹炰緥涓嬌鐢?del 鏃訛紝Python 鏇夸綘璋冪敤 __delitem__ 涓撶敤鏂規硶銆?nbsp;

 
鍦?Java 涓紝閫氳繃浣跨敤 str1 == str2 鍙互紜畾涓や釜瀛楃涓插彉閲忔槸鍚︽寚鍚戝悓涓鍧楃墿鐞嗗唴瀛樹綅緗傝繖鍙仛

瀵硅薄鍚屼竴鎬э紝鍦?Python 涓啓涓?str1 is str2銆傚湪 Java 涓姣旇緝涓や釜瀛楃涓插鹼紝浣犺浣跨敤 str1.equals

(str2)錛涘湪 Python 涓紝浣犺浣跨敤 str1 == str2銆傛煇浜?Java 紼嬪簭鍛橈紝浠栦滑宸茬粡琚暀鎺堝緱璁や負錛屾鏄洜涓?/p>

鍦?Java 涓?== 鏄氳繃鍚屼竴鎬ц屼笉鏄艱繘琛屾瘮杈冿紝鎵浠ヤ笘鐣屾墠浼氭洿緹庡ソ銆傝繖浜涗漢瑕佹帴鍙?Python 鐨勮繖

涓?#8220;涓ラ噸緙哄け”鍙兘瑕佽姳浜涙椂闂淬?nbsp;


ord("a") 97
ord("A") 65

 

5.8. 綾誨睘鎬т粙緇?
浣犲凡緇忕煡閬撲簡鏁版嵁灞炴э紝瀹冧滑鏄涓涓壒瀹氱殑綾誨疄渚嬫墍鎷ユ湁鐨勫彉閲忋侾ython 涔熸敮鎸佺被灞炴э紝瀹冧滑鏄?/p>

鐢辯被鏈韓鎵鎷ユ湁鐨勩?

渚?5.17. 綾誨睘鎬т粙緇?/p>

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)}


渚?5.18. 淇敼綾誨睘鎬?Java涓殑闈欐佸彉閲?br /> >>> class counter:
...     count = 0                    
...     def __init__(self):
...         self.__class__.count += 1 #涓瀹氬緱鐢╯elf.__class__鏉ュ紩鐢紝鎵嶆槸綾誨彉閲忥紝鍋囧鐢╯elf.count鍒欏畾涔夌殑鏄疄渚嬪彉閲?鎴栬呯敤
            Counter.count +=1
...    
涓婅堪浠g爜璁板綍鍒涘緩鐨勫璞$殑涓暟

 

5.9. 縐佹湁鍑芥暟
涓庡ぇ澶氭暟璇█涓鏍鳳紝Python 涔熸湁縐佹湁鐨勬蹇碉細

縐佹湁鍑芥暟涓嶅彲浠ヤ粠瀹冧滑鐨勬ā鍧楀闈㈣璋冪敤
縐佹湁綾繪柟娉曚笉鑳藉浠庡畠浠殑綾誨闈㈣璋冪敤
縐佹湁灞炴т笉鑳藉浠庡畠浠殑綾誨闈㈣璁塊棶
涓庡ぇ澶氭暟鐨勮璦涓嶅悓錛屼竴涓?Python 鍑芥暟錛屾柟娉曪紝鎴栧睘鎬ф槸縐佹湁榪樻槸鍏湁錛屽畬鍏ㄥ彇鍐充簬瀹冪殑鍚嶅瓧銆?

濡傛灉涓涓?Python 鍑芥暟錛岀被鏂規硶錛屾垨灞炴х殑鍚嶅瓧浠ヤ袱涓笅鍒掔嚎寮濮?(浣嗕笉鏄粨鏉?錛屽畠鏄鏈夌殑錛涘叾瀹?/p>

鎵鏈夌殑閮芥槸鍏湁鐨勩?Python 娌℃湁綾繪柟娉曚繚鎶?鐨勬蹇?(鍙兘鐢ㄤ簬瀹冧滑鑷凡鐨勭被鍜屽瓙綾諱腑)銆傜被鏂規硶鎴?/p>

鑰呮槸縐佹湁 (鍙兘鍦ㄥ畠浠嚜宸茬殑綾諱腑浣跨敤) 鎴栬呮槸鍏湁 (浠諱綍鍦版柟閮藉彲浣跨敤)銆?

鍦?MP3FileInfo 涓紝鏈変袱涓柟娉曪細__parse 鍜?__setitem__銆傛濡傛垜浠凡緇忚璁鴻繃鐨勶紝__setitem__

鏄竴涓笓鏈夋柟娉曪紱閫氬父錛屼綘涓嶇洿鎺ヨ皟鐢ㄥ畠錛岃屾槸閫氳繃鍦ㄤ竴涓被涓婁嬌鐢ㄥ瓧鍏歌娉曟潵璋冪敤錛屼絾瀹冩槸鍏湁

鐨勶紝騫朵笖濡傛灉鏈変竴涓湡姝eソ鐨勭悊鐢憋紝浣犲彲浠ョ洿鎺ヨ皟鐢ㄥ畠 (鐢氳嚦浠?fileinfo 妯″潡鐨勫闈?銆傜劧鑰岋紝

__parse 鏄鏈夌殑錛屽洜涓哄湪瀹冪殑鍚嶅瓧鍓嶉潰鏈変袱涓笅鍒掔嚎銆?

 
鍦?Python 涓紝鎵鏈夌殑涓撶敤鏂規硶 (鍍?__setitem__) 鍜屽唴緗睘鎬?(鍍?__doc__) 閬靛畧涓涓爣鍑嗙殑鍛藉悕涔犳儻

錛氬紑濮嬪拰緇撴潫閮芥湁涓や釜涓嬪垝綰褲備笉瑕佸浣犺嚜宸茬殑鏂規硶鍜屽睘鎬х敤榪欑鏂規硶鍛藉悕錛涘埌鏈鍚庯紝瀹冨彧浼氭妸浣?(鎴栧叾瀹冧漢) 鎼炰貢銆?

#!/usr/bin/env python
#
coding=utf-8
import os
import sys
from UserDict import UserDict

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

class FileInfo(UserDict):
    
"store file metadata"
    
def __init__(self,filename=None):
        UserDict.
__init__(self)
        
#will trigger the __setitem__ method,and this method be override in the sub class
        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 object for files of particular"
    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)[1in fileExtList]
    
def getFileInfoClass(filename,module=sys.modules[FileInfo.__module__]):
        
"get file into 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("G:\\test",[".mp3"]):
        
print "\n".join(["%s=%s" % (k,v) for (k,v) in info.items()])
        
print
        
        
    


]]>
主站蜘蛛池模板: 久久精品国产亚洲av麻豆色欲| 亚洲免费网站在线观看| 久久国产精品免费看| 亚洲国产午夜精品理论片 | 成人免费视频69| 色噜噜的亚洲男人的天堂| 国产亚洲真人做受在线观看| 免费可以在线看A∨网站| 九九久久国产精品免费热6| 亚洲丝袜美腿视频| 免费国产在线观看| 亚洲一区免费视频| 成人嫩草影院免费观看| 亚洲精品国产第1页| 亚洲国产综合精品一区在线播放| 4399影视免费观看高清直播| 成人嫩草影院免费观看| 在线综合亚洲中文精品| 亚洲精品无码久久一线| 国产精品自在自线免费观看| 毛片无码免费无码播放| 一级A毛片免费观看久久精品| 91亚洲精品自在在线观看| 亚洲日本一区二区一本一道| 69堂人成无码免费视频果冻传媒| 国产精品免费久久久久电影网| 亚洲1234区乱码| 亚洲国产精品自在在线观看| jjzz亚洲亚洲女人| 卡一卡二卡三在线入口免费| 久久久免费的精品| a级毛片免费网站| 免费人成大片在线观看播放电影 | 色噜噜亚洲精品中文字幕| 毛片高清视频在线看免费观看| 免费观看成人久久网免费观看| 羞羞漫画小舞被黄漫免费| 国产精品亚洲一区二区麻豆| 亚洲妇女水蜜桃av网网站| 日本久久久久亚洲中字幕| 亚洲熟妇中文字幕五十中出|