
Python programmalastırıw tilin úyreniw 4-BÓLIM_(Tipler hám Operaсiyalar)
.pdfII BÓLIM
Tipler hám Operaсiyalar
4-BAP
Python Obyekt Tipleri menen Tanıstırıw
Bul bap Python tilin úyreniwdi baslaydı. Ápiwayı túrde aytqanda, Pythonda biz zatlar menen is isleymiz. "Isler" qosıw hám biriktiriw sıyaqlı operaсiyalar túrinde boladı, al "zatlar" – bul biz usı operaсiyalardı orınlaytuǵın obyektlerge tiyisli.
Kitaptıń bul bóliminde biz usı zatlarǵa hám baǵdarlamalarımız olar menen isley alatuǵın nárselerge itibar qaratamız.
Rásmiy túrde aytqanda, Pythonda maǵlıwmatlar obyektler túrinde boladı – ya Pythonnıń ózi támiyinleytuǵın dáslepki obyektler, ya bolmasa biz Python yamasa C keńeytiw kitapxanaları sıyaqlı sırttan til quralların paydalanıp jaratqan obyektler. Biz bul anıqlamanı keyinirek bekkemlesek te, obyektler tiykarınan mánisleri hám baylanıslı operaсiyalar toplamları bar yadtıń bólekleri bolıp tabıladı.
Obyektler Python baǵdarlamalastırıwdaǵı eń tiykarǵı túsinik bolǵanlıqtan, biz bul baptı Pythonnıń dáslepki obyekt tiplerin kózden ótkeriwden baslaymız.
Biraq, kirisiw retinde, dáslep bul baptıń ulıwma Python kórinisine qalay sáykes keletuǵının anıq kórsetip óteyik. Anıǵıraq kózqarastan qaraǵanda, Python baǵdarlamaların tómendegidey etip modullerge, qáliplerge, ańlatpalarǵa hám obyektlerge bóliwge boladı:
1.Baǵdarlamalar modullerden quraladı.
2.Moduller qáliplerdi óz ishine aladı.
3.Qálipler ańlatpalardı óz ishine aladı.
4.Ańlatpalar obyektlerdi jaratadı hám qayta isleydi.
3-bapta moduller haqqındaǵı talqılaw usı ierarxiyanıń eń joqarǵı dárejesin tanıstırdı. Bul bólimniń bapları tómennen baslanıp, hám dáslepki obyektlerdi, hám olardı paydalanıw ushın jaza alatuǵın ańlatpalarıńızdı úyreniwden baslanadı. Dáslepki Tiplerdi Ne Ushın Paydalanıw Kerek?
Eger siz C yamasa C++ sıyaqlı tómengi dárejeli tillerdi paydalanǵan bolsańız, jumısıńızdıń kóp bólegi baǵdarlamańızdıń tarawındaǵı komponentlerdi sáwlelendiriw ushın obyektlerdi – maǵlıwmat strukturaların da solay ataydı – ámelge asırıwǵa baǵıshlanǵanın bilesiz. Siz yadtaǵı strukturalardı jobalastırıwıńız,
yad bólistiriwin basqarıwıńız, izlew hám kiriw proсeduraların ámelge asırıwıńız hám taǵı basqalardı islewińiz kerek. Bul jumıslar esitilgenindey zeriktirerli (hám qáte jiberiwge beyim) hám ádette baǵdarlamańızdıń haqıyqıy maqsetlerinen alańlatadı.
Ádettegi Python baǵdarlamalarında, bul awır jumıslardıń kópshiligi joq boladı. Python tildiń ajıralmas bólegi sıpatında kúshli obyekt tiplerin usınǵanlıqtan, máselelerdi sheshiwdi baslawdan aldın obyektlerdi ámelge asırıw kodın jazıwdıń zárúrligi joq. Shınında da, eger sizde dáslepki tipler támiyinlebeytuǵın arnawlı qayta islew zárúrligi bolmasa, siz barlıq waqıtta ózińizdiń variantıńızdı ámelge asırıwdıń ornına dáslepki obyektti paydalanǵan maqul. Mine usınıń sebepleri:
•Dáslepki obyektler baǵdarlamalardı jazıwdı ańsatlastıradı. Ápiwayı tapsırmalar ushın dáslepki tipler kóbinese másele tarawlarınıń dúzilisin sáwlelendiriw ushın jetkilikli boladı. Toplamlar (dizimler) hám izlew kesteleri (sózlikler) sıyaqlı kúshli qurallardı biypul alǵanıńız sebepli, olardı dárhal qollanıwıńız múmkin. Pythonnıń dáslepki obyekt tipleriniń ózi menen kóp jumıslardı orınlay alasız.
•Dáslepki obyektler keńeytiwlerdiń komponentleri bolıp tabıladı. Quramalıraq tapsırmalar ushın Python klassları yamasa C tili interfeysleri járdeminde óz obyektlerińizdi usınıwıńız kerek bolıwı múmkin. Biraq, bul kitaptıń keyingi bólimlerinde kóretuǵınıńızday, qoldan ámelge asırılǵan obyektler kóbinese dizimler hám sózlikler sıyaqlı dáslepki tipler tiykarında qurıladı. Mısalı, stek maǵlıwmat strukturasın dáslepki dizimdi basqaratuǵın yamasa qáliplestiretuǵın klass sıpatında ámelge asırıwǵa boladı.
•Dáslepki obyektler kóbinese qoldan islengen maǵlıwmat strukturalarına qaraǵanda nátiyjelirek. Pythonnıń dáslepki tipleri tezlik ushın C tilinde ámelge asırılǵan optimallastırılǵan maǵlıwmat strukturası algoritmlerin paydalanadı.
Ózińiz uqsas obyekt tiplerin jaza alsańız da, dáslepki obyekt tipleri támiyinleytuǵın ónimdarlıq dárejesine jetiw qıyın boladı.
•Dáslepki obyektler tildiń standart bólegi bolıp tabıladı. Bazı táreplerden, Python dáslepki qurallarǵa tiykarlanǵan tillerden (mısalı, LISP) hám programmistlerdiń óz qural ámelge asırıwların yamasa freymvorklerin usınıwına tiykarlanǵan tillerden (mısalı, C++) alǵan. Pythonda ayrıqsha obyekt tiplerin ámelge asıra alsańız da, islep baslaw ushın bunı islewińiz shárt emes. Sonıń menen birge, Pythonnıń dáslepki tipleri standart bolǵanlıqtan, olar hámme waqıtta birdey; óz tárepten, menshik freymvorkler orınǵa qarap ózgeshelikke iye bolıwǵa beyim.
Basqasha aytqanda, dáslepki obyekt tipleri tek baǵdarlamalastırıwdı ańsatlastırıp qoymastan, olar nólden jaratılıwı múmkin bolǵanlardıń kópshiligine qaraǵanda kúshlirek hám nátiyjelirek. Jańa obyekt tiplerin ámelge asırıwıńız yamasa asırmawıńızǵa qaramastan, dáslepki obyektler hár bir Python baǵdarlamasınıń ózegin quraydı.
Pythonnıń Tiykarǵı Maǵlıwmat Tipleri
4-1-keste Pythonnıń dáslepki obyekt tiplerine hám olardıń literalların – yaǵnıy, usı obyektlerdi jaratıwshı ańlatpalardı kodlaw ushın paydalanılatuǵın sintaksiske sholıw beredi.* Eger basqa tillerdi paydalanǵan bolsańız, bul tiplerdiń ayırımları tanıs bolıp kóriniwi múmkin; mısalı, sanlar hám qatarlar sáykes túrde sanlıq hám tekst mánislerin sáwlelendiredi, al fayllar kompyuterińizde saqlanǵan fayllardı qayta islew ushın interfeys usınadı.
4-1-keste. Dáslepki obyektlerge sholıw
Obyekt tipi |
Literallar/jaratıw mısalları |
Sanlar |
1234, 3.1415, 3+4j, Decimal, Fraction |
Qatarlar |
'spam', "guido's", b'a\x01c' |
Dizimler |
[1, [2, 'three'], 4] |
Sózlikler |
{'food': 'spam', 'taste': 'yum'} |
Kortejler |
(1, 'spam', 4, 'U') |
Fayllar |
myfile = open('eggs', 'r') |
Toplamlar |
set('abc'), {'a', 'b', 'c'} |
Basqa tiykarǵı tipler |
Bulevler, tipler, None |
Baǵdarlama blok tipleri |
Funkсiyalar, moduller, klasslar (IV, V, VI Bólimler) |
Ámelge asırıwǵa baylanıslı |
Kompilyaсiyalanǵan kod, stek treysbekleri (IV, VII |
tipler |
Bólimler) |
4-1-keste tolıq emes, sebebi Python baǵdarlamalarında qayta isleytuǵın hár bir nárse obyekttiń bir túri bolıp tabıladı. Mısalı, Pythonda tekst úlgisin sáykeslendiriwdi orınlaǵanımızda, úlgi obyektlerin jaratamız, al tarmaq skriptin orınlaǵanımızda, soket obyektlerin paydalanamız. Obyektlerdiń bul basqa túrleri ádette modullerdi importlaw hám paydalanıw arqalı jaratıladı hám ózleriniń minezqulqına iye.
Kitaptıń keyingi bólimlerinde kóretuǵınımızday, funkсiyalar, moduller hám klasslar sıyaqlı baǵdarlama blokları da Pythonda obyektler bolıp tabıladı - olar def, class, import hám lambda sıyaqlı qálipler hám ańlatpalar menen jaratıladı hám skriptler arasında erkin ótkerile aladı, basqa obyektler ishinde saqlana aladı hám t.b. Python jáne kompilyaсiyalanǵan kod obyektleri sıyaqlı ámelge asırıwǵa baylanıslı tipler toplamın usınadı, bular ádette baǵdarlama qurawshılarǵa
qaraǵanda qural jaratıwshılarǵa kóbirek qızıqlı; bular da bul tekstiń keyingi bólimlerinde talqılanadı.
Biraq, biz 4-1-kestedegi basqa obyekt tiplerin ádette tiykarǵı maǵlıwmat tipleri dep ataymız, sebebi olar Python tiline tiykarınan kirgizilgen - yaǵnıy, olardıń kópshiligin jaratıw ushın arnawlı ańlatpa sintaksisi bar. Mısalı, tómendegi kodtı orınlaǵanıńızda:
>>> 'spam'
Texnikalıq tárepten aytqanda, siz jańa qatar obyektin jaratıp qaytaratuǵın literal ańlatpanı orınlap atırsız. Bul obyektti jaratıw ushın arnawlı Python til sintaksisi bar. Sol sıyaqlı, tik qawsırmalar ishine oralǵan ańlatpa dizimdi jaratadı, tırnaqsha qawsırmalar ishindegisi sózlikti jaratadı hám t.b. Kórip turǵanımızday, Pythonda tip deklaraсiyaları bolmasa da, siz orınlaytuǵın ańlatpalardıń sintaksisi siz jaratıp paydalanatuǵın obyektlerdiń tiplerin anıqlaydı. Haqıyqatında da, 4-1-kestedegi sıyaqlı obyekt jaratıw ańlatpaları Python tilinde tiplerdiń payda bolatuǵın tiykarǵı ornı bolıp tabıladı.
Sonıń menen birge áhmiyetlisi, obyektti jaratqanıńızdan keyin, siz onıń operaсiyalar toplamın barlıq waqıtqa baylanıstırasız - qatarda tek qatar operaсiyaların, al dizimde tek dizim operaсiyaların orınlay alasız.
Úyrenetuǵınıńızday, Python dinamikalıq tipke iye (deklaraсiya kodın talap etiwdiń ornına tiplerdi ózi avtomatik túrde qadaǵalaydı), biraq ol jáne kúshli tipke iye (obyektte tek onıń tipi ushın durıs bolǵan operaсiyalardı orınlay alasız).
Funkсional tárepten, 4-1-kestedegi obyekt tipleri siz ádetlengen nárselerge qaraǵanda ulıwmaraq hám kúshlirek. Mısalı, siz dizimler hám sózliklerdiń ózi tómengi dárejeli tillerde toplamlardı hám izlewdi qollap-quwatlaw ushın isleytuǵın jumısıńızdıń kópshiligin jeńilletetuǵın kúshli maǵlıwmat sáwlelendiriw quralları ekenin bilip alasız. Qısqasha aytqanda, dizimler basqa obyektlerdiń tártiplestirilgen toplamların támiyinleydi, al sózlikler obyektlerdi gilt arqalı saqlaydı; eki túride birge jaylasa aladı, zárúrlikke qaray ósip hám kemeye aladı hám hár qanday tiptegi obyektlerdi óz ishine ala aladı.
Biz 4-1-kestedegi obyekt tipleriniń hár birin keyingi baplarda tolıq úyrenemiz. Biraq, waqıyalarǵa kirisiwden aldın, Pythonnıń tiykarǵı obyektleriniń háreketine tez názer taslawdan baslayıq. Bul baptıń qalǵan bólimi keyingi baplarda tereńirek izertleytuǵın operaсiyalarǵa sholıw beredi. Bul jerde tolıq maǵlıwmattı tabıwdı kútpeń - bul baptıń maqseti tek qızıǵıwshılıǵıńızdı oyatıw hám ayırım tiykarǵı
ideyalardı tanıstırıw. Degen menen, baslawdıń eń jaqsı jolı - baslaw, sonlıqtan haqıyqıy kodqa óteyik.
Sanlar
Eger siz aldın baǵdarlamalastırıw yamasa skript jazıw menen shuǵıllanǵan bolsańız, 4-1-kestedegi obyekt tipleriniń ayırımları tanıs bolıp kóriniwi múmkin. Hátte, aldın shuǵıllanbaǵan bolsańız da, sanlar ádewir túsinikli. Pythonnıń tiykarǵı obyektler toplamı ádettegi sanlardı óz ishine aladı: pútin sanlar (bólshek bólimi joq sanlar), qalqıwshı útirli sanlar (shama menen, ishinde onlıq noqatı bar sanlar) hám basqa da ayrıqsha san tipleri (qıyalıy bólekleri bar kompleks sanlar, turaqlı dálliktegi onlıq sanlar, alıw hám bólim menen raсional bólshekler hám tolıq múmkinshilikli toplamlar).
Ayırım kórkem múmkinshiliklerdi usınsa da, Pythonnıń tiykarǵı san tipleri, álbette, tiykarǵı. Pythondaǵı sanlar ádettegi matematikalıq operaсiyalardı qollapquwatlaydı. Mısalı, qosıw belgisi (+) qosıwdı orınlaydı, juldızsha (*) kóbeytiw ushın qollanıladı, al eki juldızsha (**) dáreje ushın qollanıladı:
>>>123 + 222 # Pútin san qosıw
345
>>>1.5 * 4 # Qalqıwshı útirli kóbeytiw
6.0
>>>2 ** 100 # 2 niń 100-dárejesi
1267650600228229401496703205376
Bul jerdegi sońǵı nátiyjege dıqqat awdarıń: Python 3.0 tiń pútin san tipi kerek bolǵanda bunday úlken sanlar ushın qosımsha dállikti avtomatik túrde támiyinleydi (2.6-da, ayırım uzın pútin san tipi ádettegi pútin san tipi ushın júdá úlken bolǵan sanlardı uqsas jollar menen qayta isleydi). Mısalı, siz Pythonda 2-niń 1,000,000dárejesin pútin san sıpatında esaplay alasız, biraq nátiyjeni basıp shıǵarıwǵa háreket etpewińiz kerek - 300,000-nan aslam sanǵa iye bolǵanlıqtan, biraz kútiwińizge tuwra keledi!
>>> len(str(2 ** 1000000)) # Júdá ÚLKEN sanda neshe сifr bar? 301030
Qalqıwshı útirli sanlar menen tájiriybe islewdi baslaǵanıńızda, birinshi qaraǵanda biraz ájayıp kórinetuǵın nársege dus keliwińiz múmkin:
>>> 3.1415 * 2 # repr: kod sıpatında 6.2830000000000004
>>> print(3.1415 * 2) # str: paydalanıwshıǵa ıńǵaylı 6.283
Birinshi nátiyje qáte emes; bul kórsetiw máselesi. Hár bir obyektti eki usılda kórsetiw múmkin eken: tolıq dállikte (mısaldaǵı birinshi nátiyjedegidey) hám paydalanıwshıǵa qolaylı formada (ekinshi nátiyjedegidey). Rásmiy túrde, birinshi forma obyekttiń kod kórinisi (repr) dep ataladı, al ekinshisi paydalanıwshıǵa qolaylı kórinisi (str). Bul ayırmashılıq klasslar menen islegende áhmiyetli bolıwı múmkin; házirshe, eger bir nárse ájayıp kórinse, onı print funkсiyası menen kórsetip kóriń.
Ańlatpalardan tısqarı, Python menen birge keletuǵın bir neshe paydalı sanlıq moduller bar - moduller bul qosımsha qurallar paketleri bolıp, olardı paydalanıw ushın import etemiz:
>>>import math
>>>math.pi
3.1415926535897931
>>>math.sqrt(85)
9.2195444572928871
Math moduli qosımsha sanlıq qurallardı funkсiyalar túrinde óz ishine aladı, al random moduli tosınnan san generaсiyasın hám tosınnan tańlawlardı ámelge asıradı (mısalı, Python diziminen, bul haqqında usı bapta keyinirek aytıladı):
>>>import random
>>>random.random()
0.59268735266273953
>>>random.choice([1, 2, 3, 4])
1
Python sonday-aq basqa da siyrek ushırasatuǵın sanlıq obyektlerdi óz ishine aladı - mısalı, kompleks sanlar, turaqlı dálliktegi sanlar hám raсional sanlar, sonday-aq jıyındılar hám Boolean mánisleri - al úshinshi tárep ashıq dereklik keńeytiwler taǵı da kóbirek imkaniyatlardı usınadı (mısalı, matriсalar hám vektorlar). Bul tipler haqqında kitaptıń keyingi bólimlerinde aytıp ótemiz.
Házirge shekem biz Pythondı ápiwayı kalkulyator sıyaqlı qollanıp atırmız; onıń ishki tiplerin jaqsıraq túsiniw ushın, endi qatarlardı (strings) úyreniwge óteyik.
Qatarlar
Qatarlar tekstlik maǵlıwmatlardı, sonday-aq baytlardıń qálegen jıyındıların saqlaw ushın qollanıladı. Olar Pythondaǵı izbe-izlik (sequence) dep atalatuǵın nárseniń birinshi mısalı bolıp tabıladı - yaǵnıy, basqa obyektlerdiń poziсiyalıq tártipte jaylasqan toplamı. Izbe-izlikler óz ishindegi elementlerdiń shepten ońǵa qaray tártibin saqlaydı: olardıń elementleri salıstırmalı ornı boyınsha saqlanadı hám alınadı. Qatań aytqanda, qatarlar bir háripten turatuǵın qatarlardıń izbe-izligi bolıp tabıladı; basqa izbe-izlik túrlerine dizimler hám kortejler kiredi, olar haqqında keyinirek aytıladı.
Izbe-izlik ámelleri
Izbe-izlik sıpatında, qatarlar elementler arasında poziсiyalıq tártip bar dep boljaytuǵın ámellerdi qollaydı. Mısalı, eger bizde tórt háripten turatuǵın qatar bolsa, onıń uzınlıǵın ishki len funkсiyası menen tekseriwimiz hám onıń komponentlerin indekslew ańlatpaları arqalı alıwımız múmkin:
>>>S = 'Spam'
>>>len(S) # Uzınlıǵı
4
>>>S[0] # S daǵı birinshi element, nólden baslanatuǵın poziсiya boyınsha indekslew
'S'
>>>S[1] # Shepten ekinshi element
'p'
Pythonda indeksler aldıńǵı tárepten esaplanatuǵın jıljıwlar retinde kodlanadı, sonlıqtan 0-den baslanadı: birinshi element 0-indekste, ekinshisi 1-indekste hám t.b.
Bul jerde qatardı S dep atalǵan ózgeriwshige qalay mánis bergenimizge itibar beriń. Bunıń qalay isleytuǵını haqqında keyinirek tolıǵıraq aytamız (ásirese 6- bapta), biraq Pythonda ózgeriwshilerdi aldın ala járiyalawdıń keregi joq.
Ózgeriwshi oǵan mánis beriw arqalı jaratıladı, oǵan hár qanday tiptegi obyekt mánis etip beriliwi múmkin hám ol ańlatpada payda bolǵanda óziniń mánisi menen almastırıladı. Sonday-aq, onıń mánisin paydalanıwdan aldın oǵan mánis berilgen bolıwı kerek. Bul bap maqsetleri ushın, obyektti keyin paydalanıw ushın saqlap qoyıw ushın onı ózgeriwshige mánis etip beriwimiz kerek ekenin biliw jetkilikli.
Pythonda biz artqa qaray da indeksley alamız, yaǵnıy aqırınan - oń indeksler shepten, al teris indeksler ońnan esaplaydı:
>>>S[-1] # S-tiń aqırǵı elementi
'm'
>>>S[-2] # S-tiń aqırınan ekinshi elementi
'a'
Formal túrde, teris indeks ápiwayı túrde qatardıń ólshemine qosıladı, sonlıqtan tómendegi eki operaсiya birdey (biraq birinshi usılı kodlawǵa ańsat hám qáte jiberiw itimallıǵı azıraq):
>>>S[-1] # S-tiń aqırǵı elementi
'm'
>>>S[len(S)-1] # Teris indekslew, qıyın usıl
'm'
Itibar beriń, kvadrat qawsırmalar ishinde tek qatań belgilengen san emes, al qálegen ańlatpanı paydalana alamız - Python mánis kútken hár qanday jerde biz literal, ózgeriwshi yamasa qálegen ańlatpanı qollana alamız. Python sintaksisi usı jaǵınan tolıq ulıwmalıq.
Ápiwayı poziсiyalıq indekslewden tısqarı, izbe-izlikler sonday-aq kesiw dep atalatuǵın indekslewdiń ulıwmalıq túrin de qollaydı, bul bir hárekette pútkil bólimdi alıw usılı. Mısalı:
>>>S # 4 háripten turatuǵın qatar 'Spam'
>>>S[1:3] # S-tiń 1-den 2-ge shekemgi kesindi (3 emes) 'pa'
Kesindiler haqqında oylawdıń eń ańsat usılı - olar bir hárekette qatardan pútkil baǵananı alıw usılı. Olardıń ulıwmalıq forması, X[I:J], "maǵan X-tiń I indeksinen baslap J indeksine shekem (J kirgizilmeydi) hámmesin ber" degendi ańlatadı.
Nátiyje jańa obyektte qaytarıladı. Mısalı, joqarıdaǵı ekinshi operaсiya bizge S qatarınıń 1-den 2-ge shekemgi (yaǵnıy 3 - 1) barlıq háriplerin jańa qatar sıpatında beredi. Nátiyjede ortadaǵı eki hárip kesip alınadı yamasa "ajıratıp alınadı".
Kesindide sol shegara ádette nólge, al oń shegara kesiletuǵın izbe-izliktiń uzınlıǵına teń boladı. Bul jiyi qollanılatuǵın bir neshe variantlarǵa alıp keledi:
>>>S[1:] # Birinshi elementten keyingi hámmesi (1:len(S)) 'pam'
>>>S # S ózi ózgermegen
'Spam'
>>> S[0:3] # Sońǵısınan basqa hámmesi
'Spa'
>>>S[:3] # S[0:3] menen birdey 'Spa'
>>>S[:-1] # Jáne de sońǵısınan basqa hámmesi, biraq ápiwayıraq (0:-1) 'Spa'
>>>S[:] # S-tiń tolıq joqarǵı dárejeli kóshirmesi (0:len(S))
'Spam'
Itibar beriń, teris indeksler de kesindiler ushın shegaralardı beriwde qollanıla aladı, hám sońǵı operaсiya pútkil qatardı nátiyjeli kóshiredi. Keyinirek úyrenetuǵınıńızday, qatardı kóshiriwdiń hesh qanday zárúrligi joq, biraq bul forma dizimler sıyaqlı izbe-izlikler ushın paydalı bolıwı múmkin.
Aqırında, izbe-izlikler sıpatında, qatarlar sonday-aq qosıw belgisi arqalı biriktiriwdi (eki qatardı jańa qatarǵa biriktiriw) hám qaytalawdı (basqa qatardı qaytalaw arqalı jańa qatar jasaw) qollaydı:
>>>S 'Spam'
>>>S + 'xyz' # Biriktiriw 'Spamxyz'
>>>S # S ózgermegen
'Spam'
>>>S * 8 # Qaytalaw 'SpamSpamSpamSpamSpamSpamSpamSpam'
Itibar beriń, qosıw belgisi (+) hár qıylı obyektler ushın hár túrli mánilerge iye: sanlar ushın qosıw, al qatarlar ushın biriktiriw. Bul Python tiliniń ulıwma qásiyeti bolıp, onı kitaptıń keyingi bólimlerinde polimorfizm dep ataymız — qısqasha aytqanda, operaсiyanıń mánisi oǵan qatnasıp atırǵan obyektlerge baylanıslı boladı. Dinamikalıq tiplestiriwdi úyrengenimizde kóretuǵınımızday, bul polimorfizm qásiyeti Python kodınıń qısqalıǵı hám ikemliliginiń kóp bólegin qamtıydı.
Tipler sheklenbegenlikten, Python-da jazılǵan operaсiya ádette úylesimli interfeysti qollaytuǵın (mısalı, usı jerdegi + operaсiyası sıyaqlı) kóp túrli obyekt tipleri menen avtomat túrde isley aladı. Bul Python-daǵı úlken ideya bolıp shıǵadı; bul haqqında saparımızdıń dawamında kóbirek bilip alasız.
Ózgermeslik
Aldıńǵı mısallarda, biz onıń ústinde orınlaǵan operaсiyalarımızdıń hesh qaysısı menen dáslepki qatardı ózgertpegenimizge itibar beriń. Hár bir qatar operaсiyası
nátiyje retinde jańa qatar jasawǵa mólsherlengen, sebebi Python-da qatarlar
ózgermeytuǵın — olar jasalǵannan keyin ornında ózgertilmeydi. Mısalı, siz qatardı onıń bir poziсiyasına mánis beriw arqalı ózgerte almaysız, biraq bárqulla jańasın jaratıp, onı sol atqa beriwińiz múmkin. Python eski obyektlerdi jumısıńız dawamında tazalap baratuǵını sebepli (bunı keyinirek kóresiz), bul oylaǵanıńızday nátiyjesiz emes:
>>>S 'Spam'
>>>S[0] = 'z' # Ózgermeytuǵın obyektlerdi ózgertiw múmkin emes
...qáte tekst jiberildi...
TypeError: 'str' obyekti element tayınlawdı qollap-quwatlamaydı
>>>S = 'z' + S[1:] # Biraq jańa obyektler jasaw ushın qatarlardı orınlay alamız
>>>S
'zpam'
Python-daǵı hár bir obyekt ya ózgermeytuǵın (ózgertilmeytuǵın) ya ózgertiletuǵın dep jikleledi. Tiykarǵı tipler kóz-qarasınan, sanlar, qatarlar hám kortejler
ózgermeytuǵın; dizimler hám sózlikler bolsa ózgertiletuǵın (olar erkin túrde ornında ózgertiliwi múmkin). Basqa nárseler menen birge, ózgermeslik obyekttiń pútkil baǵdarlamańız dawamında turaqlı qalıwın kepillew ushın qollanılıwı múmkin.
Tipke tán usıllar
Usı waqıtqa shekem úyrengen hár bir qatar operaсiyası haqıyqatında izbe-izlik operaсiyası bolıp tabıladı — yaǵnıy, bul operaсiyalar Python-daǵı basqa izbeizliklerde de, sonıń ishinde dizimler hám kortejlerde de isleydi. Ulıwma izbe-izlik operaсiyalarınan tısqarı, qatarlardıń ózine tán operaсiyaları da bar, olar usıllar túrinde jetkilikli — obyektke baylanǵan funkсiyalar, olar shaqırıw ańlatpası menen iske qosıladı.
Mısalı, qatardıń find usılı tiykarǵı ishki qatardı izlew operaсiyası bolıp tabıladı (ol berilgen ishki qatardıń ornın qaytaradı, eger ol joq bolsa -1 di qaytaradı), al qatardıń replace usılı global izlew hám almastırıwlardı orınlaydı:
>>>S.find('pa') # Ishki qatardıń ornın tabıw
1
>>>S
'Spam'