Pythondı úyreniw: 3-lekciya

3-BÓLIM
Programmalardı qalay orınlatıw kerek

Endi kod jazıwdı baslaytuǵın waqıt keldi. Programmanı orınlaw haqqında túsinik alǵanıńızdan keyin, aqırında haqıyqıy Python programmalastırıwın baslawǵa tayar bolasız. Bul jerde men siziń kompyuterińizde Python ornatılǵan dep esaplayman; eger olay bolmasa, aldıńǵı bólim hám A qosımshadan ornatıw hám konfiguraciya boyınsha maǵlıwmatlardı tabıwıńız múmkin.

Pythonǵa siz jazǵan kodtı orınlawdı buyırıwdıń bir neshe jolları bar. Bul bólimde házirgi kúnde keń qollanılatuǵın barlıq programmanı iske qosıw usılları talqılanadı. Sonıń menen birge, siz kodtı interaktiv túrde jazıwdı hám onı sistema komandalıq qatarı, belgi basıw, modullerdi importlaw hám qayta júklew, exec shaqırıwları, IDLE sıyaqlı GUI menyu opciyaları hám basqa da usıllar arqalı orınlaw ushın fayllarǵa saqlawdı úyrenesiz.
Eger tek Python programmasın tez arada qalay orınlatıw kerek ekenin bilgińiz kelse, bul bólimniń tek ózińizdiń platformańızǵa baylanıslı bóleklerin oqıp, 4-bólimge ótiw niyetinde bolıwıńız múmkin. Biraq modullerdi importlaw boyınsha materiallardı ótkizip jibermewińiz kerek, sebebi bul Python programma arxitekturasın túsiniw ushın júdá áhmiyetli. Men sizge IDLE hám basqa IDEler haqqındaǵı bólimlerdi bolmasa da qısqasha oqıp shıǵıwdı usınıs etemen, solay etip siz quramalıraq Python programmaların islep shıǵa baslaǵanıńızda qanday qurallar bar ekenin bilip alasız.

Interaktiv Prompt
Python programmaların orınlatıwdıń eń ápiwayı usılı - olardı Pythonnıń interaktiv komanda qatarında jazıw, ol negizinde interaktiv prompt dep te ataladı. Bul komanda qatarın baslawdıń bir neshe usılı bar: IDEde, sistema konsolinen hám basqalar arqalı. Eger interpretator siziń sistemańızda atqarıwshı programma retinde ornatılǵan dep esaplasaq, interaktiv interpretator sessiyasın baslaw ushın platformaǵa baylanıssız eń orınlanatuǵın usıl - operacion sistema promptında hesh qanday argumentsiz tek "python" dep jazıw. Mısalı:

% python
Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18)
[MSC v.1500 32 bit (Intel)] ...
Type "help", "copyright", "credits" or "license" for more information.
>>>

Sistema qabıǵı promptında usılay "python" sózin jazıw interaktiv Python sessiyasın baslaydı; bul dizimniń basındaǵı "%" belgisi bul kitapta ulıwmalıq sistema promptın bildiredi - onı óziń jazıwıń shárt emes. Sistema qabıǵı promptı ulıwmalıq túsinik, biraq oǵan qalay kiriwińiz platformaǵa qarap hár qıylı boladı:

• Windowsta, siz python sózin DOS konsol aynasında (yaǵnıy Command Prompt, ádette Start→Programs menyuiniń Accessories bóliminde jaylasqan) yamasa Start→Run... dialog aynasında jaza alasız.

• Unix, Linux hám Mac OS Xte, siz bul komandanı shell yamasa terminal aynasında jazıwıńız múmkin (mısal ushın, ksh yamasa csh sıyaqlı shell júrgizilip atırǵan xterm yamasa konsolda).

• Basqa sistemalar uqsas yamasa platformaǵa tán qurallardan paydalanıwı múmkin. Mısal ushın, qol telefonlarında, interaktiv sessiyanı baslaw ushın ádette bas yamasa qosımshalar aynasındaǵı Python belgisine basasız.
Eger siziń shelldiń PATH ortalıq ózgeriwshisine Python ornatılǵan direktoriya qosılmaǵan bolsa, "python" sózin kompyuterińizdegi Python atqarıwshı faylınıń tolıq jolı menen almastırıwıńız kerek bolıwı múmkin. Unix, Linux hám uqsas sistemalarda, kóbinese /usr/local/bin/python yamasa /usr/bin/python jetkilikli boladı. Windowsta, C:\Python30\python (3.0 versiyası ushın) dep jazıp kóriń:
C:\misc> c:\python30\python Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18) [MSC v.1500 32 bit (Intel)] ... Type "help", "copyright", "credits" or "license" for more information.
Basqa jolı, "python" dep jazıwdan aldın Python ornatılǵan direktoriyaǵa ótiw komandasın orınlawıńız múmkin - mısal ushın, Windowsta cd c:\python30 komandasın qollanıń:
C:\misc> cd C:\Python30 C:\Python30> python Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18) [MSC v.1500 32 bit (Intel)] ... Type "help", "copyright", "credits" or "license" for more information.
Windowsta, shell aynasında python dep jazıwdan tısqarı, siz IDLEdiń bas aynasın ashıw arqalı (keyin talqılanadı) yamasa 2-bólimniń 2-1 súwretinde kórsetilgendey, Python ushın Start túymesiniń menyuinen "Python (command line)" menyu opciyasın tańlaw arqalı usıǵan uqsas interaktiv sessiyalardı baslawıńız múmkin. Ekewi de birdey funkcionallıqqa iye Python interaktiv promptın ashıp beredi; shell komandasın jazıw shárt emes.

