11. Համառոտ շրջայց Ստանդարտ գրադարանում/Մաս II

Այս երկրորդ շրջագայությունը ներառում է ավելի առաջադեմ մոդուլներ, որոնք աջակցում են մասնագիտական ​​ծրագրավորման կարիքներին: Այս մոդուլները հազվադեպ են լինում փոքր սկրիպտներում:

11.1: Արդյունքների ֆորմատավորում

The reprlib մոդուլը տրամադրում է տարբերակը repr() հարմարեցված է մեծ կամ խորը ներդիր բեռնարկղերի կրճատ ցուցադրությունների համար.

>>>

The pprint մոդուլն առաջարկում է ավելի բարդ հսկողություն ինչպես ներկառուցված, այնպես էլ օգտագործողի կողմից սահմանված օբյեկտների տպագրության վրա այնպես, որ ընթեռնելի լինի թարգմանչի կողմից: Երբ արդյունքը մեկ տողից երկար է, «գեղեցիկ տպիչը» ավելացնում է տողերի ընդմիջումներ և ներքև՝ տվյալների կառուցվածքն ավելի հստակ բացահայտելու համար.

>>>

The textwrap մոդուլը ձևավորում է տեքստի պարբերությունները՝ հարմարեցնելով էկրանի տվյալ լայնությանը.

>>>

The locale մոդուլը մուտք է գործում մշակույթի հատուկ ձևաչափերի տվյալների բազա: Locale-ի ձևաչափի ֆունկցիայի խմբավորման հատկանիշը տրամադրում է խմբային բաժանարարներով թվերի ձևաչափման ուղղակի եղանակ.

>>>

11.2: Գայթակղություն

The string մոդուլը ներառում է բազմակողմանի Template դաս՝ պարզեցված շարահյուսությամբ, որը հարմար է վերջնական օգտագործողների կողմից խմբագրման համար: Սա թույլ է տալիս օգտվողներին հարմարեցնել իրենց հավելվածները՝ առանց հավելվածը փոփոխելու:

Ձևաչափն օգտագործում է տեղապահների անունները, որոնք ձևավորվել են $ Python-ի վավեր նույնացուցիչներով (այբբենական նիշ և ընդգծում): Տեղապահը փակագծերով շրջապատելը թույլ է տալիս դրան հաջորդել ավելի շատ ալֆանա-թվային տառեր՝ առանց միջանկյալ բացատների: Գրել $$ ստեղծում է մեկ փախած $:

>>>

The substitute() մեթոդը բարձրացնում է ա KeyError երբ տեղապահը չի տրամադրվում բառարանում կամ հիմնաբառի արգումենտում: Փոստի միաձուլման ոճի հավելվածների համար օգտատիրոջ տրամադրած տվյալները կարող են թերի լինել և safe_substitute() մեթոդը կարող է ավելի նպատակահարմար լինել. այն անփոփոխ կթողնի տեղապահները, եթե տվյալները բացակայեն.

>>>

Կաղապարի ենթադասերը կարող են նշել հատուկ սահմանազատող: Օրինակ՝ ֆոտոզննարկիչի խմբաքանակի վերանվանման ծրագիրը կարող է ընտրել տոկոսային նշանները տեղապահների համար, ինչպիսիք են ընթացիկ ամսաթիվը, պատկերի հաջորդականության համարը կամ ֆայլի ձևաչափը.

>>>

Կաղապարների մեկ այլ կիրառություն ծրագրի տրամաբանությունն առանձնացնելն է մի քանի ելքային ձևաչափերի մանրամասներից: Սա հնարավորություն է տալիս մաքսային ձևանմուշները փոխարինել XML ֆայլերով, պարզ տեքստային հաշվետվություններով և HTML վեբ հաշվետվություններով:

11.3: Երկուական տվյալների ձայնագրման դասավորությունների հետ աշխատելը

The struct մոդուլը ապահովում է pack() և unpack() փոփոխական երկարության երկուական ձայնագրման ձևաչափերով աշխատելու գործառույթներ: Հետևյալ օրինակը ցույց է տալիս, թե ինչպես կարելի է պտտել վերնագրի տեղեկատվությունը ZIP ֆայլում՝ առանց օգտագործելու zipfile մոդուլ. Փաթեթի կոդերը "H" և "I" ներկայացնում են համապատասխանաբար երկու և չորս բայթ անստորագիր թվեր: Այն "<" ցույց է տալիս, որ դրանք ստանդարտ չափս ունեն և քիչ էնդյան բայթերի կարգով.

