Byte of Python
Byte of Python
Introducere 1.1
Dedicare 1.2
Prefaţă 1.3
Despre Python 1.4
Facilitate 1,5
Primii pasi 1,6
Esential 1,7
Operatori și expresii 1.8
Controlul fluxului 1,9
Caracteristici 1,10
Module 1,11
Structuri de date 1.12
Rezolvarea problemei 1,13
Programare orientată pe obiecte 1,14
Intrare și ieșire 1,15
Excepții 1,16
Biblioteca standard 1,17
Mai departe 1,18
Ce urmeaza 1,19
Anexă: ATARĂ 1,20
Anexă: Despre 1,21
Anexă: Istoricul revizuirilor 1,22
Anexă: Traduceri 1,23
Anexă: Proceduri de traducere 1,24
Părere 1,25
1
Introducere
Un octet Python
„A Byte of Python” este o carte gratuită despre programare folosind limbajul Python. Acesta servește ca tutorial sau ghid
pentru limbajul Python pentru un public începător. Dacă tot ce știi despre computere este cum să salvezi fișiere text, aceasta
este cartea pentru tine.
Cândva prin 2004-2005, când am fost convins că nu sunt suficient de inteligent pentru a fi programator, am dat peste A
Byte original al #Python, iar asta mi-a schimbat întreaga perspectivă asupra calculatoarelor și vieții, îi datorez mult pentru
acea carte. scrisese @swaroopch. - Rahul pe 30 iulie 2020
Aceasta este cartea care m-a introdus în programare în urmă cu aproape un deceniu. Mulțumesc @swaroopch. Mi ai
schimbat viata. - Stefan Froelich pe 2 august 2019
Vă scriu acest e-mail pentru a vă mulțumi pentru marele ajutor pe care mi l-a oferit cartea dumneavoastră. A fost o carte
foarte bună care mi-a plăcut foarte mult. Fiind un tânăr de 15 ani care nu făcuse niciodată programare înainte, încercarea de
a învăța Python online a fost dificilă și nu puteam înțelege nimic. Dar am simțit că cartea lui a fost mult mai ușor de înțeles
și m-a ajutat să intru în noua lume a programării. Datorită ție, acum pot scrie cu ușurință un limbaj de nivel înalt. Am crezut
că programarea va fi dificilă și plictisitoare, dar cu ajutorul cărții tale, mi-am dat seama cât de distractivă și interesantă, dar
totuși simplă, poate fi! Aș dori să vă mulțumesc din nou pentru munca depusă în a ajuta începătorii ca mine. - Prottyashita
Tahiyat pe 17 septembrie 2019
Acesta este cel mai bun tutorial pentru începători pe care l-am văzut vreodată! Multumesc pentru efortul tau. - Walt Michalik
Cel mai bun pe care l-am găsit a fost „A Byte of Python”, care este doar o carte genială pentru începători. Este bine scris,
conceptele sunt bine explicate cu exemple evidente. - Joshua Robin
Rajasekaran începe să iubească Python cu fiecare pagină pe care o citești - Herbert Feutl
Ghidul perfect pentru începătorii Python, vă va oferi cheia pentru a debloca lumea magică a lui Python - Dilip
Ar trebui să-mi fac „treaba”, dar tocmai am găsit „A Python Byte”. Un ghid grozav cu exemple grozave. - Biologul John
Am început recent să citesc un Python Byte. Lucru minunat. Și asta gratuit. Foarte recomandat pentru pitoniști aspiranți. -
Mangesh
Un octet Python, scris de Swaroop. (aceasta este cartea pe care o citesc în prezent). Probabil cel mai bun pentru început și
probabil cel mai bun din lume pentru fiecare începător sau chiar pentru un utilizator mai experimentat. - Apostolos
Citește cu plăcere #ByteOfPython de @swaroopch, cea mai bună carte din toate timpurile - Yuvraj Sharma
A Byte of Python de @swaroopch este încă „cel mai bun ghid pentru începători pentru Python” - Nickson Kaigi
2
Introducere
Vă mulțumesc foarte mult pentru că ați scris A Byte Of Python. Am început să învăț codificarea acum două zile și deja
creez câteva jocuri simple. Îndrumarea ta a fost un vis și am vrut doar să te anunț cât de valoroasă a fost. - Franklin
Sunt de la Colegiul de Inginerie Dayanandasagar (sem. 7, CSE). În primul rând, vreau să spun că cartea ta „The Python
Byte” este o carte prea bună pentru un începător Python ca mine. Conceptele sunt atât de bine explicate cu exemple simple
încât m-au ajutat să învăț Python cu ușurință. Mulțumesc foarte mult. - Madhura
Sunt un student IT de 18 ani care studiază la Universitatea din Irlanda. Aș dori să vă exprim recunoștința pentru că ați scris
cartea dvs. „A Byte of Python”, aveam deja cunoștințe de 3 limbaje de programare: C, Java și Javascript, iar Python a fost
de departe cel mai ușor limbaj pe care l-am învățat vreodată și că sa datorat în principal pentru că cartea lui a fost fantastică
și a făcut ca învățarea Python-ului să fie foarte simplă și interesantă. Este una dintre cele mai bine scrise și ușor de urmărit
cărți de programare pe care le-am citit vreodată.
Felicitări și continuați tot așa. -Mt
Buna sunt din Republica Dominicana. Numele meu este Pavel, am citit recent cartea ta A Byte of Python si o consider
excelenta!! :). Am învățat multe din toate exemplele. Cartea ta este de mare ajutor pentru începătorii ca mine... - Pavel
Simo
Sunt un student din China, acum, am citit cartea A byte of Python, Oh, e frumos. Cartea este foarte simplă, dar poate ajuta
toți începătorii. Știi că sunt interesant în Java și cloud computing de multe ori, trebuie să codific programul pentru server,
așa că cred că Python este o alegere bună, termină-ți cartea, cred că nu numai că este o alegere bună, ci ar trebui să folosești
Python . Engleza mea nu este foarte bună, trimiteți-vă un e-mail, vreau doar să vă mulțumesc! Cele mai bune urări pentru
tine și familia ta. -Roy Lau
Am terminat recent de citit Byte of Python și m-am gândit că ar trebui să vă mulțumesc cu adevărat. Am fost foarte trist să
ajung la ultimele pagini, pentru că acum trebuie să mă întorc la manuale plictisitoare, plictisitoare etc. pentru a învăța
Python. Oricum, apreciez foarte mult cartea ta. Samuel Young
Dragă Swaroop, iau o clasă de la un instructor care nu are niciun interes să predea. Folosim Learning Python, a doua ediție,
de la O'Reilly. Nu este un text pentru începători fără cunoștințe de programare și un instructor care ar trebui să lucreze într-
un alt domeniu. Vă mulțumesc foarte mult pentru carte, fără ea nu aș avea habar despre Python și programare. Mulțumesc
un milion, puteți descompune mesajul la un nivel pe care începătorii îl pot înțelege și nu toată lumea. - Jose Duarte
Iubesc cartea ta! Este cel mai bun tutorial Python vreodată și o referință foarte utilă. Genial, o adevărată capodopera!
Continua cu munca buna! - Chris-André Sommerseth
În primul rând, vreau să vă mulțumesc pentru această carte minunată. Cred că este o carte bună pentru cei care caută un
tutorial Python pentru începători. Cred că a fost acum doi sau doi ani când am auzit prima dată despre această carte. La
acel moment, încă nu puteam citi nicio carte în limba engleză, așa că am primit o traducere în chineză, care m-a condus la
ușa programării Python. Recent, am recitit această carte. De data aceasta, desigur, versiunea în engleză. Nu-mi venea să
cred că pot citi întreaga carte fără dicționarul meu la îndemână. Desigur, totul se datorează efortului tău de a face această
carte ușor de înțeles. - myd7349
Îți trimit un e-mail pentru a-ți mulțumi că ai scris Byte of Python online. Am încercat Python de câteva luni înainte de a da
peste cartea ta și, deși am avut un succes limitat cu pyGame, nu am finalizat niciodată un program. Datorită simplificării
categoriilor, Python pare într-adevăr un obiectiv realizabil. Se pare că în sfârșit am învățat elementele de bază și pot continua
spre obiectivul meu real, dezvoltarea jocului, încă o dată, vă mulțumesc MULT pentru postare la
Ghid structurat și util pentru programarea web de bază. M-a împins înăuntru și ieșit din OOP cu o înțelegere în cazul în
care două manuale au eșuat. -Matt Gallivan
Aș dori să vă mulțumesc pentru cartea dvs. A Byte of Python, pe care eu însumi o găsesc cel mai bun mod de a învăța
Python. Am 15 ani, locuiesc in Egipt si ma numesc Ahmed. Python a fost al doilea meu limbaj de programare. Am învățat
Visual Basic 6 la școală, dar nu mi-a plăcut, totuși, mi-a plăcut foarte mult să învăț Python. Am făcut programul de agendă
și am avut succes. Voi încerca să încep să fac mai multe programe și să citesc programe Python (dacă mi-ați putea spune
sursa ar fi de ajutor). De asemenea, o să încep să învăț Java și dacă îmi poți spune unde să găsesc un tutorial la fel de bun ca
al tău pentru Java, asta m-ar ajuta foarte mult. Mulțumesc. - Ahmed Mohammed
3
Introducere
O resursă minunată pentru începătorii care doresc să afle mai multe despre Python este tutorialul PDF de 110 de pagini A
Byte of Python de la Swaroop C H. Este bine scris, ușor de urmărit și poate fi cea mai bună introducere disponibilă în
programarea Python. -Drew Ames
Am parcurs cea mai mare parte a Byte of Python ieri pe Nokia N800 și este cea mai simplă și mai concisă introducere în
Python pe care am găsit-o. Foarte recomandat ca punct de plecare pentru a învăța Python. - Jason Delport
Byte of Vim and Python de @swaroopch este de departe cea mai bună lucrare de scriere tehnică pentru mine. Citituri
grozave #FeelGoodFactor – Surendran
„Python Byte” cel mai bun de departe (ca răspuns la întrebarea „Poate cineva sugera o resursă bună și ieftină pentru a
învăța elementele de bază ale Python?”) - Justin LoveTrue
Întotdeauna am fost un fan al lui A Byte of Python, creat atât pentru programatori noi, cât și pentru programatori experimentați. -
Patrick Harrington
Am început să învăț Python acum câteva zile din cartea ta... mulțumesc pentru o carte atât de frumoasă. este atat de bine
scris, mi-ai facut viata mai usoara...asa ca ti-ai gasit un nou fan de-al tau...acela sunt eu :) tone de multumesc. - Gadadhari
Bheem
Înainte de a începe să învăț Python, am dobândit abilități de programare de bază în Assembly, C, C++, C# și Java.
Adevăratul motiv pentru care am vrut să învăț Python este că este popular (oamenii vorbesc despre el) și puternic
(realitatea). Această carte scrisă de domnul Swaroop este un ghid foarte bun atât pentru programatorii Python noi, cât și
pentru cei noi. A durat 10 zile și jumătate pentru a-l revizui. Mare ajutor! - Fang Biyi (candidat la doctorat ECE,
Universitatea de Stat din Michigan)
Multumesc mult pentru aceasta carte!! Această carte a clarificat multe întrebări pe care le-am avut despre anumite aspecte
ale Python, cum ar fi programarea orientată pe obiecte. Nu mă simt ca un expert OO, dar știu că această carte m-a ajutat cu
un prim pas sau doi. Acum am scris mai multe programe Python care fac lucruri reale pentru mine ca administrator de
sistem. Toate sunt orientate către proceduri, dar mici după standardele majorității oamenilor. Din nou, mulțumesc pentru
această carte. Mulțumesc că îl aveți pe web. --Fie la
Vreau doar să vă mulțumesc pentru că ați scris prima carte despre programare pe care am citit-o de fapt. Python este acum
prima mea limbă și îmi pot imagina toate posibilitățile. Așa că vă mulțumesc că mi-ați oferit instrumentele pentru a crea
lucruri pe care nu mi-aș fi imaginat niciodată că le pot face înainte. - "morsa"
Am vrut să vă mulțumesc pentru că ați scris A Byte Of Python (versiunile 2 și 3). A fost de neprețuit pentru experiența mea
de învățare în Python și programare în general. Inutil să spun că sunt un începător în lumea programării, câteva luni de
auto-studiu în acest moment. Folosisem tutoriale youtube și alte tutoriale online, inclusiv alte cărți gratuite. Am decis ieri să
caut în cartea ta și am învățat mai multe în primele pagini decât în orice altă carte sau tutorial. Unele lucruri despre care am
fost confuz au fost clarificate cu un exemplu și o explicație grozave. Abia astept sa citesc (si sa invat) mai multe!! Vă
mulțumesc foarte mult nu numai că ați scris cartea, ci și că ați pus-o sub licența creative commons (gratuită).
Mulțumim lui Dumnezeu că există oameni dezinteresați ca tine care ne ajută și ne învață pe ceilalți. - Chris
Ți-am scris în 2011 și intram în Python și voiam să-ți mulțumesc pentru tutorialul tău „A Byte of Python”. Fără el, aș fi căzut
pe margine. De atunci, am trecut la programarea unui număr de funcții în organizația mea cu acest limbaj cu mai multe la
orizont. Nu m-aș numi programator avansat sub nicio formă, dar acum observ cererea ocazională de ajutor de la alții de când
am început să-l folosesc. Am descoperit, în timp ce citeam „Byte”, de ce nu mai studiez C și C++ și pentru că cartea care mi
s-a dat începea cu un exemplu care conținea o sarcină augmentată. Bineînțeles, nu a existat nicio explicație pentru această
aranjare a operatorilor și am căzut cu capul în cap încercând să dau sens ce era pe pagina scrisă. Din câte îmi amintesc, a fost
un exercițiu foarte frustrant pe care l-am abandonat în cele din urmă. Nu înseamnă că C sau C++ este imposibil de învățat,
sau chiar că sunt prost, dar înseamnă că documentația prin care am lucrat nu a definit simbolurile și cuvintele, care este o
parte esențială a oricărui instrucție. Așa cum computerele nu vor putea înțelege un cuvânt de calculator sau un simbol de
computer care se află în afara sintaxei limbajului folosit, un student nou în orice domeniu nu își va înțelege subiectul dacă
întâlnește cuvinte sau simboluri pentru care nu există definiții. . Primești un „ecran albastru”, ca să spunem așa, în orice caz.
Cu toate acestea, soluția este simplă: căutați cuvântul sau simbolul și obțineți definiția sau simbolul adecvat și, iată,
4
Introducere
computerul sau studentul poate continua. Cartea ta sau chiar că sunt prost, dar asta înseamnă că documentația cu care am
lucrat nu a definit simbolurile și cuvintele, ceea ce este o parte esențială a oricărei instrucțiuni. Așa cum computerele nu vor
putea înțelege un cuvânt de calculator sau un simbol de computer care se află în afara sintaxei limbajului folosit, un student
nou în orice domeniu nu își va înțelege subiectul dacă întâlnește cuvinte sau simboluri pentru care nu există definiții. .
Primești un „ecran albastru”, ca să spunem așa, în orice caz. Cu toate acestea, soluția este simplă: căutați cuvântul sau
simbolul și obțineți definiția sau simbolul adecvat și, iată, computerul sau studentul poate continua. Cartea ta sau chiar că
sunt prost, dar asta înseamnă că documentația cu care am lucrat nu a definit simbolurile și cuvintele, ceea ce este o parte
esențială a oricărei instrucțiuni. Așa cum computerele nu vor putea înțelege un cuvânt de calculator sau un simbol de
computer care se află în afara sintaxei limbajului folosit, un student nou în orice domeniu nu își va înțelege subiectul dacă
întâlnește cuvinte sau simboluri pentru care nu există definiții. . Primești un „ecran albastru”, ca să spunem așa, în orice caz.
Cu toate acestea, soluția este simplă: căutați cuvântul sau simbolul și obțineți definiția sau simbolul adecvat și, iată,
computerul sau studentul poate continua. Cartea ta Așa cum computerele nu vor putea înțelege un cuvânt de calculator sau
un simbol de calculator care se află în afara sintaxei limbajului folosit, un student nou în orice domeniu nu își va înțelege
subiectul dacă întâlnește cuvinte sau simboluri pe care nu le înțelege. înțeleg. Există definiții. Primești un „ecran albastru”, ca
să spunem așa, în orice caz. Cu toate acestea, soluția este simplă: căutați cuvântul sau simbolul și obțineți definiția sau
simbolul adecvat și, iată, computerul sau studentul poate continua. Cartea ta Așa cum computerele nu vor putea înțelege un
cuvânt de calculator sau un simbol de calculator care se află în afara sintaxei limbajului folosit, un student nou în orice
domeniu nu își va înțelege subiectul dacă întâlnește cuvinte sau simboluri pe care nu le înțelege. înțeleg. Există definiții.
Primești un „ecran albastru”, ca să spunem așa, în orice caz. Cu toate acestea, soluția este simplă: căutați cuvântul sau
simbolul și obțineți definiția sau simbolul adecvat și, iată, computerul sau studentul poate continua. Cartea ta găsește
cuvântul sau simbolul și primește definiția sau simbolul adecvat și iată, computerul sau studentul poate continua. Cartea dvs.
găsește cuvântul sau simbolul și obține definiția sau simbolul adecvat și iată, computerul sau studentul poate continua. Cartea
ta
5
Introducere
era atât de bine pusă cap la cap, încât am găsit foarte puține în ea pe care nu le puteam înțelege. Deci mulțumesc. Vă
încurajez să continuați să includeți definiții complete ale termenilor. Documentația cu Python este bună, odată ce o
cunoașteți (exemplele sunt forța ei din câte văd) dar în multe cazuri se pare că trebuie să știți să înțelegeți documentația
care după părerea mea nu este ceea ce ar trebui să fie. Tutorialele de la terți exprimă nevoia de a clarifica documentația, iar
succesul lor depinde în mare măsură de cuvintele folosite pentru a descrie terminologia. Am recomandat cartea ta multora.
Unele în Australia, altele în Caraibe și altele în Statele Unite. Umple o nișă pe care nimeni altcineva nu o face. Sper că te
descurci bine și îți doresc mult succes pe viitor. - Nick
hei, acesta este ankush (19). Am întâmpinat mari dificultăți în a începe cu Python. Am încercat multe cărți, dar toate erau
mai voluminoase și nu orientate spre obiective; și apoi l-am găsit pe acesta minunat, care m-a făcut să iubesc Python în cel
mai scurt timp. Vă mulțumesc foarte mult pentru această „carte frumoasă”. - Ankush
Aș dori să vă mulțumesc pentru ghidul dumneavoastră excelent despre Python. Sunt biolog molecular (cu puțină
experiență în programare) și pentru munca mea trebuie să mă ocup de seturi mari de date de secvențe ADN și să analizez
imagini microscopice. Pentru ambii, programarea Python a fost utilă, dacă nu esențială, în finalizarea și publicarea unui
proiect de 6 ani. Faptul că un astfel de ghid este disponibil gratuit este un semn clar că forțele malefice nu conduc încă
lumea! :) - Luca
Deoarece aceasta va fi prima limbă pe care o veți învăța, ar trebui să utilizați A Byte of Python. Oferă într-adevăr o
introducere adecvată în programarea Python și este suficient de bine ritmată pentru începătorii medii. Cel mai important
lucru din acel moment va fi să începi să exersezi crearea propriilor tale programe mici. - "{Neînregistrat}"
Doar ca să vă mulțumesc pentru publicarea „A Byte of Python” și „A Byte of Vim”. Am găsit acele cărți foarte utile acum
patru sau cinci ani, când am început să învăț programarea. În acest moment, dezvolt un proiect care a fost un vis de foarte
mult timp și vreau doar să vă mulțumesc. Continuă să mergi. Esti o sursa de motivatie. Toate cele bune. - Jocimar
Am terminat de citit One Byte of Python în 3 zile. E foarte interesant. Nicio pagină nu a fost plictisitoare. Vreau să înțeleg
codul cititorului de ecran Orca. Sper că cartea ta m-a pregătit pentru asta. - Dattatray
Bună, „A Python Byte” este într-adevăr o lectură bună pentru începătorii Python. Deci, din nou, MUNCĂ BUNĂ! Sunt un
dezvoltator Java & C cu 4 ani de experiență în China. Recent, vreau să lucrez la proiectul zim-wiki note care folosește
pygtk pentru implementare. Ți-am citit cartea în 6 zile și acum pot să citesc și să scriu exemple de cod Python. multumesc
pentru contributie. Vă rugăm să păstrați entuziasmul de a îmbunătăți această lume, aceasta este doar o mică încurajare din
partea Chinei. - Citit
Sunt Isen din Taiwan, doctorand la Departamentul de Inginerie Electrică, Universitatea Națională din Taiwan. Aș dori să-ți
mulțumesc pentru cartea ta grozavă. Cred că nu este doar ușor de citit, ci și cuprinzător și cuprinzător pentru un nou-venit
Python. Motivul pentru care am citit cartea ta este că încep să lucrez în cadrul GNU Radio. Cartea sa mi-a permis să înțeleg
cele mai multe idei de bază și abilități importante ale Python cu un timp minim. De asemenea, am văzut că nu te deranjează
că cititorii îți trimit un bilet de mulțumire în cartea ta. Așa că îmi place foarte mult cartea ta și o apreciez. Mulțumesc. - Isen
I-Chun Chao
Cartea este folosită chiar și de NASA! Este folosit în Laboratorul lor de propulsie cu reacție cu proiectul Rețeaua de spațiu adânc.
Cursuri academice
Această carte este folosită ca material didactic în mai multe instituții de învățământ:
6
Introducere
Licență
Această carte este licențiată în baza unei licențe internaționale Creative Commons Attribution-
Ține minte:
Vă rugăm să nu vindeți copii electronice sau tipărite ale cărții decât dacă ați menționat clar și evident în descriere că aceste
copii nu sunt de la autorul original al acestei cărți.
Atribuirea ar trebui să fie afișată în descrierea introductivă și în pagina de copertă a documentului prin link-ul
către https://python.swaroopch.com și indicând clar că textul(ele) original(e) pot fi preluate din această
locație. Toate codurile/scripturile furnizate în această carte sunt licențiate conform Licenței cu 3 clauze BSD,
dacă nu se specifică altfel.
Citeste acum
Îl puteți citi online la https://python.swaroopch.com
Cumpără cartea
O copie hârtie a cărții poate fi achiziționată de la https://swaroopch.com/buybook pentru plăcerea dvs. de a citi offline și pentru
a sprijini dezvoltarea și îmbunătățirea continuă a acestei cărți.
Descarcare
Accesați https://github.com/swaroopch/byte-of-python/releases/latest pentru a descărca un fișier PDF (cel mai bun pentru citire
pe desktop) sau un fișier EPUB (cel mai bun pentru dispozitive precum mobile, tablete, cititoare de cărți electronice).
Vizitați https://github.com/swaroopch/byte-of-python pentru conținutul brut (pentru a sugera remedieri, modificări, traducere etc.)
7
Dedicare
Dedicare
Lui Kalyan Varma și multor alți seniori de la PESIT care ne-au prezentat GNU/Linux și lumea open source. În
Spre pionierii care au făcut posibil internetul . Această carte a fost scrisă pentru prima dată în 2003. Ea rămâne în continuare
populară, datorită naturii
împărtășirea cunoștințelor pe internet așa cum și-au imaginat pionierii.
8
Prefaţă
Prefaţă
Python este probabil unul dintre puținele limbaje de programare care este atât simplu, cât și puternic. Acest lucru este bun atât
pentru începători, cât și pentru experți și, cel mai important, este distractiv să programezi. Această carte își propune să vă ajute să
învățați acest limbaj minunat și să vă arate cum să faceți lucrurile rapid și fără durere - de fapt, „Antidotul pentru problemele tale
de programare”.
Scopul este ca, dacă tot ce știți despre computere este cum să salvați fișiere text, atunci puteți învăța Python din această carte. Dacă
aveți experiență anterioară în programare, puteți învăța și Python din această carte.
Dacă aveți experiență anterioară în programare, veți fi interesat de diferențele dintre Python și limbajul dvs. de programare preferat;
Am evidențiat multe dintre aceste diferențe. Un mic avertisment, totuși, Python va deveni în curând limbajul tău de programare
preferat.
Site oficial
Site-ul oficial al cărții este https://python.swaroopch.com unde puteți citi întreaga carte online, puteți descărca cele mai recente
versiuni ale cărții, puteți cumpăra o copie tipărită și, de asemenea, să îmi trimiteți feedback-ul dvs.
Succesul în viață nu este atât o chestiune de talent și oportunitate, cât este de concentrare și perseverență. - C.W. Wendte
9
Despre
Python
Despre Python
Python este una dintre acele limbi rare care se poate lăuda că este simplu și puternic. Veți fi plăcut surprins să vedeți cât de ușor
este să vă concentrați pe soluția problemei, mai degrabă decât pe sintaxa și structura limbajului în care programați.
Python este un limbaj de programare puternic, ușor de învățat. Are structuri eficiente de date la nivel înalt și o abordare
simplă, dar eficientă a programarii orientate pe obiecte. Sintaxa elegantă și tastarea dinamică a lui Python, împreună cu
natura sa interpretată, îl fac un limbaj ideal pentru crearea de scripturi și dezvoltarea rapidă a aplicațiilor în multe domenii
pe majoritatea platformelor.
Voi discuta mai multe dintre aceste caracteristici mai detaliat în secțiunea următoare.
Caracteristici Python
Simplu
Python este un limbaj simplu și minimalist. Citirea unui program Python bun este aproape ca și cum ai citi engleza, deși o engleză
foarte strictă! Această natură de pseudocod a lui Python este unul dintre cele mai mari puncte forte ale sale. Vă permite să vă
concentrați mai degrabă pe soluția problemei decât pe limba în sine.
Usor de invatat
După cum veți vedea, Python este extrem de ușor de început. Python are o sintaxă extraordinar de simplă, așa cum am menționat
deja.
Laptop
Datorită naturii sale open source, Python a fost portat (adică schimbat pentru a funcționa pe) multe platforme. Toate programele
dvs. Python pot funcționa pe oricare dintre aceste platforme fără a necesita modificări dacă sunteți suficient de atent pentru a
evita orice caracteristică dependentă de sistem.
10
Despre
Python
Puteți utiliza Python pe GNU/Linux, Windows, FreeBSD, Macintosh, Solaris, OS/2, Amiga, AROS, AS/400, BeOS, OS/390,
z/OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS , VxWorks, PlayStation, Sharp Zaurus, Windows CE și PocketPC.
Puteți chiar să utilizați o platformă precum Kivy pentru a crea jocuri pentru computer și pentru iPhone, iPad și Android.
Interpretat
Acest lucru necesită puțină explicație.
Un program scris într-un limbaj compilat, cum ar fi C sau C++, este convertit din limba sursă, adică C sau C++, într-o limbă
vorbită de computer (cod binar, adică 0 și 1) folosind un compilator cu diferiți indicatori și opțiuni. Când rulați programul,
software-ul linker/loader copiază programul de pe hard disk în memorie și începe să-l ruleze.
Python, pe de altă parte, nu are nevoie de compilare în binar. Pur și simplu rulați programul direct din codul sursă. Pe plan
intern, Python convertește codul sursă într-un format intermediar numit bytecodes și apoi îl traduce în limba maternă a
computerului și apoi îl execută. Toate acestea fac de fapt utilizarea Python mult mai ușoară, deoarece nu trebuie să vă faceți
griji cu privire la compilarea programului, asigurându-vă că bibliotecile potrivite sunt legate și încărcate etc. Acest lucru face,
de asemenea, programele dvs. Python mult mai portabile, deoarece puteți pur și simplu să copiați programul Python pe alt
computer și funcționează!
Orientat pe obiecte
Python acceptă programarea orientată pe proceduri și programarea orientată pe obiecte (OOP). În limbajele orientate către
proceduri, programul se bazează pe proceduri sau funcții care nu sunt altceva decât bucăți de program reutilizabile. În limbajele
orientate pe obiecte, programul se bazează pe obiecte care combină datele și funcționalitatea. Python are un mod foarte
puternic, dar simplist de a face OOP, mai ales în comparație cu limbaje mari precum C++ sau Java.
Extensibil
Dacă aveți nevoie de o bucată critică de cod pentru a rula foarte rapid sau doriți ca un fragment de algoritm să nu fie deschis, puteți
codifica acea parte a programului în C sau C++ și apoi o puteți utiliza din programul dvs. Python.
Integrabil
Puteți încorpora Python în programele dvs. C/C++ pentru a oferi capabilități de scriptare utilizatorilor programului dvs.
Biblioteci extinse
Biblioteca standard Python este imensă. Vă poate ajuta să faceți diverse lucruri care implică expresii regulate, generarea de
documentație, testarea unitară, threading, baze de date, browsere web, CGI, FTP, e-mail, XML, XML-RPC, HTML, fișiere WAV,
criptografie, GUI (interfețe grafice utilizator), și alte lucruri care depind de sistem. Amintiți-vă, toate acestea sunt întotdeauna
disponibile oriunde este instalat Python. Aceasta se numește filozofia Python Stacks Included.
În plus față de biblioteca standard, există câteva alte biblioteci de înaltă calitate pe care le puteți găsi în Indexul pachetelor Python .
rezumat
Python este într-adevăr un limbaj captivant și puternic. Are combinația potrivită de performanță și caracteristici care fac scrierea
programelor Python distractivă și ușoară.
Python 3 vs 2
Puteți ignora această secțiune dacă nu sunteți interesat de diferența dintre „Python versiunea 2” și „Python versiunea 3”. Dar
țineți cont de versiunea pe care o utilizați. Această carte este scrisă pentru versiunea 3 a Python.
11
Despre
Python
Amintiți-vă că, odată ce ați înțeles și învățat corect cum să utilizați o versiune, puteți cunoaște cu ușurință diferențele și o puteți
utiliza pe cealaltă. Partea grea este să înveți să programezi și să înțelegi elementele de bază ale limbajului Python în sine. Acesta
este scopul nostru în această carte și, odată ce ați atins acest lucru, puteți utiliza cu ușurință Python 2 sau Python 3, în funcție de
situația dvs.
Ce spun programatorii
S-ar putea să vi se pară interesant să citiți ce hackeri grozavi ca Eric S. Raymond (ESR) trebuie să spună despre Python:
Eric S. Raymond este autorul cărții „The Cathedral and the Bazaar” și este, de asemenea, persoana care a inventat termenul
Open Source. El a spus că Python a devenit limbajul său preferat de programare . Acest articol a fost adevărata inspirație
pentru prima mea pensulă Python.
Bruce Eckel este autorul celebrelor cărți „Thinking in Java” și „Thinking in C++”. El spune că niciun limbaj nu l-a făcut mai
productiv decât Python. El spune că Python este poate singurul limbaj care se concentrează pe ușurarea lucrurilor pentru
programator. Citiți interviul complet pentru mai multe detalii.
Peter Norvig este un cunoscut autor Lisp și șef al calității căutării la Google (mulțumesc lui Guido van Rossum pentru că l-a
subliniat). El a spus că a scrie Python este ca și a scrie în pseudocod . El spune că Python a fost întotdeauna o parte integrantă
a Google. De fapt, puteți verifica această afirmație uitându-vă la pagina Google Jobs , care listează cunoștințele despre
Python ca o cerință pentru inginerii de software.
12
Facilitate
Facilitate
Când ne referim la „Python 3” în această carte, ne vom referi la orice versiune de Python egală sau mai mare decât versiunea
Python 3.6.0 .
Instalare pe Windows
Vizitați https://www.python.org/downloads/ și descărcați cea mai recentă versiune. La momentul scrierii, era Python 3.5.1. Instalarea
este ca orice alt software bazat pe Windows.
Vă rugăm să rețineți că, dacă versiunea dvs. de Windows este mai veche decât Vista, ar trebui să descărcați Python 3.4 numai
deoarece versiunile ulterioare necesită versiuni mai noi de Windows.
Pentru a schimba locația de instalare, faceți clic pe Personalizați instalarea , apoi pe Următorul și introduceți C:\python35
(sau altă locație adecvată) ca locație de instalare.
Dacă nu ați bifat opțiunea Add Python 3.5 PATH de mai sus, bifați Add Python to Environment Variables . Aceasta face
același lucru ca și Adăugarea Python 3.5 la PATH pe primul ecran de instalare.
Puteți alege să instalați Launcher pentru toți utilizatorii sau nu, nu contează prea mult. Lansatorul este folosit pentru a comuta
între diferite versiuni Python instalate.
Dacă calea dvs. nu a fost setată corect (prin verificarea opțiunilor Add Python 3.5 Path sau Add Python to Environment
Variables ), urmați pașii din următoarea secțiune ( DOS Command Prompt ) pentru a o remedia. În caz contrar, accesați promptul
Running Python din secțiunea Windows a acestui document.
NOTĂ: Pentru persoanele deja familiarizate cu programarea, dacă sunteți familiarizat cu Docker, consultați Python pe Docker și
Docker pe Windows .
Pentru Windows 2000, XP, 2003, faceți clic pe Panou de control -> Sistem -> Avansat -> Variabile de mediu . Faceți clic
pe variabila numită PATH în secțiunea Variabile de sistem, apoi selectați Editați și Adăugați ; C:\Python35 (verificați dacă
acest folder există, va fi diferit pentru versiunile mai noi de Python) la sfârșitul a ceea ce este deja acolo. Desigur, utilizați
numele de director corespunzător.
Pentru versiunile mai vechi de Windows, deschideți fișierul C:\AUTOEXEC.BAT și adăugați linia PATH =% PATH%; C:\Python35 și
reporniți sistemul. Pentru Windows NT, utilizați fișierul AUTOEXEC.NT .
Faceți clic pe Sistem, în dreapta veți vedea „Vizualizați informațiile de bază despre computerul dvs.”
În stânga este o listă de sarcini, ultima dintre acestea fiind Configurarea avansată a sistemului . Faceți clic pe asta.
Se afișează fila Advanced din caseta de dialog System Properties . Faceți clic pe butonul Variabile de mediu din
dreapta jos.
În caseta de jos intitulată Variabile de sistem, derulați în jos la Cale și faceți clic pe butonul
Editați. Schimbați-vă calea după cum este necesar.
Reporniți sistemul. Vista nu a preluat modificarea variabilei de mediu a căii sistemului până când am repornit.
13
Facilitate
Pentru Windows 7 și 8:
Faceți clic pe OK și ați terminat. O repornire nu este necesară, totuși, poate fi necesar să închideți și să redeschideți promptul de
comandă.
Meniul Start din Windows > Setări > Despre > Informații de sistem (aceasta este până la dreapta) > Setări avansate de
sistem > Variabile de mediu (aceasta este în partea de jos) > (apoi evidențiați Calea variabilei și faceți clic pe Editare ) >
Nou > (tastați locația Python-ului dvs. De exemplu, C:\Python35\ )
Pentru a deschide terminalul în Windows, faceți clic pe butonul Start și faceți clic pe Executare. În caseta de dialog, tastați cmd
Instalare pe Mac OS
Pentru utilizatorii de Mac OS X, utilizați Homebrew : brew install python3 .
Pentru a verifica, deschideți terminalul apăsând tastele [Command + Space] (pentru a deschide căutarea Spotlight), tastați Terminal și
apăsați
[introduce cheia. Acum, rulați python3 și asigurați-vă că nu există erori.
Instalare pe GNU/Linux
Pentru utilizatorii GNU/Linux, utilizați managerul de pachete al distribuției dvs. pentru a instala Python 3, de exemplu pe
Debian și Ubuntu: sudo apt-get update && sudo apt-get install python3 .
Pentru a verifica, deschideți terminalul deschizând aplicația Terminal sau apăsând Alt + F2 și introducând gnome-terminal. Dacă
acest lucru nu funcționează, verificați documentația pentru distribuția dvs. GNU/Linux. Acum, rulați python3 și asigurați-vă că
nu există erori.
NOTĂ: $ este -V
$python3 promptul shell-ului. Pentru tine va fi diferit în funcție de configurația sistemului de operare de pe computer, așa
Python
că voi indica3.6.0
mesajul doar cu simbolul $.
ATENȚIE: Ieșirea poate fi diferită pe computer, în funcție de versiunea software-ului Python instalată pe computer.
rezumat
14
Facilitate
15
Primii pasi
Primii pasi
Acum vom vedea cum să rulăm un program tradițional „Hello World” în Python. Acest lucru vă va învăța cum să scrieți, să salvați și
să rulați programe Python.
Există două moduri de a utiliza Python pentru a rula programul: folosind promptul interactiv al interpretului sau folosind un
fișier sursă. Acum vom vedea cum să folosim ambele metode.
Odată ce ați pornit Python, ar trebui să vedeți >>> de unde puteți începe să scrieți lucruri. Acesta se numește prompt de interpret
Python.
Urmat de tasta
print( lume". Ar
[enter]
"Bună ) trebui să vedeți cuvintele Hello World tipărite pe ecran.
Mai jos este un exemplu de ceea ce ar trebui să vedeți când utilizați un computer Mac OS X. Detaliile despre software-ul Python
vor diferi în funcție de computer, dar partea promptă (adică de la >>> înainte) ar trebui să fie aceeași, indiferent de sistemul de
operare.
Rețineți că Python vă oferă imediat rezultatul liniei! Ceea ce tocmai ați introdus este o singură instrucțiune Python. Folosim
$python3
print Python
to print (nesurprinzător)
(implicit , 12orice valoare
2017i-o oferi. Aici, oferim textul Hello world și acesta este imprimat
3.6.0 ianuarie , 11:26:36 )
rapid pe ecran.
[GCC 4.2.1 Acceptat de Apple LLVM 8.0.0 (clang- 800.0.38 )] în
Darwin Tastați „help” , „copyright” , „credits” sau „license”
pentru mai multe informații.
Cum să ieși din mesajul interpretului
>>> print( "Bună lume" )
Bună lume
Dacă utilizați un shell GNU/Linux sau OS X, puteți ieși din promptul interpretului apăsând [ctrl+d] sau introducând exit()
(notă: nu uitați să includeți parantezele, ()) urmate de tasta [enter].
Dacă utilizați promptul de comandă Windows, apăsați [ctrl + z] urmat de tasta [enter] .
Alegeți un editor
Nu ne putem scrie programul la promptul interpretorului de fiecare dată când dorim să rulăm ceva, așa că trebuie să le salvăm în
fișiere și să ne putem rula programele de câte ori vrem.
Pentru a crea fișierele noastre sursă Python, avem nevoie de software de editare în care să putem scrie și salva. Un editor bun
pentru programator vă va ușura viața când scrieți fișiere sursă. Prin urmare, alegerea unui editor este crucială. Trebuie să alegeți
un editor așa cum ați alege o mașină pe care ați cumpăra. Un editor bun vă va ajuta să scrieți programe Python cu ușurință,
făcându-vă călătoria mai confortabilă și vă va ajuta să vă ajungeți la destinație (să vă atingeți obiectivul) într-un mod mult mai
rapid și mai sigur.
16
Primii pasi
Una dintre cerințele de bază este evidențierea sintaxei în care toate părțile diferite ale programului dvs. Python sunt colorate,
astfel încât să puteți vedea programul și să vizualizați execuția acestuia.
Dacă nu aveți idee de unde să începeți, vă recomand să utilizați software- ul PyCharm Educational Edition , care este
disponibil pe Windows, Mac OS X și GNU/Linux. Detalii în secțiunea următoare.
Dacă utilizați Windows, nu utilizați Notepad; este o alegere proastă deoarece nu evidențiază sintaxa și, mai important, nu acceptă
indentarea textului, ceea ce este foarte important în cazul nostru, așa cum vom vedea mai târziu. Editorii buni vor face acest lucru
automat.
Dacă sunteți un programator cu experiență, ar trebui să utilizați deja Push sau Emacs . Inutil să spun că aceștia sunt doi dintre cei
mai puternici editori și veți beneficia de folosirea lor pentru a vă scrie programele Python. Eu personal le folosesc pe ambele
pentru majoritatea programelor mele și chiar am scris o carte întreagă pe Vim .
În cazul în care sunteți dispus să vă faceți timp pentru a învăța Vim sau Emacs, vă recomand să învățați cum să utilizați oricare
dintre ele, deoarece vă va fi de folos pe termen lung. Cu toate acestea, așa cum am menționat mai devreme, începătorii pot începe
cu PyCharm și pot concentra învățarea pe Python în loc de editor în acest moment.
Pentru a reitera, alegeți un editor potrivit: poate face scrierea programelor Python mai distractivă și mai ușoară.
PyCharm
PyCharm Educational Edition este un editor gratuit pe care îl puteți folosi pentru a scrie
programe Python. Când deschideți PyCharm, veți vedea asta, faceți clic pe Creare proiect nou:
17
Primii pasi
18
Primii pasi
Schimbați untitled la helloworld ca locație a proiectului, ar trebui să vedeți detalii similare cu aceasta:
19
Primii pasi
Faceți clic dreapta pe butonul Hello World din bara laterală și selectați Nou -> Fișier Python :
20
Primii pasi
21
Primii pasi
Acum faceți"Bună
print( clic dreapta
lume" pe
) ceea ce ați introdus (fără a selecta textul) și faceți clic pe Executare „bună ziua”.
22
Primii pasi
Pf! Au fost câțiva pași pentru a începe, dar de acum înainte, ori de câte ori vă cerem să creați un fișier nou, nu uitați să faceți clic
dreapta pe helloworld din stânga -> Nou -> Fișier Python și continuați cu aceiași pași pentru a scrie și rulați așa cum se arată mai sus.
Puteți găsi mai multe informații despre PyCharm pe pagina PyCharm Quickstart .
Apăsaţi
1. Instalați Push
Utilizatorii de Mac OS X ar trebui să instaleze pachetul macvim prin HomeBrew
Utilizatorii de Windows ar trebui să descarce „executabilul cu autoinstalare” de pe site-ul web Vim
Utilizatorii GNU/Linux ar trebui să obțină Vim din depozitele de software ale distribuției lor, de exemplu utilizatorii
Debian și Ubuntu pot instala pachetul vim.
2. Instalați pluginul de completare automată jedi-vim .
3. Instalați pachetul python Jedi corespunzător: instalează pip -U jedi
Emacs
1. Instalați Emacs 24+ .
Mac OS
Utilizatorii GNU/Linux ar trebui să obțină Emacs din depozitele de software ale distribuției lor, de exemplu
utilizatorii Debian și Ubuntu pot instala pachetul emacs24.
2. Instalați ELPY
23
Primii pasi
Acum să revenim la programare. Există o tradiție că ori de câte ori înveți un nou limbaj de programare, primul program pe care îl
1
scrii și îl rulezi este programul „Hello World”; tot ce face este să spună „Bună lume”, când îl rulezi. Ca Simon Cozens spune că
este „încantația tradițională către zeii programatori pentru a te ajuta să înveți mai bine limba”.
Dacă utilizați PyCharm, am discutat deja despre cum să rulați dintr-un fișier sursă .
Pentru alți editori, deschideți un nou fișier hello.py și tastați acest lucru:
Unde ar trebui
print( să salvez
"Bună lume" fișierul?
) În orice folder pentru care cunoașteți locația folderului. Dacă nu înțelegeți ce înseamnă asta,
creați un folder nou și utilizați acea locație pentru a salva și a rula toate programele dvs. Python:
/tmp/py pe Mac OS
/tmp/py pe GNU/Linux
C:\py pe Windows
Pentru a crea folderul de mai sus (pentru sistemul de operare pe care îl utilizați), utilizați comanda mkdir din terminal, de exemplu
mkdir
/tmp/py .
1. Deschideți o fereastră de terminal (consultați capitolul Instalare despre cum să faceți asta)
2. C schimbați directorul în care ați salvat fișierul, de exemplu cd/tmp/py
3. Rulați programul introducând comanda python hello.py . Ieșirea este așa cum se arată mai jos.
$python
hello.py salut
lume
24
Primii pasi
Dacă ați obținut rezultatul așa cum se arată mai sus, felicitări! - ați rulat cu succes primul program Python. Ați trecut cu succes
cea mai grea parte a învățării programarii, adică începerea primului program!
În cazul în care primiți o eroare, scrieți programul de mai sus exact așa cum se arată mai sus și rulați din nou programul. Rețineți
că Python face distincție între majuscule și minuscule, adică imprimarea nu este același lucru cu Print; notează p minuscul în
primul și P majuscul în cel din urmă. De asemenea, asigurați-vă că nu există spații sau tab-uri înaintea primului caracter pe
fiecare linie; Vom vedea de ce acest lucru este important mai târziu.
Cum functioneazã
Un program Python este alcătuit din instrucțiuni. În primul nostru program, avem o singură declarație. În această declarație, sunăm
tipărire declarație căreia îi furnizăm textul „hello world”.
Obține ajutor
Dacă aveți nevoie de informații rapide despre orice funcție sau instrucțiune din Python, puteți utiliza funcția de ajutor
încorporată. Acest lucru este foarte util, mai ales când se utilizează promptarea interpretului. De exemplu, rulați help('len'):
Aceasta afișează ajutor pentru funcția len folosită pentru a număra numărul de elemente.
De asemenea, puteți afla despre aproape orice în Python. Utilizați help() pentru a obține mai multe informații despre utilizarea
ajutorului în sine.
În cazul în care aveți nevoie de ajutor pentru operatori, cum ar fi return, atunci ar trebui să puneți acele ghilimele între ghilimele
precum help('return') pentru ca Python să nu se încurce în ceea ce încercăm să facem.
rezumat
Acum ar trebui să puteți scrie, salva și rula programe Python cu ușurință.
1.
autorul cărții uimitoare „Beginning Perl” ↩
25
Esenti
al
Esential
Imprimare Bună lume nu este suficient, nu-i așa? Vrei să faci mai mult decât atât, vrei să primești ceva, să o manipulezi și să obții
ceva din ea. Putem realiza acest lucru în Python folosind constante și variabile și vom învăța și alte concepte în acest capitol.
Comentarii
Comentariile sunt orice text din dreapta simbolului # și sunt utile în primul rând ca note pentru cititorul
programului. De exemplu:
Acest lucru este util pentru cititorii programului dvs., astfel încât să poată înțelege cu ușurință ce face programul. Ține minte,
acea persoană poate fi tu după șase luni.
Constantele literale
Un exemplu de constantă literală este un număr ca 5 , 1,23 sau un șir precum „Acesta este un șir” sau „Este un șir!” .
Se numește literal pentru că este literal; îi folosești valoarea la propriu. Numărul 2 se reprezintă întotdeauna pe sine și nimic
altceva; Este o constantă deoarece valoarea ei nu poate fi modificată. Prin urmare, toate acestea se numesc constante literale.
Numerele
Numerele sunt în principal de două tipuri: numere întregi și flotanți.
Exemple de numere în virgulă mobilă (sau pe scurt flotanți) sunt 3.23 și 52.3E-4 . Notația E indică puteri de 10. În acest caz,
52.3E-4 înseamnă 52.3 * 10^-4^ .
Nu există un tip lung separat. Tipul int poate fi un întreg de orice dimensiune.
26
Esenti
al
Instrumente cu coarde
Un șir este o succesiune de caractere. Șirurile sunt practic o grămadă de cuvinte.
Veți folosi șiruri de caractere în aproape fiecare program Python pe care îl scrieți, așa că acordați atenție următoarei părți.
O frază
Puteți specifica șiruri folosind ghilimele simple, cum ar fi „Citați-mă pe
asta”. Toate spațiile albe, adică spațiile și tabele, din ghilimele sunt păstrate
Ghilimele duble
Șirurile cu ghilimele duble funcționează exact la fel ca șirurile cu ghilimele simple. Un exemplu este „Cum te cheamă?” .
Citate triple
Puteți specifica șiruri cu mai multe rânduri folosind ghilimele triple - ("" "sau '''). Puteți utiliza liber ghilimele simple și duble în
interiorul ghilimelelor triple. Un exemplu este:
Corzile sunt
'''Acesta esteimuabile
un șir cu mai multe linii. Aceasta
este prima linie. Aceasta este a doua linie.
„Cum te cheamă?” l-am
Aceasta înseamnă că odată ce ați creat un lanț, nu îl veți putea schimba. Deși poate părea un lucru rău, chiar nu este. Vom vedea de
întrebat. El a spus „Bond,
ce aceasta nu este o''limitare
James Bond”. ' în diferitele programe pe care le vom vedea mai târziu.
Nu există un tip de date char separat în Python. Nu este nevoie reală și sunt sigur că nu o vei rata.
Amintiți-vă că șirurile cu ghilimele simple și șirurile cu ghilimele duble sunt aceleași, nu diferă în niciun fel.
Metoda de formatare
Uneori putem dori să construim șiruri din alte informații. Aici este utilă metoda format(). Salvați următoarele rânduri
ca fișier str_format.py:
Productie:
varsta = 20
nume = 'Swaroop'
$python str_format.py
print( „{0} avea {1} ani când a scris această carte” . format (nume,
Swaroop avea
vârstă)) 20(de
print ani
„De cecând a scris
se joacă {0}această
cu acel python?” . format (nume))
carte De ce se joacă Swaroop cu acel piton?
27
Esenti
al
Cum functioneazã
Un șir poate folosi anumite specificații, iar metoda formatului poate fi apoi apelată pentru a înlocui acele specificații cu
argumentele corespunzătoare metodei format.
Observați prima utilizare în care folosim {0} și aceasta corespunde numelui variabilei care este primul argument al metodei
format. În mod similar, a doua specificație este {1} corespunzătoare vârstei, care este al doilea argument al metodei format.
Rețineți că Python începe să numere de la 0, ceea ce înseamnă că prima poziție este la indexul 0, a doua poziție este la indexul 1
și așa mai departe.
dar nume
asta este mult +mai
+ „es” strurât și predispus
(vârsta) la erori. În al doilea rând, conversia în șir s-ar face automat prin metoda formatului în
+ „ani”
loc de conversia explicită în șiruri necesară în acest caz. În al treilea rând, atunci când folosim metoda formatului, putem
schimba mesajul fără a avea de a face cu variabilele utilizate și invers.
De asemenea, rețineți că numerele sunt opționale, așa că ați putea scrie și așa:
carevarsta
va da exact
= 20 aceeași ieșire ca și programul anterior.
nume = 'Swaroop'
De asemenea, putem numi parametrii:
print( „{} avea {} ani când a scris această carte” . format (nume,
vârstă)) print ( „De ce se joacă {} cu acel python?” . format (nume))
carevarsta
va da exact
= 20 aceeași ieșire ca și programul anterior.
nume = 'Swaroop'
Python 3.6 a introdus o modalitate mai scurtă de a crea parametri numiți, numită „f-strings”:
print( „{nume} avea {vârsta} ani când a scris această carte” . format (nume = nume, vârstă =
vârstă)) print ( „De ce se joacă {nume} cu acel piton?’ . format (nume = nume) ))
carevarsta
va da exact
= 20 aceeași ieșire ca și programul anterior.
nume = 'Swaroop'
Ceea ce face Python în metoda formatului este că înlocuiește fiecare valoare de argument în locul specificației. Pot exista
impresie( f '{nume} avea {vârsta} ani când a scris această carte' ) # observați 'f' înaintea
specificații mai detaliate, cum ar fi:
șirului de impresie ( f'De ce se joacă {nume} cu acel python? ' ) # observați „f” înaintea
șirului
# precizie zecimală (.) de 3 pentru tipărirea float
„0.333” ( formatul „{0: .3f}” . ( 1.0 / 3 ))
# completați cu caractere de subliniere (_) cu
textul centrat # (^) la 11 lățime '
Buna ziua ' print(
'{0:_^11}' . format ( 'Bună ziua' ))
# bazat pe cuvântul cheie „Swaroop a scris un octet Python”.
28
Esenti
al
Productie:
Deoarece
0.333 discutăm despre formatare, rețineți că tipărirea se termină întotdeauna cu un caracter invizibil de „linie nouă” (\n), așa
Buna repetate
că apelurile ziua de tipărire se vor tipări toate pe o linie separată fiecare. Pentru a preveni tipărirea acestui caracter de linie
Swaroop a scris A Byte of Python
nouă, puteți specifica că se termină cu un gol:
Ieșirea este:
print( 'a' , final = '' )
print( 'B' , final = '' )
Sauab
puteți încheia cu un spațiu:
Ieșirea este:'a'
print( , final = '' )
print( 'B' , final = '' )
print( 'C' )
la B.C.
Secvențe de evadare
Să presupunem că doriți să aveți un șir care conține un singur ghilimele ('), cum veți specifica acest șir? De exemplu, șirul este
„Cum te cheamă?” . Nu puteți specifica „Care este numele tău?” deoarece Python va deveni confuz în ceea ce privește unde
începe și se termină șirul. Prin urmare, va trebui să specificați că acest ghilimeleu simplu nu indică sfârșitul șirului. Acest lucru se
poate face cu ajutorul a ceea ce se numește secvență de evadare. Ghilimele simple sunt specificate ca \': notează bara oblică
inversă. Acum, puteți specifica șirul ca „Care este numele tău?” .
O altă modalitate de a specifica acest șir specific ar fi „Care este numele tău?” adică folosind ghilimele duble. În mod similar,
trebuie să utilizați o secvență de escape pentru a utiliza ghilimele duble pe un șir cu ghilimele duble. În plus, trebuie să indicați
bara oblică inversă folosind secvența de escape \\.
Ce se întâmplă dacă aș dori să specific un șir de două linii? O modalitate este de a folosi un șir cuprins între ghilimele triple, așa
cum a fost arătat anterior sau puteți folosi o secvență de escape pentru caracterul newline - \n pentru a indica începutul unei noi
linii. Un exemplu este:
„Aceasta este prima linie\nAceasta este a doua linie”
O altă secvență de evadare utilă despre care ar trebui să știți este tab:\t. Există multe alte secvențe de evadare, dar le-am
menționat doar pe cele mai utile aici.
Un lucru de remarcat este că într-un șir, o singură bară oblică inversă la sfârșitul liniei indică faptul că șirul continuă pe linia
următoare, dar nu este adăugată nicio linie nouă. De exemplu:
29
Esenti
al
Este echivalent cu
Utilizați întotdeauna șiruri brute atunci când lucrați cu expresii regulate. În caz contrar, poate fi necesară o mulțime de
backtracking. De exemplu, referințele din spate pot fi numite „\\ 1” sau „\ 1”.
Variabil
Folosirea numai a constantelor literale poate deveni în curând plictisitoare; avem nevoie de o modalitate de a stoca orice
informație și de a o manipula, de asemenea. Aici intră în joc variabilele. Variabilele sunt exact ceea ce sugerează numele lor:
valoarea lor poate varia, adică puteți stoca orice folosind o variabilă. Variabilele sunt doar părți ale memoriei computerului dvs. în
care stocați anumite informații. Spre deosebire de constantele literale, aveți nevoie de o metodă pentru a accesa aceste variabile și,
prin urmare, pentru a le da nume.
Denumirea identificatorului
Variabilele sunt exemple de identificatori. Identificatorii sunt nume date pentru a identifica ceva. Există câteva reguli pe care ar
trebui să le urmați pentru denumirea identificatorilor:
Primul caracter al identificatorului trebuie să fie o literă a alfabetului (ASCII majuscule sau ASCII minuscule sau caracter
Unicode) sau un caracter de subliniere (_).
Restul numelui de identificare poate consta din litere (ASCII majuscule sau ASCII minuscule sau caracter Unicode),
caractere de subliniere (_) sau cifre (0-9).
Numele identificatorilor sunt sensibile la majuscule. De exemplu, numele meu și numele meu nu sunt același. Observați
literul mic în primul și N majuscul în cel din urmă.
Exemple de nume de identificare valide sunt I , nume_2_3 . Exemple de nume de identificare nevalide sunt 2 lucruri ,
acesta este Spațiere , numele meu și > a1b2_c3 .
Tipul de date
Variabilele pot conține valori de diferite tipuri numite tipuri de date. Tipurile de bază sunt numerele și șirurile, despre care am
discutat deja. În capitolele ulterioare, vom vedea cum să ne creăm propriile tipuri folosind clase .
Obiect
Amintiți-vă, Python se referă la tot ceea ce este folosit într-un program ca obiect. Acest lucru este înțeles într-un sens generic. În loc
să spui „the
ceva "', spunem "obiectul".
Python este puternic orientat pe obiecte, în sensul că totul este un obiect, inclusiv numere, șiruri și funcții.
30
Esenti
al
Acum vom vedea cum să folosim variabilele împreună cu constantele literale. Salvați următorul exemplu și rulați programul.
Pentru PyCharm
1. Deschideți PyCharm .
2. Creați un fișier nou cu numele fișierului menționat.
3. Scrieți codul programului dat în exemplu.
4. Faceți clic dreapta și rulați fișierul curent.
NOTĂ: Ori de câte ori trebuie să furnizați argumente în linia de comandă , faceți clic pe Run -> Edit Configurations și
introduceți argumentele în secțiunea Script Parameters: și faceți clic pe butonul OK :
# Nume fișier:
var.py i = 5
print(
i)i=i+
1
31
Esenti
al
imprimare (i)
Productie:
Cum
5 functioneazã
6
AșaAcesta
funcționează acest
este un șirprogram.
cu mai Mai întâi, atribuim valoarea constantă literală 5 variabilei i folosind operatorul de atribuire
Apoi adăugăm 1 la valoarea stocată în i și o stocăm din nou. Apoi îl imprimăm și după cum era de așteptat obținem
Variabilele sunt folosite pur și simplu prin atribuirea unei valori. Nu este necesară/utilizată nicio declarație de tip de date sau
definiție.
Un exemplu de linie logică este o declarație precum print('hello world') - dacă aceasta a fost pe o linie de la sine (cum o vedeți
într-un editor), atunci aceasta corespunde și unei linii fizice.
Implicit, Python încurajează utilizarea unei singure instrucțiuni pe linie, ceea ce face codul mai ușor de citit.
Dacă doriți să specificați mai mult de o linie logică pe o singură linie fizică, trebuie să o specificați în mod explicit cu un punct
și virgulă (;) care indică sfârșitul unei linii/instrucțiuni logice. De exemplu:
si laifel
= ca
5 ; print(i);
i = 5 ; imprimare (i)
32
Esenti
al
Cu toate acestea, vă recomand cu tărie să vă limitați la a scrie maximum o singură linie logică pe fiecare linie fizică. Ideea este că
nu trebuie să folosiți niciodată punct și virgulă. De fapt, nu am folosit sau văzut niciodată un punct și virgulă într-un program
Python.
Există un tip de situație în care acest concept este cu adevărat util: dacă aveți o linie lungă de cod, o puteți împărți în mai multe linii
fizice folosind bara oblică inversă. Aceasta este cunoscută sub numele de unire explicită de linie:
Productie:
s = „Acesta este un
șir. \ Aceasta continuă
lanțul. ' amprentele
Similar,
Aceasta este o frânghie. Aceasta continuă lanțul.
digitale)
esteila=fel ca
\ 5
Uneori
i = există
5 o presupunere implicită că nu este necesar să folosiți o bară oblică inversă. Acesta este cazul în care linia logică are
o paranteză de început, paranteze principale sau acolade de început, dar fără acolade finale. Aceasta se numește unire implicită de
linie. Puteți vedea acest lucru în acțiune atunci când scriem programe folosind enumerați în capitolele ulterioare.
Sângerare
Spațiul alb este important în Python. De fapt, spațiul alb de la începutul liniei este important. Aceasta se numește indentare.
Spațiul alb principal (spații și tabulaturi) de la începutul liniei logice este utilizat pentru a determina nivelul de indentare al liniei
logice, care la rândul său este utilizat pentru a determina gruparea instrucțiunilor.
Aceasta înseamnă că afirmațiile care merg împreună trebuie să fie egal indentate. Fiecare dintre aceste seturi de instrucțiuni se
numește bloc. Vom vedea exemple despre importanța blocurilor în capitolele ulterioare.
Când
i rulați
= 5 acest lucru, obțineți următoarea eroare:
# Eroare de mai jos! Observați un singur spațiu la începutul liniei.
print( 'Valoarea este' , I)
Observați că'Repet,
Fișier
print( există unvaloarea
singur spațiu
„whitespace.py”, este'la ,începutul
I) celei de-a doua rânduri. Eroarea indicată de Python ne spune că sintaxa
linia 3 tipărită
programului este invalidă, adică programul nu a fost scris corect. Ce înseamnă asta pentru tine este că nu poți începe în mod
(„Valoarea este”, i)
arbitrar blocuri
^
noi de instrucțiuni (cu excepția blocului principal implicit pe care l-ai folosit tot timpul, desigur). Cazuri în care
puteți utiliza
33
Esenti
al
Cum să sângerezi
Folosiți patru spații pentru indentare. Aceasta este recomandarea oficială a limbajului Python. Editorii buni vor face
automat acest lucru pentru tine. Asigurați-vă că utilizați un număr consistent de spații pentru indentare; în caz contrar,
programul dumneavoastră nu va rula sau va avea un comportament neașteptat.
Python va indenta întotdeauna blocurile și nu va folosi niciodată acolade. dinfutureimport bretele învăța
Alerga mai mult.
rezumat
Acum că am acoperit o mulțime de detalii esențiale, putem trece la lucruri mai interesante, cum ar fi declarațiile fluxului de
control. Asigurați-vă că sunteți confortabil cu ceea ce ați citit în acest capitol.
34
Operatori și expresii
Operatori și expresii
Majoritatea declarațiilor (liniilor logice) pe care le scrieți vor conține expresii. Un exemplu simplu de expresie este 2 + 3. O
expresie poate fi împărțită în operatori și operanzi.
Operatorii sunt funcții care fac ceva și pot fi reprezentați prin simboluri precum + sau cuvinte cheie speciale. Operatorii au
nevoie de anumite date pentru a funcționa și astfel de date se numesc operanzi. În acest caz, 2 și 3 sunt operanzii.
Operatori
Vom vedea pe scurt operatori și utilizarea lor.
Rețineți că puteți evalua expresiile date în exemple folosind interpretul în mod interactiv. De exemplu, pentru a testa expresia 2
+ 3, utilizați promptul interactiv al interpretului Python:
Oferă scăderea unui număr din celălalt; dacă primul operand este absent, se presupune că este zero.
-5,2 dă un număr negativ și 50 - 24 dă 26 .
* (înmulțire)
Oferă înmulțirea celor două numere sau returnează șirul repetat de atâtea ori.
2*3 dă 6 . 'la' * 3 dă 'lalala' .
** (energie)
Împărțiți x la y
13/3 dă 4.333333333333333
// (despărți și podea)
Împărțiți x la y și rotunjiți răspunsul la cea mai apropiată valoare întreagă. Rețineți că, dacă una dintre valori este un
float, veți obține un float.
13 // 3 dă 4
-13 // 3 dă -5
9 // 1,81 dă 4,0
% (modul)
35
Operatori și expresii
Mută biții numărului la stânga cu numărul specificat de biți. (Fiecare număr este reprezentat în memorie prin biți sau
cifre binare, adică 0 și 1)
2 << 2 dă 8 . 2 este reprezentat de 10 în biți.
Deplasarea la stânga cu 2 biți dă 1000, care reprezintă zecimala 8.
>> (Viraj la dreapta)
Și din numere la nivel de biți: dacă ambii biți sunt 1, rezultatul este 1. Altfel este 0.
5 și 3 dă 1 ( 0101 și 0011 dă 0001 )
| (SAU pe biți)
SAU pe biți a numerelor: dacă ambii biți sunt 0, rezultatul este 0. Altfel este 1.
5|3 dă 7 ( 0101 | 0011 dă 0111 )
^ (XOR pe biți)
XOR pe biți a numerelor: dacă ambii biți (1 sau 0) sunt aceiași, rezultatul este 0. Altfel este 1.
5^3 dă 6 ( O101^0011 dă 0110 )
~ (inversie de biți)
Returnează dacă x este mai mic decât y. Toți operatorii de comparație returnează True sau False. Observați scrierea
cu majuscule a acestor nume.
5 <3 dă fals și 3 <5 dă adevărat .
Comparațiile pot fi înlănțuite în mod arbitrar: 3 <5 <7 dă
> Adevărat. (mai mare decat)
== (egal cu)
nu (NU boolean)
36
Operatori și expresii
Dacă xADEVĂRAT
este, revine Fals . Dacă x este Fals , returnează True .
x = Adevărat; nu x returnează False .
și (ȘI boolean)
X și Y returnează False dacă x este False , în caz contrar returnează evaluarea lui y
x = fals; y = Adevărat; X și Y returnează fals deoarece x este fals. În acest caz, Python nu va evalua
y, deoarece știe că partea stângă a expresiei „y” este False, ceea ce implică faptul că întreaga expresie
va fi Fals, indiferent de celelalte valori. Aceasta se numește evaluarea scurtcircuitelor.
Dacă x este adevărat, returnează adevărat, în caz contrar returnează evaluarea lui y
x = Adevărat; y = fals; xoy revine Adevărat . Evaluarea scurtcircuitului se aplică și aici.
Realize
a = 2var=var operația expresie devine var=expression operație .
a* = 3
Ordin de evaluare
Dacă ai avut o expresie ca 2 + 3 * 4, se face mai întâi adunarea sau înmulțirea? Matematica din liceu ne spune că înmulțirea
trebuie făcută mai întâi. Aceasta înseamnă că operatorul de înmulțire are o prioritate mai mare decât operatorul de adunare.
Următorul tabel oferă tabelul de precedență pentru Python, de la cea mai mică precedență (cel mai puțin obligatoriu) la cea mai
mare prioritate (cea mai mică legătură). Aceasta înseamnă că într-o expresie dată, Python va evalua mai întâi operatorii și
expresiile din partea de jos a tabelului înaintea celor listate în partea de sus a tabelului.
Următorul tabel, preluat din Manualul de referință Python , este furnizat de dragul caracterului complet. Este mult mai bine să
folosiți parantezele pentru a grupa operatorii și operanzii în mod corespunzător pentru a specifica în mod explicit prioritatea.
Acest lucru face programul mai lizibil. Consultați Modificarea ordinii de evaluare de mai jos pentru mai multe detalii.
37
Operatori și expresii
: Adunare si scadere
+,
*, /, //,
: Înmulțirea, împărțirea, împărțirea etajului și restul
+x, -x,
: Pozitiv, negativ, pe biți NU
*
: Exponentiatie
Operatorii cu aceeași prioritate sunt listați pe același rând din tabelul de mai sus. De exemplu, + și - au aceeași prioritate.
Folosirea parantezelor are un avantaj suplimentar: ne ajută să schimbăm ordinea evaluării. De exemplu, dacă doriți ca adunarea
să fie evaluată înainte de înmulțire într-o expresie, puteți scrie ceva de genul (2 + 3) * 4.
Asociativitatea
Operatorii sunt de obicei asociați de la stânga la dreapta. Aceasta înseamnă că operatorii cu aceeași prioritate sunt evaluați de la
stânga la dreapta. De exemplu, 2 + 3 + 4 se evaluează la (2 + 3) + 4.
Expresii
Exemplu (salvare ca expression.py ):
Productie:
lungime = 5
amplitudine = 2
Cum
$ functioneazã
python = lungime
suprafata *
expression.py Zona
latime print( 'Zona
Lungimea ,și zona)
este 10
este' lățimea dreptunghiului sunt stocate în variabile cu același nume. Le folosim pentru a calcula aria și perimetrul
dreptunghiului cu ajutorul expresiilor. Stocăm rezultatul expresiei lungime * lățime în zona variabilelor și apoi îl imprimăm
folosind funcția de imprimare. În al doilea caz, folosim direct valoarea expresiei 2 * (lungime + lățime) în funcția de imprimare.
38
Operatori și expresii
De asemenea, observați cum Python imprimă frumos rezultatul. Deși nu am specificat un spațiu între „Zona este” și aria
variabilei, Python ni-l pune astfel încât să obținem un rezultat curat și frumos, iar programul este mult mai lizibil în acest fel (din
moment ce nu nu trebuie să vă faceți griji cu privire la spațierea dintre șirurile pe care le folosim pentru ieșire). Acesta este un
exemplu despre modul în care Python ușurează viața programatorului.
rezumat
Am văzut cum să folosim operatori, operanzi și expresii: acestea sunt elementele de bază ale oricărui program. În continuare, vom
vedea cum să le folosim în programele noastre folosind declarații.
39
Controlul
fluxului
Controlul fluxului
În programele pe care le-am văzut până acum, au existat întotdeauna o serie de instrucțiuni executate cu fidelitate de Python în
ordine exactă de sus în jos. Ce se întâmplă dacă ai vrea să schimbi modul în care funcționează? De exemplu, doriți ca programul
să ia unele decizii și să facă lucruri diferite în funcție de diferite situații, cum ar fi tipărirea „Bună dimineața” sau „Bună seara” în
funcție de ora din zi?
După cum probabil ați ghicit, acest lucru se realizează folosind instrucțiuni de flux de control. Există trei instrucțiuni de flux de
control în Python:
Da , pentru și timp .
Declarația if
Instrucțiunea if este folosită pentru a verifica o condiție: dacă condiția este adevărată, executăm un bloc de instrucțiuni (numit bloc
if), în caz contrar procesăm un alt bloc de instrucțiuni (numit bloc else). Clauza else este opțională.
Productie:
număr = 23
ghici = Int ( contribuție ( „Introduceți un număr întreg:” ))
Cum functioneazã
$python
Dacă if.py==
ghiciți numărul:
Introduceți un număr
# Noul bloc întreg:
începe aici 50
Nu, print(
este puțin mai jos ai
Felicitări, decât
ghicit. )
atâtprint(
Gata '(dar nu câștigi niciun
premiu!)' ) # Noul bloc se termină aici
$python
elif if.py
guess
Introduceți
<number:un număr întreg: 22
# Un
Nu, alt
estebloc
puțin mai mare decât atât
Gataprint( 'Nu, este puțin mai mare decât
atât' ) # Puteți face orice doriți într-un
$python if.py
bloc...
Introduceți
restul : un număr întreg:
23 Felicitări, ați ghicit.
impresie ( „Nu, este puțin mai mică decât atât” )
(dar#nu câștigi
trebuie săniciun
fi ghicit > numărul pentru a ajunge aici
premiu!) Gata
print( 'Terminat' )
40
Controlul
fluxului
În acest program, luăm presupuneri de la utilizator și verificăm dacă este numărul pe care îl avem. Setăm numărul variabilului
la orice număr întreg dorim, să zicem 23. Apoi, luăm ipoteza utilizatorului folosind funcția input(). Funcțiile sunt doar
programe reutilizabile. Vom citi mai multe despre ele în capitolul următor .
Furnizăm un șir pentru funcția de introducere încorporată care îl imprimă pe ecran și așteaptă intrarea utilizatorului. Odată ce
introducem ceva și apăsăm tasta kbd:[enter], funcția input() returnează ceea ce am introdus, sub formă de șir. Apoi convertim
acest șir într-un număr întreg folosind int și apoi îl stocăm în variabila guess. Int este de fapt o clasă, dar tot ce trebuie să știți
acum este că îl puteți folosi pentru a converti un șir într-un număr întreg (presupunând că șirul conține un număr întreg valid în
text).
În continuare, comparăm estimarea utilizatorului cu numărul pe care l-am ales. Dacă sunt aceleași, imprimăm un mesaj de
succes. Rețineți că folosim niveluri de indentare pentru a-i spune lui Python care instrucțiuni aparțin cărei bloc. Acesta este
motivul pentru care indentarea este atât de importantă în Python. Sper să respectați regula „indentării consecvente”. Esti tu?
Observați cum instrucțiunea if conține două puncte la sfârșit; îi spunem lui Python că urmează un bloc de instrucțiuni.
Apoi, verificăm dacă presupunerea este mai mică decât numărul și, dacă da, informăm utilizatorul că trebuie să ghicească puțin
mai mult decât atât. Ceea ce am folosit aici este clauza elif care combină de fapt două declarații if else-if else asociate într-o
declarație combinată if-elif-else. Acest lucru face programul mai ușor și reduce cantitatea de indentare necesară.
Declarațiile elif și else trebuie să aibă, de asemenea, două puncte la sfârșitul liniei logice, urmate de blocul corespunzător de
instrucțiuni (cu indentarea corespunzătoare, desigur)
Puteți avea o altă instrucțiune if în blocul if al unei instrucțiuni if și așa mai departe; Aceasta se numește declarație if imbricată.
Amintiți-vă că elif și celelalte părți sunt opționale. Un minim valabil dacă declarația este:
Da adevarat :
print( 'Daca este adevarat' )
Odată ce Python a terminat de executat întreaga instrucțiune if împreună cu clauzele elif și else asociate, trece la următoarea
instrucțiune din blocul care conține instrucțiunea if. În acest caz, este blocul principal (unde începe execuția programului), iar
următoarea instrucțiune este instrucțiunea print ('Ready'). După aceasta, Python vede capetele programului și pur și simplu se
termină.
Deși acesta este un program foarte simplu, am subliniat multe lucruri pe care ar trebui să le observați. Toate acestea sunt destul de
simple (și surprinzător de simple pentru cei dintre voi cu experiență în C/C++). Va trebui să fii conștient de toate aceste lucruri inițial,
dar după puțină practică te vei simți confortabil cu ele și totul se va simți „natural” pentru tine.
Nu există nicio declarație switch în Python. Puteți folosi o instrucțiune if..elif..else pentru a face același lucru (și, în unele
cazuri, utilizați un dicționar pentru a o face rapid)
Declarația while
Instrucțiunea while vă permite să executați în mod repetat un bloc de instrucțiuni atâta timp cât o condiție este adevărată. O
instrucțiune while este un exemplu de ceea ce se numește o instrucțiune buclă. O instrucțiune while poate avea o clauză opțională
else.
număr = 23
care
rulează =
Adevărat
41
Controlul
fluxului
print( 'Terminat' )
Productie:
Cum
$ functioneazã
python while.py
Introduceți un
În acest
numărprogram,
întreg:încă
50 ne jucăm jocul de ghicire, dar avantajul este că utilizatorul poate continua să ghicească până când
Nu, este puțin mai jos decât
ghicește corect; Nu este necesar să rulați în mod repetat programul pentru fiecare divinație, așa cum am făcut în secțiunea
atât. Introduceți un număr
anterioară.
întreg:. Acest
22 lucru demonstrează în mod adecvat utilizarea declarației while.
Nu, este puțin mai mare decât
Mutăm instrucțiunile
atât. Introduceți de un
intrare și ifîntreg:
număr în bucla while și setăm variabila care este executată la True înainte de bucla while. Mai
întâi,
23verificăm dacă ați
Felicitări, variabila de rulare este True și apoi procedăm la executarea blocului while corespunzător. Odată ce acest
ghicit.
bloc a fost executat, se verifică din nou condiția, care în acest caz este variabila care se execută. Dacă este adevărat, executăm
din nou blocul while, în caz contrar continuăm prin executarea blocului opțional else și apoi continuăm cu următoarea
instrucțiune.
Blocul else este executat atunci când condiția buclei while devine False; Aceasta poate fi chiar prima dată când starea este
verificată. Dacă există o clauză else pentru o buclă while, aceasta este întotdeauna executată, cu excepția cazului în care ieși din
buclă cu o
ruperea declarației .
Adevărat și fals sunt numite tipuri booleene și le puteți considera echivalente cu valoarea 1 și 0
respectiv.
Cercul prin
Instrucțiunea for..in este o altă instrucțiune în buclă care iterează peste o secvență de obiecte, adică trece prin fiecare element dintr-
o secvență. Vom vedea mai multe despre secvențe în detaliu în capitolele ulterioare. Ceea ce trebuie să știți acum este că o
secvență este doar o colecție ordonată de elemente.
ori I la distanță ( 1 ,
5 ): imprimați (i)
restul :
print( 'Bucla for sa încheiat' )
42
Controlul
fluxului
Productie:
Cum functioneazã
$python
pentru.py 1
În acest
2 program, imprimăm o secvență de numere. Generăm această secvență de numere folosind intervalul încorporat
3
funcţie.
4
Bucla for s-a încheiat
Ceea ce facem aici este să îi dăm două numere și intervalul returnează o secvență de numere începând de la primul număr și
mergând până la al doilea număr. De exemplu, intervalul (1,5) dă secvența [1, 2, 3, 4]. În mod implicit, intervalul are un număr
de pași de 1. Dacă oferim un al treilea număr intervalului, atunci acesta devine numărul de pași. De exemplu, intervalul (1,5,2)
dă [1,3]. Amintiți-vă că intervalul se extinde până la al doilea număr, adică nu include al doilea număr.
Rețineți că distance() scoate doar un număr la un moment dat, dacă doriți întreaga listă de numere, apelați list() pe
distance() , de exemplu list(range(5)) va avea ca rezultat [0, 1, 2. 3. 4] . Listele sunt explicate în capitolul structuri de
date .
Bucla for se repetă apoi în acest interval - for i în intervalul (1,5) este echivalent cu for i în [1, 2, 3, 4], ceea ce este ca și cum ar fi
atribuirea fiecărui număr (sau obiect) din secvență la i, unul câte unul și apoi executați blocul de instrucțiuni pentru fiecare valoare
a
YO . În acest caz, pur și simplu imprimăm valoarea în blocul de instrucțiuni.
Amintiți-vă că cealaltă parte este opțională. Când este inclus, este întotdeauna executat o dată după terminarea buclei for, cu
excepția cazului în care este întâlnită o instrucțiune break .
Amintiți-vă că bucla for..in funcționează pentru orice secvență. Aici, avem o listă de numere generate de funcția de interval
încorporată, dar în general putem folosi orice tip de secvență de orice tip de obiecte. Vom explora această idee în detaliu în
capitolele ulterioare.
Bucla pentru Python este radical diferită de bucla pentru C/C++. Programatorii C# vor observa că bucla for din Python
este similară cu bucla foreach din C#. Programatorii Java vor observa că același lucru este similar cu for (int i: IntArray)
din Java 1.5.
În C/C++, dacă doriți să scrieți pentru (int i = 0; i <5; i++) , atunci în Python scrieți numai pentru i în intervalul
(0,5) . După cum puteți vedea, bucla per este mai simplă, mai expresivă și mai puțin predispusă la erori în Python.
Declarația de odihnă
Instrucțiunea break este folosită pentru a ieși dintr-o instrucțiune de buclă, adică pentru a opri execuția unei instrucțiuni de
buclă, chiar dacă condiția de buclă nu a devenit False sau secvența de elemente nu a fost complet repetă.
O notă importantă este că, dacă scăpați de o buclă for sau de timp , orice bucle corespunzătoare , altfel blocul nu este executat.
Timpul adevărat :
s = intrare ( „Introduceți
ceva:” ) Dacă s == „lasi” :
RIP
print( 'Lungimea sirului este' , len
(print( 'Terminat' ))
43
Controlul
fluxului
Productie:
Cum functioneazã
$python break.py
Introduceți ceva: programarea este
În acest program, Lungimea
distractivă luăm în mod repetateste
șirului intrarea utilizatorului și imprimăm lungimea fiecărei intrări de fiecare dată. Oferim o
de 18
Introduceți ceva: Când lucrarea este
condiție specială pentru a opri programul, verificând dacă intrarea utilizatorului este „ieșire”. Oprim programul ieșind din buclă
terminată Lungimea frânghiei este de 21
și ajungem la sfârșitul
Introduceți ceva:programului.
Dacă doriți ca și munca dvs. să
fie distractivă: lungimea frânghiei este de 37
Lungimea șirului ceva:
Introduceți de intrare poate fi găsită folosind funcția len . Amintiți-vă că
folosiți
Python! Lungimea șirului
instrucțiunea
este de 11break poate fi folosită și cu bucla for . Swaroop Poetic Python
Introduceți
ceva: ieșire
Intrarea pe care am folosit-o aici este o mini-poezie pe care am scris-o:
Programarea este
Declarația următoare
distractivă când
munca este
terminată
Instrucțiunea continue este folosită pentru a-i spune lui Python să sară peste restul instrucțiunilor din blocul de buclă curent și
să continue cu următoarea iterație a buclei.
Productie:
Timpul adevărat :
s = intrare ( „Introduceți
ceva:” ) Dacă s == „lasi” :
$ pythonRIP
continue.py
Dacă len (s) < 3 :
Introduceți ceva:
print( 'Prea mic'
a Prea mic
) Continuați
Vă rugăm să'Intrarea este de lungime
print(
introduceți ceva:
suficientă' ) # Efectuați altă
12 Prea mic
procesare aici...
Introduceți ceva: abc
44
Controlul
fluxului
Cum functioneazã
În acest program, acceptăm introducerea utilizatorului, dar procesăm șirul de intrare numai dacă are cel puțin 3 caractere. Deci,
folosim
Încorpo pentru a obține lungimea și dacă lungimea este mai mică de 3, sărim peste restul instrucțiunilor din bloc folosind
rat l
instrucțiunea. În caz contrar, restul instrucțiunilor sunt executate în buclă, efectuând orice tip de procesare pe care dorim
Contin
să o facem.
Aici.
rezumat
Am văzut cum să folosim cele trei instrucțiuni de flux de control: if, while și for împreună cu întreruperea lor și
Urmăriți declarațiile. Acestea sunt unele dintre cele mai utilizate părți ale Python și, prin urmare, este esențial
să vă simțiți confortabil cu ele.
45
Caracteris
tici
Caracteristici
Funcțiile sunt programe reutilizabile. Acestea vă permit să dați un nume unui bloc de instrucțiuni, permițându-vă să executați acel
bloc folosind numele specificat oriunde în program și de câte ori doriți. Acest lucru este cunoscut sub numele de apelare a funcției.
Am folosit deja multe funcții încorporate precum len și range.
Conceptul de funcție este probabil cel mai important bloc al oricărui software non-trivial (în orice limbaj de programare), așa că
vom explora diverse aspecte ale funcțiilor în acest capitol.
Funcțiile sunt definite folosind cuvântul cheie def. După acest cuvânt cheie vine un nume de identificare pentru funcție, urmat de
o pereche de paranteze care pot include unele nume de variabile și două puncte care termină linia. Urmează blocul de declarații
care fac parte din această funcție. Un exemplu va arăta că acest lucru este de fapt foarte simplu:
Productie:
def salut ():
# bloc aparținând funcției de imprimare
( 'Hello World' )
Cum
# functioneazã
$python
Sfârșitul funcției
function1.py salut
Definim
lumeao funcție# numită
say hello() say_hello
apelați funcțiafolosind
say sintaxa explicată mai sus. Această funcție nu ia parametri și, prin urmare, nu există
variabile declarate
hello() în paranteze.
# apelați din nouParametrii
funcția funcției sunt pur și simplu introduși în funcție, astfel încât să îi putem transmite diferite
Observați că putem apela aceeași funcție de două ori, ceea ce înseamnă că nu trebuie să scriem din nou același cod.
Parametrii funcției
O funcție poate lua parametri, care sunt valori pe care le oferiți funcției, astfel încât funcția să poată face ceva folosind acele valori.
Acești parametri sunt ca variabile, cu excepția faptului că valorile acestor variabile sunt definite atunci când apelăm funcția și au
deja valori atribuite atunci când funcția este executată.
Parametrii sunt specificați în perechea de paranteze din definiția funcției, despărțiți prin virgule. Când apelăm funcția, furnizăm
valorile în același mod. Rețineți terminologia folosită: numele date în definiția funcției sunt numite parametri, în timp ce valorile
pe care le furnizați în apelul funcției sunt numite argumente.
def print_max ( a,
b ): Dacă a >
b:
print (a, 'este maxim'
) elif a == b:
print (a, 'egal' , B)
46
Caracteris
tici
x = 5
y = 7
Productie:
Cum functioneazã
$python function_param.py
4 este maxim
Aici,7 definim o funcție numită print_max care utilizează doi parametri numiți a și b. Află cel mai mare număr folosind o
este maxim
Prima dată când apelăm funcția print_max, furnizăm direct numerele ca argumente. În al doilea caz, numim funcția cu variabile
drept argumente. print_max(x, y) face ca valoarea argumentului x să fie atribuită parametrului a și valoarea argumentului y să
fie atribuită parametrului b. Funcția print_max funcționează la fel în ambele cazuri.
Variabile locale
Când declarați variabile în definiția unei funcții, acestea nu sunt în niciun fel legate de alte variabile cu aceleași nume utilizate în
afara funcției, adică numele variabilelor sunt locale ale funcției. Aceasta se numește domeniul de aplicare al variabilei. Toate
variabilele au sfera blocului în care sunt declarate începând de la punctul de definire a numelui.
Productie:
x = 50
Cum functioneazã
$python
def func ( X ):
function_local.py
print( 'x x este
Prima
50 dată când, imprimăm
este' x) x = valoarea numelui x cu prima linie din corpul funcției, Python folosește valoarea parametrului declarat în
X local schimbat
2
blocul principal, deasupra definiției funcției.
în 2print(
x este'Local
încă x a fost schimbat în' , X)
functia(x)
47
Caracteris
tici
Apoi, atribuim valoarea 2 lui x. Numele x este local funcției noastre. Deci, atunci când schimbăm valoarea lui x în funcție, x
definit în blocul principal nu este afectat.
Cu ultima instrucțiune de tipărire, afișăm valoarea lui x așa cum este definită în blocul principal, confirmând astfel că nu este
afectată de fapt de atribuirea locală în cadrul funcției numite anterior.
Declarația globală
Dacă doriți să atribuiți o valoare unui nume definit la nivelul superior al programului (adică nu în niciun fel de domeniu, cum ar fi
funcții sau clase), atunci trebuie să îi spuneți lui Python că numele nu este local, ci este global. . Facem acest lucru folosind
declarația globală. Este imposibil să atribuiți o valoare unei variabile definite în afara unei funcții fără declarația globală.
Puteți utiliza valorile unor astfel de variabile definite în afara funcției (presupunând că nu există nicio variabilă cu același nume
în interiorul funcției). Cu toate acestea, acest lucru nu este recomandat și ar trebui evitat, deoarece nu este clar pentru cititorul
programului unde este definiția acelei variabile. Utilizarea declarației globale arată foarte clar că variabila este definită într-un
bloc exterior.
Productie:
x = 50
Cum functioneazã
$python
def func
():
function_global.py x este
Declarația globală este folosită pentru a declara că x este o variabilă globală; Prin urmare, atunci când atribuim o valoare lui x
50 global
Schimbat global x la
în interiorul funcției, acea modificare se reflectă atunci când folosim valoarea lui x în blocul principal.
print( 'x
2 Valoarea lui x este
este' , x) x =
Puteți specifica mai multe variabile globale folosind aceeași declarație globală , de exemplu global x, y, z .
2
print( 'X global schimbat in' , X)
Valorile
func()
implicite ale argumentelor
Pentru unele funcții, este posibil să doriți să faceți ca unii parametri să fie opționali și să utilizați valori implicite în cazul în care
utilizatorul nu dorește să furnizeze valori pentru aceștia. Acest lucru se face cu ajutorul valorilor implicite ale argumentelor.
Puteți specifica valori implicite ale argumentelor pentru parametri adăugând la numele parametrului din definiția funcției
operatorul de atribuire (=) urmat de valoarea implicită.
Rețineți că valoarea argumentului implicit trebuie să fie o constantă. Mai precis, valoarea argumentului implicit ar trebui să fie
imuabilă; acest lucru este explicat în detaliu în capitolele ulterioare. Deocamdată, amintește-ți asta.
48
Caracteris
tici
Productie:
def say ( mesaj, ori =
1 ): print(mesaj *
ori)
Cum
$ functioneazã
python
function_default.py
spune bună' ) Bună
Funcția
ziuanumită say este folosită pentru a tipări un șir de câte ori este specificat. Dacă nu furnizăm o valoare, atunci implicit
șirulWorldWorldWorldWorldWorld
este tipărit o singură dată. Obținem acest lucru prin specificarea unei valori implicite a argumentului de 1 la parametrul
times.
La prima utilizare a spune, furnizăm doar șirul și îl imprimă o dată. În a doua utilizare a cuvântului say, oferim atât șirul, cât și
un argument 5 care indică faptul că dorim să rostim mesajul șir de 5 ori.
PRUDENȚĂ
Numai parametrii de la sfârșitul listei de parametri pot primi valori implicite de argument, adică nu puteți avea un
parametru cu o valoare de argument implicită înaintea unui parametru fără o valoare de argument implicită în lista de
parametri.
Acest lucru se datorează faptului că valorile sunt atribuite parametrilor în funcție de poziție. De exemplu, def func (a, b
Există două avantaje: unul, utilizarea funcției este mai ușoară, deoarece nu trebuie să ne îngrijorăm cu privire la ordinea
argumentelor. În al doilea rând, putem da valori doar acelor parametri pe care îi dorim, atâta timp cât ceilalți parametri au valori
implicite ale argumentului.
Productie:
def func ( a, b = 5, c = 10 ):
print( 'a este' , a, 'yb este' , B, 'yc este' , C)
$ python
func 3 , 7 )
function_keyword.py
func ( 25 , c = a este
3
24și b este
) func ( 7c și
= c este 10
a
50este 25100
, a = și )b este 5 și c
este 24
49
Caracteris
tici
Cum functioneazã
Funcția numită func are un parametru fără o valoare implicită a argumentului, urmat de doi parametri cu valori implicite a
argumentului.
La prima utilizare a func(3, 7), parametrul a primește valoarea 3, parametrul b obține valoarea 7 și c obține valoarea implicită
de 10.
În a doua funcție de utilizare (25, c = 24), variabila a primește valoarea 25 datorită poziției argumentului. Apoi parametrul c
primește valoarea 24 din cauza numelui, adică a argumentelor cuvintelor cheie. Variabila b primește valoarea implicită de 5.
În a treia funcție de utilizare (c = 50, a = 100), folosim argumente de cuvinte cheie pentru toate valorile specificate. Rețineți că
specificăm valoarea parametrului c înainte de a, chiar dacă a este definit înainte de c în definiția funcției.
Parametri VarArgs
Uneori poate doriți să definiți o funcție care poate lua orice număr de parametri, adică un număr variabil de argumente, acest
lucru poate fi realizat folosind stele (salvați ca function_varargs.py):
Productie:
def total ( a = 5, * numere, ** agenda
telefonică ): tipăriți ( 'a' , a)
Cum functioneazã
$python
#iterați prin toate elementele în tuplu
function_varargs.py la 10
per singur obiect în numere:
Când declarăm un 1parametru asteriscat ca *param, toate argumentele
articol_unic poziționale din acel punct până la sfârșit sunt colectate ca
print( 'un singur obiect' , un singur obiect)
articol_unic 2
un tuplu numit „param”.
articol_unic 3
#iterați prin toate elementele dicționarului
Inge 1560
În mod similar, atunci când declarăm
prin prima_parte, un parametru
a doua_parte cu stea dublă ca **param, toate argumentele cuvintelor cheie din acel punct
în agenda
Ioan 2231
pânăCat
la sfârșit
1123
sunt colectate ca un dicționar
telefonică.items(): numit „param”.
print(prima_parte, a
doua_parte)
Vom explora tupluri și dicționare într-un capitol ulterior .
Declarația de returnare
Instrucțiunea return este folosită pentru a reveni dintr-o funcție, adică pentru a ieși din funcție. Opțional, putem returna și o valoare
din funcție.
50
Caracteris
tici
Productie:
max def ( x, y ):
Dacă x > y:
returne
Cum functioneazã
$python
ază X elif
function_return.py
x == y: 3
Funcția maximă returnează
returnează maximul sunt
„Numerele parametrilor, în acest caz numerele date funcției. Folosește un simplu
if...else egale” altfel
declarație pentru a:găsi cea mai mare valoare și apoi returnează acea valoare.
intoarce si
Rețineți că o instrucțiune returnată fără valoare este echivalentă cu returnarea None. Niciunul este un tip special în Python care nu
reprezintă nimic. De exemplu, este folosit pentru a indica faptul că o variabilă nu are valoare dacă are valoarea None.
Fiecare funcție conține implicit o instrucțiune return None la sfârșit, cu excepția cazului în care ați scris propria instrucțiune
return . Puteți vedea această rulare print(some_function()) unde funcția some_function nu folosește instrucțiunea return ca:
Declarația pass este folosită în Python pentru a indica un bloc gol de instrucțiuni.
def some_function
SFAT: ():încorporată
Există o funcție numită max care implementează deja funcționalitatea „găsiți maxim”, așa că utilizați
aproba
această funcție încorporată ori de câte ori este posibil.
DocStrings
Python are o caracteristică ingenioasă numită docstrings, la care se face referire de obicei prin numele său mai scurt docstrings.
DocStrings este un instrument important de utilizat, deoarece ajută la documentarea mai bună a programului și îl face mai ușor
de înțeles. În mod surprinzător, putem chiar prelua șirul documentar al, să zicem o funcție, atunci când programul rulează.
def print_max ( x, y ):
'''Tipărește maximum două numere.
Dacă x> y:
print (x, 'este maxim'
) altfel :
tipăriți (și „este maxim” )
51
Caracteris
tici
Productie:
Cum functioneazã
$python function_docstring.py
5 este maxim
Un șir din prima
Imprimă linie logică
maximum a unei funcții este șirul document pentru acea funcție. Vă rugăm să rețineți că DocStrings se aplică
două numere.
Convenția urmată pentru un șir de document este un șir cu mai multe rânduri în care prima linie începe cu o literă majusculă și se
termină cu un punct. Apoi a doua linie este goală, urmată de o explicație detaliată pornind de la a treia linie. Vă recomandăm
insistent să urmați această convenție pentru toate docstring-urile pentru toate funcțiile dvs. netriviale.
Putem accesa șirul document al funcției print_max folosind atributul doc (observați sublinierea dublă) (nume aparținând) al
funcției. Nu uitați că Python tratează totul ca pe un obiect și acesta include funcții. Vom afla mai multe despre obiecte în
capitolul despre clase .
Dacă ați folosit help() în Python, ați văzut deja utilizarea docstring-urilor! Ceea ce face el este să-l caute pe Doc
atributul acestei funcții și îl afișează într-un mod ordonat pentru dvs. Puteți încerca în funcția de mai sus, doar includeți
ajutor (print_max) în programul dvs. Nu uitați să apăsați tasta q pentru a ieși din ajutor .
Instrumentele automate vă pot prelua documentația programului în acest fel. Prin urmare, vă recomand cu tărie să utilizați
docstrings pentru orice funcții non-triviale pe care le scrieți. Comanda pydoc care vine cu distribuția dvs. Python funcționează în
mod similar pentru help() folosind docstrings.
rezumat
Am văzut multe aspecte ale caracteristicilor, dar rețineți că nu am acoperit încă toate aspectele acestora. Cu toate acestea, am acoperit
deja majoritatea a ceea ce veți folosi în ceea ce privește funcțiile Python în fiecare zi.
52
Module
Module
Ați văzut cum puteți reutiliza codul în programul dumneavoastră definind funcții o dată. Ce se întâmplă dacă ai vrea să refolosești o
serie de funcții în alte programe pe care le scrii? După cum probabil ați ghicit, răspunsul sunt module.
Există mai multe metode de scriere a modulelor, dar cea mai ușoară modalitate este de a crea un fișier cu extensia .py care
conține funcții și variabile.
O altă abordare este să scrieți modulele în limba maternă în care a fost scris interpretul Python. De exemplu, puteți scrie module în
limbajul de programare C și, atunci când sunt compilate, pot fi folosite din codul dvs. Python atunci când utilizați interpretul
standard Python.
Un alt program poate importa un modul pentru a folosi funcționalitatea acestuia. Acesta este modul în care putem folosi și
biblioteca standard Python. În primul rând, ne vom uita la modul de utilizare a modulelor bibliotecii standard.
Productie:
import sys
Variabila argv din modulul sys este accesată folosind notația punctată, adică sys.argv. Indică clar că acest nume face parte din
modulul sys. Un alt avantaj al acestei abordări este că numele nu intră în conflict cu nicio variabilă argv utilizată în programul
dumneavoastră.
53
Module
Variabila sys.argv este o listă de șiruri (listele sunt explicate în detaliu într-un capitol ulterior ). Mai exact, sys.argv conține lista
de argumente ale liniei de comandă, adică argumentele transmise programului dvs. folosind linia de comandă.
Dacă utilizați un IDE pentru a scrie și a rula aceste programe, găsiți o modalitate de a specifica argumentele liniei de comandă pentru
program în meniuri.
Aici, când executăm python module_using_sys.py are arguments , executăm modulul module_using_sys.py cu
comanda python și celelalte lucruri care urmează sunt argumente transmise programului. Python stochează
argumentele liniei de comandă în variabila sys.argv pentru ca noi să le folosim.
Amintiți-vă, numele scriptului care se rulează este întotdeauna primul element din lista sys.argv. Deci în acest caz vom avea
„module_using_sys.py” ca sys.argv [0] , „noi” ca sys.argv [1] , „are” ca sys.argv [2] și „args” ca
sys.argv [3] . Observați că Python începe să numere de la 0 și nu de la 1.
Sys.path conține lista de nume de directoare din care sunt importate module. Observați că primul șir din sys.path este gol; Acest
șir gol indică faptul că directorul curent face parte și din sys.path, care este același cu variabila de mediu PYTHONPATH.
Aceasta înseamnă că puteți importa direct modulele aflate în directorul curent. În caz contrar, va trebui să plasați modulul într-
unul dintre directoarele enumerate în sys.path.
Rețineți că directorul curent este directorul din care este pornit programul. Rulați importuri; print (os.getcwd()) pentru a găsi
directorul curent al programului dumneavoastră.
NOTĂ: Aceste fișiere .pyc sunt de obicei create în același director cu fișierele .py corespunzătoare. Dacă Python nu are
permisiunea de a scrie în fișierele din acel director, fișierele .pyc nu vor fi create.
Declarația de la..import
Dacă doriți să importați direct variabila argv în programul dvs. (pentru a evita scrierea sys. Ori de câte ori faceți acest lucru,
puteți utiliza instrucțiunea from sys import argv.
AVERTISMENT: În general, evitați să utilizați instrucțiunea from..import, folosiți în schimb instrucțiunea import.
Acest lucru se datorează faptului că programul dvs. va evita conflictele de nume și va fi mai ușor de citit.
Exemplu:
Fiecare modul are un nume și instrucțiunile dintr-un modul pot găsi numele modulului său. Acest lucru este util pentru scopul
special de a determina dacă modulul rulează independent sau este importat. După cum am menționat mai sus, atunci când un
modul este importat pentru prima dată, codul pe care îl conține este executat. Putem folosi acest lucru pentru a face modulul să se
comporte în moduri diferite.
54
Module
în funcție de faptul că este folosit singur sau importat dintr-un alt modul. Acest lucru poate fi realizat folosind atributul
Nume module.
Danume == 'major' :
print( 'Acest program rulează singur' ) else :
print( 'Import din alt modul' )
Productie:
Cum functioneazã
$python module_using_name.py
Acest program rulează singur
Fiecare modul Python are numele definit. Dacă este „principal”, înseamnă că utilizatorul rulează modulul independent și putem
$python
lua măsurile adecvate.
>>> import name_using_module
Le import dintr-un alt modul
>>>
Creează-ți propriile module
Crearea propriilor module este ușoară, ați făcut-o tot timpul! Acest lucru se datorează faptului că fiecare program Python este, de
asemenea, un modul. Trebuie doar să vă asigurați că are o extensie .py. Următorul exemplu ar trebui să fie clar.
versiune = '0.1'
Cele de mai sus a fost un exemplu de modul. După cum puteți vedea, nu există nimic special în comparație cu programul nostru
obișnuit Python. În continuare, ne vom uita la modul de utilizare a acestui modul în celelalte programe Python.
Rețineți că modulul trebuie să fie localizat în același director cu programul din care l-am importat sau într-unul din directoarele
enumerate în sys.path.
import mymodule
mymodule.say_hi()
print( 'Versiune' , mymodule. versiune)
Productie:
Cum functioneazã
$python mymodule_demo.py
Bună, acesta este mymodule.
Versiunea 0.1
55
Module
Rețineți că folosim aceeași notație punctată pentru a accesa membrii modulului. Python face o treabă bună în reutilizarea
aceleiași notații pentru a-i oferi senzația distinctă de „Pythonic”, astfel încât să nu trebuie să continuăm să învățăm noi moduri de
a face lucrurile.
Spune buna()
print( 'Versiune' , versiune )
Rețineți că dacă există deja un nume de versiune declarat în modulul mymodule imports, ar exista un conflict. Acest lucru este
probabil și pentru că este o practică obișnuită ca fiecare modul să își declare numărul de versiune cu acest nume. Prin urmare,
este întotdeauna recomandat să preferați instrucțiunea de import, chiar dacă poate face programul un pic mai lung.
Aceasta va importaimport
din mymodule toate numele
* publice ca say_hi, dar nu va importa versiunea deoarece începe cu liniuțe de subliniere duble.
Python Zen
Unul dintre principiile călăuzitoare ale lui Python este că „Explicit este mai bine decât implicit”. Rulați importul în Python pentru
mai multe informații.
Funcția dir
Funcția încorporată dir() returnează lista de nume definite de un obiect. Dacă obiectul este un modul, această listă include
funcții, clase și variabile, definite în acel modul.
Această funcție poate accepta argumente. Dacă argumentul este numele unui modul, funcția returnează lista de nume ale acelui
modul specificat. Dacă nu există argumente, funcția returnează lista de nume ale modulului curent.
Exemplu:
$python
>>> import sys
>>> dir ()
[ 'încorporat' , 'doc' , 'nume' , 'pachet' , 'sys' , 'a' ]
56
Module
>>> dir ()
[ 'încorporat' , 'doc' , 'nume' , 'pachet' , 'sys' ]
Cum functioneazã
În primul rând, ne uităm la utilizarea dir în modulul sys importat. Putem vedea lista uriașă de atribute pe care le conține.
Apoi, folosim funcția dir fără a-i transmite niciun parametru. În mod implicit, returnează lista de atribute ale modulului curent.
Rețineți că lista de module importate este, de asemenea, parte a acestei liste.
Pentru a observa dir în acțiune, definim o nouă variabilă a și îi atribuim o valoare și apoi verificăm dir și observăm că există o
valoare suplimentară în lista cu același nume. Îndepărtăm variabila/atributul din modulul curent folosind instrucțiunea del și
modificarea este reflectată înapoi în ieșirea funcției dir.
O notă despre del: Această instrucțiune este folosită pentru a șterge o variabilă/nume și după ce instrucțiunea, în acest caz del a, a
fost executată, nu mai puteți accesa variabila a; Parcă n-ar fi existat niciodată înainte.
Rețineți că funcția dir() funcționează pe orice obiect. De exemplu, rulați dir(str) pentru atributele clasei str(string). Există, de
asemenea, o funcție vars() care vă poate oferi atributele și valorile acestora, dar nu va funcționa în toate cazurile.
pachete
Până acum, trebuie să fi început să te uiți la ierarhia organizațională a programelor tale. Variabilele merg de obicei în interiorul
funcțiilor. Funcțiile și variabilele globale merg de obicei în interiorul modulelor. Ce se întâmplă dacă aș vrea să organizez
module? Acolo intră în imagine pachetele.
Pachetele sunt doar foldere de module cu un fișier special init .py care îi spune lui Python că acest folder este special deoarece
conține module Python.
Să presupunem că doriți să creați un pachet numit „world” cu subpachetele „asia”, „africa”, etc. iar aceste subpachete conțin la rândul
lor module precum „india”, „madagascar”, etc.
Pachetele
- <un sunt doarprezent
folder o comoditate pentru organizarea
în sys.path> / ierarhică a modulelor. Veți vedea multe cazuri în acest sens în biblioteca
standard-. lume/
- init .py
- Asia/
rezumat -- India/
init .py
- init .py
- foo.py
La fel cum funcțiile sunt părți reutilizabile ale programelor, modulele sunt programe reutilizabile. Pachetele reprezintă o altă ierarhie
- Africa/
pentru organizarea- modulelor.
init .py
Biblioteca standard care vine cu Python este un exemplu de astfel de set de pachete și module.
- Madagascar/
Am văzut cum să folosim
- aceste module și să ne creăm propriile module.
init .py
- bar.py
57
Module
În continuare, vom afla despre câteva concepte interesante numite structuri de date.
58
Structuri de
date
Structuri de date
Structurile de date sunt practic acelea: sunt structuri care pot ține unele date împreună. Cu alte cuvinte, ele sunt folosite pentru a
stoca o colecție de date conexe.
Există patru structuri de date încorporate în Python: listă, tuplu, dicționar și set. Vom vedea cum să le folosim pe fiecare dintre ele și
cum ne ușurează viața.
Listă
O listă este o structură de date care conține o colecție ordonată de elemente, adică poate stoca o secvență de elemente într-o listă.
Acest lucru este ușor de imaginat dacă vă puteți gândi la o listă de cumpărături în care aveți o listă de articole de cumpărat, cu
excepția faptului că probabil aveți fiecare articol pe o linie separată în lista de cumpărături, în timp ce în Python puneți virgule între
ele.
Lista de elemente trebuie să fie cuprinsă între paranteze drepte, astfel încât Python să înțeleagă că specificați o listă. După ce ați
creat o listă, puteți adăuga, șterge sau căuta articole din listă. Deoarece putem adăuga și șterge elemente, spunem că o listă este
un tip de date mutabil, adică acest tip poate fi modificat.
O listă este un exemplu de utilizare a obiectelor și claselor. Când folosim o variabilă i și îi atribuim o valoare, să spunem un
număr întreg 5, vă puteți gândi la ea ca la crearea unui obiect (adică instanță) i din clasa (adică tip) int. De fapt, puteți citi ajutor
(int) pentru a înțelege mai bine acest lucru.
O clasă poate avea, de asemenea, metode, adică funcții definite pentru a fi utilizate numai cu privire la acea clasă. Puteți utiliza
aceste piese de funcționalitate numai atunci când aveți un obiect din acea clasă. De exemplu, Python oferă o metodă de
adăugare pentru clasa listă care vă permite să adăugați un element la sfârșitul listei. De exemplu, mylist.append('un item') va
adăuga acel șir la listă
lista mea . Observați utilizarea notației puncte pentru a accesa metodele obiect.
O clasă poate avea, de asemenea, câmpuri care nu sunt altceva decât variabile definite pentru a fi utilizate numai cu privire la acea
clasă. Puteți utiliza aceste variabile/nume numai atunci când aveți un obiect din acea clasă. Câmpurile sunt, de asemenea, accesate
folosind notația punctată, de ex.
lista mea.câmp .
'articole de cumpărat'. )
Productie:
Cum
$ functioneazã
python
ds_using_list.py Am 4
Variabila shoplist
articole este o listă de cumpărături pentru cineva care merge la piață. În shoplist, stocăm doar șiruri de nume de
de cumpărat.
Aceste articole sunt: măr mango morcov
articole de cumpărat, dar puteți adăuga orice tip de obiect la o listă, inclusiv numere și chiar alte liste.
banană Trebuie să cumpăr și orez.
Lista mea de cumpărături acum este [„măr”, „mango”, „morcov”,
De asemenea, am folosit bucla for..in pentru a parcurge elementele listei. Până acum, trebuie să fi realizat că o listă este și o secvență.
„banană”, „orez”]. Îmi voi sorta lista acum
Specialitatea
Lista de secvențelor va comandată
cumpărături fi discutatăeste
într-o['măr',
secțiune'banana',
ulterioară .'morcov',
'mango', 'orez'] Primul articol pe care îl voi cumpăra este măr
Rețineți că folosirea
Am cumpărat parametrului end în apelul funcției de imprimare pentru a indica faptul că dorim să încheiem ieșirea cu un
mărul
spațiu în loc de întrerupere de linie obișnuită.
Apoi, adăugăm un element în listă folosind metoda add a obiectului listă, așa cum sa discutat deja. Apoi verificăm dacă articolul a
fost adăugat în listă prin tipărirea conținutului listei prin simpla trecere a listei la funcția de imprimare care o tipări în ordine.
Apoi, sortăm lista folosind metoda list sort. Este important să înțelegeți că această metodă afectează lista în sine și nu returnează
o listă modificată; acesta este diferit de modul în care funcționează lanțurile. La asta ne referim când spunem că listele sunt
mutabile și șirurile sunt imuabile.
În continuare, când terminăm de achiziționat un articol de pe piață, dorim să-l eliminăm din listă. Obținem acest lucru folosind
declarația del. Aici, menționăm ce element din listă dorim să eliminăm și declarația îl elimină din listă pentru noi. Precizăm că
dorim să eliminăm primul element din listă și prin urmare să folosim del shoplist[0] (rețineți că Python începe să numere de la
0).
Dacă doriți să cunoașteți toate metodele definite de obiectul listă, vă rugăm să consultați ajutorul (lista) pentru detalii.
Tuplu
Tuplurile sunt folosite pentru a ține mai multe obiecte împreună. Gândiți-vă la ele ca fiind similare cu listele, dar fără
funcționalitatea extinsă pe care vi le oferă clasa listă. O caracteristică importantă a tuplurilor este că sunt imuabile ca șirurile, adică
tuplurile nu pot fi modificate.
Tuplurile sunt definite prin specificarea elementelor separate prin virgulă într-o pereche opțională de paranteze.
Tuplurile sunt în general utilizate în cazurile în care o declarație sau o funcție definită de utilizator poate presupune în siguranță că
colecția de valori (adică tuplu de valori utilizate) nu se va modifica.
60
Structuri de
date
Productie:
Cum
$ functioneazã
python ds_using_tuple.py
Numărul de animale din grădina
Variabila zoo seeste
zoologică referă
de la
3 un tuplu de elemente. Vedem că funcția len poate fi folosită pentru a obține lungimea tuplului. Acest
Numărul de cuști din noua grădină zoologică este de 3
lucru indică, de asemenea, că un tuplu este, de asemenea, o secvență .
Toate animalele din noua grădina zoologică sunt („maimuță”, „cămilă”, („python”,
„elefant”, „pinguin”)) Animalele aduse de la vechea grădină zoologică sunt
Acum mutăm aceste animale într-o nouă grădină zoologică, deoarece vechea grădină zoologică este închisă. Prin urmare, tuplul
(„python”, „elefant”, „pinguin”) ')
new_zoo conține câteva animale care sunt deja acolo împreună cu animalele aduse de la vechea grădină zoologică. Revenind la
realitate, rețineți că un tuplu dintr-un tuplu nu își pierde identitatea.
Putem accesa elementele tuplului specificând poziția elementului într-o pereche de paranteze drepte, așa cum am făcut cu listele.
Acesta se numește operator de indexare. Accesăm al treilea element din new_zoo specificând new_zoo[2] și accesăm al treilea
element din al treilea element din tuplul new_zoo specificând new_zoo[2][2]. Acest lucru este destul de simplu odată ce ați
înțeles limbajul.
Un tuplu gol este construit cu o pereche de paranteze goale precum myempty = (). Cu toate acestea, un tuplu cu un singur
element nu este atât de simplu. Trebuie să-l specificați folosind o virgulă după primul (și singurul) element, astfel încât
Python să poată diferenția între un tuplu și o pereche de paranteze care înconjoară obiectul într-o expresie, adică trebuie să
specificați singleton = (2
,) dacă vrei să spui că vrei un tuplu care conține elementul 2.
O listă dintr-o listă nu își pierde identitatea, adică listele nu devin aplatizate ca în Perl. Același lucru se aplică unui tuplu
dintr-un tuplu, sau unui tuplu dintr-o listă sau unei liste dintr-un tuplu etc. În ceea ce privește Python, acestea sunt doar
obiecte stocate folosind un alt obiect, asta-i tot.
Dicţionar
Un dicționar este ca o agendă de adrese în care puteți găsi adresa sau detaliile de contact ale unei persoane cunoscând doar numele
acesteia.
Adică asociem chei (nume) cu valori (detalii). Rețineți că cheia trebuie să fie unică, la fel cum nu puteți găsi informațiile corecte dacă
aveți două persoane cu exact același nume.
Rețineți că puteți utiliza numai obiecte imuabile (cum ar fi șiruri de caractere) pentru cheile unui dicționar, dar puteți utiliza
obiecte imuabile sau mutabile pentru valorile dicționarului. Acest lucru se traduce practic prin a spune că ar trebui să utilizați
doar obiecte simple pentru chei.
61
Structuri de
date
Perechile cheie-valoare sunt specificate într-un dicționar folosind notația d = {cheie1:valoare1, cheie2:valoare2}. Observați că
perechile cheie-valoare sunt separate prin două puncte, iar perechile sunt separate prin virgule și toate acestea sunt incluse într-o
pereche de acolade.
Rețineți că perechile cheie-valoare dintr-un dicționar nu sunt ordonate în niciun fel. Dacă doriți o anumită comandă, va trebui să le
comandați singur înainte de a o folosi.
Productie:
# „ab” este prescurtare pentru „a'address'b'ook
ab = {
Cum functioneazã
$python ds_using_dict.py
„Swaroop” : „[email protected]”
Adresa lui Swaroop
, „Larry” este
: „[email protected]” ,
Creăm dicționarul
„Matsumoto”ab folosind notația deja discutată. Apoi accesăm perechile cheie-valoare specificând cheia folosind operatorul de
: „[email protected]”
[email protected] Există 3 persoane de
indexare,
, așa cum este:explicat
„Spammer” în contextul listelor și tuplurilor. Observați sintaxa simplă.
„[email protected]”
}
contact în agenda
Putem elimina perechile cheie-valoare folosind vechiul nostru prieten: declarația del. Pur și simplu specificăm dicționarul și
print( "Adresa lui Swaroop este" , ab
operatorul de indexare,
Contactați Swaroopastfel încât cheia să fie eliminată și să o transmitem instrucțiunii del. Nu este necesar să se cunoască
la [email protected]
valoarea corespunzătoare
Contactați
[ 'Swaroop' Matsumotocheii pentru
uneiaceastă operație.
la [email protected]
]) # Ștergerea perechi
Contactați-l pe Larry la [email protected]
În continuare, accesăm fiecare pereche cheie-valoare din dicționar folosind metoda elementelor din dicționar care returnează o
cheie-valoare
listădin ab [ „Spammer” ]
de tupluri în care fiecare tuplu conține o pereche de elemente: cheia urmată de valoare. Preluăm această pereche și o
atribuim numelui variabilelor și adresei corespunzătoare pentru fiecare pereche folosind bucla for..in și apoi imprimăm aceste
print( '\nExistă {} persoane de contact în agenda \n' . format ( len
valori în blocul for.
(ab))) după Nume adresa în ab.items ():
print( "Contact {} la {}" . format (nume adresa))
62
Structuri de
date
Putem adăuga noi perechi cheie-valoare pur și simplu utilizând operatorul de indexare pentru a accesa o cheie și a atribui acea
valoare, așa cum am făcut pentru Guido în cazul precedent.
operatorul in. Pentru lista metodelor din clasa dict, vezi ajutor
(dict).
Dacă ați folosit argumente de cuvinte cheie în funcțiile dvs., ați folosit deja dicționare! Gândiți-vă doar la asta: specificați
perechea cheie-valoare în lista de parametri a definiției funcției și când accesați variabilele din interiorul funcției dvs., este
doar o cheie de acces dintr-un dicționar (care se numește tabel de simboluri în terminologia compilatorului de design). ).
Secvenţă
Listele, tuplurile și șirurile de caractere sunt exemple de secvențe, dar ce sunt secvențele și ce este special la ele?
Principalele caracteristici sunt testele de apartenență (adică expresiile in și not in ) și operațiunile de indexare, care ne permit să
căutăm direct un anumit element din secvență.
Cele trei tipuri de secvențe menționate mai sus, liste, tupluri și șiruri, au și o operație de tăiere care ne permite să recuperăm o
porțiune din secvență, adică o parte a secvenței.
Productie:
lista de magazine = [ 'măr' , 'mango' ,
'morcov' , 'banana' ] nume = 'swaroop'
$
# python
Operațiunea de indexare sau
ds_seq.py
„abonament” # print( „Elementul 0 este”
Elementul
, 0 este
hoț [ 0 ]) print( „Elementul 1
măr.
este”Elementul
, hoț [ 11]) print( „Articolul 2
este mango.
este” , hoț [ 2 ] ) print( ' Elementul
Elementul 2 este
3 este' , hoț [ 3 ]) print( 'Elementul
morcovul.
-1 este' , hoț [- 1 ]) print(
Elementul 3-2
'Elementul este
este' , hoț [- 2 ])
banana.
print( 'Caracterul 0 este' , nume[ 0 ])
Elementul 1 până la 3 este
['mango', 'morcov']
# Tăiați într-o Elementul
listă # 2 la
sfârșit este ['morcov',
print( 'Elementul 1 la 3'banana']
este' , hoț [ 1 :
3 ]) print( 'Elementul 2 la sfârșit este' ,
hoț [ 2 :]) print( 'Elementul 1 la -1 este'
, hoț [ 1 :- 1 ]) print( 'Articolul de la
început până la sfârșit este' , hoț [:])
# Tăiați pe un șir #
print( 'caracterele 1 la 3 este' ,
nume[ 1 : 3 ]) print( 'caracterele 2
până la sfârșit este' , nume[ 2 :])
63
Structuri de
date
Cum functioneazã
În primul rând, ne uităm la modul de utilizare a indecșilor pentru a obține elemente individuale ale unei secvențe. Aceasta este
cunoscută și ca operațiune de abonament. Ori de câte ori specificați un număr pentru o secvență între paranteze drepte, așa cum
se arată mai sus, Python va căuta elementul corespunzător acelei poziții în secvență. Amintiți-vă că Python începe să numere
numere de la 0. Prin urmare, hoț[0] caută primul element și hoț[3] caută al patrulea element din secvența hoț.
Indicele poate fi și un număr negativ, caz în care poziția este calculată de la sfârșitul secvenței. Prin urmare,
thief[-1] se referă la ultimul element din secvență, iar thief[-2] obține penulul element din secvență.
Operația de tăiere este utilizată prin specificarea numelui secvenței urmată de o pereche opțională de numere separate prin două
puncte între paranteze drepte. Rețineți că aceasta este foarte similară cu operația de indexare pe care ați folosit-o până acum.
Amintiți-vă că numerele sunt opționale, dar două puncte nu sunt.
Primul număr (înainte de colon) în operația de tăiere se referă la poziția de unde începe tăierea, iar al doilea număr (după colon)
indică locul unde se va opri tăierea. Dacă primul număr nu este specificat, Python va începe la începutul secvenței. Dacă al doilea
număr este omis, Python se va opri la sfârșitul secvenței. Rețineți că segmentul returnat începe la poziția de început și se va
termina chiar înainte de poziția finală, adică poziția de început este inclusă, dar poziția finală este exclusă din segmentul de
secvență.
Prin urmare, shoplist[1:3] returnează un segment al secvenței care începe la poziția 1, include poziția 2, dar se oprește la poziția
3 și, astfel, este returnat un segment cu două articole. În mod similar, shoplist[:] returnează o copie a întregii secvențe.
Puteți face și feliere cu poziții negative. Numerele negative sunt folosite pentru pozițiile de la sfârșitul secvenței. De exemplu,
shoplist[:-1] va returna o porțiune a secvenței care exclude ultimul element al secvenței, dar conține orice altceva.
De asemenea, puteți furniza un al treilea argument pentru felie, care este pasul pentru tăiere (în mod implicit, dimensiunea pasului
este 1):
Rețineți că atunci
>>> lista de când pasul =este
magazine 2, obținem
[ 'măr' elementele
, 'mango' cu poziția
, 'morcov' 0, 2, ... Când
, 'banana' ] dimensiunea pasului este 3, obținem elementele
>>> lista
cu poziția de magazine
0, 3 etc. [:: 1 ]
[ „măr” , „mango” , „morcov” , „banană” ]
>>> lista
Încercați decombinații de astfel de specificații de tăiere folosind interpretul Python în mod interactiv, adică indicatorul, astfel
diferite
magazine [:: 2 ]
încât[ să puteți, vedea rezultatele imediat. Cel mai bun lucru despre secvențe este că puteți accesa tupluri, liste și șiruri în același
'măr'
mod!
'morcov' ]
>>> lista de
magazine [:: 3 ]
Loc
[ „măr” ,
Seturile sunt colecții neordonate de obiecte simple. Sunt folosite atunci când existența unui obiect într-o colecție este mai
importantă decât ordinea sau de câte ori apare.
Cu seturi, puteți testa apartenența, dacă este un subset al unui alt set, puteți găsi intersecția dintre două seturi etc.
64
Structuri de
date
Cum functioneazã
Dacă vă amintiți matematica de bază a teoriei mulțimilor de la școală, atunci acest exemplu se explică de la sine. Dar dacă nu,
puteți găsi pe Google „teoria seturilor” și „diagrama Venn” pentru a înțelege mai bine modul în care folosim seturile în Python.
Referințe
Când creați un obiect și îl atribuiți unei variabile, variabila se referă doar la obiect și nu reprezintă obiectul în sine. Adică, numele
variabilei indică partea din memoria computerului în care este stocat obiectul. Aceasta se numește legarea numelui de obiect.
În general, nu ar trebui să vă faceți griji pentru acest lucru, dar există un efect subtil din cauza referințelor despre care ar trebui să
Productie:
$ python ds_reference.py
Atribuire simplă
hoțul este ['mango', 'morcov', 'banana']
lista mea este ['mango', 'morcov',
'banana']
Copiați făcând o tăietură completă
hoțul este ['mango', 'morcov', 'banana']
lista mea este ['morcov', 'banana']
65
Structuri de
date
Cum functioneazã
Amintiți-vă că, dacă doriți să faceți o copie a unei liste sau a acestor tipuri de secvențe sau obiecte complexe (nu obiecte simple
precum numerele întregi), atunci trebuie să utilizați operația de tăiere pentru a face o copie. Dacă pur și simplu atribuiți numele
variabilei unui alt nume, ambele se vor „referi” la același obiect și aceasta ar putea fi o problemă dacă nu sunteți atent.
Rețineți că o declarație de atribuire pentru liste nu creează o copie. Trebuie să utilizați operația de tăiere pentru a face o
copie a secvenței.
Șirurile pe care le utilizați în programe sunt toate obiecte din clasa str. Următorul exemplu arată câteva metode utile din această
clasă. Pentru o listă completă a acestor metode, consultați ajutor (str).
Productie:
# Acesta este un șir de
nume de obiect = 'Swaroop'
Cum functioneazã
$python
Dacă ds_str_methods.py
name.startswith( 'Swa' ):
Da, print(
șirul începe cu „Swa”
'Da, șirul Da,cu "Swa"' )
începe
Aiciconține
vedem multe
șiruldintre metodele
„a” Da, cu șiruri în acțiune.
conține Metoda startswith este folosită pentru a afla dacă șirul începe cu șirul
dat. șirul
Dacă „război”
„a” esteBrazilia
îninnume:
Operatorul _ * _
folosit pentru a verifica dacă un șir dat face parte din șir.
Rusia _ * _'Da,
print( India _ * _ șirul
conține China "a"' )
Metoda de căutare este utilizată pentru a localiza poziția subșirului dat în șir; find returnează -1 dacă nu reușește să găsească
if name.find( 'război' )! = -1:
subșirul.print(
Clasa str are, de asemenea, o metodă ordonată pentru a uni elementele unei secvențe cu șirul acționând ca un
'Da, conține șirul „război”’ )
delimitator între fiecare element al secvenței și returnează un șir mai mare generat din aceasta.
delimitator = '_*_'
mylist = [ 'Brazilia' , 'Rusia' , 'India' ,
rezumat
'Porţelan' ] print (delimiter.join (mylist))
66
Structuri de
date
Am explorat în detaliu diferitele structuri de date încorporate din Python. Aceste structuri de date vor fi esențiale pentru
scrierea programelor de dimensiuni rezonabile.
Acum că avem multe dintre elementele de bază ale Python la locul lor, ne vom uita în continuare la cum să proiectăm și să scriem un
program Python din lumea reală.
67
Rezolvarea
problemei
# Rezolvarea problemelor
Am explorat diverse părți ale limbajului Python și acum vom vedea cum toate aceste părți se potrivesc împreună, proiectând și
scriind un program care face ceva util. Ideea este să înveți cum să scrii singur un script Python.
Problema
Problema pe care vrem să o rezolvăm este:
Vreau un program care să creeze o copie de rezervă a tuturor fișierelor mele importante.
Deși aceasta este o problemă simplă, nu există suficiente informații pentru ca noi să începem soluția. Mai este nevoie de puțină
analiză. De exemplu, cum specificăm ce fișiere să facem backup? Cum sunt depozitate? Unde sunt depozitate?
După analizarea corectă a problemei, proiectăm programul nostru. Facem o listă de lucruri despre cum ar trebui să funcționeze
programul nostru. În acest caz, am creat următoarea listă cu cum vreau să funcționeze. Dacă faceți designul, este posibil să nu
veniți cu același tip de analiză, deoarece fiecare are propriul mod de a face lucrurile, așa că este perfect.
Utilizatorii Windows pot instala comanda zip din pagina proiectului GnuWin32 și pot adăuga C:\Program Files\
GnuWin32\bin la variabila de mediu PATH a sistemului dumneavoastră, similar cu ceea ce am făcut pentru a
recunoaște comanda python în sine .
Soluția
Deoarece designul programului nostru este acum relativ stabil, putem scrie cod care este o implementare a soluției noastre.
Salvați ca backup_ver1.py :
import timp
import
68
Rezolvarea
problemei
Productie:
Acum, suntem
Comanda în faza de testare în care testăm dacă programul nostru funcționează corect. Dacă nu se comportă așa cum era de
$python
așteptat, atunci trebuie
backup_ver1.py Zip
este:programul nostru, adică eliminați erorile (erorile) din program.
depanați
zip -r /Users/swa/backup/20140328084844.zip /Users/swa/notes
Rulează:
Dacă programul de mai sus nu funcționează pentru dvs., copiați linia imprimată după ce comanda Zip este pe linia de ieșire, lipiți-
adăugând: Users/swa/notes/ (stocat 0%)
o în shell (pe GNU/Linux și
adăugând: Mac OS X) / cmd (pe Windows), vedeți ce este eroarea este și încercați să o remediați. De asemenea,
Users/swa/notes/blah1.txt
verificați manualul de comandă
(stocat 0%) zip pentru a afla ce ar putea fi greșit. Dacă această comandă are succes, atunci problema ar putea
adăugând:
Users/swa/notes/blah2.txt (stocat 0%)
fi chiar în programul Python, deci verificați dacă se potrivește exact cu programul scris mai sus.
adăugând: Users/swa/notes/blah3.txt
Cum functioneazã
Utilizăm timp și modulele sistemului de operare importându-le mai întâi. În continuare, specificăm fișierele și directoarele pentru
care se face backup în lista surselor. Directorul țintă este locul în care stocăm toate fișierele de rezervă și acest lucru este
specificat în variabila target_dir. Numele fișierului zip pe care îl vom crea este data și ora curente pe care le-am generat folosind
funcția time.strftime() . De asemenea, va avea extensia .ZIP și va fi stocat în directorul target_dir .
Rețineți utilizarea variabilei os.sep: aceasta vă oferă separatorul de director în funcție de sistemul dvs. de operare, adică va fi „/”
pe GNU/Linux, Unix, macOS și va fi „\\” pe Windows. Utilizarea os.sep în locul acestor caractere va face direct programul
nostru portabil și va funcționa pe toate aceste sisteme.
Funcția time.strftime() are o specificație ca cea pe care am folosit-o în programul anterior. Specificația %Y va fi înlocuită cu anul
cu secolul. Specificația %m va fi înlocuită cu luna ca număr zecimal între
01 și 12 și așa mai departe. Lista completă a acestor specificații poate fi găsită în Manualul de referință Python .
Creăm numele fișierului zip de destinație folosind operatorul de adăugare care concatenează șirurile, adică unește cele două șiruri
și returnează unul nou. Apoi, creăm un șir zip_command care conține comanda pe care urmează să o executăm. Puteți verifica
dacă această comandă funcționează rulând-o în shell (terminal GNU/Linux sau prompt DOS).
69
Rezolvarea
problemei
Comanda zip pe care o folosim are câteva opțiuni disponibile, iar una dintre aceste opțiuni este -r. Opțiunea -r specifică că
comanda zip ar trebui să funcționeze recursiv pentru directoare, adică ar trebui să includă toate subdirectoarele și fișierele.
Opțiunile sunt urmate de numele fișierului zip de creat, urmat de lista fișierelor și directoarelor de care trebuie să faceți backup.
Convertim lista de surse într-un șir folosind metoda string join pe care am văzut deja cum să o folosim.
Apoi, în sfârșit executăm comanda folosind funcția os.system care execută comanda ca și cum ar fi executată din sistem, adică în
shell; returnează 0 dacă comanda a avut succes, în caz contrar returnează un număr de eroare.
În funcție de rezultatul comenzii, imprimăm mesajul potrivit că backup-ul a eșuat sau a reușit. Gata, am creat un script
În loc de secvențe de escape duble backslash, puteți folosi și șiruri brute. De exemplu, utilizați „C: \\ Documente” sau
r'C:\Documente' . Cu toate acestea, nu utilizați „C:\Documents” deoarece ajungeți să utilizați o secvență de evadare \D
necunoscută.
Acum că avem un script de backup funcțional, îl putem folosi oricând dorim să facem backup la fișiere. Aceasta se numește
faza de operare sau faza de implementare a software-ului.
Programul de mai sus funcționează corect, dar (de obicei) primele programe nu funcționează exact așa cum vă așteptați. De
exemplu, pot apărea probleme dacă nu ați proiectat corect programul sau dacă ați făcut o greșeală în timp ce scrieți codul etc. În
mod corespunzător, va trebui să reveniți la faza de proiectare sau va trebui să vă depanați programul.
A doua versiune
Prima versiune a scenariului nostru funcționează. Cu toate acestea, putem face unele ajustări pentru ca acesta să funcționeze
mai bine în fiecare zi. Aceasta se numește faza de întreținere a software-ului.
Una dintre îmbunătățirile pe care le-am simțit utilă este un mecanism mai bun de denumire a fișierelor: folosirea orei ca nume de
fișier într-un director cu data curentă ca director în directorul de rezervă părinte. Primul avantaj este că backup-urile
dumneavoastră sunt stocate ierarhic și, prin urmare, este mult mai ușor de gestionat. Al doilea avantaj este că numele fișierelor
sunt mult mai scurte. Al treilea avantaj este că directoarele separate vă vor ajuta să verificați dacă ați făcut o copie de rezervă
pentru fiecare zi, deoarece directorul va fi creat doar dacă ați făcut o copie de rezervă pentru ziua respectivă.
Salvați ca backup_ver2.py :
import timp
import
70
Rezolvarea
problemei
Productie:
Cum functioneazã
$python backup_ver2.py
Directorul /Users/swa/backup/20140329 creat cu succes
Majoritatea
Comanda programului
Zip este: rămâne același. Modificările sunt că verificăm dacă există un director cu ziua curentă ca nume în
zip -r /Users/swa/backup/20140329/073201.zip /Users/swa/notes
directorul principal de rezervă folosind funcția os.path.exists. Dacă nu există, îl creăm folosind funcția os.mkdir.
Rulează:
adăugând: Users/swa/notes/ (stocat 0%)
adăugând: Users/swa/notes/blah1.txt
A treia
(stocat versiune
0%) adăugând:
Users/swa/notes/blah2.txt (stocat 0%)
adăugând: Users/swa/notes/blah3.txt
A doua(stocat
versiune0%)
funcționează bine când fac multe backup-uri, dar când sunt multe backup-uri, îmi este greu să diferențiez pentru
ce sunt backup-urile! De exemplu, s-ar putea să fi făcut câteva modificări nerespective la un program sau o prezentare, apoi
vreau să asociez care sunt acele modificări cu numele fișierului zip. Acest lucru poate fi realizat cu ușurință prin adăugarea unui
comentariu furnizat de utilizator la numele fișierului zip.
AVERTISMENT: Următorul program nu funcționează, așa că nu vă alarmați, urmați-l pentru că există o lecție aici.
Salvați ca backup_ver3.py :
import timp
import
71
Rezolvarea
problemei
# specificat într-o
listă. # Exemplu pe
Windows:
# sursă = ['"C: \\ Documentele mele"',
'C: \\ Cod'] # Exemplu pe Mac OS X și
Linux:
sursă = [ '/Utilizatori/swa/note' ]
# Rețineți că a trebuit să folosim ghilimele duble
în interiorul șirului # pentru numele cu spații.
# Luați un comentariu de la
utilizator pentru a # crea
numele fișierului zip
comentariu = contribuție (
'Introduceți un comentariu ->' ) #
Verificați dacă a fost introdus un
comentariu
Dacă len (comentar) == 0 :
target = today + os.sep + now +
'.PostalCode' else :
target = today + os.sep + now + '_' +
comment.replace ( '' , '_' ) + '.PostalCode'
Productie:
Cum funcționează
$python (nu) asta
backup_ver3.py
Fișierul „backup_ver3.py”, rândul 39
target = today + os.sep + now + '_' +
^
Eroare de sintaxă: sintaxă nevalidă
72
Rezolvarea
problemei
Acest program nu funcționează! Python spune că există o eroare de sintaxă care înseamnă că scriptul nu satisface structura pe care
Python se așteaptă să o vadă. Când ne uităm la eroarea dată de Python, ne spune și locul unde a detectat eroarea. Apoi începem să
ne depanăm programul din acea linie.
La o observare atentă, vedem că linia logică unică a fost împărțită în două linii fizice, dar nu am specificat că aceste două linii
fizice aparțin împreună. Practic, Python a întâlnit operatorul de adăugare (+) fără operanzi pe acea linie logică și, prin urmare, nu
știe cum să continue. Amintiți-vă că putem specifica că linia logică continuă pe următoarea linie fizică folosind o bară oblică
inversă la sfârșitul liniei fizice. Deci, facem această corecție programului nostru. Această corecție a programului atunci când
găsim erori se numește corectare a erorilor.
A patra versiune
Salvați ca backup_ver4.py :
import timp
import
# Luați un comentariu de la
utilizator pentru a # crea
numele fișierului zip
comentariu = contribuție (
'Introduceți un comentariu ->' ) #
Verificați dacă a fost introdus un
comentariu
Dacă len (comentar) == 0 :
target = today + os.sep + now +
'.PostalCode' else :
target = today + os.sep + now + '_' + \
comment.replace ( '' , '_' ) + '.PostalCode'
73
Rezolvarea
problemei
Productie:
Cum functioneazã
$python backup_ver4.py
Introduceți un comentariu -> exemple
Acest
noiprogram funcționează
adăugate acum!
Comanda Zip Să trecem peste îmbunătățirile reale pe care le-am adus în versiunea 3. Luăm comentariile
este:
zip -r /Users/swa/backup/20140329/074122_added_new_examples.zip /Users/swa/notes
utilizatorului folosind funcția de introducere și apoi verificăm dacă utilizatorul a introdus într-adevăr ceva, aflând lungimea
Rulează:
intrăriiadăugând:
folosind funcția len. Dacă utilizatorul
Users/swa/notes/ (stocat a0%)
apăsat enter fără a introduce nimic (poate a fost doar o copie de rezervă de
rutină adăugând:
sau nu s-au făcut modificări speciale), atunci procedăm așa cum am procedat înainte.
Users/swa/notes/blah1.txt
(stocat 0%) adăugând:
Cu toate acestea, dacă a fost furnizat un(stocat
Users/swa/notes/blah2.txt comentariu,0%)
acesta este atașat la numele fișierului zip chiar înainte de extensia .zip.
adăugând: Users/swa/notes/blah3.txt
Rețineți că înlocuim spațiile din comentariu cu liniuțe de subliniere; Acest lucru se datorează faptului că gestionarea numelor de
(stocat 0%)
fișiere fără spații este mult mai ușoară.
O altă posibilă îmbunătățire ar fi aceea de a permite fișierelor și directoarelor suplimentare să fie transmise scriptului de pe linia de
comandă. Putem obține aceste nume din lista sys.argv și le putem adăuga la lista noastră sursă folosind metoda de extensie oferită
de
lista de clase.
Cel mai important rafinament ar fi să nu utilizați modul os.system de a crea fișiere și, în schimb, să utilizați fișierul zip încorporat
sau modulele tarfile pentru a crea aceste fișiere. Acestea fac parte din biblioteca standard și sunt deja disponibile pentru utilizare
fără dependențe externe de programul zip care va fi disponibil pe computer.
Cu toate acestea, am folosit modul os.system de a crea o copie de rezervă în exemplele de mai sus doar în scopuri pedagogice,
așa că exemplul este suficient de simplu pentru ca toată lumea să-l înțeleagă, dar suficient de real pentru a fi util.
Puteți încerca să scrieți a cincea versiune care utilizează fișierul zip al modulului în loc de apelul os.system?
1. Ce (analiza)
2. Cum (Design)
74
Rezolvarea
problemei
3. Fă-o (implementare)
4. Testare (testare și depanare)
5. Utilizare (operare sau implementare)
6. Mentine (rafinament)
O modalitate recomandată de a scrie programe este procedura pe care am urmat-o la crearea script-ului de rezervă: faceți
analiza și proiectați. Începeți implementarea cu o versiune simplă. Testează-l și depanează-l. Folosiți-l pentru a vă asigura că
funcționează conform așteptărilor. Acum, adăugați caracteristicile dorite și continuați să repetați ciclul Do It-Test-Use de câte
ori este necesar.
Tine minte:
rezumat
Am văzut cum să ne creăm propriile programe/scripturi Python și diferitele etape implicate în scrierea unor astfel de programe. S-ar
putea să vă fie util să vă creați propriul program, așa cum am făcut în acest capitol, pentru a vă familiariza cu Python și rezolvarea
problemelor.
75
Programare orientată pe
obiecte
Clasele și obiectele sunt cele două aspecte principale ale programării orientate pe obiecte. O clasă creează un nou tip în care
obiectele sunt instanțe ale clasei. O analogie este că puteți avea variabile de tip int, ceea ce se traduce prin a spune că
variabilele care stochează numere întregi sunt variabile care sunt instanțe (obiecte) ale clasei int.
Rețineți că chiar și numerele întregi sunt tratate ca obiecte (din clasa int). Acest lucru este spre deosebire de C++ și Java
(înainte de versiunea 1.5) unde numerele întregi sunt tipuri native primitive.
Programatorii C# și Java 1.5 vor găsi acest lucru similar cu conceptul de box și unboxing.
Obiectele pot stoca date folosind variabile obișnuite care aparțin obiectului. Variabilele care aparțin unui obiect sau unei clase
sunt numite câmpuri. Obiectele pot avea și funcționalitate prin utilizarea funcțiilor care aparțin unei clase. Aceste funcții sunt
numite metode ale clasei. Această terminologie este importantă deoarece ne ajută să facem diferența între funcțiile și variabilele
independente de cele care aparțin unei clase sau unui obiect. Împreună, câmpurile și metodele pot fi numite atribute ale acelei
clase.
Câmpurile sunt de două tipuri: pot aparține fiecărei instanțe/obiect a clasei sau pot aparține clasei în sine. Ei sunt numiti, cunoscuti
variabile de instanță și, respectiv, variabile de clasă.
O clasă este creată folosind cuvântul cheie class. Câmpurile și metodele clasei sunt listate într-un bloc indentat.
sinele
Metodele de clasă au o singură diferență specifică față de funcțiile obișnuite: trebuie să aibă un nume suplimentar care trebuie
adăugat la începutul listei de parametri, dar nu dați o valoare pentru acest parametru atunci când apelați metoda, Python va oferi
asta. Această variabilă particulară se referă la obiectul în sine și, prin convenție, i se dă numele self.
Deși puteți da acestui parametru orice nume, este recomandat să utilizați numele self; orice alt nume este cu siguranță respins.
Folosirea unui nume standard are multe avantaje: orice cititor al programului tău îl va recunoaște imediat și chiar și IDE-urile
specializate (medii de dezvoltare integrate) te pot ajuta dacă te folosești de sine.
Eul în Python este echivalent cu acest pointer în C++ și cu referința acest în Java și C#.
Trebuie să vă întrebați cum Python îi dă valoare sinelui și de ce nu trebuie să îi acordați o valoare. Un exemplu o va clarifica.
Să presupunem că aveți o clasă numită Myclass și o instanță a acestei clase numită myobject . Când apelați o metodă pe acest
obiect, cum ar fi myobject.method(arg1, arg2) , Python o convertește automat în MyClass.method(myobject, arg1, arg2) -
despre asta este vorba despre sinele special.
Aceasta înseamnă, de asemenea, că, dacă ai o metodă care nu acceptă argumente, atunci trebuie să aibă totuși un argument: sinele.
Clase
76
Programare orientată pe
obiecte
Cea mai simplă clasă posibilă este prezentată în exemplul următor (salvați ca oop_simplestclass.py ).
Productie:
Clasa de persoane :
aproba # Un bloc gol
$python oop_simplestclass.py
p = Persoana()
<instanța principală a .Person at 0x10171f518>
print(p)
Cum functioneazã
Creăm o nouă clasă folosind declarația clasei și numele clasei. Acesta este urmat de un bloc de instrucțiuni indentate care
formează corpul clasei. În acest caz, avem un bloc gol care este indicat de instrucțiunea pass.
Apoi, creăm un obiect/instanță a acestei clase folosind numele clasei urmat de o pereche de paranteze. (Vom afla mai multe
despre instanțiere în secțiunea următoare.) Pentru verificarea noastră, confirmăm tipul de variabilă prin simpla imprimare. Ne
spune că avem o instanță a clasei Person în modulul principal.
Rețineți că este tipărită și adresa memoriei computerului în care este stocat obiectul dvs. Adresa va avea o valoare diferită pe
computer, deoarece Python poate stoca obiectul oriunde găsește spațiu.
Metode
Am discutat deja că clasele/obiectele pot avea metode precum funcțiile, cu excepția faptului că avem o variabilă suplimentară
proprie. Acum vom vedea un exemplu (salvați ca oop_method.py).
Productie:
Clasa de persoane :
def Spune salut ( auto ):
impresie( 'Bună, ce mai faci?' )
Cum
$ functioneazã
python oop_method.py
Bună, ce mai faci?
p = Persoană()
Aici vedem sinele în acțiune. Rețineți că metoda say_hi nu ia parametri, dar are în continuare self-ul în definiția funcției.
p.say_hi()
# Cele 2 rânduri de mai sus pot fi scrise
și ca # Person(). Spune bună()
The in aceea metodă
Există multe nume de metode care au o semnificație specială în clasele Python. Vom vedea sensul în asta
metoda acum.
77
Programare orientată pe
obiecte
Metoda este executată de îndată ce un obiect al unei clase este instanțiat (adică creat). Metoda este utilă pentru realizarea
in aceea niste
inițializarea (adică trecerea valorilor inițiale obiectului dvs.) pe care doriți să o faceți cu obiectul dvs. Observați subliniarile duble atât
la începutul cât și la sfârșitul numelui.
Productie:
Clasa de persoane :
def in that ( self,
name ): self.name
Cum
$ functioneazã
python=oop_init.py
nume
Bună, numele meu este
Aici,Swaroop
definim metoda
def Spune init luând
salut un ):
( auto nume de parametru (împreună cu eul obișnuit). Aici, pur și simplu creăm un câmp nou numit și
print(
nume. Rețineți 'Bună,
că acestea suntmădouă
numesc' , self.name)
variabile diferite, deși ambele sunt numite „nume”. Nicio problemă deoarece notația punctată
self.name înseamnă că există ceva numit „nume” care face parte din obiectul numit „self”, iar celălalt nume este o variabilă locală.
p = Person( 'Swaroop' )
Deoarece precizăm în mod explicit la ce nume ne referim, nu există confuzie.
p.say_hi()
# Cele 2 rânduri de mai sus pot fi scrise
Când
șicreăm
ca # oPersoană
nouă instanță p, a claseiSpune
(„Swaroop”). Person, facem acest lucru folosind numele clasei, urmat de argumentele din paranteze: p
bună()
= Person('Swaroop').
Nu denumim în mod explicit metoda init. Acesta este sensul special al acestei metode.
Acum, putem folosi câmpul self.name în metodele noastre, ceea ce este demonstrat în metoda say_hi.
Există două tipuri de câmpuri: variabile de clasă și variabile obiect, care sunt clasificate în funcție de faptul dacă clasa sau,
respectiv, obiectul deține variabilele.
Variabilele de clasă sunt partajate: toate instanțele acelei clase le pot accesa. Există o singură copie a variabilei de clasă și
atunci când orice obiect face o modificare la o variabilă de clasă, toate celelalte instanțe vor vedea această schimbare.
Variabilele obiect sunt proprietatea fiecărui obiect/instanță individuală a clasei. În acest caz, fiecare obiect are propria copie a
câmpului
adică nu sunt partajate și nu au legătură în niciun fel cu câmpul cu același nume într-o altă instanță. Un exemplu va face acest
lucru ușor de înțeles (salvați ca oop_objvar.py):
Clasa de robot :
"" "Reprezintă un robot, cu un nume." ""
78
Programare orientată pe
obiecte
Robot.populație - = 1
Dacă Robot.population == 0 :
print( "{} a fost ultimul". . format (self.name))
else :
print( „Există încă {: d} roboți care rulează”. . format
(Robot.population))
@classmethod
def Câte ( cls ):
"" "Tipărește populația actuală." ""
print( „Avem {: d} roboți”. . format (populație clasificată))
Productie:
$ python oop_objvar.py
(Inițializarea R2-D2)
Salutări, profesorii îmi spun R2-
D2. Avem 1 roboți.
(Inițializarea C-3PO)
Salutări, profesorii mei îmi spun
C-3PO. Avem 2 roboți.
79
Programare orientată pe
obiecte
Avem 0 roboți.
Cum functioneazã
Acesta este un exemplu lung, dar ajută la demonstrarea naturii variabilelor de clasă și obiect. Aici, aparține
populati
Robot
clasa și, prin urmare, este o variabilă de clasă. Variabila nume aparține obiectului (alocată folosind self) și, prin urmare, este o
variabilă obiect.
Prin urmare, ne referim la variabila clasa populației ca Robot.population și nu ca self.population. Ne referim la numele
variabilei obiectului folosind notația self.name din metodele acelui obiect. Amintiți-vă această diferență simplă între variabilele
de clasă și obiect. De asemenea, rețineți că o variabilă obiect cu același nume ca o variabilă de clasă va ascunde variabila de
clasă.
În loc de Robot.population , am fi putut folosi și self. clasa .populaţie deoarece fiecare obiect se referă la clasa sa prin sine.
atribut de clasă .
How_many este de fapt o metodă care aparține clasei și nu obiectului. Aceasta înseamnă că îl putem defini ca a
metoda de clasă sau o metodă statică, în funcție de faptul dacă trebuie să știm din ce clasă facem parte. Deoarece ne referim la o
variabilă de clasă, să folosim metoda clasei .
Vă puteți imagina că decoratorii sunt o comandă rapidă pentru a apela o funcție wrapper (adică o funcție care „împachetează” o
altă funcție, astfel încât să poată face ceva înainte sau după funcția internă), așa că aplicarea decoratorului @classmethod este la fel
ca și apelarea:
how_many = metoda clasei (Câte)
Rețineți că metoda init este folosită pentru a inițializa instanța Robot cu un nume. În această metodă, creștem
populația numără pe rând, deoarece mai avem un robot care este adăugat. De asemenea, rețineți că valorile
self.name sunt specifice fiecărui obiect, indicând natura variabilelor obiectului.
Amintiți-vă să faceți referire la variabile și metode ale aceluiași obiect folosind numai sine . Aceasta se numește referință de atribut.
În acest program, vedem și utilizarea docstring-urilor pentru clase și metode. Putem accesa șirul document al clasei în timpul
execuției folosind Robot. Doc și metoda docstring precum Robot.say_hi. Doc
Toți membrii clasei sunt publici. O excepție: dacă utilizați membri de date cu nume care folosesc prefixul dublu de subliniere, cum ar
fi
privatevar , Python folosește name manngling pentru a o face efectiv o variabilă privată.
Prin urmare, convenția urmată este că orice variabilă folosită numai în cadrul clasei sau al obiectului trebuie să înceapă cu un
caracter de subliniere și toate celelalte nume sunt publice și pot fi folosite de alte clase/obiecte. Amintiți-vă că aceasta este doar o
convenție și nu este impusă de Python (cu excepția prefixului dublu de subliniere).
Toți membrii clasei (inclusiv membrii de date) sunt publici și toate metodele sunt virtuale în Python.
Moştenire
Unul dintre principalele beneficii ale programării orientate pe obiecte este reutilizarea codului, iar una dintre modalitățile prin care se
realizează acest lucru este prin
mecanism de moștenire . Moștenirea poate fi imaginată cel mai bine prin implementarea unei relații de tip și subtip între clase.
Să presupunem că doriți să scrieți un program care să țină evidența profesorilor și studenților la o universitate. Au unele
caracteristici comune, cum ar fi numele, vârsta și adresa. Au, de asemenea, caracteristici specifice precum salariul, cursurile și
licența pentru profesori și note și taxe pentru studenți.
80
Programare orientată pe
obiecte
Puteți crea două clase independente pentru fiecare tip și le puteți procesa, dar adăugarea unei noi caracteristici comune ar
însemna adăugarea ambelor clase independente. Acest lucru devine rapid dificil de gestionat.
O modalitate mai bună ar fi să creați o clasă comună numită SchoolMember și apoi să faceți ca profesorul și cursurile elevilor să
moștenească din această clasă, adică vor deveni subtipuri de acest tip (clasă) și apoi putem adăuga caracteristici specifice acestor
subtipuri. .
Există multe avantaje ale acestei abordări. Dacă adăugăm/modificăm orice funcționalitate în SchoolMember, aceasta se reflectă
automat și în subtipuri. De exemplu, puteți adăuga un câmp nou pentru cartea de identitate pentru profesori și studenți, adăugându-
l pur și simplu la clasa SchoolMember. Cu toate acestea, modificările aduse subtipurilor nu afectează alte subtipuri. Un alt avantaj
este că vă puteți referi la un obiect profesor sau elev ca obiect SchoolMember, ceea ce ar putea fi util în anumite situații, cum ar fi
numărarea numărului de membri ai școlii. Acest lucru se numește polimorfism atunci când un subtip poate fi înlocuit în orice
situație în care este așteptat un tip părinte, adică obiectul poate fi tratat ca o instanță a clasei părinte.
Rețineți, de asemenea, că reutilizam codul din clasa părinte și nu trebuie să-l repetăm în diferite clase, așa cum ar fi trebuit să
facem dacă am fi folosit clase independente.
Clasa SchoolMember în această situație este cunoscută ca clasa de bază sau super-clasa. Clasele Profesor și Student sunt numite
clase sau subclase derivate.
profesor de clasă (
SchoolMember ):
„Reprezintă un profesor” .
def în aceea ( eu, nume, vârstă,
salariu ): Membru al școlii.
init(self, name, age) self.salary =
salariu
print( '(Profesor inițializat: {})' . format (self.name))
81
Programare orientată pe
obiecte
member.tell()
Productie:
Cum functioneazã
$python oop_subclass.py
(Membru al școlii inițializat: doamna
Pentru a folosi moștenirea,
Shrividya) (Profesorulspecificăm numeledoamna
inițializat: claselor de bază într-un tuplu după numele clasei în definiția clasei (de exemplu, clasa
Shrividya) (Membru al școlii inițializat:
Profesor(SchoolMember)). În continuare, observăm că metoda init a clasei de bază este apelată în mod explicit folosind metoda self
Swaroop) (Studentul inițializat: Swaroop)
variabilă astfel încât să putem inițializa partea clasei de bază a unei instanțe din subclasă. Acest lucru este foarte important de
reținut:
Nume:deoarece
„Doamnadefinim o metodă
Shrividya” init în „40”
Vârsta: subclasele Teacher și Student, Python nu apelează automat constructorul clasei de bază
Salariu:
„30000” Nume: „Swaroop” Vârsta: „25” Puncte: „75”
SchoolMember, trebuie să o numiți în mod explicit singur.
Dimpotrivă, dacă nu am definit o metodă init într-o subclasă, Python va apela automat constructorul clasei de bază.
Deși am putea trata instanțe de Teacher sau Student așa cum am face cu o instanță de SchoolMember și am putea accesa metoda
tell a SchoolMember prin simpla introducere a Teacher.tell sau Student.tell, definim în schimb o altă metodă tell în fiecare
subclasă (folosind SchoolMember pentru o parte) pentru a adapta la acea subclasă. Pentru că am făcut asta, când scriem
Teacher.tell Python folosește metoda tell pentru acea subclasă față de superclasă. Cu toate acestea, dacă nu am avea o metodă tell
în subclasă, Python ar folosi metoda tell în superclasă. Python începe întotdeauna să caute metode în tipul actual de subclasă, iar
dacă nu se găsește nimic, începe să caute metodele din clasele de bază ale subclasei, una câte una în ordinea în care sunt
specificate în tuplu (aici avem doar 1 clasa de baza,
O notă despre terminologie: dacă mai multe clase sunt listate în tuplu de moștenire, se numește moștenire multiplă.
Parametrul end este utilizat în funcția de imprimare din metoda tell() a superclasei pentru a imprima o linie și a permite
următoarei imprimări să continue pe aceeași linie. Acesta este un truc pentru a face imprimarea să nu imprime un simbol \n
(linie nouă) la sfârșitul tipăririi.
rezumat
Am explorat acum diferitele aspecte ale claselor și obiectelor, precum și diversele terminologii asociate acestora. Am văzut, de
asemenea, beneficiile și dificultățile programării orientate pe obiecte. Python este foarte orientat pe obiecte și înțelegerea cu atenție
a acestor concepte vă va ajuta foarte mult pe termen lung.
În continuare, vom învăța cum să gestionăm intrarea/ieșirea și cum să accesăm fișierele în Python.
82
Intrare și ieșire
Intrare și ieșire
Vor exista situații în care programul dumneavoastră trebuie să interacționeze cu utilizatorul. De exemplu, veți dori să luați
informații de la utilizator și apoi să imprimați câteva rezultate. Putem realiza acest lucru folosind funcția input() și respectiv
funcția print.
Pentru ieșire, putem folosi și diferitele metode ale clasei str(string). De exemplu, puteți folosi metoda rjust pentru a obține un
șir care este justificat la dreapta la o lățime specificată. Vezi ajutor (str) pentru mai multe detalii.
Un alt tip comun de intrare/ieșire este gestionarea fișierelor. Capacitatea de a crea, citi și scrie fișiere este esențială pentru multe
programe și vom explora acest aspect în acest capitol.
Intrarea utilizatorului
Salvați acest program ca io_input.py :
Productie:
def counter ( text ):
returnează
text[::- 1 ]
Cum functioneazã
$python3 io_input.py
Introduceți text:
Folosim funcția de tăiere(pentru
domnule
def is_palindrome a inversa textul. Am văzut deja cum putem face tăieturi de secvență folosind codul seq [a:b]
text ):
Nu, returnează
nu este un text
începând de la pozițiapalindrom
== înapoi(text)
a la poziția b. Putem oferi și un al treilea argument care determină pasul prin care se face tăierea. Pasul
implicit este 1,io_input.py
$python3 deci returnează o bucată continuă de text. Făcând un pas negativ, adică -1 va returna textul înapoi.
Introduceți text: (
ceva = contribuție
Funcția input() ia un
doamnă
"Introduceți șir ca" argument
text: ) Dacă și îl afișează utilizatorului. Apoi așteptați ca utilizatorul să tasteze ceva și apăsați tasta Retur.
Odată
Da,ceeste
utilizatorul a introdus și a apăsat tasta Retur, funcția input() va returna textul introdus de utilizator.
un palindrom
este_palindrom (ceva):
print( "Da, este un palindrom"
$
Luăm python3
acel text
) else : și îl inversăm. Dacă textul original și textul inversat sunt același, atunci textul este un palindrom .
io_input.py
83
Intrare și ieșire
Fișiere
Puteți deschide și utiliza fișiere pentru a citi sau a scrie prin crearea unui obiect din clasa de fișiere și folosind citirea, readline sau
scrieți metode adecvate pentru a citi sau a scrie în fișier. Capacitatea de a citi sau scrie în fișier depinde de
modul pe care l-ați specificat pentru deschiderea fișierului. Apoi, în sfârșit, când ați terminat cu fișierul,
apelați metoda close pentru a-i spune lui Python că am terminat de folosit fișierul.
Productie:
poem = '' '\
Programarea este
distractivă când
Cum functioneazã
$python3
munca esteio_using_file.py
Programarea
terminată este
Rețineți
Dacă că putem
distractivă
vrei ca crea un nou
și munca taobiect
să fiefișier pur și simplu utilizând metoda deschisă. Deschidem (sau îl creăm dacă nu există deja)
acestCând lucrarea este
distractivă:
fișier terminată
folosește
folosind funcția Python!încorporată și specificând numele fișierului și modul în care dorim să deschidem fișierul.
de deschidere
Dacă
'' ' vrei ca și munca ta să fie
Modul poate fi un mod folosește
distractivă: de citire ('r'), un mod de scriere ('w') sau un mod de adăugare ('a'). De asemenea, putem preciza dacă citim,
Python!
# Deschis pentru „scriere”
f = deschis (
'poem.txt' , 'w' ) #
Scrie text în fișier
f.write (poem)
# Închideți
fișierul
f.close()
84
Intrare și ieșire
scriere sau adăugare în modul text ('t') sau modul binar ('b'). De fapt, există mult mai multe moduri disponibile și
ajutor (deschis) vă va oferi mai multe detalii despre ele. În mod implicit, open() consideră fișierul ca fiind un
fișier text și îl deschide în modul „read”.
În exemplul nostru, mai întâi deschidem/creăm fișierul în modul de scriere a textului și folosim metoda de scriere a obiectului
fișier pentru a scrie poemul nostru variabil șir în fișier și apoi închidem fișierul.
Apoi, redeschidem același fișier pentru citire. Nu trebuie să specificăm un mod deoarece „citește fișierul text” este modul
implicit. Citim în fiecare linie a fișierului folosind metoda readline într-o buclă. Această metodă returnează o linie completă care
include caracterul newline la sfârșitul liniei. Când este returnat un șir gol, înseamnă că am ajuns la sfârșitul fișierului și am ieșit
din buclă.
Putem vedea în rezultatul nostru readline că acest program a scris și a citit noul nostru fișier poem.txt.
Murat
Python oferă un modul standard numit pickle pe care îl puteți folosi pentru a stoca orice obiect Python simplu într-un fișier și
apoi pentru a-l recupera mai târziu. Aceasta se numește stocarea persistentă a obiectului.
Productie:
import murat
85
Intrare și ieșire
Unicode
Până acum, când am scris și am folosit șiruri de caractere, sau am citit și scris într-un fișier, am folosit doar caractere englezești
simple. Atât caracterele englezești, cât și cele non-engleze pot fi reprezentate în Unicode (consultați articolele de la sfârșitul
acestei secțiuni pentru mai multe informații), iar Python 3 stochează implicit variabile șir (gândiți-vă la tot textul pe care îl scriem
folosind ghilimele simple, duble sau triple ) în Unicode.
NOTĂ: Dacă utilizați Python 2 și dorim să putem citi și scrie în alte limbi decât engleza, trebuie să folosim tipul Unicode
și totul începe cu caracterul u, de exemplu, u „hello world” .
Când datele sunt trimise prin Internet, trebuie să le trimitem în octeți... ceva ce computerul tău înțelege cu ușurință. Regulile
>>> „hello
pentru traducerea
world” „helloUnicode (care este ceea ce folosește Python atunci când stochează un șir) în octeți se numesc codificare. O
world”populară de utilizat este UTF-8. Putem citi și scrie UTF-8 folosind un argument cheie simplu în funcția noastră
codificare
>>> tastați („bună ziua, lume”)
deschisă.
<clasa „str”>
>>>
# tu „hello
codificare
Cum functioneazã
world”
= utf-8„hello
world” io
import
Folosim io.open și apoi folosim argumentul de codificare în prima instrucțiune deschisă pentru a codifica mesajul și apoi din
noufîn=a io.
douadeschide ( "abc.txt" , "wt" ,
instrucțiune deschisă când decodăm mesajul. Rețineți că ar trebui să folosim codificarea în declarația deschisă
codificare = "utf-8" ) f. scrie( u „Imaginați-
numai
vă când
aici suntem
o altă în moduldecât
limbă text. engleza” ) f.close()
Ori text
de câte
= ori
io.scriem un program
deschide care utilizează
( "abc.txt" literale"utf-
, codificare= Unicode (punând au înaintea șirului) așa cum am folosit anterior, trebuie
să ne
8"asigurăm că Python-ului
) ).read() print(text)i se spune că programul nostru folosește UTF-8 și trebuie să punem #encoding = utf -8 comentarii
în partea de sus a programului nostru.
„Minimul absolut pe care fiecare dezvoltator de software ar trebui să-l cunoască în mod absolut și pozitiv despre Unicode și
seturile de caractere” Python Unicode Howto
Discuție pragmatică Unicode de Nat Batchelder
rezumat
Am discutat despre diferite tipuri de intrare/ieșire, despre manipularea fișierelor, despre modulul pickle și despre
86
Intrare și ieșire
1.
Utilizați un tuplu (puteți găsi o listă cu toate semnele de punctuație aici ) pentru a reține toate caracterele interzise, apoi utilizați
! ...).
test de apartenență pentru a determina dacă un personaj trebuie eliminat sau nu, adică interzis = (,,, ? . ↩
87
Excepții
Excepții
Excepțiile apar atunci când în programul dumneavoastră apar situații excepționale. De exemplu, ce se întâmplă dacă veți citi un
fișier și fișierul nu există? Sau ce se întâmplă dacă l-ați șters din greșeală când programul rula? Aceste situații sunt tratate prin
excepții.
În mod similar, ce se întâmplă dacă programul dvs. are unele declarații nevalide? Acest lucru este gestionat de Python, care ridică
mâna și vă spune că a apărut o eroare.
Greșeli
Luați în considerare un simplu apel la funcția de imprimare. Ce se întâmplă dacă scriem greșit print ca Print? Vă rugăm să rețineți
scrierea cu majuscule. În acest caz, Python
generează o eroare de sintaxă.
Rețineți că apare„Hello
>>> Print( o NameError
World”și)este tipărită și locația în care a fost detectată eroarea. Acesta este un handler de erori
Trace
pentru (apeluri
că această recente
eroare o face.plus
cele mai recente):
Fișierul „<stdin>” , linia 1 , în <modul>
NameError: numele „Print” nu este definit
Excepții
>>> print( "Bună lume" )
Bună lume
Vom încerca să citim intrarea utilizatorului. Introduceți primul rând de mai jos și apăsați tasta Enter. Când computerul vă
solicită să intrați, apăsați pe [ctrl-d] pe un Mac sau pe [ctrl-z] cu Windows și vedeți ce se întâmplă. (Dacă utilizați Windows și
nici una dintre opțiuni nu funcționează, puteți încerca [ctrl-c] în linia de comandă pentru a genera o eroare KeyboardInterrupt.)
Python aruncă o eroare numită EOFError, ceea ce înseamnă, practic, că a întâlnit un simbol de sfârșit de fișier (care este
>>> s = intrare ('Introduceți ceva ->')
reprezentat de ctrl-d)
Introduceți cevacând nu se aștepta
-> Traceback să îlmai
(cel vadă.
recent
ultimul apel): Fișier „<stdin>”, linia 1, în
<modul>
Tratarea excepțiilor
Putem gestiona excepțiile folosind instrucțiunea try..except. Practic, punem declarațiile noastre obișnuite în blocul try și toți
gestionanții noștri de erori în blocul except.
atentat, încercare :
text = input ( 'Introduceți ceva ->' )
cu excepția EOFError:
print( 'De ce m-ai EOF?' ), cu excepția
KeyboardInterrupt:
print( Ati anulat operatia. )
88
Excepții
restul :
print( 'Ați introdus {}' . format (text))
Productie:
Cum
# functioneazã
Apăsați ctrl + d
$pythonexceptions_handle.py
Plasăm toate ceva
Introdu instrucțiunile
-> De cecare potEOF?
m-ai genera excepții/erori în blocul try și apoi plasăm handlere pentru erorile/excepțiile
corespunzătoare în clauza/blocul except. Clauza except poate gestiona o singură eroare sau excepție specificată sau o listă între
# Apăsați ctrl + c
paranteze de erori/excepții. Dacă nu sunt furnizate nume de erori sau excepții, acesta va gestiona toate erorile și excepțiile.
$pythonexceptions_handle.py
Introduceți ceva -> ^ C Ați anulat operația.
Rețineți că trebuie să existe cel puțin o clauză except asociată cu fiecare clauză de încercare. Altfel, ce rost mai are un bloc de
testare?
$ python exceptions_handle.py
Introduceți ceva -> Fără
Dacă nu se gestionează
excepții Introdus nicio
Fără eroare sau excepție, este apelat handlerul implicit Python, care pur și simplu oprește rularea
excepții
De asemenea, puteți avea o clauză else asociată cu un try..except block. Clauza else este executată dacă nu se aruncă nicio
excepție. În exemplul următor, vom vedea, de asemenea, cum să obținem obiectul excepție, astfel încât să putem prelua
informații suplimentare.
Generare excepție
Puteți genera excepții folosind instrucțiunea de ridicare furnizând numele erorii/excepției și obiectul excepție care trebuie
aruncat.
Eroarea sau excepția care poate fi ridicată trebuie să fie o clasă care trebuie să fie direct sau indirect o clasă derivată a excepției.
clasă.
atentat, încercare :
text = input ( 'Introduceţi ceva -
>' ) Dacă len (text) < 3 :
raise ShortInputException ( len
(text), 3 ) # Alte lucrări pot continua
ca de obicei aici
cu excepția EOFError:
print( 'De ce m-ai EOF?' ) cu excepția
ShortInputException ca de exemplu:
89
Excepții
restul :
print( „Nu a fost ridicată nicio excepție.” )
Productie:
Cum
$ functioneazã
python
exceptions_raise.py
Aici,Introduceți
creăm propriul
cevanostru
-> atip de excepție. Acest nou tip de excepție se numește ShortInputException. Are două domenii:
lung ShortInputException: intrareadate
care este lungimea intrării a fost 1 lungă,
și cel puțin de așteptat
care cel puțin
este lungimea 3
minimă așteptată de program.
$ python
În clauza except, menționăm clasa de eroare care trebuie stocată ca nume de variabilă pentru a deține obiectul de
exceptions_raise.py
eroare/excepție corespunzător. Acest lucru este analog cu parametrii și argumentele dintr-un apel de funcție. În cadrul acestei
Introduceți ceva -> abc
clauze de excepție, folosim lungimea și cel puțin câmpurile obiectului de excepție pentru a imprima un mesaj adecvat
utilizatorului.
Productie:
import sys
import time
$
f python
= exceptions_finally.py
Programarea este distractivă
Nici
Apăsați
unul ctrl + c acum
^C!! Ați anulat citirea fișierului.
încerc
ați :
f = deschis ( „poem.txt” )
# Limbajul nostru obișnuit
de citire a fișierelor Timp
adevărat :
line =
f.readline()
Dacă len (linie)
== 0 :
break
print(line, end
= '' )
sys.stdout.flush
()
print( "Apăsați ctrl + c acum" )
# Pentru a vă asigura că funcționează
în timpul somnului ( 2 )
cu excepția IOError:
90
Excepții
Cum functioneazã
Facem lucrurile obișnuite de citire a fișierelor, dar am introdus în mod arbitrar somnul timp de 2 secunde după imprimarea fiecărei
linii folosind
Funcția de timp de somn pentru a face programul să ruleze lent (Python este foarte rapid din fire). Când programul încă
rulează, apăsați
Observați că excepția KeyboardInterrupt este aruncată și programul se închide. Cu toate acestea, înainte de ieșirea programului,
clauza finally este executată și obiectul fișier este întotdeauna închis.
Rețineți că o variabilă căreia i se atribuie o valoare 0 sau Niciunul sau o variabilă care este o secvență sau o colecție goală este
considerată falsă
de Python. De aceea putem folosi if f: în codul de mai sus.
De asemenea, rețineți că folosim sys.stdout.flush() după tipărire , astfel încât să se imprime imediat pe ecran.
Declarația cu
Achiziționarea unei resurse în blocul try și ulterior eliberarea resursei în blocul final este un model comun. Prin urmare, există
și o declarație with care permite ca acest lucru să se facă curat:
Salvați ca exceptions_using_with.py :
Cum
cufunctioneazã
deschis ( „poem.txt” )
ca F: pe rând în F:
Ieșirea ar trebui să fie aceeași
print(line, endca
= în
''exemplul
) anterior. Diferența aici este că folosim funcția deschisă cu con
declarație: lăsăm închiderea dosarului să se facă automat cu deschidere.
Ceea ce se întâmplă în culise este că există un protocol folosit de declarația with. Obține obiectul returnat de
declarație deschisă , să-i numim „fișierul” în acest caz.
Întotdeauna apelează fișierul. introduceți funcția înainte de a începe blocul de cod de sub ea și apelează întotdeauna fișierul.
Ieșire
Deci codul pe care l-am fi scris într-un bloc ar trebui în sfârșit să fie îngrijit automat de metoda de ieșire. Acesta este ceea ce
ne ajută să evităm să folosim în mod repetat declarațiile explicite try..finally.
Discuții suplimentare despre acest subiect depășesc scopul acestei cărți, deci consultați PEP 343 pentru o explicație completă.
rezumat
Am discutat despre utilizarea declarațiilor try..except și try..finally. Am văzut cum să ne creăm propriile tipuri de excepții și,
de asemenea, cum să ridicăm excepții.
91
Biblioteca
standard
Biblioteca standard
Biblioteca standard Python conține un număr mare de module utile și face parte din fiecare instalare standard Python. Este
important să vă familiarizați cu biblioteca standard Python, deoarece multe probleme pot fi rezolvate rapid dacă sunteți
familiarizat cu varietatea de lucruri pe care aceste biblioteci le pot face.
Vom explora câteva dintre modulele utilizate frecvent în această bibliotecă. Puteți găsi detalii complete despre toate modulele din
biblioteca standard Python în secțiunea „Referință la bibliotecă” din documentația care vine cu instalarea dumneavoastră Python.
ATENȚIE: Dacă vi se pare că subiectele din acest capitol sunt prea avansate, puteți sări peste acest capitol. Cu toate
acestea, vă recomand să reveniți la acest capitol atunci când vă simțiți mai confortabil să programați cu Python.
modulul sys
Modulul sys conține funcții specifice sistemului. Am văzut deja că lista sys.argv conține argumentele liniei de comandă.
Să presupunem că vrem să verificăm versiunea software-ului Python utilizat, modulul sys ne oferă aceste informații.
Cum functioneazã
>>> import sys
>>> sys.version_info
Modulul sys are un tuplu
sys.version_info version_info
(major care ne= oferă
= 3 , minor informațiile
6 , micro = 0 , despre versiune.=Prima
releaselevel intrare
'final' este versiunea
, serial = 0 ) principală.
>>> sys.version_info.major ==
Putem extrage aceste informații pentru utilizare.
3 adevărat
Conectare la modul
Ce se întâmplă dacă ați dori să aveți câteva mesaje de depanare sau mesaje importante de stocat undeva, astfel încât să puteți
verifica dacă programul dvs. a rulat așa cum v-ați aștepta? Cum „salvați undeva” aceste mesaje? Acest lucru poate fi realizat
folosind modulul de înregistrare.
Salvați ca stdlib_logging.py :
import os
import
platform
import Login
logging.basicConfig (
92
Biblioteca
standard
nivel = logging.DEBUG,
format = '%(asctime)s:%(levelname)s:%(message)s'
, filename = log_file,
filemode = 'w' ,
)
Productie:
Cum functioneazã
$ cat /Utilizatori/swa/test.log
2014-03-29 09:27:36,660: DEBUG: Începutul
Folosim trei module din biblioteca standard: modulul de sistem de operare pentru a interacționa cu sistemul de operare, platforma
programului 2014-03-29 09:27:36,660: INFO: A face
modul
cevapentru a obține informații despre platformă, adică sistemul de operare și modul de înregistrare pentru a înregistra informații.
Mai întâi, verificăm ce sistem de operare folosim verificând șirul returnat de platform.platform() (pentru mai multe informații,
vezi platforma de import; ajutor (platform)). Dacă este Windows, aflăm discul de pornire, folderul de pornire și numele fișierului
în care dorim să stocăm informațiile. Punând aceste trei părți împreună, obținem locația completă a fișierului. Pentru alte
platforme, trebuie să cunoaștem doar folderul principal al utilizatorului și să obținem locația completă a fișierului.
Folosim funcția os.path.join() pentru a uni aceste trei părți ale locației. Motivul pentru a utiliza o funcție specială în loc de a
adăuga pur și simplu șirurile de caractere este că această funcție se va asigura că întreaga locație se potrivește cu formatul
așteptat de sistemul de operare. Rețineți că metoda join() pe care o folosim aici, care face parte din modulul OS, este
diferită de metoda șir join() pe care am folosit-o în altă parte în această carte.
Configuram modulul de logare pentru a scrie toate mesajele într-un anumit format în fișierul pe care l-am specificat.
În sfârșit, putem pune mesaje care sunt destinate depanării, informații, avertismente sau chiar mesaje critice. Odată ce
programul a rulat, putem verifica acest fișier și vom ști ce s-a întâmplat în program, deși nu i-au fost afișate informații
utilizatorului care rulează programul.
Cea mai bună modalitate de a explora în continuare biblioteca standard este să citiți cartea excelentă a lui Doug Hellmann. Seria
Python Module of the Week (disponibilă și sub formă de carte ) și citirea documentației Python .
rezumat
Am explorat câteva dintre caracteristicile multor module din biblioteca standard Python. Este foarte recomandat să răsfoiți
documentația Python Standard Library pentru a vă face o idee despre toate modulele disponibile.
93
Biblioteca
standard
Mai jos vom acoperi diverse aspecte ale Python care vor face turul nostru din Python mai complet.
94
Mai
depar
Mai departe
Până acum am acoperit majoritatea aspectelor diverse ale Python pe care le veți folosi. În acest capitol, vom acoperi câteva
aspecte care ne vor face cunoștințele despre Python mai complete.
Rețineți că utilizarea
>>> def a, b = <o expresie>
get_error_details (): interpretează rezultatul expresiei ca un tuplu cu două valori. Aceasta
... returnare ( 2 , „detalii” )
înseamnă,
... de asemenea, că cea mai rapidă modalitate de a schimba două variabile în Python este:
>>> errnum, errstr = get_error_details()
>>>
>>> a =25 ; b = 8
eroare
>>> a,
errstr
b (
„detalii”
5 ,
8 )
>>> a, b = b, a
Metode speciale
Există anumite metode, cum ar fi metodele init și del, care au o semnificație specială în clase.
Sunt folosite metode speciale pentru a imita anumite comportamente de tipuri încorporate. De exemplu, dacă vrei să folosești
operația de indexare x[key] pentru clasa ta (la fel cum o folosești pentru liste și tupluri), atunci tot ce trebuie să faci este să
implementezi metoda getitem() și treaba ta este gata. Dacă vă gândiți bine, asta este ceea ce face Python pentru clasa listă în sine!
Câteva metode speciale utile sunt enumerate în tabelul următor. Dacă doriți să cunoașteți toate metodele speciale, consultați manualul
.
Această metodă este apelată chiar înainte ca obiectul nou creat să fie returnat pentru utilizare.
a (de sine)
Apelat chiar înainte ca obiectul să fie distrus (care are un timp imprevizibil, așa că evitați să îl utilizați)
str (auto)
Este numit atunci când folosim funcția de imprimare sau când este folosit str().
sunt (eu, altul)
Apelat atunci când este utilizat operatorul mai mic decât (<). În mod similar, există metode speciale pentru toți operatorii
(+, >, etc.)
obține obiect (self, key)
95
Mai
depar
len (eu)
Apelat atunci când funcția încorporată len() este utilizată pentru obiectul flux.
Rețineți că declarația unică este utilizată în loc și nu ca un bloc separat. Deși puteți utiliza acest lucru pentru a face programul dvs.
>>> steag = Adevărat
mai>>>
mic,If
vă flag:
recomand insistent
print ( 'Da'să)evitați această metodă de comandă rapidă, cu excepția verificării erorilor, în principal pentru că
va fi...
mult mai ușor să adăugați o declarație suplimentară dacă utilizați indentarea corectă.
Da
Forme lambda
O instrucțiune lambda este utilizată pentru a crea noi obiecte funcție. În esență, lambda ia un parametru urmat de o singură
expresie. Lambda devine corpul funcției. Noua funcție returnează valoarea acestei expresii.
Productie:
puncte = [{ 'X' : 2 ,
'y' : 3 },
{ „X” : 4 , „y” : 1 }]
Cum functioneazã
points.sort(key
$python = lambda
more_lambda.py self:
self[ 'y'
[{'y': 1, ]) print(puncte)
'x': 4}, {'y': 3, 'x': 2}]
Rețineți că metoda de sortare a unei liste poate lua un parametru cheie care determină modul în care este sortată lista (de obicei
știm doar ordinea crescătoare sau descrescătoare). În cazul nostru, dorim să facem o sortare personalizată și pentru asta trebuie
să scriem o funcție. În loc să scriem un bloc def separat pentru o funcție care va fi folosită numai în acest loc, folosim o
expresie lambda pentru a crea o nouă funcție.
Înțelegerea listei
Listele de înțelegere sunt folosite pentru a obține o nouă listă dintr-o listă existentă. Să presupunem că aveți o listă de numere și
doriți să obțineți o listă corespunzătoare cu toate numerele înmulțite cu 2 numai atunci când numărul în sine este mai mare decât
2. Listele de înțelegere sunt ideale pentru astfel de situații.
panglică = [ 2 , 3 , 4 ]
listtwo = [ 2 *I pentru I în listone dacă i > 2 ]
96
Mai
depar
Productie:
Cum functioneazã
$python more_list_comprehension.py
[6, 8]
Aici, derivăm o nouă listă prin specificarea manipulării de efectuat (2 * i) atunci când o anumită condiție este îndeplinită (dacă i
> 2). Vă rugăm să rețineți că lista originală rămâne neschimbată.
Avantajul utilizării listelor de înțelegere este că reduce cantitatea de cod standard necesară atunci când folosim bucle pentru a
procesa fiecare element al unei liste și a-l stoca într-o listă nouă.
Deoarece avem un prefix * în variabila args, toate argumentele suplimentare transmise funcției sunt stocate în args ca un tuplu. În
>>> def powersum ( putere, * argumente ):
cazul în care o
... '' 'Returnează suma fiecărui argument ridicat la puterea specificată.' ''
** Prefix în schimb, parametrii suplimentari ar fi considerați perechi cheie/valoare ale unui dicționar.
... total = 0
... pentru eu in argumente:
... total + = pow (sine, putere)
Declarația
...
...
de afirmație
retur complet
Declarația trebuie
>>> lista meafolosită cu prudență.
= [ „Articol” ] De cele mai multe ori, este mai bine să prindeți excepții, fie să gestionați problema, fie să
>>> assert len (mylist) >= 1
afișați un mesaj de eroare utilizatorului și apoi să ieșiți.
>>>
mylist.pop()
„Articol”
>>> assert len (lista mea) > = 1
Trace (apeluri recente plus cele
mai recente):
97
Mai
depar
Decoratori
Decoratorii sunt o comandă rapidă pentru a aplica funcțiile de ambalare. Acest lucru este util pentru „ajustarea” funcționalității cu
același cod din nou și din nou. De exemplu, mi-am creat un decorator de reîncercări pe care îl pot aplica oricărei funcții și dacă se
aruncă vreo excepție în timpul unei rulări, se reîncearcă, de maximum 5 ori și cu o întârziere între fiecare reîncercare. Acest lucru
este util în special pentru situațiile în care încercați să efectuați un apel de rețea către un computer la distanță:
Productie:
time import sleep din
functools import wraps
import log
$python more_decorator.py
logging.basicConfig()
Scrieți într-o bază de date sau efectuați un apel de rețea etc.
log = logging.getLogger( "rever" )
Acest lucru va fi reîncercat automat dacă se aruncă o
excepție. EROARE: reîncercați: 1/5 încercare eșuată:
((„O valoare proastă”,), {}) Traceback (cel mai recent
def rever ( F
ultimul apel):
):
Fișierul „more_decorator.py”, rândul 14, în
@ ambalaje
wrapper_function
(f) return f (* args, ** kwargs)
Fișierul „more_decorator.py”,
def wrapper_function rândul ):39,
( *args, **kwargs din
save_to_database
MAX_ATTEMPTS =generează
5 ValueError(arg)
ValueError: O valoare
încercare proastă ( 1 , MAX_ATTEMPTS
la distanță
Scrieți într-o
+ 1 bază de date sau
): încercați : efectuați un apel de rețea etc.
returnează f (*args,
**kwargs) cu excepția
excepției:
log.exception( „Încercarea %s/%s a eșuat: %s” ,
încercare,
MAX_ATTEMPTS,
(args, kwargs))
somn ( 10 * încercare)
log.critical „Toate %s încercările au eșuat: %s” ,
MAX_ATTEMPTS,
(argumente,
kwargs)) returnează
wrapper_function
contor = 0
@revizuire
def save_to_database ( arg ):
print( „Scrieți într-o bază de date sau efectuați un apel de rețea,
etc.” ) print( „Acest lucru va fi reîncercat automat dacă se aruncă
o excepție.” ) global counter
contor += 1
# Acest lucru va genera o excepție la primul apel
# Și va funcționa bine la al doilea apel (adică o
reîncercare) Dacă contorul < 2 :
ridicați ValueError(arg)
98
Mai
depar
Cum functioneazã
Vedea:
Biblioteca „Șase”
Portare la Python 3 Redux de Armin
Python 3 Experience de PyDanny
Ghidul oficial Django pentru migrarea la Python 3
Discuție despre Care sunt avantajele Python 3.x?
rezumat
Am mai acoperit câteva caracteristici ale lui Python în acest capitol și, totuși, nu am acoperit toate caracteristicile lui Python. Cu
toate acestea, în această etapă, am acoperit majoritatea a ceea ce veți folosi în practică. Acest lucru este suficient pentru a începe cu
orice program pe care urmează să îl creați.
99
Ce
urmeaza
Ce urmeaza
Dacă ați citit cu atenție această carte până acum și ați exersat scrierea multor programe, atunci trebuie să fi fost familiarizat cu
Python. Probabil ați creat câteva programe Python pentru a încerca lucrurile și, de asemenea, pentru a vă exercita abilitățile
Python. Dacă nu ai făcut-o deja, ar trebui. Întrebarea acum este „Ce urmează?”
Creați-vă propriul program de agendă de adrese din linia de comandă cu ajutorul căruia puteți să răsfoiți, să adăugați, să
modificați, să ștergeți sau să căutați contactele dvs., cum ar fi prietenii, familia și colegii și informațiile acestora, cum ar fi
adresa de e-mail și/sau numărul de telefon. Detaliile trebuie stocate pentru a fi recuperate ulterioare.
Acest lucru este destul de ușor dacă te gândești la toate lucrurile pe care le-am întâlnit până acum. Dacă tot doriți instrucțiuni
1
despre cum să procedați, iată un indiciu .
Odată ce puteți face acest lucru, puteți pretinde că sunteți un programator Python. Acum, trimite-mi imediat un e-mail prin care-mi
mulțumește pentru această carte grozavă ;-). Acest pas este opțional, dar recomandat. De asemenea, vă rugăm să luați în considerare
achiziționarea unui exemplar tipărit pentru a sprijini dezvoltarea continuă a acestei cărți.
Implementați comanda înlocuire . Această comandă va înlocui un șir cu altul din lista de fișiere furnizate.
Comanda de înlocuire poate fi atât de simplă sau de sofisticată pe cât doriți, de la simpla înlocuire de șiruri până la căutarea de
modele (expresii regulate).
Următoarele proiecte
Dacă vi se pare că programele de mai sus sunt ușor de creat, uitați-vă la această listă completă de proiecte și încercați să vă scrieți
propriile programe: https://github.com/thekarangoel/Projects#numbers (aceeași listă se află și pe Mega Projects List a lui Martyr2 ).
Vezi si:
Exemplu de cod
Cel mai bun mod de a învăța un limbaj de programare este să scrieți mult cod și să citiți mult cod:
Python Cookbook este o colecție extrem de valoroasă de rețete sau sfaturi despre cum să rezolvi anumite tipuri de
probleme folosind Python. Aceasta este o citire obligatorie pentru toți utilizatorii Python.
Modulul Python al săptămânii este un alt ghid excelent de citit obligatoriu pentru Standard Library .
Sfat
Ghidul autostopulului pentru
Python! Elementele stilului Python
Prezentare generală a Python
Cartea electronică „Writing Idiomatic Python” (plătit)
100
Ce
urmeaza
Videoclipuri
Dezvoltare web Full Stack cu Flask
PyVideo
Intrebari si raspunsuri
Întrebări frecvente oficiale Python:
Ce trebuie să faceți și ce nu trebuie
să faceți cu Python
Lista Norvig de întrebări rare la interviu Python
Q&A
Întrebări StackOverflow etichetate cu Python
Tutoriale
Caracteristici Python ascunse
Care este singurul fragment de cod Python/truc/etc pe care ai vrea să-l știi când înveți Python?
Lista completă de tutoriale Python de la Awaretek
Discuţie
Dacă aveți o problemă cu Python și nu știți cui să întrebați, atunci lista python-tutor este cel mai bun loc pentru a vă adresa
întrebarea.
Asigurați-vă că vă faceți temele încercând mai întâi să rezolvați singur problema și să puneți întrebări inteligente .
Știri
Dacă doriți să știți ce este mai recent în lumea Python, urmăriți planeta oficială Python .
Instalați biblioteci
Există o mulțime de biblioteci open source în Indexul pachetelor Python pe care le puteți utiliza în propriile programe.
Software de grafică
101
Ce
urmeaza
Să presupunem că doriți să vă creați propriile programe grafice folosind Python. Acest lucru se poate face folosind o bibliotecă GUI
(interfață grafică cu utilizatorul) cu legăturile sale Python. Legăturile sunt cele care vă permit să scrieți programe în Python și să
utilizați biblioteci care sunt scrise în C sau C++ sau în alte limbaje.
Kivy
http://kivy.org
PyGTK
Aceasta este legătura Python pentru setul de instrumente GTK+, care este fundația pe care este construit GNOME.
GTK+ are o mulțime de ciudatenii în utilizare, dar odată ce vă simțiți confortabil, puteți crea rapid aplicații GUI.
Interfața grafică pentru semnături Glade este indispensabilă. Documentația nu s-a îmbunătățit încă. GTK+ funcționează
bine pe GNU/Linux, dar portul său Windows este incomplet. Puteți crea atât software gratuit, cât și proprietar folosind
GTK+. Pentru a începe, citiți Tutorialul PyGTK .
PyQt
Aceasta este legarea Python pentru setul de instrumente Qt, care este fundația pe care este construit KDE. Qt este extrem
de ușor de utilizat și foarte puternic, mai ales datorită Qt Designer și a uimitoarei documentații Qt. Py Qt este gratuit dacă
doriți să creați software cu sursă deschisă (GPL) și trebuie să îl cumpărați dacă doriți să creați software cu sursă închisă
proprietar. Începând cu Qt 4.5, îl puteți folosi și pentru a crea software non-GPL. Pentru a începe, citiți despre PySide .
wxPython
Acestea sunt legăturile Python pentru setul de instrumente wxWidgets. wxP ython are o curbă de învățare asociată cu
asta. Cu toate acestea, este foarte portabil și rulează pe GNU/Linux, Windows, Mac și chiar pe platforme încorporate.
Există multe IDE-uri disponibile pentru wxPython, inclusiv designeri GUI, precum și SPE (Stani's Python Editor) și
wxGlade GUI Builder. Puteți crea software gratuit și proprietar folosind wxPython. Pentru a începe, citiți tutorialul
wxPython .
Din păcate, nu există un instrument GUI standard pentru Python. Vă sugerez să alegeți unul dintre instrumentele de mai sus în
funcție de situația dvs. Primul factor este dacă sunteți dispus să plătiți pentru a utiliza oricare dintre instrumentele GUI. Al doilea
factor este dacă doriți ca programul să ruleze numai pe Windows sau pe Mac și GNU/Linux sau pe toate. Al treilea factor, dacă
GNU/Linux este o platformă de alegere, este dacă sunteți utilizator KDE sau GNOME pe GNU/Linux.
Pentru o analiză mai detaliată și completă, consultați pagina 26 din „The Python Papers, Volume 3, Number 1” (PDF) .
Diverse implementări
De obicei, un limbaj de programare este format din două părți: limbajul și software-ul. O limbă este modul în care scrii ceva.
Software-ul este ceea ce rulează de fapt programele noastre.
Am folosit software-ul CPython pentru a ne rula programele. Este cunoscut sub numele de CPython deoarece este scris în limbajul
C și este interpretul clasic Python.
Există, de asemenea, un alt software care poate rula programele dvs. Python:
Jython
O implementare Pyt hon care rulează pe platforma Java. Aceasta înseamnă că puteți utiliza biblioteci și clase Java din
limbajul Python și invers.
IronPython
O implementare Python care rulează pe platforma .NET. Aceasta înseamnă că puteți utiliza biblioteci și clase .NET din
102
Ce
urmeaza
O implementare Python scrisă în Python! Acesta este un proiect de cercetare pentru a face mai rapidă și mai ușoară
îmbunătățirea interpretului, deoarece interpretul însuși este scris într-un limbaj dinamic (spre deosebire de limbaje statice,
cum ar fi C, Java sau C# în cele trei implementări de mai sus).
Există și altele precum CLPython - o implementare Python scrisă în Common Lisp și Brython , care este o implementare pe
deasupra unui interpret JavaScript, ceea ce ar putea însemna că puteți utiliza Python (în loc de JavaScript) pentru a vă scrie
programele browserului web ("Ajax").
Fiecare dintre aceste implementări are zonele sale specializate în care sunt utile.
rezumat
Am ajuns la sfârșitul acestei cărți, dar, după cum se spune, acesta este începutul sfârșitului! Acum sunteți un utilizator pasionat de
Python și, fără îndoială, gata să rezolvați multe probleme folosind Python. Puteți începe să vă automatizați computerul pentru a
face tot felul de lucruri inimaginabile anterior sau să vă scrieți propriile jocuri și multe altele. Așa că începe!
1. Creați o clasă pentru a reprezenta informațiile despre persoană. Utilizați un dicționar pentru a stoca obiecte persoane cu
numele lor ca cheie. Utilizați modulul pickle pentru a stoca obiecte în mod persistent pe hard disk. Utilizați metodele
103
Anexă: ATARĂ
Anexă: ATARĂ
NOTĂ: Vă rugăm să rețineți că această secțiune a fost scrisă în 2003, așa că unele dintre acestea vi se vor părea ciudate :-)
„Software gratuit/libre și open source”, pe scurt, SILK FLOJA se bazează pe conceptul de comunitate, care la rândul său se
bazează pe conceptul de partajare și, în special, de schimb de cunoștințe. FLOSS sunt libere de a utiliza, modifica și redistribui.
Dacă ați citit deja această carte, atunci sunteți deja familiarizat cu FLOSS, deoarece ați folosit Python tot timpul și Python este
un software open source.
Iată câteva exemple de FLOSS pentru a oferi o idee despre tipurile de lucruri pe care le poate crea partajarea și construirea unei
comunități:
Linux : Acesta este un nucleu FLOSS OS utilizat în sistemul de operare GNU/Linux. Linux, nucleul, a fost pionierat de Linus
Torvalds când era student. Android se bazează pe Linux. Orice site web pe care îl utilizați în aceste zile va rula în principal pe Linux.
Ubuntu : Aceasta este o distribuție condusă de comunitate, sponsorizată de Canonical și este cea mai populară distribuție
GNU/Linux de astăzi. Vă permite să instalați un număr mare de FLOSS disponibile și toate acestea într-un mod ușor de utilizat și
ușor de instalat. Cel mai bine, puteți reporni computerul și rula GNU/Linux de pe CD. Acest lucru vă permite să testați complet
noul sistem de operare înainte de a-l instala pe computer. Cu toate acestea, Ubuntu nu este un software complet gratuit; Conține
drivere proprietare, firmware și aplicații.
LibreOffice : Aceasta este o suită de birou excelentă, dezvoltată și condusă de comunitate, cu componente de redactare,
prezentare, foaie de calcul și desen, printre altele. Puteți chiar să deschideți și să editați fișierele MS Word și MS PowerPoint cu
ușurință. Funcționează pe aproape toate platformele și este un software cu sursă deschisă complet gratuit.
Mozilla Firefox : Acesta este cel mai bun browser web. Este incredibil de rapid și a câștigat laudele critice pentru caracteristicile sale
sensibile și impresionante. Conceptul de extensii vă permite să utilizați orice tip de plugin.
Mononucleoza infecțioasă : Aceasta este o implementare open source a platformei Microsoft .NET. Permite crearea și rularea
aplicațiilor .NET pe GNU/Linux, Windows, FreeBSD, Mac OS și multe alte platforme.
Apache Web Server : Acesta este popularul server web open source. De fapt, este cel mai popular server web de pe planetă!
Rulează aproape mai mult de jumătate din site-urile web existente. Da, este adevărat: Apache rulează mai multe site-uri web
decât toată concurența (inclusiv Microsoft IIS) la un loc.
VLC Player : Acesta este un player video care poate reda orice, de la DivX la MP3 la Ogg la VCD și DVD la... cine spune că
open source nu este distractiv? ;-)
Această listă are doar scopul de a vă oferi o idee scurtă: există mult mai multe FLOSS excelente, cum ar fi limbajul Perl, limbajul
PHP, sistemul de management al conținutului Drupal pentru site-uri web, serverul de baze de date PostgreSQL, jocul de curse
TORCS, KDevelop IDE, Xine... player de film, editor VIM, editor Quanta+, player audio Banshee, program de editare a
imaginilor GIMP,... Această listă ar putea continua pentru totdeauna.
Pentru cele mai recente știri din lumea FLOSS, vizitați următoarele site-uri web:
DUMNEZEUL
MEU! Ubuntu!
Web Upd8
DistroWatch
Planet Debian
Vizitați următoarele site-uri web pentru a afla mai multe despre FLOSS:
Explorați Triageul
codului GitHub
SourceForge Fresh
Meat
104
Anexă: ATARĂ
Deci, mergeți mai departe și explorați lumea vastă, liberă și deschisă a FLOSS!
105
Anexă: Despre
Anexă: Colofon
Aproape tot software-ul pe care l-am folosit la crearea acestei cărți este SILK FLOJA .
Nașterea cărții
În prima schiță a acestei cărți, am folosit Red Hat 9.0 Linux ca bază a configurației mele, iar în cea de-a șasea versiune, am
folosit Fedora Core 3 Linux ca bază a configurației mele.
Inițial, foloseam KWord pentru a scrie cartea (după cum sa explicat în lecția de istorie ).
Adolescent
Mai târziu, am trecut la DocBook XML folosind Kate, dar mi s-a părut prea plictisitor. Așa că am trecut la OpenOffice, care a
fost grozav cu nivelul de control pe care l-a oferit pentru formatare și generare de PDF, dar a produs HTML foarte neglijent din
document.
În cele din urmă, am descoperit XEmacs și am rescris cartea de la zero în DocBook XML (din nou) după ce am decis că acest
format este soluția pe termen lung.
La a șasea schiță, am decis să folosesc Quanta+ pentru a face toată editarea. Au fost folosite foile de stil XSL standard care au
venit cu Fedora Core 3 Linux. Cu toate acestea, am scris un document CSS pentru a colora și a stila paginile HTML. Am scris,
de asemenea, un analizor lexical rudimentar, în Python, desigur, care oferă automat evidențierea sintaxei tuturor listelor de
programe.
Pentru a șaptea schiță, foloseam MediaWiki ca bază pentru configurarea mea. Obișnuiam să editez totul online, iar cititorii pot
citi/edita/discuta direct pe site-ul wiki, dar am ajuns să petrec mai mult timp luptând cu spam-ul decât scriind.
Pentru a noua versiune, am trecut la formatul AsciiDoc și am folosit Emacs 24.3 , Tema de mâine , Font Fira Mono și modul
adoc pentru a scrie.
Acum
2016: M-am săturat de câteva probleme minore de randare în AsciiDoctor, cum ar fi ++ în C/C++ ar dispărea și era greu să țin
evidența cum să scapi de lucruri atât de mici. În plus, devenisem reticent în a edita textul din cauza formatului complex
Asciidoc.
Pentru a zecea schiță, am trecut la scrierea în format Markdown + GitBook , folosind Editorul Spacemacs .
Noiembrie 2020: De când Gitbook și-a abandonat software-ul open source, a migrat la Honkit, o furcă întreținută de comunitate
a moștenirii Gitbook .
Despre autor
Consultați https://swaroopch.com/about
106
Anexă: Istoricul revizuirilor
Apoi, am început să caut o carte bună despre Python. Nu am găsit niciunul! Am găsit câteva cărți O'Reilly, dar fie erau prea
scumpe, fie păreau mai degrabă un manual de referință decât un ghid. Deci, m-am mulțumit cu documentația care a venit cu
Python. Totuși, era prea scurt și mic. Am dat o idee bună despre Python, dar nu a fost complet. M-am descurcat pentru că aveam
experiență anterioară în programare, dar nu era potrivit pentru începători.
La aproximativ șase luni de la primul contact cu Python, am instalat (atunci) cel mai recent Red Hat 9.0 Linux și mă jucam cu
KWord. M-am entuziasmat și deodată mi-a venit ideea să scriu niște lucruri în Python. Am început să scriu câteva pagini, dar s-
au transformat rapid în 30. Apoi m-am gândit serios să-l fac mai util sub formă de carte. După multe rescrieri, a ajuns într-un
stadiu în care a devenit un ghid util pentru învățarea limbajului Python. Consider că această carte este contribuția și tributul meu
adus comunității open source.
Această carte a început ca notele mele personale despre Python și încă mă gândesc la ea în același mod, deși am depus mult efort
să o fac mai plăcută pentru alții :)
În adevăratul spirit al open source, am primit multe sugestii constructive, critici și feedback de la cititori entuziaști, care m-au ajutat
să îmbunătățesc foarte mult această carte.
Starea cărții
Cartea are nevoie de ajutorul cititorilor săi, ca și tine, pentru a sublinia orice parte a cărții care nu este bună, de înțeles sau pur
și simplu greșită. Vă rugăm să scrieți autorului principal sau traducătorilor respectivi cu comentariile și sugestiile
dumneavoastră.
6 noiembrie 2020
A migrat de la GitBook abandonat la Honkit întreținut de comunitate, o bifurcație a moștenirii GitBook
4.0
31 martie 2014
Rescris pentru Python 2 folosind AsciiDoc și modul adoc .
2.1
3 august 2013
Rescris folosind Markdown și Markdown Mode de Jason Blevins
2.0
107
Anexă: Istoricul revizuirilor
20 octombrie 2012
Rescris în format Pandoc , mulțumesc soției mele care a făcut cea mai mare parte a conversiei formatului Mediawiki.
Simplificarea textului, eliminarea secțiunilor neesențiale, cum ar fi non-locals și metaclasele
1,90
13 ianuarie 2005
Finalizați rescrierea folosind Quanta+ pe Fedora Core 3 cu multe remedieri și actualizări. Multe exemple noi. Mi-am
rescris configurația DocBook de la zero.
1,15
28 martie 2004
Revizii minore
1.12
16 martie 2004
Adăugiri și corecturi
1,10
9 martie 2004
Mai multe remedieri de scriere, datorită multor cititori entuziaști și ajutoare.
1,00
8 martie 2004
După feedback extraordinar și sugestii din partea cititorilor, am făcut revizuiri majore ale conținutului, împreună cu
corecții de scriere.
0,99
22 februarie 2004
S-a adăugat un nou capitol despre module. S-au adăugat detalii despre numărul variabil de argumente în funcții.
0,98
16 februarie 2004
Am scris un script Python și o foaie de stil CSS pentru a îmbunătăți rezultatul XHTML, inclusiv un analizor lexical de
bază, dar funcțional, pentru evidențierea automată a sintaxei de tip VIM a listelor de programe.
0,97
13 februarie 2004
O altă schiță complet rescrisă, în DocBook XML (din nou). Cartea s-a îmbunătățit mult, este mai coerentă și mai
lizibilă.
0,93
25 ianuarie 2004
S-au adăugat conversația IDLE și mai multe lucruri specifice Windows
0,92
5 ianuarie 2004
Modificări în unele exemple.
0,91
30 decembrie 2003
Greșeli de scriere corectate. A improvizat multe cântece.
108
Anexă: Istoricul revizuirilor
0,90
18 decembrie 2003
S-au adăugat încă 2 capitole. Format birou deschis cu recenzii.
0,60
21 noiembrie 2003
Complet rescris și extins.
0,20
20 noiembrie 2003
S-au remediat unele greșeli de scriere și erori.
0,15
20 noiembrie 2003
Convertit în DocBook XML cu XEmacs.
0,10
14 noiembrie 2003
Schița inițială folosind KPalabra .
109
Anexă: Traduceri
Traduceri
Există multe traduceri ale cărții disponibile în diferite limbi umane, datorită multor voluntari neobosite!
Dacă doriți să ajutați cu aceste traduceri, consultați lista de voluntari și limbi de mai jos și decideți dacă doriți să începeți o nouă
traducere sau să ajutați pentru proiectele de traducere existente.
arabic
Mai jos este linkul pentru versiunea în arabă. Mulțumim lui Ashraf Ali Khalaf pentru traducerea cărții, puteți citi cartea completă
online la http://www.khaledhosny.org/byte-of-python/index.html sau o puteți descărca de pe sourceforge.net pentru mai multe
informații, vedeți http://itwadi.com/byteofpython_arabi .
Azerbaidjan
Jahangir Shabiyev ([email protected]) s-a oferit voluntar să traducă cartea în azeră. Traducerea este în curs la
https://www.gitbook.com/book/jahangir-sh/piton-sancmasi
brazilian portughez
Există două traduceri la diferite niveluri de finalizare și accesibilitate. Traducerea mai veche lipsește/pierde acum, iar traducerea
mai nouă este incompletă.
Samuel Dias Neto ([email protected]) a făcut prima traducere portugheză braziliană (traducerea anterioară) a acestei
cărți când Python era la versiunea 2.3.5. Aceasta nu mai este accesibilă publicului.
Rodrigo Amaral ( [email protected] ) s-a oferit voluntar să traducă cartea în portugheză braziliană (cea mai recentă
traducere), care nu a fost încă finalizată.
catalan
Moises Gomez ([email protected]) s-a oferit voluntar să traducă cartea în catalană. Traducerea este în curs.
Moisès Gómez - Sunt dezvoltator și, de asemenea, profesor de programare (în mod normal, pentru persoane fără experiență
anterioară).
Cu ceva timp în urmă trebuia să învăț cum să programez în Python, iar munca lui Swaroop a fost de mare ajutor. Clar,
concis și suficient de complet. Exact ce aveam nevoie.
După această experiență, m-am gândit că și alți oameni din țara mea ar putea beneficia de ea. Dar limba engleză poate fi o
barieră.
Deci de ce să nu încerci să-l traduci? Și am făcut-o pentru o versiune mai veche a BoP.
În țara mea există două limbi oficiale. Am selectat limba catalană presupunând că alții o vor traduce în spaniola mai
răspândită.
chinez
110
Anexă: Traduceri
În 2017, adică după 11 ani, Mo Lun ([email protected]) a retradus cartea de la început pe baza Versiunii 4.0. Și traducerea este stocată
pe GitHub și Gitbook. El încă urmărește această ediție tradusă și gata să o repare dacă există erori sau erori în baza de date tradusă.
Sunt un student obișnuit la jurnalism de la CYU, Beijing. Și, de fapt, sunt un începător absolut în programarea Python
când încep să traduc această carte. Inițial, a fost doar un capriciu, dar când am făcut această lucrare, mi-am dat seama că o
decizie declanșată de interes m-a determinat să merg atât de departe.
Cu ajutorul traducerilor predecesorilor mei și a bogăției de informații oferite de internetul dezvoltat și cu ajutorul
prietenilor mei, am prezentat cu prudență această ediție de traducere. Sper doar că munca mea de traducere îi va ajuta pe
alți nou-veniți să învețe Python.
În același timp, aștept mereu traducerea comentariilor și sugestiilor și gata să schimb sau să îmbunătățesc această
lucrare superficială.
Sunt un absolvent postuniversitar în Wireless Telecommunication Graduate School, Beijing University of Technology,
China PR. Interesul meu actual de cercetare se concentrează pe sincronizare, estimarea canalului și detectarea multi-
utilizator a sistemului CDMA cu mai mulți purtători. Python este limbajul meu principal de programare pentru munca
zilnică de simulare și cercetare, cu ajutorul Python Numeric, de fapt. Am învățat Python cu doar jumătate de an înainte,
dar după cum puteți vedea, este foarte ușor de înțeles, ușor de utilizat și productiv. La fel cum se spune în cartea lui
Swaroop, „Este limbajul meu de programare preferat acum”.
„A Byte of Python” este tutorialul meu pentru a învăța Python. Este clar și eficient pentru a vă aduce într-o lume Python în
cel mai scurt timp posibil. Nu este prea lung, dar acoperă eficient aproape toate lucrurile importante din Python. Cred că
„A Byte of Python” ar trebui să fie foarte recomandat pentru începători ca primul lor tutorial Python. Îmi dedic traducerea
doar potențialilor milioane de utilizatori Python din China.
Chineză tradițională
Fred Lin ([email protected]) s-a oferit voluntar să traducă cartea în chineză tradițională.
O caracteristică interesantă a acestei traduceri este că conține și sursele Python chinezești executabile împreună cu sursele
Python originale.
Fred Lin: Lucrez ca inginer de firmware de rețea la Delta Network și sunt, de asemenea, un colaborator la cadrul web
TurboGears.
Ca evanghelist Python (:-p), am nevoie de materiale pentru a promova limbajul Python. Am descoperit că „A Byte of
Python” a ajuns la punctul ideal atât pentru programatorii începători, cât și pentru cei experimentați. „A Byte of Python”
elaborează elementele esențiale ale Python într-o dimensiune accesibilă.
Traducerea s-a bazat inițial pe versiunea chineză simplificată și în curând au fost făcute multe rescrieri pentru a se adapta
la versiunea wiki actuală și la calitatea citirii.
111
Anexă: Traduceri
Versiunea chineză tradițională recentă a inclus și surse executabile python chinezești, ceea ce este realizat cu noul meu
proiect „zhpy” (python în chineză) (lansat din 07 august).
zhpy (pronunțați (ZH ?, sau zippy) construiește un strat deasupra lui python pentru a traduce sau a interacționa cu python în
chineză (tradițională sau simplificată). Acest proiect vizează în principal educație.
limba franceza
Gregory ([email protected]) s-a oferit voluntar să traducă cartea în franceză.
Această traducere a fost apoi mutată în format markdown, actualizată pentru a se potrivi cu cea mai recentă versiune a cărții și
publicată pe GitBook de Romain Gilliotte ([email protected]).
limba germana
Lutz Horn (lutz.h [email protected]), Bernd Hengelein ([email protected]) și Christoph Zwerschke ([email protected]) s-au
oferit să traducă cartea în germană.
Am 32 de ani și sunt licențiat în Matematică de la Universitatea din Heidelberg, Germania. În prezent lucrez ca
inginer software într-un proiect finanțat din fonduri publice pentru a construi un portal web pentru toate lucrurile IT în
Germania. Principalul limbaj pe care îl folosesc ca profesionist este Java, dar încerc să fac cât mai mult posibil cu Python în
culise. În special, analizarea și conversia textului sunt foarte ușoare cu Python. Nu sunt foarte familiarizat cu seturile de
instrumente GUI, deoarece majoritatea programării mele se ocupă de aplicații web, în care interfața cu utilizatorul este
construită folosind cadre Java precum Struts. În prezent, încerc să folosesc mai mult caracteristicile și generatoarele
funcționale de programare Python. După ce am aruncat o privire la Ruby, am fost foarte impresionat de utilizarea blocurilor
în acest limbaj. În general, îmi place natura dinamică a limbajelor precum Python și Ruby, deoarece îmi permite să fac
lucruri care nu sunt posibile în limbaje mai statice precum Java. Am căutat un fel de introducere în programare, potrivită
pentru a preda un non-programator complet. Am găsit cartea „Cum să gândești ca un informatician: învățarea cu Python” și
„Dive into Python”. Primul este bun pentru începători, dar dorește să îl traducă. Al doilea nu este potrivit pentru începători.
Cred că „A Byte of Python” se clasează foarte bine printre acestea, deoarece nu este prea lung, scris la obiect și, în același
timp, suficient de detaliat pentru a învăța un novice. În plus, îmi place structura simplă a lui DocBook, care face ca
traducerea textului dintr-o generație să fie scoasă în diferite formate să fie un farmec. Primul este bun pentru începători, dar
dorește să îl traducă. Al doilea nu este potrivit pentru începători. Cred că „A Byte of Python” se clasează foarte bine printre
acestea, deoarece nu este prea lung, scris la obiect și, în același timp, suficient de detaliat pentru a învăța un novice. În plus,
îmi place structura simplă a lui DocBook, care face ca traducerea textului dintr-o generație să fie scoasă în diferite formate să
fie un farmec. Primul este bun pentru începători, dar dorește să îl traducă. Al doilea nu este potrivit pentru începători. Cred
că „A Byte of Python” se clasează foarte bine printre acestea, deoarece nu este prea lung, scris la obiect și, în același timp,
suficient de detaliat pentru a învăța un novice. În plus, îmi place structura simplă a lui DocBook, care face ca traducerea
textului dintr-o generație să fie scoasă în diferite formate să fie un farmec.
Lutz și cu mine vom face împreună traducerea germană. Tocmai am început cu introducerea și prefața, dar vă vom ține la
curent cu progresul pe care îl facem. Ok, acum câteva lucruri personale despre mine. Am 34 de ani și mă joc cu
computerele din anii 1980, când „Commodore C64” conducea grădinițele. După ce am studiat informatica, am început să
lucrez ca inginer software. În prezent lucrez în domeniul imagisticii medicale pentru o mare companie germană. Deși C++
este limbajul principal pe care (trebuie) să-l folosesc pentru munca mea de zi cu zi, caut în mod constant lucruri noi de
112
Anexă: Traduceri
învățat. Anul trecut m-am îndrăgostit de Python, care este un limbaj minunat, atât pentru posibilități, cât și pentru
frumusețea lui. Am citit undeva pe net despre un tip care a spus că-i place Python, pentru că codul arată foarte frumos.
Dupa parerea mea, ai perfecta dreptate. La momentul în care am decis să învăț Python, am observat că există foarte puțină
documentație bună disponibilă în limba germană. Când am dat peste cartea ta, mi-a trecut prin minte ideea spontană a unei
traduceri în germană. Din fericire, Lutz a avut aceeași idee și acum putem împărți munca. Sper la o bună colaborare!
113
Anexă: Traduceri
greacă
Ubuntu C Greek ommunity trans a spus carte în greacă , pentru utilizare în lecțiile noastre online Python asincrone care au loc pe
forumurile noastre. Contactați @savvasradevic pentru mai multe informații.
indoneziană
Daniel ([email protected]) traduce cartea în indoneziană la http://python.or.id/moin.cgi/ByteofPython . Wisnu
Massimo Lucci și Enrico Morelli - lucrăm la Universitatea din Florența (Italia) - Departamentul de Chimie. I (Massimo) ca
inginer de service și administrator de sistem pentru spectrometre de rezonanță magnetică nucleară; Enrico ca inginer de
service și administrator de sisteme pentru sistemele noastre CED și paralele/cluster. Programăm în Python de aproximativ
șapte ani, am avut experiență de lucru cu platforme Linux de zece ani. În Italia suntem responsabili și administratorii site-
ului web www.gentoo.it pentru distribuția Gentoo / Linux și www.nmr.it (acum în construcție) pentru aplicațiile de
Rezonanță Magnetică Nucleară și Organizarea și Managementul Congresului. Asta e tot! Suntem impresionați de limbajul
inteligent folosit în cartea dvs. și credem că acest lucru este esențial pentru a aduce Python la noi utilizatori (ne gândim la
sute de studenți și cercetători care lucrează în laboratoarele noastre).
italiană (a doua)
Calvina Bice și colegii săi au creat o traducere în italiană la http://besthcgdropswebsite.com/translate/a-byte-of-pitón/ .
japonez
Shunro Dozono ([email protected]) traduce cartea în japoneză.
coreeană
Epsimatt (2019)
Epsimatt a început o nouă traducere coreeană:
vârstnici
Jeongbin Park ([email protected]) a tradus cartea în coreeană - https://github.com/pjb7687/byte_of_python
114
Anexă: Traduceri
Acum un an, căutam un tutorial/ghid bun pentru Python pe care să-l prezint colegilor mei, deoarece utilizarea Python în
astfel de domenii de cercetare devine inevitabilă pe măsură ce baza de utilizatori crește din ce în ce mai mult.
Dar la acel moment, doar câteva cărți Python sunt disponibile în coreeană, așa că am decis să vă traduc ebook-ul pentru că
mi se pare unul dintre cele mai bune ghiduri pe care le-am citit.
În prezent, cartea este tradusă aproape complet în coreeană, cu excepția unora dintre textul din capitolul introductiv și a
anexelor.
mongol
Ariunsanaa Tunjin ([email protected]) s-a oferit voluntar să traducă cartea în mongolă.
norvegiană (bokmål)
Eirik Vågeskar este elev de liceu la Sandvika videregående skole din Norvegia, un blogger și în prezent traduce cartea în norvegiană
(bokmål).
Eirik Vågeskar : Întotdeauna mi-am dorit să programez, dar din moment ce vorbesc o limbă mică, procesul de învățare a
fost mult mai dificil. Majoritatea tutorialelor și cărților sunt scrise în engleză foarte tehnică, așa că majoritatea absolvenților
de liceu nici măcar nu vor avea vocabularul necesar să înțeleagă despre ce este vorba în tutorial. Când am descoperit
această carte, toate problemele mele au fost rezolvate. „A Byte of Python” a folosit un limbaj simplu, non-tehnic, pentru a
explica un limbaj de programare la fel de simplu, iar aceste două lucruri fac să învețe Python distractiv. După ce am citit
jumătate din carte, am decis că merită tradusă. Sper ca traducerea să ajute oamenii care s-au trezit în aceeași situație ca
mine (în special tinerii) și poate să ajute la răspândirea interesului pentru limbă în rândul persoanelor cu mai puține
cunoștințe tehnice.
Lustrui
Dominik Kozaczko ([email protected]) s-a oferit voluntar să traducă cartea în poloneză. Traducerea este în curs și pagina
sa principală este disponibilă aici: Ukąś Pythona .
Actualizare : traducerea este completă și gata din 2 octombrie 2009. Mulțumim lui Dominik, celor doi studenți ai săi și
prietenului său pentru timpul și efortul depus!
portugheză
O traducere a acestei cărți în portugheză a fost finalizată de Artur Weber ([email protected]) (din 21 februarie 2018)
la https://www.homeyou.com/~edu/introducao .
Artur Weber : Studenții mei studiază la Facultatea Politehnică a Universității Ecologice din orașul Curitiba (Brazilia) și
unii dintre ei sunt interesați de diferite locuri de muncă.
În timp ce scriu lucrări academice și de curs, ei caută întotdeauna articole și pagini interesante. De asemenea, fac tot
posibilul să găsesc materiale interesante care pot fi sursa lucrărilor tale universitare.
115
Anexă: Traduceri
Am găsit materialele de pe site-ul dvs. utile pentru unii dintre studenții mei care scriu articole bazate pe programarea
Python. De fapt, de aceea am luat decizia de a face o traducere portugheză, astfel încât studenții mei care nu știu engleza să
citească articole interesante în limba lor maternă (în portugheză).
Română
Paul-Sebastian Manole ([email protected]) s-a oferit voluntar să traducă această carte în limba română.
Paul-Sebastian Manole - Sunt student în anul II la Informatică la Universitatea Spiru Haret, aici în România. Sunt mai
mult un programator autodidact și am decis să învăț o nouă limbă, Python. Web-ul mi-a spus că nu există o modalitate mai
bună de a face asta decât să citesc „A Python Byte”. Atât de populară este această carte (felicitari autorului pentru că a
scris o carte atât de ușor de citit). A început să-mi placă Python, așa că am decis să ajut la traducerea celei mai recente
versiuni a cărții lui Swaroop în limba română. Deși s-ar putea să fiu cel cu prima inițiativă, sunt doar un voluntar, așa că
dacă poți ajuta, alături de mine.
Rusă
O traducere în limba rusă a fost finalizată de Vladimir Smolyar ([email protected]) la http://wombat.org.ua/AByteOfPython/ .
ucrainean
Averkiev Andrey ( [email protected] ) s-a oferit voluntar să traducă cartea în rusă, și poate în ucraineană (dacă timpul permite).
sârb
„BugSpice” ([email protected]) a finalizat o traducere în sârbă:
slovacă
Albertio Ward ([email protected]) a tradus cartea în slovacă la http://www.fatcow.com/edu/python-swaroopch-sl/
:
Suntem o organizație non-profit numită „Translation for Education”. Reprezentăm un grup de oameni, în principal studenți
și profesori, de la Universitatea Slavă. Aici sunt studenți din diferite catedre: lingvistică, chimie, biologie etc. Încercăm să
găsim postări interesante pe Internet care ar putea fi relevante pentru noi și colegii noștri de la universitate. Uneori găsim
articole noi înșine; alteori profesorii noștri ne ajută să alegem materialul de traducere. După obținerea permisiunii
autorilor, traducem articolele și le publicăm pe blogul nostru, care este disponibil și accesibil colegilor și prietenilor noștri.
Aceste publicații traduse ajută adesea studenții în rutina lor zilnică de studiu.
Spaniolă
Alfonso de la Guarda Reyes ( [email protected] ), Gustavo Echeverría ( [email protected] ), David
Crespo Arroyo ( [email protected] ) și Cristian Bermudez Serna ( [email protected] ) s-au oferit ca
voluntari pentru a traduce cartea în spaniolă.
116
Anexă: Traduceri
Lucrez ca inginer software în Argentina. Folosesc în principal tehnologiile C# și .Net la locul de muncă, dar strict Python
sau Ruby în proiectele mele personale. Am fost introdus în Python cu mulți ani în urmă și am fost imediat cucerit. La scurt
timp după ce am învățat Python, am descoperit această carte și m-a ajutat să învăț limba. Apoi m-am oferit să traduc
cartea în spaniolă. Acum, după ce am primit câteva solicitări, am început să traduc „A Python Byte” cu ajutorul lui
Maximiliano Soler.
Sunt student la Inginerie în Telecomunicații la Universitatea din Antioquia (Colombia). Cu luni în urmă, am început să
învăț Python și am găsit această carte minunată, așa că m-am oferit voluntar pentru a obține traducerea în spaniolă.
suedez
Mikael Jacobsson ( [email protected] ) s-a oferit voluntar să traducă cartea în suedeză.
turc
Türker SEZER ( [email protected] ) și Bugra Cakir ( [email protected] ) s-au oferit voluntari să traducă cartea în turcă. „Unde
este versiunea turcă? Okusak Bitse”.
117
Anexă: Proceduri de traducere
Instrucțiuni de traducere
1. Sursa completă a cărții este disponibilă la https://github.com/swaroopch/byte-of-python .
2. Vă rugăm să transferați depozitul .
3. Apoi, navigați la depozitul de pe computer. Trebuie să știi cum să folosești Git pentru a face asta.
4. Citiți documentația Honkit , în special. sectiunea de vanzari .
5. Începeți să editați fișierele .Maryland pentru a le traduce în limba dvs. locală.
6. Vezi INSTALL.md despre cum se generează site-ul web, PDF, EPUB.
118
Părere
Părere
Cartea are nevoie de ajutorul cititorilor săi, ca și tine, pentru a sublinia orice parte a cărții care nu este bună, de înțeles sau pur
și simplu greșită. Vă rugăm să scrieți autorului principal sau traducătorilor respectivi cu comentariile și sugestiile
dumneavoastră.
119