Kodtı Interaktiv Túrde Orınlatıw
Qanday usıl menen baslanǵanına qaramastan, Python interaktiv sessiyası eki qatar maǵlıwmat tekstin shıǵarıw menen baslanadı (men bul kitaptaǵı mısallardıń kóbinde boslıqtı únemlew ushın bul qatarlardı qaldırıp ketemen), soń sizden jańa Python operatorın yamasa ańlatpasın kiritiwdi kútken waqıtta >>> belgisi menen prompt shıǵaradı. Interaktiv túrde islegende, siziń kodıńızdıń nátiyjeleri Enter túymesin basqanıńızdan keyin >>> qatarlarınan keyin kórsetiledi. Mısal ushın, tómende eki Python print operatorlarınıń nátiyjeleri keltiriledı (print Python 3.0 da funkciya shaqırıwı bolıp esaplanadı, biraq 2.6 da bunday emes, sonlıqtan dóńgelek qawsırmalardı tek 3.0 da qoyıw shárt):

% python
>>> print(Hello world!)
Hello world!
>>> print(2 ** 8)
256

Joqarıda kórsetilgen print operatorlarınıń detalları haqqında ele qayǵırıwıńızdıń keregi joq; biz sintaksis haqqında keyingi bólimde úyreniwdi baslaymız. Qısqasha aytqanda, olar Python tekst qatarın hám pútin sandı shıǵaradı, bul hár >>> kiritiw qatarınan keyingi shıǵıs qatarlarında kórsetilgen (2 ** 8 Pythonda 2 sanınıń 8-dárejesin bildiredi).
Usılay interaktiv túrde kodlaǵanıńızda, siz qálegenińizshe Python buyrıqların jaza alasız; hár biri kiritilgennen keyin birden orınlanadı. Bunnan tısqarı, interaktiv sessiya siz jazǵan ańlatpalardıń nátiyjelerin avtomatik túrde shıǵaratuǵın bolǵanlıqtan, bul promptta ádette "print" sózin ashıq túrde jazıwıńız shárt emes:
lumberjack = okay lumberjack okay 2 ** 8 256 promptında birinshi print operatorın jazǵanımızda, shıǵıs (Python tekst qatarı) dárriw qaytarıldı. Derek kodı faylın jaratıwdıń keregi bolmadı, hám C yamasa C++ sıyaqlı tillerdi qollanǵanda ádettegidey kodtı aldın kompiyator hám baylawshıdan ótkiziwdiń keregi bolmadı. Keyingi bólimlerde kóriwińizge, siz interaktiv promptta kóp qatarlı operatorlardı da júrgize alasız; bunday operator barlıq qatarların kiritkenińizden hám bos qatar qosıw ushın Enter túymesin eki ret basqanıńızdan keyin dárriw orınlanadı.

Interaktiv Prompt Ne Ushın Kerek?
Interaktiv prompt kodtı júrgizedi (orınlatadı) hám nátiyjelerin siz islegenińizde shıǵarıp baradı, biraq kodıńızdı faylda saqlamaydı. Bul siziń tiykarǵı kodlawıńızdı interaktiv sessiyalarda islemeytuǵınıńızdı ańlatsa da, interaktiv prompt til menen tájiriybe islewge hám programma faylların tez tekseriw ushın jaqsı orın bolıp shıqtı.

Tájiriybe Islew
Kod dárriw orınlanǵanlıǵı sebepli, interaktiv prompt til menen tájiriybe islew ushın miynet orın bolıp tabıladı hám bul kitapta kishirek mısallardı kórsetiw ushın kóp qollanıladı. Hátteki, bul eske tutıwǵa tiyisli birinshi qaǵıyda: eger Python kodınıń qanday isleytuǵını haqqında gúmanlanıp qalsańız, interaktiv komanda qatarın ashıń hám ne bolatuǵının kóriw ushın onı sınap kóriń.
Mısalı, siz Python baǵdarlamasınıń kodın oqıp atırǵanıńızda hám mánisi túsiniksiz bolǵan Spam! * 8 sıyaqlı ańlatpanı ushıratqanıńızda. Bul waqıtta siz kodtıń ne isleytuǵının túsiniw ushın 10 minut waqtıńızdı qollanba hám kitaplardan izlep ótkeriwińiz múmkin, yamasa onı ápiwayı túrde interaktiv rejimde orınlap kóriwińiz múmkin:

>>> Spam! * 8 X <== Qáte islew
Traceback (most recent call last):
File "", line 1, in
NameError: name X is not defined

Pythonda ózgeriwshini oǵan mánis berilmesten burın qollanıw barlıq waqıtta qáte bolıp esaplanadı (eger atlar avtomatik túrde standart mánler menen toltırılǵanda, ayırım qáteler bayqalmay qalıwı múmkin). Bul haqqında keyinirek kóbirek úyrenemiz; bul jerdegi áhmiyetli másele - bunday qáte islegenińizde Python yamasa kompyuterińizdi ishten buzıp qoymaysız. Onıń ornına, siz qáteni kórsetip turatuǵın hám onı islegen kod qatarın kórsetip beretuǵın mánili qáte xabarın alasız, hám óz sessiyańız yamasa skriptińizde dawam ete alasız. Shınında da, Python menen jaqsı tanıs bolǵanıńızda, onıń qáte xabarları kóbinese sizge kerekli bolǵan debugging járdemin bere aladı (debugging haqqında kóbirek maǵlıwmattı 67-bettegi "Python Kodın Debugging Qılıw" degen bólimde oqıysız).