11.4: Բազմաշղթաներ

The Threading-ը հաջորդականորեն կախված չկախված առաջադրանքների անջատման տեխնիկա է: Թեմաները կարող են օգտագործվել հավելվածների արձագանքման բարելավման համար, որոնք ընդունում են օգտվողի մուտքերը, մինչդեռ մյուս առաջադրանքները աշխատում են հետին պլանում: Կապակցված օգտագործման դեպքն աշխատում է I/O այլ շղթայի հաշվարկներին զուգահեռ:

Հետևյալ կոդը ցույց է տալիս, թե ինչպես է բարձր մակարդակը threading մոդուլը կարող է առաջադրանքներ կատարել ֆոնային ռեժիմում, մինչ հիմնական ծրագիրը շարունակում է աշխատել.

Բազմաթելային հավելվածների հիմնական մարտահրավերը տվյալներ կամ այլ ռեսուրսներ կիսող թելերի համակարգումն է: Այդ նպատակով, threading մոդուլը տրամադրում է մի շարք համաժամացման պրիմիտիվներ, ներառյալ կողպեքները, իրադարձությունները, պայմանի փոփոխականները և սեմալիստները:

Թեև այդ գործիքները հզոր են, դիզայնի աննշան սխալները կարող են հանգեցնել խնդիրների, որոնք դժվար է վերարտադրել: Այսպիսով, առաջադրանքների համակարգման նախընտրելի մոտեցումը ռեսուրսի ողջ հասանելիությունը կենտրոնացնելն է մեկ թեմայում և այնուհետև օգտագործել queue մոդուլ՝ այդ շարանը սնուցելու այլ թեմաների հարցումներով: Դիմումներ օգտագործելով Queue միջթելային հաղորդակցության և համակարգման օբյեկտները ավելի հեշտ են նախագծվում, ավելի ընթեռնելի և ավելի հուսալի:

11.5: Փայտամթերում

The logging մոդուլն առաջարկում է անտառահատումների ամբողջական և ճկուն համակարգ: Ամենապարզ դեպքում տեղեկամատյանների հաղորդագրություններն ուղարկվում են ֆայլ կամ դեպի sys.stderr:

Սա տալիս է հետևյալ արդյունքը.

Լռելյայնորեն, տեղեկատվական և վրիպազերծող հաղորդագրությունները ճնշված են, և ելքը ուղարկվում է ստանդարտ սխալի: Արդյունքների այլ տարբերակները ներառում են հաղորդագրությունների երթուղում էլփոստի, տվյալների գծապատկերների, վարդակների կամ HTTP սերվերի միջոցով: Նոր զտիչները կարող են ընտրել տարբեր երթուղում՝ ելնելով հաղորդագրության առաջնահերթությունից. DEBUGINFOWARNINGERROR, եւ CRITICAL.

Գրանցման համակարգը կարող է կազմաձևվել անմիջապես Python-ից կամ կարող է բեռնվել օգտագործողի կողմից խմբագրվող կազմաձևման ֆայլից՝ հարմարեցված գրանցման համար՝ առանց հավելվածը փոխելու:

11.6: Թույլ հղումներ

Python-ը կատարում է հիշողության ավտոմատ կառավարում (հղումների հաշվում օբյեկտների մեծ մասի համար և աղբի հավաքում ցիկլերը վերացնելու համար): Հիշողությունն ազատվում է վերջին հիշատակումը վերացնելուց անմիջապես հետո:

Այս մոտեցումը լավ է աշխատում հավելվածների մեծ մասի համար, սակայն երբեմն անհրաժեշտ է լինում հետևել օբյեկտներին միայն այնքան ժամանակ, քանի դեռ դրանք օգտագործվում են որևէ այլ բանի կողմից: Ցավոք սրտի, դրանց պարզապես հետևելը հղում է ստեղծում, որը նրանց մշտական ​​է դարձնում: Այն weakref մոդուլն ապահովում է օբյեկտներին հետևելու գործիքներ՝ առանց հղում ստեղծելու: Երբ օբյեկտն այլևս կարիք չկա, այն ավտոմատ կերպով հեռացվում է թույլ ռեֆերանսի աղյուսակից և հետ կանչվում է թույլ ռեֆերանսի օբյեկտների համար: Տիպիկ հավելվածները ներառում են քեշավորման օբյեկտներ, որոնց ստեղծումը թանկ է.

