Download as pdf
Download as pdf
You are on page 1of 99
Python Cookbook Recipes for Mastering Python 3 %| David Beazley & Brian K. Jones # Bala O'REILLY" Assam O’REILLY* Python Cookbook (3 3 hk) ASCH [3%] David Beazley BrianK.Jones # be Al ACR WH tk at ae Copyright © 2013 by O’Reilly Media.Inc. Simplified Chinese Edition, jointly published by O’Reilly Media, Inc, and Posts & Telecom Press, 2015, Authorized translation of the English edition, 2011 O'Reilly Media, Inc., the owner of all rights to publish and sell the same. All rights reserved including the rights of reproduction in whole or in part in any form. ABH BAF MA O'Reilly Media, Inc ALA RAG AA HA. ABMS AT, TSAR AYE AAT BB SD HALA EAT KS Hh RD BE MURATA, BAL. °F [98] David Beazley Brian K Jones ie we th Areal BEEN SR ERAE © APRS HE HE CHL A AGRA PAR IER LB Asi} 10016! FARE 315@p%press.comen Shi hnpswww ptpress.com.cn ee BURA RS EDA © FAL Tere1000 1116 Coes 43.95 pie 914 TH 2015 2 7198 1 A FHL. 1-0 000 HF 2015 %2 FEC 1 AI SRA BICS PAF: 01-2013-7656 5 sift: 00.00 76 SAARI. (010) 81055410 EDERAL: (010)81085316 LRP: (01081085315 AAs ANSP T Python HE TR He AT, Ha TBE AUIE, FFE, BS. AMATI TE), PEACRPAIME ALAS, SCrP AO, RRA ‘GubsH, RRL, AMR, TUE, BRAN, MMA Web 4iEL, Jf Ae, SEAIIAACEN ASEH, Wik, WRU, CRATES. ABB T Python UR PMS i UL, TE MRR. PA TK ARSE A Se PRLETS Alan BUS, F#7E Python 3.3 FRE PUES Tis, ATR AISA A PA. WS, ATM T MT Ral EY, Ath eRe TF. ASHE BIE ASAT Ee AME Python BUF RPE. O'Reilly Media, Inc. 328 O'Reilly Media Wi. Axi, CERI. AWTS rE TAA. 1978 4FIFRA, O'Reilly —HMENTIA REA LIES AEH. BARAT QUA, TREE EM A —§$ AA“ SRD TB HAMMAM. MERA RSS, O'Reilly MAE FI TAO PAS. BMRB IK. O'Reilly AAMT A SAL THEE “BME” 5 CUAL APMED (GN Ds fl SAT SRE IE BOB GWE Se, DEP PRE oh W BR JMU BA DIY Hert) Ae ESC RE ZS] — UE Le PT O’Reilly HY EIN AUG eS T ik BA AA SE AY SA, BF MT AREAL. TERA AE ijved#, O'Reilly BLADE FE RAN AU AT EIST UIP 6 FC AT, TERI RE, ak JH O'Reilly AIF ABEL T ZS re] AN HY BE BS rh AE Ae OT AY JI Ha MRE “O'Reilly Radar #34 2 ak.” —Wired “O'Reilly E18 —-AF) (ABS RLM T ) APA HLH” —Business 2.0 “O'Reilly Conference 2K HX BES, Ag Aah 4 28 At PIE.” —CRN “AK OReilly HPRRA-AA A. HAGE, GRE AHEM.” HATHKEDAA Irish Times “Tim REA SAMTM BA, (RAMIRT RRA, By MAE BL RR Yogi Berra #95£iL AK “oR ESS LBBB, NE (ONG) BLA Tim 4-8 KARE T ob8B, Fa LAT UK ARR ABP He KGL.” ‘Linux Journal ait He Fi 2008 4ELAHE, FRM AK TASS Python HL ALTE NE dF Python 3 ECM. STAR, FEE Python 3 ZARA AIT]. TSE, BETES YEAS ( 2013 4F ), KH Python BEF HMI IR EE EAE FPG PE Python 2, X&F Python 3 AGEN It HAIER AT EBA RAR. YA, DLT EES FFE AAT Ee ES PROBL MALL. (LE, WRAP AK, E52 BL Python 3 TP ATHE READ fii TEA Python 3 2 AHF ARI, ABLES TATRA LT AEE. GL FoR — a, BORE ARRAS Python 3 (45. RATATAT ABARID Python 3.3 3K TSE T Mik, BAT APE M) Python WARE “Esk” WS Sh. WL, UAHA PGE HIF Python 3.3 BAAR. AMT RET LB, HR At A Beate" —AS Python 3 YAR, RA ERE EEN AAU. Fear BAS HTLE SMTA Python 3 aS TATU, AERA BS OA AAS Pothon 3 3 FeinG BEE, VSS AUR 8S A 2 ha TPE TE BEAR BETES EYE F Python AGE, SY AUWLAETE ActiveState ft) Python MURERA Stack Overflow FEIT w PREV TA LOT RAR 0 (HS, ARBOR LBL AE HG AL APT PRL WR ILY 56 L ELMS Python 2 RSH, HDA $f Python Ale iRAS (HAN 2.3 1G 2.4 WR) AAD PE SEY AERTS AEETS 6 HES eee LYE FAIA, mi MCEE AUTEM T Python 3.3 YA REDIAES AB PETTERS Python 3 AY VEUR SS BEE, ARS FFAEIE SBE J Python 3 Fy iif BB EAS SEIT SS ma, AS 9 SEE A LE SAG AS ANE AR TT EE FR FRAT AE, RT BER EG HY Python BREAKS TE, AUICACBIS A ATES EDR EIHENY TPE ATA EUS AEH RUD RAES TUBA, AB EWES PI. FER PE IAL ET, PETA SE, IARI Hf Python FRAT. AUG, FRAT te EME PRE B Python HOT MAA, LA SAAB EZ FDP PF IRR LAE So ESN, AVE ORE BLE TE Python 3 RBM AV IIE, ROWER DOR BE LCREDA A: , BEAR RPP AB HE ELE ME Python 268 AUB BRO. FEAT PEPE ARSE CBU, aa RHR) Pee E BL, MAR See EME kD IR a LPR SE Bas SH BAA FE FERRARI TEI TTD, (HA RE BOB OE AlbR HET AEA ARTSY Abs eS EMS Python FAT HERRERA I UREA HRP. AISA BERR, HERA PRA LE . AB RR CAA SSA AE) LRA (PTR OLE E IAEA, Bc HB, MARKER suns TR, CURT aRPES ). ESD, ACS EIAYBR IEE FMR, SR aie BEA WY LAG, ELA EERE Ci 2 FRB P ASAT © PAC, FRAT IB Re ee ase Mf FR SS | SEV FEE Python TB. Ai BEE IMPS TE ORE eer MP BEL» MERE RT PE Python JCA TAR CUBE TAN ILA. UES ERA, WT Dees HS A HOA AREREBAE BEANE ARR #illlit Python Az HH CED, Poa ri ERGATA TPR). HR, AY AEM h FEEMLL, RA REN RIFE RS | FRE BAA SF ARR SEM LMHS PPB. ARB CHANLOE RR BABAR EA MET. SRAM. BRM RLA-ASSRESS AR, BRET AAPL SIPA [CESAR PLABET LAE http://github.com/dabeaz/python-cookbook [:483). HEAR EDA Cas BEE bug WIE, BOE IHG. 2 ae EARBRBE AHH ALY TREAT AE» ARTIS, PA AEE ASC PAS TBARS, WELL IA BEER TINT 2 (VK, UNREAL ECS MUA LEANBEAT TT OF UBM, ART LAE EAS IAT TF PF, CEREAL APIS MR. ME, RAAT Be O” Reilly A HP A ASS AE IU ite BE CH TE fl WERT. BSAA Pi CLAS, AERATOR AT. {EL FE, WRI SRS SA PAR CS, REST TMYE ET FES TASH PA Ua INS, ARAB AL AHMED AL. Mt oe FaBH. (EM LAM ISBN, fill: Python Cookbook, 3rd edtion, by David Beazley and Brain K.Jones(O’Reilly). Copyright 2013 David Beazley and Brain Jones, 978-1-449-34037-7.. EBERT, RANE ALA FE A, I PATA T , aP Jiiitt permissions@oreilly.com SHAJKA» RRA BIRR ATS Be 2 VF CBA CEI REIA] , CAIDA IH HL RE: O'Reilly Media Ine. 1005 Gravenstein Highway North Sebastopol, CA 95472 "pad: AC SCTHS PS ER PY PTAA 2 AREA ACI C HE 807 3 ( 100035 ) PRAIA GE IA (EC) ALA FEA NAA TT, FL TR AARON. RAT LA 3 EE http://oreil ly/python_cookbook_3e Kili) Wisi. KFA OLA ALL, HPAES; bookquestions@oreilly.com VD ERTS Chttp:/wwworcilly.com ), AEA RATING, PR, SBA Base B. Facebook: htt facebook.com/oreilly ‘Twitter: http://twitter.comv/oreillymedia YouTube: http://www.youtube.com/oreillymedia Bit SATE AH BAR AA, (HATTA Jake Vanderplas. Robert Kern LJ Andrea Crotti, UWA LINDE OT, te SERBS Python #£ 2X (SHEA Seb. BRAT) BURA THD 2 HRMS Alex Martelli, Anna Ravenscroft LJ David Ascher. JS EASSAUSS 3 PERT OI TE RY, HAZ TAIRA ABR T Bea A BANE MEN AUER, GRAMEEN, RMNERBAB IMAI, RIK WIA AS TS AY GLEBE ODP AEE David Beazley HU Bciit AAR TE. UC, BUR IRNIEET Paula SPILT, RAT HUMOUR SH. AS PHT SM AKA FRA 6 4 PA 3 Python #3 (UAL. Flt, 2&2 PASM T RORY REAM TIRES HER TAS fii tt. Beta SZ"R Ned Batchelder, Travis Oliphant, Peter Wang. Bra in Van de Ven, Hugo Shi, Raymond Hettinger, Michael Foord LL Daniel Klein, SYR BF, TAD BRT DAB ZEB NY a Pe RAS TS HS TE 8 O’Reilly ff] Meghan Blanchette L)& Rachel Roumeliotis, iF WET ATS OU HEL Bl, SPR T IRAE TCT BA ENA. eG ALI BEAR, BLEW Python FLDE ASABE, UA AA AAR AS ANAS PD LA David M.Beazley http://www.dabeaz.com https://twitter.com/dabeaz. Brain Jones RUBtiat He (tr #4 David Beazley LL O'Reilly ft) Meghan Blanchette #il Rachel Roumeliotis, Uf JARRE TAIGNE. FEL BERN RMF Natasha, 1h WRERS EAI FHT OAD, BEATRICE. BIT BEY Python HX. BARROS SFA A AE Se PTA, {ALG Python FEACA DIRT HI Ue AA BS AT EIT AL, BUSES EAT Brain K.Jones http:/Avww.protocolostomy.com https://twitter.com/bkjones B18 11 12 13, 14 1S 1.6 17 18 19 1.10 Ld 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 B26 21 2.2 2.3 2.4 2.5 2.6 27 28 2.9 2.10 Suet BA AEF USD We a PH IMERE ARSED PTI FORT SRP ID ATE: RiP aN ACH PRADA RMB HY N NCH TEP SU RHEE RAPA SP RARN HS TE FT SA IFS PB BRIE SAPP TC: INFIEP PETE HB PBN BI) FITC: FADE SE HS IE SRA AMERS ARF HEPAT BST SR FA HH ANH Shell SURFS eS OC SCAT UC RCA PSR PEAR A DIAS EKA EDT RT CAITR A EE 5 USER DC RY TE AIK Bi SATA EU IK 4 Unicode LAB — RA JIE MU AIATAL HE Unicode ADEN 211 ARES 2.12 SCAR LLUE ALTER 213 MIPSCARK 214 RP ERE MR A. 21S BF i 2.16 2.17 e3cAS rf bs HTML All XML 3 2.18 ASI 219 4 2.20 B3m MP. eae 3.1 RBA BET 3.2 BUT AML) Bit 3.3 RBA SCH Hitt 3.4 ii). J GEIL | 3.5 IAS PET AL AER 3.6 37 38 3.9 f 3.10 REPEATER PEAR BH 3.11 BOB LEEE 3.12 WAM 3.13 UES A 3.14 FR HIN BEE 3.15 HEAP PHN HI - 3.16 AEB Be SINS BE A) FJ lw B48 a BEANE ALS 4.1 42 # 43 44 45 46 4.7 REAR ARD HBE 4.8 BATAAN Shy 4.9 TERT AH HEALS: 2 BR 4.10 4.11 4.12 4.13 4.14 4.15 4.16 Bos SAL 5.2 5.3 5.4 5.5 5.6 5.7 58 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.7 5.18 5.19 5.20 5.21 BOR 6.1 6.2 6.3 6.4 6.5 6.6 6.7 ELAR “129 “131 “133 “134 137 “139 “140 “142 “142 “145 “145 “146 “149 “150 “1S “152 “153, “155 “157 158 “159 “161 “162 “164 166 167 “169 “ATL “172, “177 “177 “181 “186 “188 “192 “194 “196 VB S| -(AY B FUER ES TPS « TEAS ES AR UE AT IF ‘GE Ach HE A PP aE Ad PAG Se He BS SHE MAES, FEMA FSEACAS UK while (ff xP AD O~ He 3) ESCH FEU SEHR FEZ RESALE DA RN FEI 28 St Ae FT UFC ES Hy PRET FP SCP ES BRE ati 77 Zh YEP BRS ASAI FEATS IF LE CET SH CURE SCF AN Fads ORAS FPF Python XS SUBMIS 5 SSB “5 CSV Be 3 ISON Si ~ HEAT TTA XML SOR Da SCT AO XML et» HEF SHA XML heii. eS XM Ji tis 4 25 lel AT XML AR 3 6.8 6.9 6.10 6.11 6.12 6.13 BTR TA 72 73 74 1S 16 V7 78 19 7.10 TAL TAQ BBs 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8.11 8.12 8.13 8.14 8.15 8.16 8.17 “198, 201 FUR SUB EMEA T AEH. SAARI | SEE Base64 Seif Ail WES LUE BA i MAK HA FIBA (Yn PRS Be SABRC HB EIS MEL EA RUSBY He HEY OR PST CEE RBC HE ae YL i NTSB TY NI PRBOR RAAT 5 CELL BB A RAS PIB eA Ui TA 5 CAEL BR ie CEA UN BSCHE LFAE AS SU 1-26 A # A -251 VIS ATT ETRY BH OA FERIA. TR TET HEARN Gi eH A a FEM BIE SAA SOLA Bittle te ASL] init OIE “271 “281 “291 BR 8.18 8.19 8.20 8.21 8.22 8.23 8.24 8.25 BIS 91 9.2 4 9.3, 94 95 9.6 97 98 9.9 9.10 9.11 9.12 9.13 9.14 91S 9.16 9.17 9.18 9.19 9.20 9.21 9.22 9.23 9.24 9.25 510% 10.1 10.2 Ben aR EAT Ae RM PRLS BE KES ike tenteton FEL BEE AT. B Fi) ee aT PH BL +342 HB GFE PRR PEE UT gE MERE SE HEB BL TCAS de*args Fll**kwargs Jil ig FPS AEE TE BA FS BALE EO SETIED HT Python PEACH AR 5 10.3 10.4 FATE 2 BOR ALS FB FEES PTE 10.5 ike} A ae FURS TE SE fh cn 2 la) FRA 10.6 RTA 10.7 ik Aaa zip CE RON AY, “416 10.8 BEER AUP ASB CHF “417 10.9 YS) HACE! sys.path 418 LOL ARTES FE SE 1S BORE ABD “420 10.11 All import HF Medi H LAS LI 10.12 10.13 10.14 GJSENTAY Python 10.15 AE IAS. Buk 1.1 12 11.3 11.4 115 11.6 117 11.8 TERRE DUBS Wy ALFT Ab To AA CATH PUeh40 Web SRF DLA MERCI] HTTP ARIE TT. GNRE—AS TCP JRE BE AREAS UDP SAS JX CIDR Shh Ee IP Ha bk Adee EEL AU AERE TS REST SxS FAD fe FF AUF XML-RPC 32304 fi Pee li EAT LAS Sia “456 463 119 LARRY a7 11.10 Ay PMHeARIEIM MN SSL SCH 474 ILA Zeub# ial te 481 11.12 11.13 B12 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 12.9 FERREIRA 1/0 « AURAL. SLAG He FE ERIE TRARY ‘eNEL SES IIPS (af SRE GIL HERB BR 12.10 12.11 12.12, 12.13 12.14 13% 13.1 M+ Actor (£4 A HE ESA RSE RI EM RTT RHLTALEDA 46 UNIX bie 13.2 # 13.3 13.4 13.5 13.6 13.7 13.8 13.9 13.10 13.11 13.12 13.13 13.14 13.15 B48 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 TEIEAT REA: DUE it PUTS Mar IF FW MBSA GUERNSEY CF SIL HPAI CHE ACEH SASS AL a SSPE YSIM A eI on omer i 14.9 iid 14.10 14.11 14.12 14.13 14.14 Taw Bee i SEAS BRI LRU ARAB AR 7 B15 se 15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9 15.10 15.11 15.12 15.13 15.14 15.15 15.16 15.17 15.18 15.19 15.20 15.21 CBarR- $5 — PFT ERE BAL IT FE Be RH TA EE Herp ae vif Python HECTARE RK GL We FC All Python Fi] Swig tle C (UH JH Cython 3 C {UF Fi] Cython Fae ERE BABE PHONY HSH HULL NULL SiR AU EES CP 48 Unicode Aesth C PE FU C FAG HAA) Python FUORI RAS REN C PAF STACI FESR AER CPEB UST FPR CP RA EC PHC H AAC Pi i IEP Re BR B18 RRAMARIE Python AL CUPRA ASM BAAD, He MUFZe (list), BA (set) UK (dictionary ). BLAERSMAUE IT es, FETT DA RE HR AH. 1, HR AIRS EG TBC. AR FRU LA ini SULATEE. Wt, ARRAY WSLER ITC iS LBS ABE KNB. IES, ZE collections HURT A TELS APRESS RIT 1.1 BERR DISS A SB Se 11.1 FATA —MAT N PICK ICAMFS, DERE HED N SPADE RS 1.1.2 fPRAR EADIE (MT EA CATER) AAT DAG a — TP EER ESR SE A Yh 9 8B ME NYE RE HEL OMT E SIF UES 5 FAL: >> p= dy 5 >> x, YP >>> x 4 >> y >>> >>> dat >>> name, shi >>> name "ACHE >>> date (2012, 12, 21) >>> name, shares, price, (year, mon, day) = data >>> name "acuz" >>> year 2012 >>> mon 12 >>> day a >>> WRC RRO ARVCRC, 4848S — MARGE falda. >>> p= 4, 5) D>) Ye BP Traceback (most recent call last): File "", line 1, in ValueBrror: need >>> 1.1.3 itt SES EARL RATA MIR, HBTS EE BUY, DBA RET DUT OME TE RTE EATER. SCPE URAC ia. Hed: >>> 5 = 'Hello! >>> a, by c) dp e= 8 >>> a ta >>> b tet >>> e yee than 2 values to unpack >>> HMRI, AIT REAL LIE MEA EHTEL. Python IP BAT BEET OR TSG, (LAAT WTA BIER, DURE A EONS PR ‘pian; >>> data = [ 'ACME', 50, 91.1, (2012, 12, 21) } >>> _, shares, price, _ = data >>> shares ABTA RSET ENTE EA BAT A BS 12 MEBKEMATARMRPABLE 1.2.1 [agi EMEA EOS R PAM N PICHIA EO AIS HEE HT HEN, LE SBU “SHRUAGLS (too many values to unpack )” RH, 1.2.2 RAR Python (i) “*2éist” APLAR ARG TIL. GMT, RLF T RE TACHI TEM REED SB — A 4, PORE PRP 19 RSE FUR 4 PRS, MLR LATA IA 4 ERO MIRE, A MRAT 24 Soe? * eeu OVE def drop first, * return ay: "Dave" MY REBDIRH DST (SERRA LIA GAY ), ZElt phone_numbers #!—FUJE PAZ, WU RTEFCE IY. MU OR, APES T ERE phone_numbers (/{UBabA WAP EM BEAT AAT TE, ATM AEE AE HME ME RB AT LAL THe — Pe BM, PEAT RI RRR BLAS 8 PREYS A, MU RAR RL cad 2 0 BT 7 SE PA SORA 3 BE, PILAR AH: wrrent_gtr = sales_record sumitrailing_gtrs) / len(trailing_gtrs) comparison (trailing avg, current_qtr) 3X Python fi PERE FABER TT, MEE AEROEAY - >>> *trailing, current = [10, 8, 7, 1, 9, 8, 10, 3] >>> trailing (10, 8, 7, 1, 9 5, 10) >>> current 3 1.2.3 itit HEP MINE AS ARETE EC ETA AT EAE ROMEO ARR HD eat Ee HD TL JH, BATE R PER AIRE CaN, TOR 1 ZITA BALLS ), AUP eh AD RE TORRE Ae TE AER TT FRALEY ACT RP RSE AR AEM A TEAS BU KAY TCR UTA CECE PSC. BRA CA; records = [ ("fo0", 1, 21, (bar', ‘hello'), ('f00", 3, 4), 1 det co _foo(x, y}: Print("foo", x, y) def do bar(s) print ("bar', s} for tag, *args in records: if tag == ‘foo! do_f00(*args) elif tag == ‘bar's do_bar(*args) GAR M RG EFFE BA EAB A, CROLEY (splitting ) BRP, RoR SCNT PESTS SHERRIE EAT. Bi: de> Line = ‘nobody:*:-2:-2:Unprivileged User: /var/enpty: /ust/bin/ false" >>> uname, *fields, honedir, sh = line.split(*:") >>> unane "nobody" >>> honedir 4 Be >>> sh fuse/bin/ false >>> ATMA REAL THO OER EIEN. CETHORINIR, ANE RETR, {HUERTA BERL MS PRA SEIMEI eZ, Hea BRA ign (ignored ). PAA: 23. , 18, 2012)) SPREE A OR RLS PLES Peh HES Fi ELLE ON, NER AS BN, LMR FOR HEAL AAR >>> head, >>> head (UTTER, BILAL AN SEAE Python (HH SG — TOFFEE P RAKE, ARE Hh, BCAA SEA eB I TB. AE, Si: RETR T 1.3 RIN SIH 1.3.1 jg RATT A EAE GBA CSIR TES SLT PO JLT SE — A BL SG SORA 5 RET 6 1.3.2 fRAR (RFA RAY 7 SB i ae FLEE collections.deque MTC T. Hl, PIA ee RIN ATTA LAY AS TECH, 4 OAS DCI at HH 4 BT ANT A BR BetEAL NY N FSC. from collections import deque def search(lines, pattern, histo: previous_lines = deque (maxlen-history) for line in lines: if pattern in line: yield line, previous_lines previous_lines.append (Line) for line, prevlines in search(f, "python", 5): for pline in previin print (pline, end print (Line, end="") print ('="*20) 13.3 Hit DU ETC Be ra RE, a SRO RCS, a AT yield RET AVA: BGA PAL, BOGAN ERS es PEI 1 A I eR A FK. WARNE MIGRABE, HSN 43 We deque(maxlen=N)@)2E TSAI). ABI RALA TGA CHT SS SS BREE AIBA. Bilt: >e> q = deque (naxlen-3) >>> q.append(1) >>> q.append(2) >>> q.append (3) >a deque({1, 2, 3], maxlen-3) >> q.append (4) >> q degue((2, 3, 4], maxlen=3) >>> q.append(5) >> ¢ deque({3, 4, 5], maxien=3) 6 Be FRPP PY LACE FP aeRO ERYE (append, del ), ABA PR TT RB CHETS &, eT MEU. HEM aE, Mi ELI GERIES, deque TSK ZH» MURA EI WAS, WREST ARB, ADT ESO AULT, fan: >>> q = degue( >>> q.append(1) SABA TA SUS UGH IH TOR ASAI IL Oo RAZA TA, IGUAL ABA RUGRICENY , WAH ALBEN OWN). 1.4 BRABANT 1.4.1 jg FR ATTAE SE MR SR ABD YN SIE 6 1.4.2 fPRAR heapg BER #4 + PAK —nlargest()Al nsmallest()- ENTE IEEE . BAN PP RBABT LABEL PS key, MAMTA EAE AEH bo MN: portfolio = [ (Mnane!: ‘TBH, SORA 7 ("name': 'RAPL', "shares": $0, ‘price’: 543.22}, Tname': 'FBY, "shi ('name': 'HEQ', "shares": 35, 'price': ("name': 'YHOO', "shares": 45," (tname': 'ACME', ‘shares’: 75, ‘price’: 115.65) 1 cheap = heapq.nsnallest (3, portfolio, key-lambda s: s['price')) expensive = heapq.nlargest (3, portfolio, key-lambda s: s['price']) 1.4.3 itit ARIE AE FARA N PICK, ARS TCR REALE. ND, DBA TP TEE EAT LA BEES AER HET ASS HEIR EAR ee Ae, LIE REV ATFH. faN ; >>> nums = [1, 8, 2, 23, 7, ~4, 18, 23, 42, 37, 2) >>> import heapq >>> heap = List (nuns) >>> heapg. heapi fy (heap) >>> heap [-4, 2, 1, 23, 7, 2, 18, 23, 42, 37, 8 >>> HERB HER heap[OL GRIST HICH . Uh, BERICHT REL heapq.heappop( THEME « WATE ICR Cit) HH, PSEA PATER UR MR (MRL AREER: OMogN), NACZEMEIMW AC Jo AMM, BERENS 3 ASWITER, WT LABOR EA: >>> heapq.heappop {heap} 4 >>> heapg.heappop (heap) 1 >>> heapg. heappop (heap) 2 MRR ARTO AT, PAC nlargest()All nsmallestQ A AeAiG HOY. MR A fel FEAR REN RATER (N=L IN), IBAA min Al max Hone. IEE, AT FEN ARAB A, AERA HEY OSA PRE (HMI, EFL sorted(items)[:NJERH sorted(items)[-N:] )o MAR REMAE, nlargest() All nsmallest()fi) S25 S2 502 AAR CATE Dy Sk tA TAT), PRB Se PE Le BE CHEN, YN ASA DMI, BRERA ABE MITT Dn ESTAS FCS He BRIE AS a BE LEO AT SEE, EL DPR 8 Be 189: SI FFE . LA PEC HS VFIE AU EA F S 8 A B E H o TE heapg BERK CAH MBITE TASCA 5 1.5 KWRARWI 1.5.1 [agi FUORI, CREEL MTC DOR ACRE, HAE pop ERT ES 2B RABI IAB TIC 15.2 RHR Fim S ALAS heapg 8. SAMEERA; PriorityQueuer defi self self. index dex, item) ) rn _heapq.heappop(self. queue} [-1 PET TT >>> class Ite ¢ (self -name: >>> qepush (Ttem( gr >>> qepop() Item >>> q.pop() SORA 9 AEE, BUST popOPEIR MK CR AAR MIR. Pe MS AMIR RA TICK (foo AM grok ) HI] HIMFR EAA A BBA Sm ASIF AR TD, 15.3 iit LAY RWS BRE Bod AEF heapq #2 Ye HY (EAL. FH BL heapg.heappush() Vs heapq-heappop() st IH IMIS ICH MH 42_queue 44 A AIEERR, ELLIE 2 — PICK PY PCAGALeeAK CN 1.4 SALE). heappop() it SIA “ley” SOR, Ate LDA AE EMOTE RI HE. Sb, HF push Al pop HPF AYE ABE O(logN), SERN (CAEP ICR ASCH, PARSE N AAT, MOPAR RU BRBAR HE 6 FREUD, BSTC pri dex, item). 4B priority MAREN T ELBA TU REI TCE HE CA es SR IOU PHT. CANIS SEHD LZ, — IB TELE HERERO) BI ACAI FARE AY ZEEE index HUPEHIEN THAAD EAB ICH LE 4 ITU FHA. AE — PAS Wie RS], TORE NTA BIN PAE. (HE, index AER AA HIRE SE BN ICR Ta A CREE DR T MEE fH SY FBLA Item SEE TUE BEY, FRADE Fe MT WR LATCAL (priority, item) RRA ICH, WAAR AREBRA, ERAT Last FCB. MARE, WURDE ICAL AT ACARI, CREP EIS RAE RZ TAB EE Wee ALAN: >>> a >>> b ppa>> c= (1, Tkem('grok")) all last): ne 1, in jerable types: Ttem() < Ttem TAMU RSE, LA (prioroty, index, item AAT RAL ICEA, BENT SEER FAA, ABs PCH eA AN TY index {Fi( —- FL EG BERR YEN 24-R AT LAB, Python BAST RAY FA TCHLICR T ): >>> a >> b >>> c pp ack True >>> AURA TOI PR STE es, RE SEA” Hiya IAEA Unf Shih KF PETAL AUSUE heapg BERICHT AA TIE 1.6 Fe eRe SMe AMG SOL. WEBEL 12.3 9 1.6.1 a RTE “MEHL (Key ) DENSI MILANI ( RUTH ALF [mutiict] Js 1.6.2 fPeRAR PIE AAR, EMRE — PPTL WRASSE BERGE MAREE — TAREE YUN, PURER ONE. ly, 2 31, [4 5 ! BAK AER FEIT MES» MRA RICA UY, SAL SERGE u Ro WRG ARR ICR (HER UAIIY ), RA. AAT BEA EMOTE REA FIL, mY LAA collections SEH defaultdict I, defaultdict (WERE S BR — ME, RO Are EUSTON AT, ip: from collections import defaultdict G = defaultdict (List) a{'a") -append(1) d['a"] .append(2) d['b"] -append(4) d = defaultdics (set) d{'a"] .add (1) d{'a"] .add (2) d{"b"} .add (4) KAT defaultdict, WAEBN— MOA, ESA HCP MAL Aa AY ital CBD MEAT GATES LEB A TRA). MIURA TE, ATE SB Fil setdefault() 72k HHL. hn: d= () A regular dictionary d.setdefault('a", [1] ,appen d.setdefault('a', []) -appen d.setdefault('b', []) -append(4) SR. VSP AIEAS I setdefault()4i AS A 28——$ TE SEAT EIS A Ol POOR IAT BF Pas 21 Yo 1.6.3 iit JEU, FIRETRAP RAR AH 9 (LEMIRE A CTS — MEA, PRE, RARE. BIN, MHRA S PRU: d= ih for key, value im pairs: if key not in ci: d[key) = [] d[key] append {value} HUH defaultdict AUB MES; d = defaultdict (List} for k due in pairs: d{key] -append {value} J AAA hE HOR CI RO, HBL 1.15 WA. 1.7 iF RRA 17.1 gi Fea NEI, DUP, UREPORT. 1.7.2 fPRAR 3 IPPC MOMUY , ALLAGEAD collections HUR4AY OrderedDict . “HRT SARIN, ESPON REHR ICR RA SI UF LEFT. IL Lections import d= d[" foo" d{"bar"] = 2 d{'span'] = 3 d['grok'] = 4 ", "bar 2", "spam 3", "grok 4" y ind print (key, d[xey] ABRIL OU SP LER THU CS -AASLET, OrderedDict SASHA. PMN, UNFRAEHETT ISON SSI AYU HLF BLUE , IBA RET FEE OrderedDict FERRET LAT » >>> i 1.7.3 tit OrderedDict PHBE SA ALIGE RE, “ESA TC INA HIF RELL. AMA BS TER BI ETE ERA Bo BEF RTC FETE AY ER RAS SS BE HOF. HATERS OrderedDict Ht A/VME MIF SLI 2 19L, RI FE RUPEE. A Se, MURATA “SAREE OrderedDict SEGARA CHALK CSV SCHR TE 5X 100000 F7 NAF) OrderedDict HZ} ), WARBLER ANT, MITTEE SERGE 3 {HUH OrderedDict Irth HEA IS Ab Je A BE EIA HED ALT Te RI A 18 SFRaAHR aa 1.8.1 [aa BRUTAL PAPA ate PEOTE SE: CLEAUDRAMEL, ROATFL, HBF. 1.8.2 fPRAR MBAS SF TERE, Pa AUT 1 A OTA THT RT b AT RENE MAA ACSA NOTH, SA zips FARE AMER. BAN, PFA CS eB RF AT | MI) SG AR A AAT A DB ces.velues(), prices.keys(})) ” BUTE NY, ARES zipQBlAl TTI, EMA RABE AIK. flan PURER ESTE, Sie LIT eT TTS. PLLA SILAS values() Ii 34 ACARI i): AE, HL WPA 5 LCN, Bea T AT AR a1 iE A A ITT NH BAA (GUERRA?) WRF key BACERBA min Al max(), SAE AE ASE] MEL AS HY HR tA. (Et, SEER MABSTR, PREM AT —UTERR. Aft: cesimin (prices, key=lambda k: prices(k])] AURA T zipQ MURA ALIAS FA EE “SE” a (ELH SUS Aa Mad ABN PERE ATCA LUT LOREEN, (HEMET LORE, PRAT. Ree ERAT TASSORE, Ft PRAT LE 2 a SHS SS A AD Fo H Fisk, 4B (value, key) MAVECREIN, AMR ALLS Ae he AA A value {4 IBA key HEIDRAE NA EA RMIA . fM, ZEETS min All max(liy, AIRES value AUCELAE TF, SUG HRA Se NCB K key (HAVER TARA. ASP F : >>> prices = { ‘AAA! >>> min prices.keys(})) 1.9 AAS FR PSR 1.9.1 [gi AMPH, POT CAT PTE) MY READS CATRDAS EE. AUT AYIEESS ) SERGE 15 1.9.2 RAR FRU EE ast u, hae t BRANT PIMPLE, AGH keys items AIT WAI APE DET, fi aN: 4 Find keys in common avkeysi) 6 bkeys() # { "x", ty! 4 Find keys in a that are not in b avkeys() - bekeys() # ¢'2" } 4 Find (key, value) pairs in conmon avitems() & b.items() #{ ('y', 2) OR ETT ARBORS I POA. BAN, RA tT Sh, Spee, PTAA TPE SSC Bl: 4 Make a new dictionary with certain keys renoved c= (key:a[key] for key in a.keys() - ('2', 'w'h} ay ty! 2) 1.9.3 iit FRE RN RAMAZ ITE FIN keys) TUB I keys-view WR, HE PR TARE. REP MR AE, DBR EAT SHE JLNISR ARETE, HCMPRIPSE, BES ANZESE . HAlite, MUR Ge BERTI HS ML PATE, BBA BLE HED keys-view SRM ALIEK EMT HAC HET » “FSG items 77 23 [Fl HH (key,value) ATH LEY items-view TBR. BATRA PORE, TAD A Se MER HN SF 45 A BREET AF ATT) ZAP REE PREPARA, (FIM valuesQAIIEA SIF A DYE 0 BRAHMI Ae Np ae AE, FEARTRIEN, IMPLY AS BEAT SE AS BE PRED AS BY (EL BEE AY © PRS — AR DR BE SE dics (txts 16 Be SORES A PEE DON. ALE, MUTT ROPER YE, ZEAE] DASE AAY MARAT 1.10 MASI PERE SB RR BM AS 1.10.1 a eA TALS ORIEN UA ES 7 1.10.2 APRA WORE IP AVILA YAS Chashable ) AY, HBA Ix) NY LASHES Ay AE RA HS. APA def dedupe (items) : AUR RETAN F ASTOR ME AZ for iten in itens: if item not in seen: yield iten seen.add (item! CLALIT Ae PROF pas [l, 5, 2, 1, 9% >>> List (deduy (1, 5, 2, 9 10 >>> FAG SFP IN PITCH AL A Ay IN RE) NVA PIR, HEHE def dedupe (items, key-None} : RA ETE A fie MURAL TEAST AH RISE ( HELIS TORT ERL for in itens: val = item if key is None else key(iten) if val not in seen: yield iten seen. add (val) key (PEM RE — TREADS F IN PN TCR HY A AHR, A HY ET EE. TEATRO IE * MUR RISULRT PR aHY, TBA AEE NE tr A AME, CARAS _hash_ OW. SEE FRE, RE TEAL ANTE, —iE RE SERGE 7 peda = ( {txts ty! >>> List (dedupe ( AUS BLE — PBA AR BARA HS, ARLE Se EA BE THE CR ALT, ABZ J — ART RPE TER THE 6 1.10.3 iit ARAB HEN FU ASR SET, OBZ LAR PLN AAR ES >>> a (AERO DEAECRIETER Mal MEALS, USSU GIRS BUT AL 5 MTIn RAS TA PRITAM EGE SLM ATE RT A MEAS YE LR — ESE, BEL BEATTY BE So i HK FBS OY BB FAR BE ET PRET TAN, ECM, MUR ICE, RHP a a SOA E, FLV SORA with open(sonef for FRAT dedupe( MAU T AMAA sorted), minQUMR maxQXt key RAAE DA sk. HFS 1.8 WA 1.13 We 1.11 MHZ 1.11.1 We FRA OAR BIEN, BUR U aes], PRS ET EE 1.11.2 fPRAR AERIS AG HST FIDE ASE 0 ERASE CCMA PTAC * RATHER REP IN TCRAB ILM — A, URE EM ZA AME, —ikHEE evita) * #HESE — 0123456789012345678901234 3456789012345678901234567890" ' 2100 vee eSIB25 eect * float (record[40:48)) HRB, TFA ARTO aH? SHARES = slice (20,32) PRICE = slice (40,48) cost cost = int (record{SHARES]) * float (record(PRICE]} FE RAS, tHE SES PY EO RT S|, DATOS RE SE WATS 1.11.3 tit TE ARMED, A RA Te AES EL, OE PRCT EEA TE ERAS TE. BAN, WR ARDS TERETE, PREBLE CRA eS ES WEA TEAET A. TIMUR ATE AT ALERT DH US DIRE BE OR ADEE, ALELIY slice) RR OE — MI RES, TELE PUPPET RE SIs. fA: >>> items = (0, 1, 2, 3, 4) 5, 6] >>> a = slice(2, 4) >>> items [2:4] (2, 31 >>> itens[a] (2, 3] >>> itens[a] = [10,11] >>> itens [0, Ly 10, 1d, 4, 5, 61 >>> del items(al >>> items [0, ty 4 5, 6) WAT -* slice MRNA s, PTLASPHAIL s.start, s.stop LAK s.step PEALE BRA. fad: >>> a slice( >>> a.start 10 >>> a.stop *SPTTSICE (Mat file ) JB FM PBL HIN RAAF, Pee SERGE 19 50 >>> a.step >>> Sob, WILLA indic TAS UT PN BUR EAA IL 5 ABI (start, stop, step) 7G4E , FIFAF HCE ABEA ZH HABER PEL FEA (24 Ae RET BES HiSH IndexError 5¢ 7 oid: dors = Mle >>> a. indices (Je (5, 10, 2) >e> for i in range (*a.indices(len(s) 1: + peint(s[il} >>> 1.12 ROR PH Rae SHH 1.12.1 [la PAVIA TERIE TA, AUT AI HB SR TERE Zo 1.12.2 RAR collections UURHHY Counter JIE IH AMMAOTLINNY. EMRE — MEM ren most_common()s 2:70 LLITIE MH UEDRA VIR « aT AU Fas, ABSA — Ae, Reet A RA A, RATA A BE, FT RATA 20 Be 1.12.3 tit FTA Counter RESET TAM BUF EAR A. TAKE, Counter ft EM, COCR MEME SLATE AT WER. GN: >>> word counte["not!] L >>> word_counts ("eyes") 8 >> URE He, Ae Ta A OT >>> morewords = ['why', are’, "you", 'not', ‘Looking’, 'in', 'my', eyes") >>> for word in norewords: + word counts[word} += 1 >>> word_counts[ 'eyes"] 8 >> BABA updateQ 77% >>> word_counts. update {merewords) >>> KF Counter BA — PA ARMS EEE , SEALE TTT LR ASH TA] 4 EC FARE BARR. falda: >>> a = Counter (words) >>> b = Counter (norewords) >>> a Counter ({'eyes': 8, 'the': 5, "look": 4, tinto": 3, tmy!: 3, ‘around! 2, "you're": 1, "don't": 1, ‘under': 1, tmet'y 1} >> b Counter{{ "eyes": 1, "looking": 1, * ny! Ly thy! 11) et: 1, tint: 1, tnotts 1, tyou': Ly >>> # Combine counts p>csatb prec Counter{{teyes': 9, ‘the’: 5, ‘look’: 4, 'myt: 4, ‘into': 3, ‘not’: 2, taround': 2, "you're": 1, "don't": 1, tints 1, "wh "looking': 1, 'ae': 1, ‘under': + "you's 1H) >>> # Subtract counts por dsa-b SERGE 21 >>> d Counter ( >>> ASSAD, ATEDR EEA it BERS A HH Pe HP A DREN, Counter RABE FI TH. HRA TRACP SRE, EMR M SC MES. 1.13 HBA GENT AN HEF 1.13.1 jaa PUTA — TFB, BE — PE ETP ET HEY 1.13.2 RAR ‘AIH operator BURN itemgetter PECK BORAA HIE THE TILA MALIN 5 BBL LAE HEATON LAST , RAVER T I FER HY i, ABATE : "gones'), "Beazley'}, 22 Be itemgetter()PRBGR A WAREZ Mi. PAUP TT BEACH - ed (rows, key=itengetter( rows by Lénam “fname") 1.13.3 tit PERUTEN— TTI (callable), BTS rows PHS KI RPE SAE EIS ADMD RUBE. itemgetter()PRR OEM REI — TR PRA operator.itemgetter( MEWS EA AMIS, SKM rows Mic ae PSE SOAS BEAL 5 EMT VATE FLIES RE Bs, DRC LRA (TN) BETH NTE AE AAT PT VA AG HT AY__getitem_ QUA. MARES MICS itemgetter(), ILA A SY HE AEE — PA TAT TORE TCL, PANG sorted 4S HERAT TCA NERF AE RAPS FOR. UREN ETS RHEE (LOINBIF PEAY ), WBA RAR AAI. AURA lambda AGATE itemgetterQMIIAE. PAN: s, key-lambda r: r['fname'] key-lambda r: (r['Inane sane"})) as ART 58 iS ATE LAE. (HEFA itemgetter()iii tit RGR BERET, MEALS itemgetter(). SUGAR ES SA PTAA PGES minQ Al maxQiX Payee RC. Bild: SETTER HE, Alten 1.14 SPARE SCH LE BRE Bd SHEE 1.14.1 jag Fe TALE — PASI SANZ TARY, (LE EATS EAS VE SR OBER SERGE 23 1.14.2 fRITE ALREAY sorted() PARTY Hes —S LK 2 6 MT HH AAT (callable) MBA key, MB YH LS 2k PRP PRP LE EL, sorted UA RE LEMAE BETS. Hil dn, WF AT — KAY User REG, MPAA user_id RMR EAI FF, WUT PARE — PES User SERIE ARTE] userid. Afi MF: >>> class User: def _ init__(self, userid): self.user_id = user_id def __repr__(self): return 'User({})'. format (self.user_id) >>> users = [User(23), User(3}, User (99)] >>> users [User (23), User (3), User (99) ] >>> sorted (users, key=lambda u: u-user id) [User (3), User (23), User(99)] >>> BRS PTLAFA lambda 2&0 9b, 95 AP DTC operator.attrgetter(). >>> from operator import attrgetter >>> sorted(users, key=attrgetter('user_id')) [User (3), User (23), User(99)] >>> 1.14.3 iit BK lambda AGATE attrgetter(MRI ALPE. TEAL AORUE, attrgetter()3E HED BE, LAAT UVP ERS PP BAITED » ROAIEEAS FIL operator.itemgetter() FABRA (ZL 1.13 45 Jo HAMM, MME User S2H4i—‘ first_name il last_name FAYE, MT PABUTOU F RFR: by_nane = sorted(users, key=attrgetter('last_nae', 'first_name')) FRESHER, ACS TAME AIS TAR min( All maxORCFF A eR. BAN: >o> min (users, keysattrgetter(‘user_id") User (3) de> max (users, keysattrgetter(‘user_id") User(99) >» 24 Be 1.15 HBF RHR 1.15.1 a ARISE IAS BEI, BEIT RUB IR ME MOSEBE CHCAUE HUIS ) ML BG 1.15.2 fPRITR itertools.groupby() CAEN ARTF MAUNA. HY TROL IBA AF PINE: rows = [ (laddress': '5412 N CLARK', ‘date': '07/01/2012"), (taddress': '5148 N CLARK’, 'date's '07/04/2012"), {taddress': '5800 = 58TH", 'date': '07/02/2012"}, {taddress': '2122 N CLARK", 'date': 07/03/2012"), {taddress': '5645 N RAVENSWOOD', date": 2/2012", {taddress': '1060 W ADDISON', ‘date’: '07/02/2012"}, {taddress': '4801 N BROADWAY', ‘date’: '07/01/2012"), {taddress': '1039 W GRANVILLE", ‘date’: '07/04/2012"}, 1 DETER BAG AH ALMA OCB. BERS, AIG RB FERS PP de date) FOUYAANY, 2G HHMIES itertools.groupby(). from operator inport itengetter from itertools import groupby # Sort by the desired field First rons, sort (key=itengetter ("date") # Tterate in groups for date, itens in groupby(rons, key=itengetter('date'}): print (date) for i in items: print(’ ', i) her HE UF HRT o7yo1/2012 {'date': "07/01/2012", ‘address': '5412 N CLARK") {'date': "07/01/2012", ‘address': "4801 N BROADABY") o7yo2/2012 {tdate': '07/02/2012", ‘address': '5800 B 58TH") SERGE 25 1.15.3 itit PH groupby (ii UNTER UAT FA Co) a: FUT, IGEN. groupby tle £ MPL (value) AIP FBAERE (sub_iterator), i PAAR. FE MBE SEP SE RF BO BRI THEY . LY groupby() AERA SENT, AEFI, HOUR OT MTA MICRA FS fe Fe LA A PS), UE RS SOE BLU, IBAA defaultdict() EE —+—- RAAF (multidict, Wb 1.615) HT RE aE Af. Plan: from col: ee ey 3872519 pC FTHE [ol (14 (FE ) Cif ab 223 Fl PATE ons import defaultdict altdict (ist) ‘ow[ 'date"]] .append (row) DORE T A Wr wT Aaa, LR RAs: >>> for x in rows by date["07/01/2022"): print (2) "5412 N CLARK’ "4801 N BROADWAY" } TFT AF, RTD EAN REM IC ABT» ANG, MURR Ae Re DT AL HR, BOM DTM WHEE TED groupby Qik CE KES 1.16 Size FR SI PACH 1.16.1 jaa JES RAT RG, PAT Tat BELT A 0 CEL AL IM HE AFF 26 Be 1.16.2 APRA BEAN ARCA, UL APA ALLEL AeHE ESR (ist comprehension ), fi a: >> mylist = [1, 4, 3, -1) >>> [n for n in yl (1, 4, 10, 2, 3 EES IU LEE PSA NY — PEED Se UR ETAT AE AI, CAAT BEF E FR MRR REE SBM, BRA ny DARE RR ee OH eR IEA. fil Mn: >>> pos = (n for n in mylist df n > 0) >>> pos at 0x10 >>> for x in pos print (x) ASML STAG A ba MEDIAS fl PI Ae ES HE PE REI HOR, BILE SLED RSH DSB HAPS RBIS ESP UNG, RR ah ST A i SUPA PRACT, TARY filter PBS. a BILE values = ['1', "2", 1-3", to", 4", IN/AN, 154 def is int (val): try: return True except ValueError: return Felse ivals = list (filter(is int, values)) print(ivals) # ont 10h, 13, 4, 158) SERGE 27 filter Ge T-PHEACHE, PL RRL EAU ARIE SCAR, HUMP FT list, BUG HBR: 1.16.3 iit PNAS LOA I RE AES HAE FR i A A A REIT Sh, E APE FAG TS PERRET ASN: de> mylist = (1, 4, -5, 10, -7, 2, 3, -1) >>> import math >>> [nath.sazt(n) for n in mylist £m > 0) (1.0, 2.0, 3.1622776601683795, 1.4142135623730951, 1.7320508075688772) >> FTE, AAR EA, MAREE. fad, Ba T BEAR TE Sh, eA TU AS a PG A ER EL SELAS , BCPT LAGE HE SAR EB — PRET SN OR SSIC 9 BARCP TALRCFE de> clip neg = in if n> 0 else 0 for n in nylist] >>> clip neg [1, 4, 0, 10, 0, 2, 3, 0) >>> clip pos = [n if n < 0 else 0 for n in nylist) >>> clip pos (0, 0, ~5, 0, -T, 0) 0, -1) >> Fs — MEGS — FEN IE TALE itertools.compress(), ‘CHES — PATA RUA TRUPERIP UEDA g MUU, EER STAT MINNA ARSE True FAA WSR IGR MA — AE TE RIB) — PEP LIB, BBE ABBA. GUM, BAT LAR aS addresses = [ "5412 N CLARK", "5148 W CLARK, "3800 E 587K", "2122 N CLARK’ "3645 N RAVENSWOOD", "1060 W ADDISON", "4801 N BROADWAY", "1039 W GRANVILLE", 1 counts = [ 0, 3, 10, 4, 1, 7 6 1 SRTERRATR PORE E22, HINT count EAT 5. FIRB sty 28 Be ORE FP FERN AAT T, USAR ERIC AT SR TARE. YS compress() FRSC PE MEH WH LAB AEA True HARTER o [Al filterQeR FE, IEW TLE compress Si lM ACae. AU, Re REMN TA, AGLI list HELE HINZE 6 1.17 APRN 1.17.1 ag PATOL PF, HARI 1.17.2 SRA ALAS IHESE (dictionary comprehension) "[EHMR. fii: 13 over 200 in prices.items() if value > 200 key:value for () 4f key in tech_names } 1.17.3 tit APIS HTH AE SPA Hy APT LA UAE TALE USN HE EATER dict SERGE 29 itens() if value > 200) (ALF IGE STS EIT, TL prices High, BRB 2 15S) AS RATI SEAT BM, BMAP LS me: 4 Make a diction tech_nanes = { ' BT RABERRS (WAR Be we p2 = { key: [key] for key in p: ys) & tech names } (ELSE: ANP YAR ASB PNA SR LP BE A Le 1.6 ff RTE RE, WBA ABE BE — TAFE 6 ART ALLER PTT A 1.18 BARRE WT 1.18.1 jaa RATER (BRL, ae yaar Mee Heit. 1.18.2 fPRAR FALCHABAYTCAL, collections.namedtuple() (747041 ) RAHN T BUD AIFF RSET JEG A, SEBEL collections.namedtuple(e— FH le[fdE Python "PR METE MEOW FA, RANMA -TEOZ BU RAM TE, ERB — Ta eo WA, WAKO Aa UFR AES. ia: >> € >>> Subs ba ) HeDiiTe) Pea CAEL A , TAT LA HK o Fe VY BORIC, Dill aia RT ic EAD >>> sub >>> sub jer (addr="jonesy@example.con', joined="2 Fnamedtuple 19S SAR RUR— MEAS, LEAS Mae AY TCA ET 30 Be (8, AST MTA EOE, GIMUS] (indexing ) #14M¥ (unpacking ) Heda: >>> Len (sub) 2 >>> addr, joined = sub >>> addr "jonesy@example.com" >>> joined "2012-10-19" >>> FT TEE A EBT AE PEA CHP CT AY TCE DEA. , R WPA) TA TCR, UL TO MRT, ABA AL ee eee HB TUR, IBA CPS RES AEE | ALERT AG A FI TCL AY Dy oi TEL, RASH AE AT BGA MA, FB HC AS. def compute_cost {records} : total = 0.0 for rec inn total += return total SEAGER LFDTS HE HE A ek J AR LAIR CRT IRA RY TP TE CF ts TCE LEAS; from collections import namedtuple is: A] * rec{2] Stock = namedtuple('Stock', [‘name', ‘shares', 'price']} sshares * s.price return total ER, MURA BITIN records FAAS TAME, AKA nH] Leese hpi aR FEBY Stock AT 1.18.3 itit namedtuple AY — APT AEA AEM FIAT RMS, SAME RENE m8 Re PAN a "(eR EME records FHAVTERER AIO, FLLAATT shares Ml price SPRUE, DBRT ERRSIUR MAORI, ASSURED Al, twa Urea CALF. —ER TE SERGE 31 REAL PHOT SG, HEA namedtuple EVM. (LEHRER, SH SATAY, namedtuple £45] 2/4) (immutable ), (7): >>> § = Stock("ACME", 100, 123.45) >>> s Stock{nane="ACME', shares=100, price=123.45) >>> s.shares = 75 Tracel -k (most recent call last): File " AttributeBrror: can't set attribute >>> MUTA EAD PE, PLLGES OA namedtuple SAAit)_replaceQ HERI. WIT ECE PATH a A TCH, FEMDOM >>> s = s,_replace (shares=15) >>> s Stockinane="ACME', shares=15, price=123.45) >>> teplace() 745 US HE, IBLE AT LAE A — HA NTT EAS TT He TRF BE AY TEAL. BES: AOE POR RIA “OW” CH, ia (EHI_replaceQ AOA — ARISE, LANA. AS BIAOF from collections import namedtuple Stock = nanedtuple('Stock', ['name', 'sheres', "price', ‘date', ‘tine']) # Create a prototype instance stock prototype = Stock('", 0, 0 lone, None} # Function to convert @ dictionary to a Stock def dict to stockls): return stock prototype. replace(**s) PRAT Ia — FE Ta PS dette CPE AY >>> a = ('name': 'ACME', ‘shares': 100, ‘price’: 123.45} >>> dict, (a) ", shares=100, pi 123.45, date=None, tim 100, ‘price’: 123.45, "dé e) *12/17/2012") ", shares=100, price123.45, date="12/17/2012", time-None) BUR, EAMES, RR RUS TTY A de MH 32 Be ELISE SECS AVSLOUALYE, IBZ (RFE namedtuple J 7B. ANI, MILLA WBE X—MASTT_slots_JIGPEAU AE (SEL 8.4 4 Dy 1.19 PRT RT AUHE ei IRS 1.19.1 a LRATAEBEMI IGE. (reduction ) PRC ((9J4N sum(), minQ), maxQ)), (HLM Hier ao. 1.19.2 SiR Ai AIM A HELI SME HIRI TAR Bedah, (lin, MURAL MAOP ITAL, TTL FTP. fe ERCP EAE BAS nuns = (1, 2, 3, 4, 5] sum(x * x for x in nuns] REA HEB 4 Determine if an import os tina dir if anyia for nane in files}: iction across fields of a data structure es = min(s["shares'] for s in po: 1.19.3 tit SRP IT IRAN T FEAL AR BE TATA PHY Ph BY ET EB fl SERGE 33 Me CEN, ARMTRSE AHA SJ. HEM, PIR BITT AUS Aeon EIA] SR s = sum((x * x for x in nuns) ) s = sum(x * x for x in nuns) HERETICS TT Re, HE RAR A AE Es OMEN SK A, WDRA REA Mai eeist, MRE FAL nums = [1, 2, 3, 4, 5] s = sum((x * x for x in nuns]) OUAET NE, (RCSA SMR RTT FLARE FTA. WF RA WR, LARAMAKAE, (AMR nums EWA, BARS TEAM Hei, ELA BEEF» MF ARATE TT RT ALAA CTT PERE, PRICE FEB LBS AES RTE ECC minQAl max(}ABM REZ —7> key BBL, “HTT HEMILIEN THE MEAT. GMITE portfolio HHL, IFA FMAM LTR: 1.20 BSPRHAHA BTS 1.20.1 fa PATHS F IA, ALE TAI — PAS, DATE SERRE MIDAE, HEMUAEPE AMAR AF LES 1.20.2 fRRAR BABIN: PURI DU TARE, FEA ATS (plan, FEtE a ARSE, WR BHR AIS b I PRERE). AIR BIK I TEARALA collections HE" H HY ChainMap 2K fit PA. Bin: from collections import ChainMap © = ChaiaMap (a,b) 34 Be print(c{'x']} # Outputs 1 (from a) print (ci'y'l) # Outputs 2 (from bj print(c('z"]) # Outputs 3 (from a) 1.20.3 iit ChainMap "22 ER Fa CEE LAR ETA — TT TSH AH SOWA EF TL IFR AIP HE— ie. AU, ChainMap Ff) AEP" —“ ie RIE Fee BIRA WINRAR TICE SAS TL URE ST SA RE FCT PR EB BE IE HS THE. Baik: >>> Lene} 3 >>> List (e-keys ()) Cxt ty >>> List ic. (1, 2 3) >>> MRA SENSE, IPAM RPT PMT. ELH, BHA ef'2 Lik 225A a PAE, MEARE IR b PATE AEE HUBRIS TIES A — PS: 5 fad: >>> c[t2!] = 10 >>> c[tw'] = 40 >>> del c["x!] >>> a (twtr 40, '2'z 10) >>> del c["y") Traceback (most recent call last): KeyError: "Key not found in the first mapping: 'y'" >>> ChainMap Sar 4i7E RIA, HOSP eee CBD, Jee) — ET ABATE SAT FD 5 SEPA 5 LAG TE ha RE A a >>> values = Chainllap') >>> values["x") = 1 >>> # Add @ new mapping >>> values = values.new_child() >>> values{"x'] = 2 >>> # Add 2 new map ng. >>> values = values.new_child() >>> values("x") = 3 SERGE 35 >>> values Chaintap({'x': 3}, ('x's 2), (txts TH >>> values ["x'] 3 >>> # Discard last mapping >>> values = values.parents >>> values ["x"] 2 >>> # Discard last mapping >>> values = values.parents >>> values ["x"] 1 >>> values Chainap({'x': 1}) >>> HEN ChainMap HET, HATTA ASH update RL AE ME IE tei. flan: >>> merged.update(a] >>> merged{"x"] 1 >>> merged["y") 2 >>> merged["2"] 3 >>> SEA HCT ARE (ELE MA a — se FIR (SACL BL IE 3H, OMT TEA). JH, WSR EE — TR ET AB, ALLMAN IP. fibhN: >>> altx'] = 13 >>> nerged["x!'] 1 hf ChainMap HEAD RASF I, BCE ANE BOS ABET 6 AATF >>> merged ("x") 1 >>> altx'] = 42 >>> merged["x'] # Notice change to merged dicts 2 >>> 36 Be B28 FHRANLH FEC EIR TEE AAAI, UF REE SESE ELAS EI FAB Sb RAISE SL ASI, ASEAN TL BEAT ARE AY TS SUAVE, MRE TE IRR BI FRET LA IGT » VEAL ABT LASHLEY BITE. (AE, ERAS HR AE FT fhe Zo 5 SE FY TF UAE BR OYE TE RET A BETS ee. WL TAT SE FGAREAA hii. IESE, HES) F HEF] Unicode JT 3EiL iN BIBLE 5 21 HMERSHA RRA SHS 24.1 ig BRATIELOS EERIE IATA BE, (HEGNABAE (DL BAMAE AIR) CRS PAG IER Be 2.1.2 RPRAR PRP TRNY split) 7 A ABA AE H fe ATA, LARS ME, NTE FARIA RE AE TENTS ALICE I). YE RTD, PARE re.splitQ) Ww: >>> Line foot >>> import re >>> i foo’ 2.1.3 itit resplitQ WA HHT, DY HT LW aH Mist. Gl, 4 ARTE, 37 DY BBAS A LARGE AS RE COT TT EE TR SH) BFR S SAMAR, FOUR ET AFB, Be SUCHE R BIB OTE 6 FRAP UKE S BAZ, FA] str split HMR FES SOLA re.splitQih, 5 3E vO TEM AAS PKA (capture group) AAA AE THOT. MNT MRA, BARN KAW AERA RT. MA, A Franek >>> fields = re.splitir'(; 4) Sasdé!, "4, £00") PERERA LE FCP REIS BEE FA. AN, WT EERE BGS AEB LATE RRP RENEE, (LYRIS HIE IZA T AL, TP TURE, AC. ESE. SPAM >>> re.split(r'(? 2.2 CEPA BAVA Aaa RE AMASZ AR Le 2.2.1 [ala FRAT Tid BEALE AS 8 FFP Sk EA Fe Wb He HE FE A SCAR RE, LAE SCR 4% URL PRI 2.2.2 RAR Ai — FA LY Ja FD eR ae FE TP SAAT, SBE GICAL strstartswith 38 B25 strendswithO Aw T . ANBAR: >>> filename = 'spam.txt! >>> filename.endswith (".txt!) True >>> filename, startswith('file False >>> url = ‘http: //ww.python.org! >o> url.startswith('http:') True >>> ARG BEI ERS ET AE, TGS startswith(/All endswithQS2He te & Hy HELE HA TCALBD ET >>> import os >>> filenames = os.listdir(’.') >>> filenames [ Wakefile', 'foo.ct, 'bar.py", ‘spam.c', ‘spar.b! J >>> [name for name in filenames if nane.endswith((".c', ".2")) ] ('foo.c', ‘span.ct, ‘span.h’ >>> any(name.endswith(’.py') for nane in filenanes) True >> BAA POF: from urllib.request import urlopen def read_data (name): if name-startswith(("htte:', ‘https:', "eps" ] + return urlopen(nane) .read() else with openiname) as £: return f.read() APPROVE, CAE Python "Pate RFE TCS RA — HOA 5 ARR AT DSP a TESA YT IE ple EMAL. ABATE >> choices = ["nttp:', 'ftp:! >o> url = ‘http://sww.python.org! >>> url.startswith (choices) Traceback (most recent call last): File "", Line 1, in Typefrror: startswith first arg must be str or a tuple of str, not list >>> url startswith (tuple choices) ) True >> FEMA 39 2.2.3 itit startswith()#ll endswith() TI HE GE PAPAS Dr AS Ta RT FE TA AHIRAE. FALE MT LAT REM, LLU RA HE. BAN: >>> Lillenas >>> f xt! True >>> url = ‘http: ‘thon.org! “or url[:6] == ‘attps:' or url [sé] == 'ftp:' WTA, (ASF ACCRA FT. ARERR SHH, ie. HUF RAE, “4 startswith(OFll endswithO WAITER TE ( HOLS ILS Be HBR YE ) CRIN CR BAE. ON, PITA) hats A eh AG FH a AY SC ifany(name-endswith{(".c', '.n')) fornane in listdir 2.3 FA Shell ACS BB 2.3.1 [ala “4 TLAR{E UNIX Shell FI, Sera ee sie SLAC HERS CBD, *.py, Dat[0-9]*.csv ) FORDER. 23.2 RAR finmatch #LERBEE FN PPB Fc. HORA fai finmatch()#ll_ fnmatchcase() — PI FHA TIX FRI DE 40 B25 >>> fnmateh("foo.txt", "200. txt") True >>> fnmatch("Dat45.csv', "Dat [0-9]*") ‘True >>> names = ["Datl.csv', 'Dat2.csv', ‘config.ini', '£oo.py'] >>> [name for nane in names if fnmatch{name, 'Dat*.csv"}] ['Datl.esv', "Dat2.csv"] >>> ADR BL, fhmatchO MEAG OTR AAAS SAI CE RSC) CREE PERRIN AAT). Bib: >>> # On 0S X Mac) >>> inmatch("foo.txt', '#.TXT") False >>> # On Windows >>> fnmatch ("foo.txt!, '#. TXT") True >>> ANT BT PRATIT ESE, LILA famatchcase(). E7e AETHER AY AC DBA RORVERE de> fnmatchcase("foo.txt', **. 0X1") False >>> RF EBL, RZ OE ERE EAT EE BE SCPE SR BO EGE ‘MN, (IRATE Hk, BURROFE: addresses = [ "9412 N CLARK ST', "1060 W ADDISON 87", "1039 W GRANVILLE AVE", "2122 N CLARK ST", "4802 N BROADWAY", 1 BY LARCE OPES AE PK >>> from fnmatch import fanatchcase >>> [addr for addr in addresses if fnmatchcase (addr, ** $2")] [15412 N CLARK ST', 11060 W ADDISON ST", '2122 N CLARK ST"] >>> [addr for addr in addresses if fnmatchcase (addr, '54{0-9][0-9] ¥CLARK*"}] ["5412 N CLARK ST") >>> FEMA 41 2.3.3 itit finmatch JF EAR AIVE CEREAL ck SPF Ff A FE BIT A BE YE I PEST ZU WFLA GN AEE AE HE I BE fi) LIE CHP ECTS, DS ACA PAAR Ro MNFRS PEAR aS DC SCTE NYS, UBB glob BOKER, TS IL 5.13 We 2.4 SCARAB 2.41 jaw FRA TAL SEF AAG EE AY SCAT OE AER 2.4.2 RAR WRAL RTCA FLAS, UA AAMT TL, be ‘UN str-find(), strendswith(), strstartswithQBeAAY A. ANLITE : >>> text = "yeah, but no, but yeah, but no, but yeah! >>> text True >>> text endswith ("no") False >>> # Se. >>> text 10 >>> HP ASHE CU ig 82 FTE MU PEIATCL M re BUR. WF BLA IE Meise SEATLAE, (RBRBRATAA DCRR 8 sr eA HS, bean “11/27/2012”. asian F >>> text 2012 >>> text 2012" >>> >>> import re 42 B25 >>> # Simple matching: \d+ means match one or more digits >>> if rematch (e"\di/\dt/\d!, text): . print('yes') «else: print(‘no") yes >o> if re.match(r'\di/\dH/\dt", text2): print ("yes") Ise: + print |'no") >>> WRT SATS Te — ASU AVC AC, 6 23 22 SOME TE MIZE aE HOA. flan: >>> datepat = re, compile (r'\d#/\de/\d+") >> if datepat.match (textl) + print ("yes!) = lse: print (‘no") yes de> if datepat match (text2) : print('yes") Ise: print (‘no') mateh()J7 i SE SEES FE IE SFU TE CIT «UAE AT BE PASH ETAT BA TERT, AARNE findall i. P/U: >>> text = "Today is 11/27/2012. PyCon starts 3/13/2013." >>> datepat. findall (text) (e1t/27/2012", 13/23/2013") >>> “xe SEMI ZGATRI, ERTS CORALS AAT LAKE. Bia; de> datepat = re.compile(r" (\d+)/(\db}/(\a+)") >>> FRI ALLAEL BBA AC I SERS DEC SCART eh, PAL Ay ak EL PAE ABT DA A HH OK FEMA 43 ‘od: >>> m= datepat match ("11/27/2012") >> n <_ste.SRE Match object at 0xL005d2750> >>> # Extract the contents of each group >>> m.group (0) ‘y21/2012" >>> m.group (1) hie >>> m.group (2) 197 >>> m.group (3) "2012" >>> m.groups |) (at, 1274, 120124) >>> month, day >>> m.groups() year >o> # Find all matches (notice splitting into tuples) >>> text "Today is 11/27/2012, pyCon starts 3/13/2013." >>> datepat. findall (text) (OLS, 127", 12012, 3", 113", 1201391 >>> for month, day, year in datepat. findall (text) : print('(}-{}-{)'.format (year, month, day) 2012-11-27 2013-313 >>> final () Dy V4 BEA SCA IE EH TAS (DECI PA AF EIN PEAT GB Tl ARAL VACATE CAC, MT LEA finditer() 773% 6 as BAF: >>> for m in datepat, finditer (text): print (m.groups{)) eu, t27, 20124) 3, 23", 120134) >>> 24.3 Wit FTE ASAT BOP TAHOE, (ELE, ACT ITE T ALI ve BE 44 B25 RAR AVE RCAE AER, MAILE IGHY re.compile() xp Hest JaGKAVUR match(), findall (3K finditer() HEMI THE RCA PE, oS if match()J2k LAE FAT ATE Io ATPL AEH UDC CAN 2 FR IE AN BALL ho Pala: ARAL EEVCRC, TREC ae — TendinIC (8), avtalaR : GATERE, WRT SDAA SECA AES RA PEAT, JRA AG ETOP a EPA a TE AHN. CRU BEC wT Uh FREE TbS, AIC TF Ny CAE AEP TE. HAMA CPE ECS AB ee A BO 2.5 BRAMPHAMA 2.5.1 [a RATA PF fH SCA 25.2 RAR AFAR, (HH stereplaceQhTT, iM: FEMA 45 >>> text = "yeah, but no, but yeah, but no, but yeah! >>> text.replace('yeah", 'yep!) "yep, but no, but yep, but no, but yep! >>> PERT AL AHR, PTET re BER THY subQ REBUT. T BULAN TATA, BBE Fe fi LE AM 11/27/2012" Be 2012-11-27". AVAL >o> text = "Today is 11/27/2012. ByCon starts 3/13/2013." >>> import re >>> re.sub(r" (\éH/(\d4] /(\d#)", E\3-\I-\2", text) “Today is 2012-11-27. PyCon starts 2013-3-13." >>> sub()2 1 PBR UEBEDUACAYERSE, OS 2 PERU LE AVE. RAUB BORER BAINES SACRE PSEA BE A ALAT DAA NY AT A PR, Te REPEL IA ERE TEBE. AB ‘MNF >>> import re compile (r* (\d+) /(\dt}/ (\d4) "1 \i-\2", text) "Today is 2012-11-27. PyCon starts 2013-3-13." >>> AEP ARMONEDL, PYLE — R.A: >>> from calendar import month_abbr >>> def change date (m) : mon_nane = month abbr [int (n. group (1)}) return "(} (} {} "format (m.gzoup(2), mon_name, m.group(3)) >>> datepat..sub(change_d "Today is 27 Nov 2012. Py >>> text) starts 13 Mar 2013," PERIL IA RCA BCE “PERC, HH matchOmk findQW El. HH groupOAHK SECA RAE AYSIU A IB BHI BY SCA BR ABI ASP, MURA I Seem SAUCE, AT LMG re.subn0). ‘plan: >>> newtext, n= datepat.subn(r'\3-\1-\2", text] >>> newtext "Today is 2012-11-27, PyCon starts 2013-3-13." 46 B25 2.5.3 itit BRODIE subOWIIZIb, KF TEMP ATU AR IPA TS AT To ATER SG PE YM Ha FFF 9 EW 2 —€§ 1 EH BE Ley 26 URKPADSHAKM CAMS RMB 2.6.1 (laa BRIANA WTOC AER, TT ELE HE CR 2.6.2 RRR BELEK ANG CAB, BOT TGSEGET re BUTE AR AR EAB Se mL re.IGNORECASE fic. fii: ERMA AURBR, ESB PMSA SG DCM AAD IFAD 0 WRAUB IER MARL, REEESI—P SF ORAL (support function ), a fAMTF : return rep F ih fe SP PRCA CF FEMA 47 ) text, flags=re. IGNORECRSE) 2.6.3 itit OF fad MLS TEDL, FHL. re IGNORECASE pail VET AKAD As IE CBRE To RE EDA FE AKG FEM (case folding ) ff) Unicode DOAL EEN] HELE AB. ARAN TFS 2.10 WF 2.7 EMA LACH EM RIAN 2.7.1 fala FRA IE FESS IE UPS SCAR HUES, ALU HET CAAT REVAL SL, FRAT Bet eer ey A DCC. 2.7.2 RRA SSC) LS Zo EE PAC SCAB BRS I AE ASP FF EG HR HH SB HF | BA PATM ), SRO NU, TE FAB: ZVEACL A HESS PAISCAS. (AE, HRPE AP CE TEU PITRE TUL AME, IFLA DCCL AR LE THR i te TW AT REVERE TIN 2 AL Bk, Fe text2 HOF, CHUTE ACR 2 MSS EEE. BUGS TA, HEEROMA iML? mR. asta: >>> str, SA WAVE RCE AR AL CHEAT, BRST HI AVERT 48 B25 2.7.3 tit AHA S TRS OAL (.) PREM SGA EE A, CER P ‘RR FAT HE SP ORE 0 TELE, MUSRDATEM ENR SCAS (CLES) Ae) UEC TE, -CEUCHGRE PRESETS KANT MEDC RCR, kSP SCC PSMA MACA, TOP ENTRAR KINDER. Tete, STAD UC Cy SY AT VEC 28 MSESTRAHEM RAL 2.8.1 fala Sef FTAA MSO — BARUCH AS EEE FCC NE ERS AT. 2.8.2 fRAR FMS A BR As BATT. GUA, PIARUE RG Ci >>> conn >>> text >>> bext2 = =) RUC SAF, HALAS T A) FEAR REDE RC DURE TERE : o) >>> >>> comment. £4 [' this is >>> comment . £4 L >> Be feeveix Malel, oy >>> comment >>> comment [' this is a\n multiline comment * >>> FER MRCP, (2: limita S—-IRISAL CHW, ML RRR, tS BRAT )o 2.8.3 itit re.compile() RCH) F252 —4M4 Hi fre. DOTALL,, 1 AEAF EU FAIA TOP TTA) FEMA 49 PYLAVCAC HARI AE, ERAT AY. Bald: multiline comment '] Pf MATTEL, (EH re DOTALL pric LAE MWC HR LAE 5 TLR Eh RH SLI > BATT AAEU 2.18 WAN TAGS IA Ctokenizing ) mis fa TEMA AT HE A RATL, WT DPE, He Ire XA TE WU ASSOREST, BOR CCT MUS UPR ic AE TE HH LTE» 2.9 4% Unicode LAR—RMRA MBH 2.9.1 faa FEAVIETEM Unicode AFF 484) 2C54 , (HAE SE WG LR IITAT HAF A ABN AG AAP OJ RM 2.9.2 fPRAR E Unicode 1, Fi#CR FEAF AFT BAAS BEAU IP HT BLM) Gi, ia Fas. ape\u00flo" apen\w03030" "spicy Jalapetio" >>> 82 'spiey Ji >>> sl = False >>> Len (sl u >>> Len (52) > BCR ADICAR “Spicy Jalapefio” LABIAL EI. AMIEL TE a HAL AR ( fully composed ) Jat (U+00F1 ). BAMHI ERT Pe A — a #§ (U+0303 )o FFP RET FEB EPR BE, [ALP SCARS APA IE EAT SCE PA Tag AT RPGS MAL, RIO ABE WIE, BEML unicodedata HEHE 50 B25 TRIE: >>> import unicodedata nicodedata.normalize('NFC', st} inicodedata.normalize('NFC', 52) +2 True >>> print (ascii (tl}} ‘spicy Jalape\xflo! inicodedata.normalize('NED', sl} icodedata.nornalize('NED', 52) 4 True >>> print (aseii(t3)] "spicy Jalapen\u03030" >> normalize( fH — TP BBG FF BAK MPL FE UE AEAT « NEC EAR FRET E AUN (BD, MAT REM TERT MUS J. NED ARM BAMA AFT, ETE FNAL TE A DEFT A 0 Python 324 NFKC #l NFKD (MAIS, EAT Ah ES ES TL SMOM TAB. FAN: de> s = "\ufb01! # A single character >> s reir >e> unicodedata.normalize('NFD', s) 10 the combined letters are broken apart here edata-normalize('NEKD', 5) ‘ei >>> unicodedata.normalize ('NFKC', 5) ‘tie >>> 2.9.3 itit HSE AE An a BERL LE ABEL I AE Unicode CAS BUY AE, BLE GABE AE BEARS}, TCHR EEA ATT BEM SSE RE IRL , HET AS CRE HF A BAIL, ABZ BUMAG CASI eon BEADS BE FEM ARTETA ASHES, SECC PE AA TEAS. GN, ABA RE FEMA 51 APRA EPIC (BEAL THETIR Re RRUERC ): a. combining (c) } Mil FIRST unicodedata HIM —+ SET) fe $F THE Sill (EAT AL combining() 2H MEA HORE, AUT EAL AS ML Fo MARU PE PRCT HPAES FPA, CE FTES 0 LIE, Unicode 22-“WEAIEE. SEE AUT MSA, BTDsTAl http:/Avww.unicode.org/faq/normalization.html. Ned Batchelder tH /:(tHAYI43i httpy/nedbatchelder. com/tex/unipain.html XJ Python 84) Unicode AEA T BAA BE. 2.10 FAIERFIATCSREB Unicode +7 2.10.1 jaa BRAVIA ES AGATULSESCAS, (ELIE EES BIL Unicode 4. 2.10.2 MPRA BRUMAUL F re BURA AU Unicode FAP RMT THAR. fil, \d BATA DEACEERE Unicode SFFFF T : t at Ox1007d9ed0> Ht GL THG GE NY Unicode FFF, 1 LAER Unicode 524 (iH AFG LF FFF Jo HOM, CHATACTERS AR Ta TAT >>> arabic = re.compile(' {\u0600-\u06Ef\u0750-\u077£\u08a0-\u08EE]=") >>> SYP TICIC ER AR EIS, — PEPE: 2.9 VW). (ke, IPA AAs SEPT AS TAS BIAS ARE — Heo PRM (SL HEART. IM, MARKY) SIDER 32 B25 WKS HB (case folding ) VARA RA, BRS MMTATH: Je{"stra\oodge’, anos 2.10.3 iit 3E Unicode FUIEN acct 15 — i oh AE ME IN. MRE fk, RRA eee! SIEM ZeASCHE ( http://pypi.python.org/pypi/regex ), FEELS Unicode KS HRBMET TEINS, KERIO AMIE, SISUCUERC 2.11 KFRRPARRRMWSH 2.11.1 aa PRATT AE ER AS TFM. UFeme HHL 2.11.2 fMRI strip BENT FEI AA FAP ARUP IE AUER FRAE A BERAF.. Istrip(VAl strip QT AM ACM, THAW TEADIAT ASR EAT WRU FCB He eR ILS AE, APT HAwANEAT. ik >>> # whitespace stripping >>> 5 = ' hello world TERE AYE AE, LOMAS HATE. FEMA 33 2.11.3 tit GATED ED LA Ea LL SRT HH BC stripO TT. HAN, ALAA MRE, BRASS. TEBE, ARETE SE FFE PAE SCE. i world \nt >>> s = >>> s = >>> s "hello world" >>> BES TATA TRE, MASUR, HCMU ET replace ABLE PA. frldn: >>> s.r SESE EAD HSL EASA PREF ASR TA SEE TEA io, LOMB OCE PREOCAMT. WUFUERORENTE, USBLE TA aA Ret FATE T 5 BALM: open{filename) as f: trip() for line in f) for line in Lines: SKIL, deer lines = (line.strip( for line in NNMIHZ TE BGR PER. ELE, IXIA TOBE RAVE PETE, SURO Te, TET APPEL AY SCAAT _LABSSBUF strip BEE. TSF EA strip BE, MEE TTGEAY wanslateQ A. BIL BAAR SE AEE 2.12 MAWBMAL 2.12.1 ja REAM BAN FE Web TRAP HLA Tepython Pei scrs, SRT SUS. TR PAE ATT Sk AE AHS HE, A RB, HE 34 B25 2.12.2 RERTR SLIEMA A EEE IS, OCT Bh Oy a ATA, ZEAE HST NL , BEATTY RES RA FFF PAB (1/40 strupper()All str.lower() ) ¥63C AEA MTC. fi LM PRE EAL stereplaceQ RX resubQK7GM, Ewa BORE MEAP L. Ul LAH] unicodedata.normalize() RULE LAS, M1 2.9 WAAR. PRATAP APTS, BREE TYE TCM MES , MM RAN stectranslateQ ik. Jy FBAWAICAE, BRAT AN Pik BHR ALE AFES >>> 5 = tpytfion\fis\taxesone\r\a! dos "pytfion\x0cis\tawesome\r\n* >>> BADGE HS. EMMI, FEE APE, PSG translate) 772 + >>> remap = { ord(\e ty ord ("\E") ' ord("\e") + None # deleted ol >>> a = s.translate (remap) >>> a ‘pytfion is avesone\n' »> HYDE, AAU ANE OPERATE CS ES R— PAS Ht LAE TERRELL 5 FY LAA SCP AE RT RAE A AD EH EAH RS YA, RATHI Unicode AFAIK: >>> import unicodedata >>> import sys >>> emb_chrs = dict.fromkeys(c for ¢ in range(sys.maxunicode) if unicodedata, combining (chr (c}}) >>> b= unicodedata.normalize(*NED', a) >> b ‘python is awesone\n! >>> b. translate enb_chrs) “python is awesone\n" >> FEMA 55 FEE MAF, SUT dict. fromkeys() AIL T -MHE ET Unicode HLA FFF MBI BIH None FH. TGA ZiL unicodedata normalizeQ A FRNA BIE, PGS wanslateQ 77 TE TAPR IAT A APS FEAT AT AAA LARA A SAE (AAAS FHF Do BEDE AEI—MANF 0 36 45 TRATES TAT BY Unicode Pik til EFF RH Ell] HS NEAT ASCII ARAB: >>> digitmap = { c: ord('0") + unicodedata.digit (chr(c}} for c in range(sys.maxunicode} if unicodedata.category(chr(c}) == "Nd } >>> Len{digitmap) 460 >>> # Arabic digits >o> x = '\u0661\u0662\u0663" >>> x. translate (digitmap! "123" >> FAA IAT VO fA AM HEA PAI 9 BURA BS SERS CASTE HA WEL, QVGA encode()All decode HREM, ATL : >o> a "pytfion is awesome\n' >>> b = unicodedata.normalize('NFD', a) (lascii', ‘ignore') decode("ascii") ‘python is awesone\n! >>> bene >>> BX HLM normalize() AFI SEX ME SCAM APE RTE JG SENK ASCH SHS AAP T UE fa Pb, SRE RTA BTR ST. TR, BOT AA RATA HBL ASCII FERMI SCART A AH. 2.12.3 itit SCALE AIS — 4 BE al RH A TITER. BERET, TTT BE et. APPEARED str-replace()ili 8 Si fe eey Jy xk —$ BU EWA EE, ECT RLM BA RaeE AT LS RBS: def clean_spaces(s): replace("\r replace("\t!, '") se se 36 B25 s.replace("\#", '") MRA E 2 FAI HAA translate(ek + FM iA TC TIA BPE S 0 F—Fa Uh, AR EAA i es URE, HOMO FFG IE FF 1 ACH AR, KZ, translate() TEBE ISR 0 i PE EAT FEAR AT ABI, ELAR APA, AB RS AYA Ta JEATIONE TERESA, (HAMMAM RITE TR (byte), BE QAR AAR, BAPEATIE MI PeASK 2.13 WMFMAF HR 2.13.1 a RTA ESI SOR SCANT ST CAE 2.13.2 fPRITE PAMPER, ALE AY Yust), rjust()Al center. abil WF: >>> text = ‘Hello >>> text. Ljust (20) ‘Hello World * >>> text rust (20) Hello World" >>> text.center (20) Hello World * >>> STAT ETT ABA] RES — PTE BIE TAG 0 HU: >>> text.rdu format() PSC AT ARETE OFT MES 6 TG EMRE BA's! >t, Be FEMA 37 PUB -APBEROY REINA. Bild >>> format (text, '>20") ' Hello World’ >>> format (text, '<20") "Hello World * >>> format (text, 1°20") Hello World * >>> RURAL LIME LAE, AVAL SE EAE ZTE: >>> format (text, '=>20s") jello World" >>> format (text, '**20s") Hatetiello forld#ee#" >>> HRS MAM, ROHS AT LIE format 77k. fad: >>> (2210s) {2210s} "format ('Hello', 'World') Helle World? >>> format HYIFMEZ— AEH AA EL TATA. CREE EL, RAE ILE Filo UM, PY RS ta ae >>> x = 1.205 >>> format (x, '>10") 1.2345" >>> format (x, '°10.2£") 1.23! >>> 2.13.3 Tit AEHCREE NOC, i ALOE TRMASALSICA, li dod $208" $text "Hello World ' de> "$208" $ text Fello World’ >> (LCE RTOS, POTTS EP ALY format() PAR F IE. format() EWP ERE PAVE LRKE FS, format(Al ENP ERR MMR, HAT EIY IjustO, rjustQ LAR center() vik 3 FE HNELD . © STATE, SHURMENTE, AORIEHTE, BULREEUN IRIE. ieee 38 B25 ABT AB format() a BIN TAS BE ry/ string. html#formatspec. ¥% Python fy ZEARF-AF http://docs.python.org/3/ libra 2.14 FHREBRAH 2.14.1 jaa BATES FAIR TAWA 2.14.2 SERIE WN RAE BE Eh HE AY EAE BE — PF AR EAB, DBA HG EAT Es HEB MR PTT PUA joinQ es. ANIL : >>> parts = [ "Not", 'Chicago?"] WR LATA TT ASAE, (ELA join PEMA FAT EMR — PII. KA PLETE TBD PARE PS yA BE Ae PEI BT ESE A IP, ET SNR, TOL. FMM. SC. DEERE, RR TE PETS LL FF join() PERM MDASATCA To AIR Fe REFS EAD BE AE, PRT PEPE RE Se OD joinQ TGA BH ATER To Te SESERER ARAL PREFER ALI TEMES T >>> SPREE ARTS 4 SUERTE, HREPTIRDPPRT LIE formative, (ekethoe BUES : >>> print(" Ts Chicago >>> print(a + ' ' + b) Is Chicago Not Chicago? >>> FEMA 39 QURESHI ER, A PAE, oP TVAERTERE . ANAT >>> a= 'Hello' "World" ma "HelloWorid’ >>> 2.14.3 itit PRES ERK PERG BETTE AT 5 DB) BEA RR, EL WSS CEM LH RA aE, IB AT OSE BES BB SETI BE 9) — ek FEE AA BR ER EE OC TE BE 8 ORC, He HE NAF AG DL A HE CS ET A EIDE AR BAS AS RPE BAU: se" for p in parts: sip ORM HGS CARAT join 772s BAB VES» BE ET BES ELE TEE FARTS, PRATIRRS MATA BEERS), Bee BO ETHER AIG CAREERS) AA: oes COL 1.19 TF) AEH ee PRE ITAI TeME REE. ast : >>> data = ["ACME', 50, 91.1] join(str(d) for d in data) "ACME, $0, 91.1" >>> PAD BE PAF ERE BES AL, AREAS LES SIR, PRA ERATE HS T-FRLA HU EER ERED PAU ARETE HET AE: printlat ti! tbe tit +c) # Ugly print(':'.join([a, b, cl)) # still ugly print(a, b,c, sep=": # Better ASP AF ERI VO PEPE ARE HII RTE BOM TL EAST 0 HLM, ALTE Bets. # Version 1 (string concatenation) fewrite(chunkl + chunk?) 4 Version 2 {separate 1/0 operations) £.write (chunkl) f.write (chunk?) WTS EAT RABID, ABA — SAAR AS OSE HOR EOE IS PERE, BORED USAT KUO KEANE RE © AT, MRT EEK, IBA PARAS 2s EI FAI REST UOT TR, WBA IAAF BEATE DL. ROLL, AR TEBERT A CT, DA eH A TERY LSE FEE. SRS AA BEY NRTA AY PCS BE Ee UE BiB SEMA, FHL yield RAF MEE Be. aN ATF def sample): yield 'Is' yield 'Chicago" yield 'Not' yield 'Chicago?" KERMA — TA SESE, ABBA AN BT EHF BEE Mh A Ei HOMTBLAT LA join E Ai fal PRE BEE - text = ''.Join(sample()) Bee, WAT LU er Bea NS) VO: for part in sanple(): E.write (part) SCR BATHE LUE BHT SRS VO PRES REACH aE: def combine (source, maxsize) parts = [] size = 0 for part in source: pazts.append part) size += len(part) if size > naxsize: yield ''.join(parts) parts = (] size = 0 yield ''.Join(parts} for part in conbine(sanple{), 32768): E.write (part) FREE FEE NR BO PA Tg ELE A, EE BET 6 FEMA 61 2.15 BRASS 2 eA 2.15.1 jag FOTO — TFB, FORA NITE REY PRED ZEREI F TE 2.15.2 fRAR Python FFAS EERE ETE AF AB PSE RH LF. EL, eS AT DS FF BEY format) AUT. AMALIE : ne} has (n} D3 AYE, MRE BR TM LH SE A TE Et PR), I AY WOK format_map()#il vars(UR AERA, as fallin >>> name = "Guido! AK vars( OG HEE >>> class Info: fil t. Hed: Ti format()#il format_map()lé)— 44H 15 MU fe BE A AE 2 Mb BR SE ELL TEL ‘pian: 62 B25 Fe SLAP AAR AU LMA __missing_OFP EI FILE, abil uF: class safesub(dict): def _missing_(self, key): return '[" + key +")! BUT RAGE format_map( MG ABR: pep deln — # Make sure n is undefined >>> 5. format_map (safesub (vars ())) (n} nessages.! NR eB CCA CAPS A AG BEDI Fe A TRI DR a EE ATS TGA, ALORA -RVERZY “frame hack” (9BEG'. ANBAR : import sys def sub(text) : return text, format_map (safesub(sys._getfrane(1).f_locals}) BEE, FR BRAT DR HRS 1S T >>> name = "Guido" You have 37 messages >>> print (sub ("Your favorite color is (coler)")) Your favorite color is {color} >>> 2.15.3 itit 2K, th Python GRE ATE AYE RABE. CET ARTS PEAS WPCA RC, ABT BLP ra PETE EB SH "guido! >>> "S{name) has &(n) messages." & vars() "ADAG BE PR BCA ERAT AGT. sys._getframe 3k EIR HY PR CT VIE RATT FE PRE BRT g. PERE FEMA 63 "cuide has 37 messages." >>> FATT MELA BAAR TEA (template string) MEH: {HE, format()Al format_map() Iv Heb Le RAE Ib, BEAT K HEHE iG » AHEAD format( yi) Fb A AY VA DENS 48 BT AT IPE EB A TA NE OFF. HOE. BASES), MRM HETE A ROR PAD REE. FEAL B STA FS PIRES) FE RRL ME 0 FMA Ey A JANK)_missing_() TEN ALBAN TTA. FE safesub A, RAT HE MAIR LL, APA SRIl, PC AN Zea KeyBrror Seis, GDI AR-MELZS th SUPERS A BONUS AE HY CHP BER Ty HEHE BD D0 sub() ACHE LT sys._getframe(1) 732 WNT Rw, DTT HE f_locals 3€ FS SEBEL DOME BEE, TEAR AD NY (RS AB ML HES, eDEIT Sei, (HEE HS FAA TE RE AE BS PHT BE A BORE, LATIN. FU ARI MY EE flocals fe —~P FH iE TSC HF BR BCH? Je BE PE WL RAY BK flocals MANA, RII. ATEATTP SEEM AOR. Alte, RAUL PLAYER BEAT BA LR A AB Sh PEL at BN Aes aC a) FS i) AS aeemrtiet 216 RAEN WMS MBA A 2.16.1 ia FATA HOARE FE A, AEDES EAT, I ATT RA oe A BO SEAR o 2.16.2 RRA FULT textwrap BREST SUE SCART IM, (BBLS PBR ETE s = "Look into my eyes, look into my eyes, the eyes, the eyes, 1 the eyes, not around the t lock around the eyes, V look into my eyes, you're under." ZEHLAT VASA textwrap BURL S ART SOR RT SUC EAE >>> import textwrap >>> print (textwrap. fill (s, 70}) Look into my eyes, look into my eyes, the eyes, the eyes, the eyes, not around the eyes, don't look around the eyes, look into my eyes, you're under. >>> print (textwrap. fill (s, 40)) Look into my eyes, look into my eyes, the eyes, the eyes, the eyes, not around the eyes, don't look around the eyes, look inte my eyes, you're under >>> print (textwrap.fill{s, 40, initial_indent=' ')) Look into my eyes, look into ny eyes, the eyes, the eyes, the eyes, not around the eyes, don't look around the eyes, look into my eyes, you're under. >>> print (textwrap.fill(s, 40, subsequent _indent=" ')} Lock into my eyes, look into my eyes, che eyes, the eyes, the eyes, not around the eyes, don't look around the eyes, look into my eyes, you're under. 2.16.3 itit textwrap FIR AE MELA fej AE FLEAS Dy SORT SCAN I EE GS FFT ED —§$ TS eS A SA A I aN EE IS RP MRSA), MGR os.get_ terminal_sizeQ HHL. falda: >>> import os >>> os.get_terminal_size() .colunns 80 >> FiINC) Ja Ts HR Ad — 2 TS ty HG ITY VA Fd sl fa Ae SE 28 FE SADE AS textwrap. Text Wrapper 2 (19 CF ( http://docs.python.org/3.3/library/ textwrap. html# text wr ap.TextWrapper ) LASRAE—AP AEA FEMA 65 2.17 ZE3C ARPA ANE HTML #0 XML Sek 2.17.1 a Beth y M&ttcode RAEI HTML BE XML SCA PHR A EMER MEIC, BE He, TATA, HELLO ERISA (Led< >a ) HE MAb 2.17.2 fRRAR SIRE HE ICAL, {HEF hem. escape() PRBOR 76 BA CFE SEP IR FAT ART HEH, BRAD. fin: >>> = "Elements are written as "tex:".! >>> import html agptext". quot élt;tagsgt; textalt; /tagagt;squots >>> print (i sagégt textslt;/tagsgt;". > AUR BEAN ASCIT SCA, TEELAREL AE ASCII PAPI ENDS IFAS a Sep, ATLAS Ae) 1/0 AICS RRP IY errors='xmlcharrefreplace’ SOK LH. A ‘plane: >>> s = >>> s.encode | errors='xnlcharrefreplace'} b'Spicy Jalapes#241;0" >>> BEBO ISS, ABARAT ATI. WUC BR be AEMLEE ATM BR XML, 4 o SABO L, BET Ae fe re BUHAY EE, i HY AALS AP ATM ot XML fF 38 8 PD BE RTI FAROE : >>> s = "Spicy équot;Jalapea#2 >>> from html.parser import #TNLi >>> p = ATMEParser () >>> pun Wh FHA ATE ape (S) 66 B25 "spicy "Jalapeiio"." >>> >>> t= "The prompt is éaty >>> from xml.sax.saxutils import >>> une 2.17.3 itt fe HTML Bt XML CPST, ii YS RSE Ah: AAG TURE 4 A AI print eH th Bea AS FFF SE BOF FEMI. fai PTT LMR btml.escape( HX FEY TARR. URLs BERR ISCAS (AW, HE HTML 2% XML Sep PRAT NEE), AUS {@ xml.sax.saxutils.unescape(iXFEM TARE LS. (, Bel BA ee PAE TART fa EI. PM, AOR ALANS HTML 2% XML, {@ html.parser 2X xml.etree.ElementTree iX FEES A THER MTA AAG LAT REMC EG HY AL PAG. ™ BOO, A TE 2.18 ASSIA 2.18.1 ia BATAAN, RU DEBIETS EMEDIA (stream of tokens Jo 2.18.2 ARR ABATE SAF SCA text = "foo = 234 42 + 10" FE MAGS AAI, FPR A UL ACR. Hef AEA RATER ARSENAL, AMI, BEAT AT MEAS TAF RE MI FEE ERE; tokens = [('NAME cg APRA, OS AUN TA REN, CL. Be] LOWE AAA AARAD SEIN, aN LMI 2P [a~2B-Z_] [a~ZB-2_0-3]*) " FEMA 67 NUM =r (2P\ de) © PLUS = r* (P\+) * TIMES = z! (?P\*)" EQ rt (2P=)" WS = 5! (2p\s+) master_pat = re.compile("|'.join{[NAME, NUM, PLUS, TIMES, 2, ®S]}) PEACE MAES P , FB W2P 3 FFAS 29 2 SEIAS 2 PRD UE StH. RMI. FE PARRA ARORA scanner TEAL. ITE ONE TAT Se, TA RENI SOA TAAL) match), 2K DEAR — PEEL. FITCH US BIS SFT RE OAT PEO >>> scanner = master_pat.scanner('foo = 42") >>> scanner.mateh() <_sre.SRE Match object at 0x100677738> >>> _.lastgroup, _.group{) CNAME, "fo >>> scanner.match () <_sre.$RE Match object at 0x10067773> >>> _.lastgroup, _.group() ows 4 >>> scanner.match () <_sre.SRE Match object at 0x100677738> >>> _.lastgroup, _-group) CEO, t=) >>> scanner.mateh () <_sre.SRE Match object at 0x100677738> >>> _.lastgroup, _.group) ows, >>> scanner.natch (] <.sre.SRB Match object at 0x10067 >>> _.lastaroup, _.eroup() (owt, 42") >>> scanner.natch() > BAVA TEETER He ARES, BAT ET AEE ST PER a I te MERE ERECH 28 BRIT : from collections import namedtuple Token = namedtuple('Token', {‘type', 'value'}) 68 B25 def generate tokens (pat, text}: scanner = pat. scanner (text] for m in iter(scanner.match, None}: yield Token(m.lastgroup, m.group()) # Example use for tok in generate tokens(master_pat, ‘foo = 42"): print (tox) # Produces output # Token (type='NOM", value='42") ARAL RAPD OR CH GTB, BEE AE A RI, BEE ae AERA. CALM, PATI VERE AT TNT STA IC tokens = (tok for tok in generate tokens (naster pat, text) if tok.type t= 'WS!) for tok in tokens: print (cok) 2.18.3 iit ASF MGB CAE OT, ARTETA hE, BEGET AN SAR. 4 JUD REA ERIE Tb. TS, EP PE BUTERA CAS PH ESI, HB EE AV RAT — APS I FY AE I Pes ST LEE HO 0 UNS BAT FEAT AR AB DC PY SCAS, UHL ERR PP Ik © BLEED TP Ais BE EL TA NY as Se CWS )o BRECHRICTE LEM AeIATE (Ll re.compile('|join([NAME, NUM, PLUS, TIMES, EQ, WS])) ) PHUMUF IPE AMEE. MRETTIC MCI, re BURR EAU YRC AC FALE, WSR RTT SEMRSUEIS —PRER RUIN FBI, BRS IS MR FAROE. a falan F us LT = rt (2Peht><)! LE = r'(2BchED<=)! EQ = r'(?PcED>=)' 2 PARA CERI —17 ), Du CRRA HU CaR < VERE LT ('print) ' MIME = r"( NAME> (a~28-2, naster_pat = re.compile('|".join{[PRIND, NAME])} for tok in generate _tokens(master_pat, "printer'): print (tok # output. tr HS FMEA AEE, Be AR PyParsing BK PLY XEEM EL. 47% PLY (IPISte BaP Ube 2.19 45 —“7S ej BANE TEAR AT es 2.19.1 jag BATTS BE ALS — 2A A A RT AS, DATE RE akc tI BYALA. 0 TERA BOLUM ay PF, AAC HR AP Ud > SS RAT TT AN SRP TREE AR 2.19.2 RRR Cok Mah, BATHE BNF 3% EBNF (ty2saE Xt TRADE: expr BER: STEAMED ICA bo BBM, ALA HEHTTESONUN . LOaN, SH Re test, itt term ::= term * factor | term / factor If Saket A EBNF AVES Ma PIES: 70 B25 42 EBNF '}, SBME .. PATA ME, * ORS PM SL (AME TEM PES HY SE SHIA D0 SAE, MUSES BNE BABE, PPLE EF cL UU CO — APU Sh, AMUN SAT Be MAES BS ORE). ARR BL, FEMI INR IR (ISO A CARA MUG, BLL BNF RTE AEH. WT BEN, (GIF AEM DT VRE 3 + 4 * 5 BORE PEAS, ARSC FEI i Bib, ROTARY 2.18 RATA IR. SIAN HEAT ABE PROF ICRA; NOM + NUM * NUM AGHLIP RE, SPT ARRLIE BGT BHR AY J SOE CCEA iC Ls expr expr erm { (+[-) term }* factor { (*|/) factor }* ( (4|-} term }* WOM { (¥I/) factor }* { (+1-) term }* NUM { (4[-) term }* NUM + term { (+/+) term }* NUM + factor ( (*|/) factor }* { (+|-) term }* NOM + NUM { (*1/) factor} { (+|-) term }* (UM = NUM * factor { (*|/) factor }* { (+I-) term ]* NOM + NUM * NUM { (*|/) factor }* { (H+) term }¥ NUM + NUM * NUM { (+/-) term }¥ expr ii= NUM + NUM * NUM SEIT AS FAY PAG BE FE — BEING), SSC LBS A UA Sik J DC CA LI ED HS Mi Aric NUM, CERES Fe TE CEE RCC -BBSY AAT, HN ate SIR — Prick, MUA. “4 BUTE TERE Bic AY, A PHUASEERBSS ({ *) factor }*) BRAT. CETTE, BS ALFA ERS B56 ATE DECAY TA TAI WD TE AST iT Ms, FT 1D 5 FR as LF RECT PRE import ze import collections # Token specification NUM = x! (2P\d+) * PLUS = r!(2P\+)" FEMA 7 MINUS = x? (?P<¥INUS>-)" TIMES = r* (2P\*) ' DIVIDE = r* (2P/)" LPAREN =r! (2P\ () " RPAREN = r* (22\s#)" master_pat = re.compile("|".join{ (NUM, PLUS, MINUS, TIMES, DIVIDE, LPAREN, RPAREN, WS])) # Tokenizer Token = collections.nanedtuple("Token', ['type!, 'value!]} def generate tokens (text): scanner = master_pat scanner (text) for m in iter (scanner.match, None): tok = Token(m.lastgroup, m.group()) Lf tok.type [= "WS": yield tok # Parser class ExpressionBvaluator: Bach method Inplenentation of a recursive descent parse: inplenents 2 single grammar rule. Use the ._accept() method to test and accept the current lookahead token. Use the . expect () method to exactly match and discard the next token on on the input (or raise a Syntaxfrror if it doesn't match). def parse (self, text} self.tokens = generate tokens (text) self,tok = None # Last symbol consumed self.nexttok = None # Next symbol tokenized self._advance|) # Load first lookahead token return self.expr() def _advance (self): "Advance one token ahead’ self.tok, self.nexttok = self.nexttok, next(self.tekens, None) def _accept (self, toktype! “Test and consume the next token if it matches toktype’ if self.nexttok and self.nexttok.type == toktype: self._advance() return True 72 B2e else: return False def _expect (self, toktype) : "consume next token if it matches toktype or raise SyntaxError' if not self. accept (toktype raise SyntaxError('Expected ' + toktype) # Grammar rules follow def expr (sels) “expression em | (t2"['") term pe" exprval = self.term() while self, accept ("PLUS") or self. accept (*MINUS") : op = self.tox.type right = self.term(] PLUS': prval += right elif op == 'INUS exprval -= right return exprval if op def term(self): "term ::= factor { (#*|"/") factor }** termval = self.factor(} while self. accept ('TIMES') or self. op = self.tok.type cept ("DIVIDE") : right = self. factor(} “rrmes* ternval * right elif op == "DIVIDE": ternval /= right if return terval def factor (self): "factor ::= NUM | ( expr)" if self._accept (NUM! return int (self. tok. value} elif self. accept ("LPAREN") exprval = self-expr() self._expect ("RPAREN') return exprval FEMA 73 raise Syntaxirror ("Expected NUMBER or LPAREN") PREVA SE SCS Ty SEU ExpressionEvaluator 817 fH - >>> e = ExpressionBvaluator () >>> e.parse('2") 2 >>> evparse('2 + 3") 5 >>> e.parse('2 +3 * 4") uu po e.parse('2 + (2 + 4) #5") 37 pop e.parse('2 + (3 +4 4)") Traceback (nost recent call Last): File "", Line 1, in File "exprparse.py", Line 40, in parse return self.expr() File "exprparse.py", line 67, in expr right = self.tern() File "exprparse.py", line 77, in tern self. factor) File "exprparse.py", line $3, vermval exprval = self.expr() File “exprparse.py", line 67, in expr right = self.term(} File "exprparse.py", line 77, in term ternal = self.factor\) File "exprparse.py", line 97, in factor raise SyntaxError ("Expected NUMBER or LPAREN") SyntaxError: Expected NUMBER or LPAREN >>> ARATE MIA BLATT TL, AB REG BBM ExpressionEvaluator AHEM LEM, “PTT SRE FR PRT s ExpressionTreeBuilder (2xpressionEvaluator] def expr (self): expression :i= term { ("#"|'-") term)" exprval = self.term() while self. accept(*PLUS') or self. accept ('MINUS") : op = self.tok.type right = self.term() *PLUS*: if op 74 B25 exprval = ('+', expzval, right) elif op == "MINUS" exprval = ('-', exprval, right) return exprval def term(sel£): "term i= factor { ('*"|"/") factor }" termval = self.factor() while self. op = self.tok.type right = self. factor() if op == "TIMES": termval = ('*", termval, right) elif op == 'DIVIDE': ternval = ('/', termval, right) return terval def factor (self): "factor i:= NOM | ( expr )" if self. accept ("NUM return int (self.tok.value} elif self._accept ("LPAREN") : exprval f.expr () self._expect (' RPAREN"] return exprval else: raise Syntaxfrror('Expected NUMBER or LPAREN") Finials TEE Ane EEA: >>> e = ExpressionT'reeBuilder () >o> e.parse('2 +3") oH, 2,3) po> evparse('2 + 3.* 4") CF 2, 8 por evparse('2 + (3 + 4) 54) CF BO OH, a, SD) >>> evparse('2 +3 + 4") (en 4, 2 3b A >> 2.19.3 iit ept ('TIMES") or self, accept ("DIVIDE"): SARE TER AS EE, ARS HDPE TS RE A SLT] RL FEMA 75 IE FE FBR UE. ETEK ALAR TRAN, DSA DSR AN PERE HME KR. Tee, REA RIE RT, BERS — RIT PROT RE, REE ORL. FR BEE ARI TERUMIGEAE I — PRT 5 PAG, RATT TEE A PEAY; expr iis term { ('+"/'-") term }* term ii= factor ( (""|"/") factor }* factor r= '(" expr")! | now BET TAAR FO PEKG EB TL AT ITE; class Expressionivaluator: def expr(self): def term(self): def factor (self): FET Ta FH FE FAB 18] BR ——€§$oh 0 FT FL 9 GB PH eG SS, ETSY SREP US RIC 0 IAHR EE MAb, CAT A AY El AA A A HT A Ri, MUR REE TOOL EPR ER. BEAU, te BENET Pi Be Be Se TA. URAL AY MES RRICRE I-A RUI2 Bs (AUN, term BRHF factor ), SRB A IIA. ROLLA AY “BE” R4}—§$ Fee PEI — RAL, UU Pee AMC ATI IT (RO, ARUN factor = "Cexpr HX expr HYFAFA Jo ROBLAA PI “WRIA” FBS). © ARUP AS FAME SI — RTT S (BIC), FERRE B— Mn, FEA EA METE AUER. WERAEDERC, ROSULURAGTR. AWE HM _expect() DESTINY © WRU I BME Sb iP ES APT EA ERE (HIB), MUTE EA AYRES Kania, HATA TCR ATES Rb, BLA SEES accept kM AMIE. BAT KUR_exceptOMSH EI, 4e_accept() PMR AVCHCHE A, BATBEST PR AF, (UNRATE, ee A fey AP.) LL AR AR GRETA TY LAMREEBEAT FS De 76 B25 PALI SLA ASE ABAY CAL expr osterm { (1H |“) term }*) BERL while HAZ ILY . ARCEMIS HR RAE BIT A AY EET, EBFC ARSE SALI ho SHE THRAMUUBE ARSE, Ne RI LR. BLA TE TLE TOME BIT. Hea, TESA, Zest BREA IDGRE BRAEMAR AER, PER TUANHRA MU TTE be) tt. FRAT ES WY FARRER ML, (ELAR P APT a mY LA SCA SE A fi, Python (CRSA Fei SEF ERT RET 6 RAR RR, LGHLD KA Python U4 US PAY Grammar/Grammar SCR FRIESE» HIE, BA FT REL DSR BE TIT 45 BB BFAD FABRE BUREAUS ABIES LIN , ABBE ALBIS FETA IER aI, ABBR a BEAM PERU FY SLU items ::= itens '," item | item TEBE AIEDT, BATTAT RE SAREE X items() IK: def itens(selé): itensval = self.itens() if itemsval and self, accept (*,"): itemsval .append(self.item(}} else: itemsval = [ self.item() ] MME — fei] REG AMAT ANIL SER LGR STA — PICT I FATAL HES A BIE UI A ERATE 5 PAM, RATT REAR SHE Ze sO RELL ROMP UITA ASTIE SORE expr t= factor ( (7/1/41) 4/") factor 1 factor ::= '(' expression ')! xo ERE BAR BEBE ILI, LE A RAE EA DRE MOF fio POMUDE, Zeist “3 + 4 * 5” SRN 35, MAE TBUNIN 23, PAIL AE BENGMAY “expr” A “term” SLUM LRTT PEE IR AOE OE FACIES ARN TEREEDT, EEA PyParsing 8% PLY OPEN MDT TAL. WIRE JA PLY FSi, ARUTHPEAR AA SUA TRA : FEMA 7 fron ply.lex import lex from ply.yace import yace # Token list tokens = # Ignored characters t_ignore = ' \t\a" # Token specifications (as regexs) t PLUS = r'\+! t MINUS = rt" t_TIMES = r'\#" t_DIVIDE = r1/* t APAREN = r!\(" {_RPAREN = ='\)' # Token processing functions def t_NUM(t): r\det t.value = int(t.value) return t # Error handler def t_error(t}: print ("Bad character: (!r}'.format(t.value(0])) teskip(1) # Build the lexer lexer = lexi) # Granmar rules and handler functions ef p_expr(p): expr : expr PLUS term | expr MINUS texm if pli p(0] = pill + pial elif p[2] =" pf0] = pt) - pla] det p_expr_term(p): 'NOM', "PLUS", 'MINUS', 'TIMES', "DIVIDE, "LPAREN', "RRAREN' ) 78 B2e expr : term plo) = pil) def p_term(p): term : term TIMES factor | term DIVIDE factor if pl2] == pt0] = pit) * pla) elif pl2] == 17": pid} = pli] / pt3) def p_term factor (pl: term : factor pio] = pill def p_factor(p}: factor + NUM (0) = pit] def p factor_group(p) : factor + LPAREN expr REAREIT pCO) = pli def p_error(p): print ('Syntax erzor') parser = yaco() FETE OM RUSE 2s TAS AR ABE — AE BS OOK ESL BRAT i eS DE FRR AS SY EIU ESR, VA Be DE PCE AES LS a BE Jk A AFT. ESR TAR TAR. BCE SRC GABE EIR. FTA SIRT RES Belt a >>> parser.parse('2") 2 >>> parser.parse('2+3") FEMA 79 5 >>> parser.parse('2+ (344) 45") 37 >>> BRAG Le Sid BE TSE — SD A » BAST RS AL EEE A FRB, Ange Pete ny ISAC Z PII. (He, AER FPWR STS RATER BEI. Python AaFiY ast PREHEAT. 2.20 FPR LHTLARE 2.20.1 (agi FRITS WAS (Byte Sting) LAMP AILALSCAPME (Gin, IRA}, AAPM), 2.20.2 MRA PWR OAS BAIA PRES iL: "Hello World" DURUM CEP PRLEL EDA. li yeeaczay (ote Weel! 1 toni ah (hte) BATT LAGE EB LIAS TE URES ART ERIC CBRE, (ELAR SR AR a TF BES EB 80 B25 JERE. ANAL + >>> >>> data = b'POO:BAR, SPAM" >>> import re >>> re.split{"[t,]",data) Traceback (most recent call last): File "", line 1, in al/Lib/python3.3/re.py", line 191, in split compile (pattern, flags) .split(string, maxsplit) File "/use/’ return ‘TypeError: can't use a string pa ern on a bytes-like object ittb'[:,]',data) # Notice: pattern as bytes bIBAR', b'SPAM') 2.20.3 itit BRAM OE IIT es, JUPAS ELE CAR EAE HL 7 AR DR PT te A HET. (ALL, BRAILLE KES. BM: >o> a= Hello fiorld’ ——# Text string >>> ald] iE >> alt] tet >>> b= bliello World’ —# Byte string >>> bI0] >> bli] 101 >> SIGE: EISELE IAG IT A BT DT I FE SO, FOREARMS een, ALE EDS REA TANT, BRAR AAS SASF ARLE : >>> s = b'Hello World’ >>> print (s) b'Hello World" # Observe b'...” >>> print (s.decode ("ascii") ] Hello World >>> TYREE, ZEW LR BE APB ABE SREY FEMA 81 >>> b'#10s §10d $10.28" § (bTACHZ", Traceback (most recent call last: File "", line 1, in >> b'{} 1) ()'.format (b'ACME", 100, 480.1) Traceback (most recent call last): File "", line 1, in AttributeBrror: 'bytes’ object has no attribute 'fornat! >>> AN SRARCLE SEH LABEL SEL AY CASA HB A TE 0 AAI : de> "{510s) {:10d} 510.2)". format ("ACHE", 100, 490.1) .encode ("ascii") bIACME 100 490,10" >>> SRT, Ag DETER AY AW A So CS ee REO EE LST TI eG ER BAR SPRAE » PRD, MEE SAAT AE SOA FE RAI OTE, OCF FGM BELITTLE: >>> 4 Write a UTF-8 filenane >>> with open{"jalape\xflo.txt', 'w!) as fr E.weite('spicy') >>> # Get a directory listing >>> import os >o> os.listdir('.") # Text string (names are decoded) (Jalapefo.txt"] >e> os.listdir (o".") # Byte string (nanes left as bytes) (b"jalapen\xcc\x830. txt") >> TATE ERM TERE AY ASAE BEN BRE I SEBO PRA AAMAS WETUREL. Ta A RAAN, SOK eT BRGY UTE-8 Sif. FRI IGS 5.15 Wo HUT BEBE EL, EMS BEFE BAY HE 2s EE LAr YS BE I PE EE SCARE AE EBT EMR U.S TERRA Wi SE BE ESC ASAE A HES ECD Unicode MIRAE FFB ), 15K A HOH SS SSE RLS A tReR HS. RATE SRE A Python PT VPe SBA IEARE ERAS, BORN T IE KREME, FUT RAE DANES A ERSTE. HUE BL, MUL BE Ie SORATZG, CORRE PLACA FE REF, ASSET A 82 B25

You might also like