Testlew
Tildi úyreniw barısında eksperiment ótkeriw quralı sıpatında xızmet etiwden tısqarı, interaktiv interpretator siz fayllarǵa jazǵan kodtı testlew ushın da ideal orın bolıp tabıladı. Siz óz modul fayllarıńızdı interaktiv túrde import etip, olar anıqlaǵan qurallarǵa interaktiv rejimde shaqırıwlar jazıw arqalı testler ótkere alasız. Mısalı, tómendegi testler Python standart kitapxanasında kelgen aldın-ala kodlanǵan moduldegi funkciyanı testleydi (ol házirgi jumıs isleytuǵın direktoriyańızdıń atın shıǵaradı), biraq siz óz modul fayllarıńızdı jaza baslaǵanıńızda da tap usınday islewińiz múmkin:

>>> import os
>>> os.getcwd() ornına ... bolıp ózgeredi; IDLE interfeysinde bolsa, birinshi qatardan keyingi qatarlar avtomatik túrde abzac jasaladı. Bunıń nege áhmiyetli ekenin 10-bapta kóresiz. Házirshe, eger kodıńızdı kiritip atırǵanda ... promptın yamasa bos qatardı kórseńiz, bul balkim interaktiv Python sizdi kóp qatarlı operator jazıp atır dep oylaǵanın bildiredi. Tiykarǵı promptqa qaytıw ushın Enter klevishasın yamasa Ctrl-C kombinaciyasın basıp kóriń. >>> hám ... prompt qatarların ózgertiwge de boladı (olar sistemalıq sys modulinde bar), biraq men kitaptaǵı mısallarda olardıń ózgertilmegenin esapqa alaman.

• Interaktiv promptta quramalı operatorlardı bos qatar menen juwmaqlań. Interaktiv promptta, bos qatar qosıw (qatardıń basında Enter klevishasın basıw arqalı) interaktiv Pythonǵa kóp qatarlı operatordı jazıp bolǵanıńızdı bildiriw ushın zárúr. Yaǵnıy, quramalı operatordı iske túsiriw ushın Enter klevishasın eki ret basıwıńız kerek. Kerisinshe, fayllarda bos qatarlar talap etilmeydi hám eger bar bolsa, ápiwayı ele esapqa alınbaydı. Eger interaktiv rejimde islep atırǵanıńızda quramalı operatordıń aqırında Enter klevishasın eki ret baspasańız, siz belgisiz halatta qalǵanday bolıp kórinesiz, sebebi interaktiv interpretator hesh nárse islemeydi - ol siziń qaytadan Enter klevishasın basıwıńızdı kútip tur!

• Interaktiv prompt bir waqıtta bir operatordı orınlaydı. Interaktiv promptta, basqa operatordı jazıwdan aldın bir operatordı tolıq orınlap bolıwıńız kerek. Bul ápiwayı operatorlar ushın tábiyiy, sebebi Enter klevishasın basıw kiritilgen operatordı iske túsiredi. Biraq, quramalı operatorlar ushın esińizde tutıń, operatordı juwmaqlap, onı iske túsiriw ushın bos qatar jiberiwińiz kerek, soń ǵana keyingi operatordı jaza alasız.

Kóp qatarlı operatorlardı kiritiw
Ózimdi qaytalaw qáwpi bar bolsa da, usı baptı jańalap atırǵanımda oqıwshılardan aqırǵı eki punkt boyınsha qıyınshılıqqa duwshar bolǵanları haqqında xabarlar aldım, sonlıqtan bul máselege ayırıqsha itibar qaratıw kerek shıǵar. Kóp qatarlı (basqasha aytqanda, quramalı) operatorlar menen keyingi bapta tanısamız hám olardıń sintaksisin bul kitaptıń keyingi bólimlerinde tolıǵıraq úyrenemiz. Biraq, olardıń fayllarda hám interaktiv promptta ózin tutıwı azǵana parıq qılǵanlıqtan, bul jerde eki eskertiw orınlı boladı.

Birinshiden, interaktiv promptta for ciklları hám if shártleri sıyaqlı kóp qatarlı quramalı operatorlardı bos qatar menen juwmaqlawdı umıtpań. Pútkil kóp qatarlı operatordı juwmaqlap, onı iske túsiriw ushın Enter klevishasın eki ret basıwıńız kerek. Mısalı (sóz oynı maqsetli emes...):

>>> for x in spam:
... print(x)
... for x in spam:
... print(x)
... saveit.txt

Bul jaǵdayda, aldınǵı orınlawda kórsetilgen úsh shıǵıs qatarı basıp shıǵarılıwdıń ornına saveit.txt faylında saqlanadı. Bul ulıwma aǵım qayta baǵdarlaw dep ataladı; ol kirgiziw hám shıǵarıw teksti ushın isleydi hám Windows hám Unix sıyaqlı sistemalarda bar. Bul Python menen az baylanıslı (Python tek ǵana onı qollap-quwatlaydı), sonlıqtan biz bul jerde qabıq qayta baǵdarlaw sintaksisi haqqında qosımsha maǵlıwmatlardı ótkizip jiberemiz.