>>>

11.7: Գործիքներ ցուցակների հետ աշխատելու համար

Տվյալների կառուցվածքի շատ կարիքներ կարող են բավարարվել ներկառուցված ցուցակի տիպով: Այնուամենայնիվ, երբեմն անհրաժեշտություն է առաջանում այլընտրանքային իրագործումների՝ տարբեր կատարողական փոխզիջումներով:

The array մոդուլը ապահովում է array() օբյեկտ, որը նման է ցուցակի, որը պահպանում է միայն միատարր տվյալներ և ավելի կոմպակտ պահում: Հետևյալ օրինակը ցույց է տալիս թվերի զանգված, որը պահվում է որպես երկու բայթ անստորագիր երկուական թվեր (տիպային կոդ "H") ոչ թե սովորական 16 բայթ յուրաքանչյուր մուտքի համար Python int օբյեկտների կանոնավոր ցուցակների համար.

>>>

The collections մոդուլը ապահովում է ա deque() օբյեկտ, որը նման է ցուցակի, որն ունի ավելի արագ հավելվածներ և դուրս է գալիս ձախ կողմից, բայց ավելի դանդաղ որոնումներ՝ մեջտեղում: Այս օբյեկտները հարմար են հերթերի և լայնության առաջին ծառի որոնումների իրականացման համար.

>>>

Ի լրումն այլընտրանքային ցուցակների իրականացումների, գրադարանն առաջարկում է նաև այլ գործիքներ, ինչպիսիք են bisect մոդուլ՝ տեսակավորված ցուցակները շահարկելու գործառույթներով.

>>>

The heapq մոդուլն ապահովում է կույտերի իրականացման գործառույթներ՝ հիմնված կանոնավոր ցուցակների վրա: Ամենացածր արժեք ունեցող մուտքը միշտ պահվում է զրոյական դիրքում: Սա օգտակար է հավելվածների համար, որոնք բազմիցս մուտք են գործում ամենափոքր տարրը, բայց չեն ցանկանում գործարկել ամբողջական ցուցակի տեսակավորում.

>>>

11.8: Տասնորդական լողացող կետի թվաբանություն

The decimal մոդուլն առաջարկում է ա Decimal Տվյալների տեսակը տասնորդական լողացող կետի թվաբանության համար: Ներկառուցվածի համեմատ float Երկուական լողացող կետի իրականացում, դասը հատկապես օգտակար է

  • ֆինանսական ծրագրեր և այլ կիրառումներ, որոնք պահանջում են ճշգրիտ տասնորդական ներկայացում,
  • ճշգրտության վերահսկում,
  • իրավական կամ կարգավորող պահանջներին համապատասխան կլորացման նկատմամբ վերահսկողություն,
  • զգալի տասնորդական վայրերի հետևում, կամ
  • հավելվածներ, որտեղ օգտագործողը ակնկալում է, որ արդյունքները կհամապատասխանեն ձեռքով կատարված հաշվարկներին:

Օրինակ, 5 ցենտ հեռախոսի լիցքավորման վրա 70% հարկի հաշվարկը տալիս է տարբեր արդյունքներ տասնորդական լողացող կետով և երկուական լողացող կետով: Տարբերությունը նշանակալի է դառնում, եթե արդյունքները կլորացվեն մինչև մոտակա ցենտը.

>>>

The Decimal Արդյունքը պահում է հետին զրո՝ ավտոմատ կերպով ենթադրելով չորս տեղային նշանակություն երկու տեղ նշանակությամբ բազմապատիկներից: Տասնորդականը վերարտադրում է մաթեմատիկան այնպես, ինչպես արվում է ձեռքով և խուսափում է խնդիրներից, որոնք կարող են առաջանալ, երբ երկուական լողացող կետը չի կարող ճշգրիտ ներկայացնել տասնորդական մեծությունները:

Ճշգրիտ ներկայացումը հնարավորություն է տալիս Decimal դաս՝ մոդուլային հաշվարկներ և հավասարության թեստեր կատարելու համար, որոնք հարմար չեն երկուական լողացող կետի համար.

>>>

The decimal մոդուլն ապահովում է թվաբանությունը այնքան ճշգրիտ, որքան անհրաժեշտ է.

>>>

ArmenianEnglish