Eger siz Windows platformasında isleseńiz, bul mısal birdey isleydi, biraq sistema promptı ádette basqasha boladı:

C:\Python30> python script1.py
win32
1267650600228229401496703205376
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!

Ádettegidey, eger PATH ortalıq ózgeriwshisine bul joldı kirgizbegen bolsańız yamasa bul jolǵa ótiw ushın katalogtı ózgertiw komandasın orınlamaǵan bolsańız, Pythonǵa tolıq joldı teriwdi umıtpań:

D:\temp> C:\python30\python script1.py
win32
1267650600228229401496703205376
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!

Windowstıń barlıq jańa versiyalarında siz tek ǵana skriptińizdiń atın jazıp, Pythonnıń óziniń atın qaldırıp ketiwińizge boladı. Sebebi jańa Windows sistemaları fayldı orınlaw ushın programmanı tabıw ushın Windows Registrin paydalanǵanlıqtan, .py faylın iske qosıw ushın komanda qatarında "python" sózin anıq kórsetiw talap etilmeydi. Mısalı, aldınǵı komanda kópshilik Windows mashinalarında tómendegidey ápiwayılastırılıwı múmkin:

D:\temp> script1.py

Aqırında, eger skript faylıńız siz jumıs islep atırǵan papkadan basqa jerde jaylasqan bolsa, oǵan tolıq joldı kórsetiwdi umıtpań. Mısalı, D:\other papkasınan orınlanǵan tómendegi sistema komanda qatarı Pythonnıń sistemalıq jolda bar ekenin esapqa aladı, biraq basqa jerde jaylasqan fayldı iske qosadı:

D:\other> python c:\code\otherscript.py

Eger siziń PATH ózgeriwshińizde Python papkası joq bolsa hám Python da, skript faylıńız da siz jumıs islep atırǵan papkada bolmasa, ekewi ushın da tolıq joldı paydalanıń:

D:\other> C:\Python30\python c:\code\otherscript.py

Komanda qatarların hám faylların paydalanıw
Sistema komanda qatarlarınan programma faylların iske qosıw da ápiwayı iske túsiriw usılı bolıp tabıladı, ásirese eger siz aldınǵı jumıslarıńızdan komanda qatarları menen tanıs bolsańız. Biraq, jańa baslaǵanlar ushın, kóbirek qıyınshılıqtıń aldın alıwǵa járdem beriwi múmkin bolǵan ádettegi baslanǵısh qaqpanlar haqqında bir neshe kórsetpe:

• Windows ta avtomatik keńeytpelerden saq bolıń. Eger siz Windowsta programma faylların jazıw ushın Notepad programmasın qollansanız, faylıńızdı saqlaw waqtında "Barlıq fayllar" tipin tańlaw hám faylǵa anıq .py qosımtasın beriw kerek. Bolmasa, Notepad faylıńızdı .txt keńeytpesi menen saqlap qoyadı (mısalı, script1.py.txt sıpatında), bunıń nátiyjesinde onı ayırım iske túsiriw usıllarında qollanıw qıyın boladı. Bunnan da jamanı, Windows ádette fayl keńeytpelerin jasırıp qoyadı, sonlıqtan kóriw parametrlerin ózgertpegen bolsańız, siz tekst faylın emes, al Python faylın jazıp atırǵanıńızdı bile almawıńız múmkin. Fayl belgisin (ikonkasın) qarap bilse boladı - eger onda jılan súwreti bolmasa, qıyınshılıq payda bolıwı múmkin. IDLE de reńsiz kod hám basqanda redaktorlanatuǵın, iske túspeytuǵın fayllar usı máseleniń basqa belgileri bolıp tabıladı. Microsoft Word ta usıǵan uqsas, ádette .doc keńeytpesin qosadı; bunnan da jamanı, ol Python sintaksisinde ruqsat etilmegen formatlastırıw simvolların qosadı. Ulıwma qaǵıyda sıpatında, Windowsta saqlaǵanda bárqulla "Barlıq fayllar" tipin tańlań yamasa IDLE sıyaqlı baǵdarlamashılarǵa qolaylıraq tekst redaktorın paydalanıń. IDLE hátte .py qosımtasın avtomatik túrde qospaydı - bul baǵdarlamashılarǵa unaydı, biraq paydalanıwshılarǵa unay bermeydi.

• Sistema sorawlarında fayl keńeytpeleri hám katalog jolların paydalanıń, biraq importlar ushın emes. Sistema buyrıq qatarlarında faylıńızdıń tolıq atın jazıwdı umıtpań - yaǵnıy, python script1 emes, al python script1.py dep jazıń. Buǵan qarama-qarsı, Pythonnıń import operatorları, olar menen biz usı bólimniń keyinirek bóliminde tanısamız, .py fayl qosımtasın da, katalog jolın da qospaydı (mısalı, import script1). Bul áhmiyetsiz bolıp kóriniwi múmkin, biraq usı ekewiniń arasın aljastırıw kóp ushırasatuǵın qáte. Sistema sorawında siz Pythonda emes, al sistema qabıǵındasız, sonlıqtan Python modul faylların izlew qaǵıydaları qollanılmaydı. Sonıń ushın siz .py keńeytpesin hám, kerek bolsa, iske túsirmekshi bolǵan faylıńızǵa alıp baratuǵın tolıq katalog jolın qosıwıńız kerek. Mısalı, siz jumıs islep atırǵan katalogtan basqa katalogta jaylasqan fayldı iske túsiriw ushın, siz onıń tolıq jolın kórsetiwińiz kerek (mısalı, python d:\tests\spam.py). Biraq, Python kodınıń ishinde siz tek import spam dep aytıp, faylıńızdı tabıw ushın Python modul izlew jolına súyene alasız, bul haqqında keyinirek aytıladı.

• Fayllarda print operatorların paydalanıń. Awa, biz bunı álleqashan talqılaǵan edik, biraq bul sonshelli kóp ushırasatuǵın qáte, onı usı jerde bir ret qaytalaǵan paydalı. Interaktiv kodlawdan parıqlı, programma fayllarınan shıǵısın kóriw ushın siz, ádette, print operatorların paydalanıwıńız kerek. Eger hesh qanday shıǵıs kórmeseniz, faylıńızda "print" jazǵanıńızǵa isenimli bolıń. Biraq taǵı da, print operatorları interaktiv sessiyada talap etilmeydi, sebebi Python avtomatik túrde ańlatpa nátiyjelerin kórsetedi; bul jerde print ler zıyan keltirmeydi, biraq artıqsha teriwdi talap etedi.

Unix Orınlanıwshı Skriptler (#!)
Eger siz Pythondı Unix, Linux yamasa Unix sıyaqlı sistemada qollanbaqshı bolsańız, Python kodı bar fayllardı orınlanıwshı programmalarǵa aylandıra alasız, dál csh yamasa ksh sıyaqlı qabıq tillerinde kodlanǵan programmalardı islegenińizdey. Bunday fayllar ádette orınlanıwshı skriptler dep ataladı. Ápiwayı etip aytqanda, Unix stilindegi orınlanıwshı skriptler - bul Python operatorların óz ishinde saqlaytuǵın ádettegi tekst faylları, biraq eki ayırıqsha qásiyeti bar:

• Olardıń birinshi qatarı ayırıqsha. Skriptler ádette #! belgileri menen baslanadı (kóbinese "hash bang" dep ataladı), onnan keyin siziń kompyuterińizdegi Python interpretatorına jolı jazıladı.

• Olar ádette orınlanıw huqıqlarına iye boladı. Skript faylları ádette operaciyalıq sistemaǵa olardı joqarı dárejeli programma sıpatında iske túsiriw múmkinligin bildiriw ushın orınlanıwshı etip belgilenedi. Unix sistemalarında chmod +x file.py sıyaqlı buyrıq ádette bunı ámelge asıradı.

Kelinler, Unix sıyaqlı sistemalar ushın bir mısal kóreyik. Tekst redaktorınızdı qollanıp, brian dep atalatuǵın Python kodı bar fayl jaratın:

#!/usr/local/bin/python
print(The Bright Side + of Life...) # + qatarlar ushın birlestiriw belgisi

Fayldıń joqarǵı bólimindegi ayırıqsha qatar sistemaǵa Python interpretatorınıń qay jerde jaylasqanın bildiredi. Texnikalıq jaqtan, birinshi qatar - bul Python kommentariyası. Aldın aytılǵanday, Python programmasındaǵı barlıq kommentariylar # belgisi menen baslanadı hám qatardıń aqırına deyin dawam etedi; olar kodıńızdı oqıytuǵın adamlar ushın qosımsha maǵlıwmat kirgiziwge arnalǵan orın. Biraq usı fayldaǵı birinshi qatardaǵıday kommentariy payda bolǵanda, ol ayırıqsha boladı, sebebi operaciyalıq sistema onı fayldıń qalǵan bólimindegi programma kodın orınlaw ushın interpretator tabıwda qollanadı.

Sonday-aq, bul fayldıń atı ápiwayi brian dep ataladı, aldınǵı modul faylı ushın qollanılǵan .py qosımtasısız ekenin esletip ótemiz. Atına .py qosıw zıyan keltirmeydi (hám bul Python programma faylı ekenin esińizde saqlawǵa járdem beriwi múmkin), biraq siz basqa modullerdiń usı fayldaǵı kodtı import etiwin jobalastırmaǵanlıqtan, fayldıń atı áhmiyetsiz.

Eger siz chmod +x brian qabıq buyırıǵı menen fayl ushın orınlanıw huqıqların berseńiz, onı operaciyalıq sistema qabıǵınan binarlıq programma sıyaqlı iske túsire alasız:

% brian
The Bright Side of Life...

Windows paydalanıwshıları ushın eskertiw: bul jerde táriyiplengen usıl - bul Unix hiylesi hám siziń platformańızda islemewin múmkin. Alańlamań; tek aldın úyrenilgen tiykarǵı komanda qatarı usılın qollanıń. Fayldıń atın anıq python komanda qatarında kórsetiń:*

C:\misc> python brian
The Bright Side of Life...

Bul jaǵdayda, siz joqarıda ayırıqsha #! kommentariyasın qoyıwıńız shárt emes (eger ol bar bolsa da, Python onı ele áhmiyetke almaydı), hám faylǵa orınlanıw huqıqların beriw de talap etilmeydi.

Shınında da, eger siz fayllarıńızdı Unix hám Microsoft Windows arasında kóshirmeli túrde iske túsiriwdi qáleseńiz, programmalardı iske qosıw ushın Unix stilindegi skriptlerdi emes, al barlıq waqıtta tiykarǵı komanda qatarı usılın qollanıw siziń turmısıńızdı ápiwayılastıradı.

Unix env izlew hiylesi
Bazı Unix sistemalarında, Python interpretatorına jol kórsetiwdi qatań kodlastırıwdan qashıw ushın, ayırıqsha birinshi qatar kommentariyasın bılay jazıwıńız múmkin:

#!/usr/bin/env python
...skript usı jerde jazıladı...

Usılay kodlanǵanda, env programması Python interpretatorın siziń sistema izlew jolı sazlawlarıńızǵa sáykes tabadı (yaǵnıy, kópshilik Unix qabıqlarında PATH ortalıq ózgeriwshisinde dizimlengen barlıq kataloglardı tekserip shıǵadı).

Bul sxema kóbirek kóshirmeli bolıwı múmkin, sebebi sizge barlıq skriptlerińizdiń birinshi qatarında Python ornatıw jolın qatań kodlastırıwdıń keregi joq. Eger sizde hámme jerde env-ge kirisiw múmkinshiligi bolsa, skriptlerińiz Python sistemańızda qay jerde jaylasqanına qaramastan isleydi - sizge tek platformalar arasında PATH ortalıq ózgeriwshisiniń sazlawların ózgertiwińiz kerek boladı, barlıq skriptlerińizdiń birinshi qatarın emes.

Álbette, bul env hámme jerde birdey jerde jaylasqan dep boljaydı (bazı kompyuterlerde ol /sbin, /bin yamasa basqa jerde bolıwı múmkin); eger bunday bolmasa, kóshirmeliginiń barlıq imkaniyatları joǵaladı!

Fayl belgilerin basıw
Windowsta Registr fayllardı belgi basıw arqalı ashıwdı ańsat etedi. Python avtomatik túrde ózin Python baǵdarlama faylların ashıwshı programma sıpatında dizimge aladı. Sonıń ushın, jazǵan Python baǵdarlamarıńızdı tek tıshqan kursorı menen olardıń fayl belgilerin basıw (yamasa eki ret basıw) arqalı iske qosıw múmkin.

Windows bolmaǵan sistemalarda da usıǵan uqsas ámeldi orınlaw múmkinshiligiń boladı, biraq belgiler, fayl izertlewshi, navigaciya sxemaları hám basqalar azǵana parıq etiwi múmkin. Mısalı, bazı Unix sistemalarında .py keńeytpesin fayl izertlewshi GUI menen dizimge alıwıńız, aldıńǵı bólimde talqılanǵan #! hiylesi járdeminde skriptińizdi orınlanıwǵa uqıplı etiwińiz, yamasa fayl MIME túrin qollanba yamasa buyrıq penen baylanıstırıw ushın fayllarǵa ózgeris kiritiwińiz, programmalardı ornatıwıńız yamasa basqa qurallardan paydalanıwıńız kerek bolıwı múmkin. Eger basıwlar dárhal durıs islemese, qosımsha maǵlıwmat ushın fayl izertlewshińizdiń qollanbasın qarań.

Windowsta belgilerin basıw
Túsindiriw ushın, aldın jazǵan script1.py skriptimizdi qollanıwdı dawam etemiz. Bet awdarıwdı azaytıw ushın, ol usı jerde qaytalanadı:

# Birinshi Python skripti
import sys # Kitapxana modulin júklew
print(sys.platform)
print(2 ** 100) # 2 ni dárejege kóteriw
x = Spam!
print(x * 8) # Qatardı qaytaraw

Kórgenimizdey, bul fayldı bárqulla sistema buyrıq qatarınan iske qosıwǵa boladı:

C:\misc> c:\python30\python script1.py
win32
1267650600228229401496703205376

Biraq, belgi basıwlar sizge fayldı hesh qanday teriw talap etilmesten iske qosıw imkaniyatın beredi. Eger siz bul fayldıń belgisin tapsańız - mısalı, Start menyusında Computer (yamasa XPde My Computer) di tańlap, Windowstaǵı C diskinde tómenge qaray júrseńiz - 3-1 súwrette kórsetilgen fayl izertlewshi kórinisine erisesiz (bul jerde Windows Vista qollanılǵan). Windowsta Python derek kod faylları aq fon menen, bayt-kod faylları qara fon menen kórinedi. Ádette, eń sońǵı ózgerislerińizdi alıw ushın derek kod faylın basıwdı (yamasa basqa jol menen iske qosıwdı) qáleysiz. Bul jerde fayldı iske qosıw ushın, tek script1.py faylınıń belgisin basıń.



3-1 súwret. Windowsta Python baǵdarlama faylları fayl izertlewshi aynalarında belgi túrinde kórinedi hám tıshqannıń eki ret basıwı menen avtomatik túrde iske qosıla aladı (biraq bul jol menen baspa shıǵısın yamasa qáte xabarların kórmewińiz múmkin).

Kirgiziw hiylesi
Ókinishlisi, Windowsta fayl belgisin basıwdıń nátiyjesi onsha qanaatlandırarlı bolmawı múmkin. Haqıyqatında, bul mısal skripti basılǵanda túsinilmeytuǵın "jaltıldı" payda etedi - bul Python programmaların jaratıwshılar úmit etetuǵın keri baylanıs túri emes! Bul qáte emes, biraq Windows nusqasındaǵı Pythonnıń baspa shıǵısın qanday qılıp basqarıwına baylanıslı. Ádette, Python basılǵan fayldıń kirgiziw hám shıǵarıwı ushın qara DOS konsol aynasın payda etedi. Eger skript tek basıp shıǵarsa hám juwmaqlasa, onıń tek basıp shıǵarıp juwmaqlaydı - konsol aynası payda boladı, tekst sol jerge basıp shıǵarıladı, biraq baǵdarlama juwmaqlanǵanda konsol aynası jabıladı hám joq boladı. Eger siz júdá tez bolmasańız yamasa kompyuterińiz júdá áste bolmasa, shıǵısıńızdı hesh kóre almaysız. Bul normal jumıs tártibi bolsa da, bul siz oylaǵan nárse emes shıǵar.

Quwanıshlısı, bunı sheshiw ańsat. Eger skriptińizdiń shıǵısın belgi basıw arqalı iske qosqanıńızda saqlanıp qalıwın qáleseńiz, tek skripttiń eń aqırına ornatılǵan input funkciyasına shaqırıw qosıń (2.6 versiyasında raw_input: aldaǵı eskertiw kóriń). Mısalı:

# Birinshi Python skripti
import sys # Kitapxana modulin júklew
print(sys.platform)
print(2 ** 100) # 2 ni dárejege kóteriw
x = Spam!
print(x * 8) # Qatardı qaytaraw
input() # import script1
win32
1267650600228229401496703205376
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!

Bul isleydi, biraq ádepki boyınsha hár sessiya (shınında da, process) ushın tek bir ret isleydi. Birinshi importtan keyin, keyingi importlar hesh nárse islemeydi, hátte eger siz moduldiń derek faylın basqa aynada ózgertip saqlaǵan bolsańız da:

>>> import script1
>>> import script1

Bul jobalastırılǵan; importlar hár fayl ushın, hár programma júrgizilgende (orınlaǵanda) bir retten artıq qaytalaw ushın júdá qımbat operaciya. 21-bapta úyrengenińizdey, importlar fayllardı tabıwı, olardı bayt kodına kompilaciya etiwi hám kodtı orınlawı kerek. Eger siz Pythondı sessiyanı toqtatpay hám qayta baslamay, sol sessiyada fayldı qaytadan júrgiziwge máljbúrlew kerek bolsa, siz imp standart kitapxana modulinde bar bolǵan reload funkciyasın shaqırıwıńız kerek (bul funkciya Python 2.6 da ápiwayı built-in funkciya, biraq 3.0 da bunday emes):

>>> from imp import reload # 3.0 da modulden júklew kerek
>>> reload(script1)
win32
65536
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
>>>

Bul jerde from operatorı tek modulden atın kóshirip aladı (bul haqqında tez arada kóbirek aytamız). reload funkciyası ózińizdiń fayl kodıńızdıń házirgi versiyasın júkleydi hám orınlaydı, eger siz onı basqa aynada ózgertip saqlaǵan bolsańız, ózgerislerdi qabıl etedi. Bul sizge házirgi Python interaktiv sessiyası ishinde jańa kodtı redaktorlaw hám qabıl etiw imkaniyatın beredi. Mısalı, bul sessiyada script1.py daǵı ekinshi print operatorı birinshi import hám reload shaqırıwı arasında basqa aynada 2 ** 16 shıǵarıw ushın ózgertilgen edi.

reload funkciyası aldın júklengen modul obyektiniń atın kútedi, sonlıqtan siz moduldi qayta júklew aldınan onı bir ret tabıslı import qılıwıńız kerek. Dıqqat awdarıń, reload de modul obyektiniń atı átirapında qawsırma talap etedi, al import bunday emes. reload - bul shaqırılatuǵın funkciya, al import - bul operator. Sonıń ushın siz modul atın reload ǵa qawsırma ishinde argument sıpatında beriwińiz kerek, hám sonıń ushın qayta júklew waqtında qosımsha shıǵıs qatarın alasız. Sońǵı shıǵıs qatarı - bul tek reload shaqırıwınıń qaytarıw mánisiniń kórsetiliwi, yaǵnıy Python modul obyekti. Funkciyalardı ulıwma qollanıw haqqında 16-bapta kóbirek úyrenemiz.

Versiya ózgerisi eskertiw: Python 3.0 reload built-in funkciyasın imp standart kitapxana moduline kóshirdi. Ol ele de burınǵıday fayllardı qayta júkleydi, biraq onı qollanıw ushın siz onı import qılıwıńız kerek. 3.0 da, import imp orınlap, imp.reload(M) qollanıń, yamasa from imp import reload orınlap, bul jerde kórsetilgendey reload(M) qollanıń. Biz import hám from operatorların keyingi bólimde, hám bul kitaptıń keyingi bólimlerinde tereńirek talqılaymız.

Eger siz Python 2.6 da (yamasa ulıwma 2.X da) jumıs islep atırǵan bolsańız, reload built-in funkciya sıpatında jetkilikli, sonlıqtan hesh qanday import talap etilmeydi. Python 2.6 da reload eki túrde de bar - built-in hám modul funkciyası - bul 3.0 ǵa ótiw ushın járdem beredi.

Basqasha aytqanda, qayta júklew ele de 3.0 da bar, biraq reload shaqırıwın alıw ushın qosımsha kod qatarı kerek. 3.0 daǵı bul ózgeris, múmkin, keyingi bólimde ushırasatuǵın reload hám from operatorlarına baylanıslı ayırım belgili máseleler sebepli motivlengen bolıwı múmkin. Qısqasha aytqanda, from menen júklengen atlar reload arqalı tikkeley jańalanbaydı, biraq import operatorı menen kirgiziletuǵın atlar jańalanadı. Eger reload dan keyin siziń atlarıńız ózgermegen bolıp kórinse, import hám module.attribute at silteme usılın qollanıp kóriń.

Úlken modul áńgimesi: Atributlar
Import hám reload operaciyaları programmanı iske túsiriw ushın tábiyiy variant bolıp esaplanadı, sebebi import operaciyaları fayllardı aqırǵı basqıshta orınlaydı. Biraq, keńirek kóz-qarastan qaraǵanda, moduller úskenelerdiń kitapxanası xızmetin atqaradı, bul haqqında siz V-bólimde úyrenesiz.

Ulıwma alǵanda, modul kóbinese tek ǵana ózgeriwshi atlar toplamı bolıp, ol namespace dep ataladı. Bul toplamdaǵı atlar atributlar dep ataladı - atribut belgili bir obyektke (mısalı, modulge) biriktirilgen ózgeriwshi atı bolıp tabıladı.

Ádettegi qollanıwda, import qılıwshılar modul faylınıń joqarı dárejesinde belgilengen barlıq atlarǵa kiriwge múmkinshilik aladı. Bul atlar kóbinese modul tárepinen eksport etiletuǵın qurallarǵa - funkciyalarǵa, klaslarǵa, ózgeriwshilerge hám basqalarǵa belgilenedi - olar basqa fayllar hám programmalarda qollanılıwı názerde tutılǵan.

Sırttan, modul faylınıń atların eki Python operatorı - import hám from, sonday-aq reload shaqırıwı arqalı alıwǵa boladı.

Mısalı, tekst redaktorın qollanıp, tómendegi mazmunǵa iye myfile.py dep atalǵan bir qatarlı Python modul faylın jaratıń:

title = "The Meaning of Life"

Bul dúnyadaǵı eń ápiwayı Python modulleriniń biri bolıwı múmkin (ol tek bir belgilew operatorınan ibarat), biraq maqsetti túsindiriw ushın jetkilikli. Bul fayl import qılınǵanda, onıń kodı moduldiń atributın payda etiw ushın orınlanadı. Belgilew operatorı title dep atalǵan modul atributın jaratadı.

Siz bul moduldiń title atributin basqa komponentlerde eki túrli jol menen qollana alasız. Birinshiden, siz moduldı tolıǵı menen import operatorı járdeminde júklep alıp, keyin modul atın atribut atı menen birliktirip, onı alıwıńız múmkin:

% python # Pythondı baslaw
>>> import myfile # Fayldı orınlaw; moduldı tolıǵı menen júklew
>>> print(myfile.title) # Onıń atribut atların qollanıw: . arqalı anıqlaw
The Meaning of Life

Ulıwma alǵanda, noqat kórsetpesi sintaksisi object.attribute hár qanday obyektke biriktirilgen hár qanday atributtı alıwǵa múmkinshilik beredi, hám bul Python kodında júdá keń tarqalǵan operaciya. Bul jerde biz onı myfile moduli ishindegi title qatarlıq ózgeriwshisine kiriwde qollandıq - basqasha aytqanda, myfile.title.

Sonıń menen birge, siz from operatorları járdeminde modulden atların alıwıńız (negizinde, kóshirip alıwıńız) múmkin:

% python # Pythondı baslaw
>>> from myfile import title # Fayldı orınlaw; onıń atların kóshirip alıw
>>> print(title) # Attı tikkeley qollanıw: anıqlawdıń keregi joq
The Meaning of Life

Keyinirek tolıǵıraq kóretuǵınıńızday, from operatorı import operatorı sıyaqlı, tek import qılıwshı komponentte qosımsha atlarǵa belgilew menen. Texnikalıq jaqtan, from moduldiń atributların kóshirip aladı, solay etip olar alıwshı ushın ápiwayı ózgeriwshilerge aylanadı - sonlıqtan, siz endi import qılınǵan qatardı myfile.title (atribut siltemesi) ornına ápiwayı title (ózgeriwshi) dep atay alasız.

Import yamasa from operatorların qollanıp import operaciyasın ámelge asırǵanıńızda, myfile.py modul faylındaǵı operatorlar orınlanadı hám import qılıwshı komponent (bul jerde interaktiv prompt) fayl joqarı dárejesinde belgilengen atlarǵa kiriwge múmkinshilik aladı. Bul ápiwayı mısalda tek bir at bar - qatarǵa belgilengen title ózgeriwshisi - biraq bul túsinik modullerińizde funkciyalar hám klasslar sıyaqlı obyektlerdi anıqlay baslaǵanıńızda qolaylıraq boladı: bunday obyektler qayta qollanılatuǵın programmalıq táminlew komponentlerine aylanadı, olarǵa bir yamasa bir neshe klient modulleri arqalı at boyınsha kiriw múmkin.