A Byte of Python
A Byte of Python
A Byte of Python
"A Byte of Python" este o carte liberă despre programare folosind limbaj Python. Acesta servește ca
tutorial sau ghid pentru limbajul Python pentru un public începător. Dacă tot ce știți despre
computere este cum să salvați fișiere text, atunci aceasta este cartea pentru dvs.
Această carte vă va învăța să utilizați versiunea Python 3. De asemenea, veți avea sfaturi pentru a vă
adapta la versiunea mai veche și mai uzuală - Python 2 - din carte.
1 Cursuri academice
Această carte este / a fost folosită ca material didactic în diferite instituții de învățământ:
Licență
Această carte este licențiată sub licență Creative Commons Attribution-ShareAlike 4.0 International .
Asta înseamnă:
Sunteți liberi să modificați, adică să faceți schimbări în această carte (în special traducerile)
Vă rugăm să rețineți:
A Byte of Python Introducere
Vă rugăm să nu vindeți copii electronice sau tipărite ale cărții, cu excepția cazului în care ați
menționat în mod clar și vizibil în descrierea că aceste copii nu sunt de la autorul original al
acestei cărți.
Toate codurile / scripturile furnizate în această carte sunt licențiate sub licența BSD cu 3
clase, cu excepția cazului în care se specifică altfel.
Citește acum
2
Puteți să o citiți online la adresa https://python.swaroopch.com/
Cumpărați cartea
Descarcă
Accesați https://www.gitbook.com/book/swaroopch/byte-of-python/details pentru următoarele
tipuri de descărcări:
Dacă sunteți interesat să citiți sau să contribuiți traducerile acestei cărți la alte limbi umane, vă rugăm
să consultați Traduceri .
A Byte of Python 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, mai important, este
distractiv de programat. Această carte are scopul de a vă ajuta să învățați acest limbaj minunat și să
arătați cum să faceți lucrurile rapid și fără durere - în practică, "Anti-veninul la problemele de
programare".
Această carte servește drept ghid sau tutorial pentru limbajul de programare Python. Se adresează în
principal începătorilor. Este util și pentru programatori cu experiență.
3
Scopul este că, dacă tot ce știi despre computere este cum să salvezi fișiere text, atunci poți învăța
Python din această carte. Dacă aveți experiență de programare anterioară, atunci puteți învăța de
asemenea Python din această carte.
Dacă aveți experiență de programare anterioară, veți fi interesați de diferențele dintre Python și
limbajul dvs. de programare preferat - am evidențiat multe astfel de diferențe. Un pic de avertizare,
totuși, Python va deveni în curând limbajul dvs. de programare preferat!
Site oficial
Există două moduri de a construi un design de software: o modalitate este de a face atât de simplu că
evident nu există deficiențe; celălalt trebuie să facă atât de complicat că nu există deficiențe
evidente. - CAR Hoare
Despre Python
Python este unul dintre limbajele rare care se pot pretinde a fi atât simple, cât și puternice . Veți găsi
plăcut surprins să vedeți cât de ușor este să vă concentrați asupra soluției la problemă decât asupra
sintaxei și structurii limbii în care programați.
Python este un limbaj de programare ușor de învățat. Are o structură eficientă de date la nivel înalt și
o abordare simplă, dar eficientă, a programării orientate pe obiecte. Sintaxa elegantă și tastarea
dinamică a lui Python, împreună cu natura interpretată, îl fac un limbaj ideal pentru scrierea și
dezvoltarea rapidă a aplicațiilor în multe zone pe majoritatea platformelor.
4
Voi discuta majoritatea acestor caracteristici în detaliu în secțiunea următoare.
Guido van Rossum, creatorul limbajului Python, a numit limbajul după emisiunea BBC "Monty
Python's Circus Flying". Nu-i plac foarte mult șerpii care ucid animalele pentru mâncare prin
înfășurarea trupurilor lor lungi în jurul lor și zdrobirea lor.
Simplu
Python este un limbaj simplu și minimalist. Citirea unui bun program Python se simte aproape ca și
citirea limbii engleze, deși este foarte strictă în limba engleză! Această natură pseudo-cod a lui
Python este una dintre cele mai mari forțe ale sale. Vă permite să vă concentrați mai degrabă pe
soluția problemei decât pe limba în sine.
Ușor de învățat
După cum veți vedea, cu Python este extrem de ușor să începeți. Python are o sintaxă extraordinar
de simplă, așa cum am menționat deja.
Python este un exemplu de FLOSS (Free / Libré și Open Source Software). În termeni simpli, puteți să
distribuiți gratuit copii ale acestui software, să citiți codul sursă, să efectuați modificări și să folosiți
bucăți din acesta în noile programe gratuite. FLOSS se bazează pe conceptul unei comunități care
împărtășește cunoștințele. Acesta este unul dintre motivele pentru care Python este atât de bun - a
fost creat și este îmbunătățit în mod constant de o comunitate care vrea doar să vadă un Python mai
bun.
Când scrieți programe în Python, nu trebuie niciodată să vă deranjezi detaliile de nivel scăzut, cum ar
fi gestionarea memoriei utilizate de programul dvs. etc.
Portabil
Datorită naturii sale sursă deschisă, Python a fost portat (adică schimbat pentru a face lucrul 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 caracteristici
dependente de sistem.
A Byte of Python Despre Python
Puteți folosi 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 utiliza o platformă ca Kivy pentru a crea jocuri pentru computer și pentru iPhone, iPad și
Android.
Interpretat
Un program scris într-un limbaj compilat, cum ar fi C sau C ++, este convertit din limbajul sursă, adică
5 C sau C ++, într-o limbă vorbită de calculator (cod binar ex: 0 și 1) folosind un compilator cu diferite
steaguri și opțiuni. Când rulați programul, software-ul linker / loader copiază programul din hard disk
în memorie și începe să îl ruleze.
Obiect orientat
Extensibil
Dacă aveți nevoie de o piesă critică de cod pentru a rula foarte repede sau doriți să nu aveți o bucată
de algoritm care să nu fie deschisă, puteți codifica acea parte a programului în C sau C ++ și apoi să o
utilizați din programul dvs. Python.
încorporabil
Biblioteci extinse
Biblioteca standard Python este într-adevăr imensă. Acesta vă poate ajuta să faceți diverse lucruri
care implică expresii regulate, generarea de documente, testarea unităților, filetarea, baze de date,
browsere web, CGI, FTP, email, XML, XML-RPC, HTML, WAV, criptografie, și alte chestii dependente
de sistem. Rețineți că toate acestea sunt întotdeauna disponibile oriunde este instalat
Python. Aceasta se numește Filosofia bateriilor incluse în Python.
Pe lângă biblioteca standard, există și alte biblioteci de înaltă calitate pe care le puteți găsi la Indexul
pachetelor Python .
A Byte of Python Despre Python
Rezumat
Python 3 versus 2
Puteți ignora această secțiune dacă nu sunteți interesat de diferența dintre "Python versiunea 2" și
"Python versiunea 3". Dar vă rugăm să fiți conștienți de versiunea pe care o utilizați. Această carte
este scrisă pentru Python versiunea 3.
Amintiți-vă că odată ce ați înțeles corect și ați învățat să utilizați o singură versiune, puteți învăța cu
6 ușurință diferențele și utilizați cealaltă. Partea grea este de a învăța programarea și de a înțelege
elementele de bază ale limbajului Python. Acesta este scopul nostru în această carte și odată ce ați
atins acest obiectiv, puteți utiliza cu ușurință Python 2 sau Python 3 în funcție de situația dvs.
Viitorul Python 2
Ce spun programatorii
S-ar putea să fie interesant să citiți ce hackeri mari ca ESR au de spus despre Python:
Bruce Eckel este autorul faimoaselor cărți "Gândire în Java" și "Gândire în C". El spune că nici
un limbaj nu l-a făcut mai productiv decât Python. El spune că Python este poate singurul
limbaj care se concentrează pe a face lucrurile mai ușor pentru programator. Citiți interviul
complet pentru mai multe detalii.
Peter Norvig este un bine cunoscut autor Lisp și director al calității căutării la Google
(mulțumită lui Guido van Rossum pentru că a subliniat acest lucru). El spune că scrierea lui
Python este ca scrierea în pseudocod . El spune că Python a fost întotdeauna o parte
integrantă a Google. De fapt, puteți verifica această afirmație vizionând pagina de Lucrări
Google care afișează cunoștințele Python ca cerință pentru inginerii software.
A Byte of Python Instalare
Instalare
Când ne referim la "Python 3" din această carte, vom vorbi despre orice versiune Python egală sau
mai mare decât versiunea Python 3.6.0 .
Instalare pe Windows
Rețineți că, dacă versiunea dvs. Windows este pre-Vista, trebuie să descărcați Python 3.4 doar ca
versiunile ulterioare necesită versiuni mai noi ale Windows.
7
ATENȚIE: Asigurați-vă că ați bifat opțiunea Add Python 3.5 to PATH.
Pentru a schimba locația de instalare, faceți clic pe Customize installation, apoi pe Next și
introduceți C:\python35(sau o altă locație adecvată) ca locație de instalare.
Dacă nu ați verificat opțiunea Add Python 3.5 PATH mai devreme, verificați Add Python to
environment variables. Acest lucru se întâmplă la fel ca Add Python 3.5 to 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 de Python instalate.
Dacă calea dvs. nu a fost setată corect (prin bifarea opțiunilor Add Python 3.5 Path sau Add Python to
environment variables), urmați pașii din secțiunea următoare (DOS Prompt) pentru a o remedia. În
caz contrar, mergeți la secțiunea din acest document Running Python prompt on Windows.
NOTĂ: Pentru persoanele care știu deja programare, dacă sunteți familiarizat cu Docker,
verificați Python în Docker și Docker pe Windows .
DOS Prompt
Dacă doriți să puteți utiliza Python din linia de comandă Windows, adică promptul DOS, trebuie să
setați corespunzător variabila PATH.
Faceți clic pe System (Sistem), în partea dreaptă veți vedea "Vizualizarea informațiilor de
bază despre computer"
În stânga este o listă de sarcini, dintre care ultima este Advanced System settings. Faceți clic
pe acesta.
A Byte of Python Instalare
Advanced Tab System Properties este afișat caseta de dialog. Faceți clic pe butonul din
dreapta jos Environment Variables.
În caseta inferioară numită System Variables derulați în jos până la Cale și faceți clic pe
butonul Edit.
Pentru Windows 7 și 8:
8
Faceți clic dreapta pe Computer de pe desktop și selectați Properties sau dați clic Start și
alegeți Control Panel-> System and Security-> System. Faceți clic pe Advanced System
settings în partea stângă și apoi faceți clic pe fila Advanced. În partea de jos faceți clic
pe Environment Variables și sub System variables, căutați CALEA variabila, selectați și apoi
apăsați Edit.
Mergeți la sfârșitul liniei sub valoarea variabilă și adăugați C:\Python35 (verificați dacă există
acest dosar, acesta va fi diferit pentru versiunile mai noi ale Python) până la sfârșitul a ceea
ce există deja. Desigur, utilizați numele dosarului corespunzător.
Dați clic OK și ați terminat. Nu este necesară repornirea, însă este posibil să fiți nevoit să
închideți și să redeschideți linia de comandă.
Pentru utilizatorii Windows, puteți rula interpretul în linia de comandă dacă ați setat CALEA
corespunzător variabila .
Pentru a deschide terminalul în Windows, faceți clic pe butonul de pornire și faceți clic pe Run. În
caseta de dialog, tastați cmd și apăsați [enter].
$ python3 -V
Python 3.6.0
NOTĂ: $ este solicitarea Shell. Acesta va fi diferit pentru dvs., în funcție de setările sistemului de
operare de pe computer, prin urmare, voi indica promptul doar prin simbolul $.
A Byte of Python Instalare
ATENȚIE: Ieșirea poate fi diferită pe computer, în funcție de versiunea software-ului Python instalat
pe computer. Rezumat De acum înainte, vom presupune că aveți instalat Python pe sistemul dvs.
Apoi, vom scrie primul nostru program Python.
9
A Byte of Python Primii pași
Primii pași
Vom vedea acum cum să rulați 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 programele Python.
Există două modalități de utilizare a programului Python pentru a rula programul - utilizând
promptul interpretului interactiv sau utilizând un fișier sursă. Vom vedea acum cum să folosim
ambele metode.
$ python3
Python 3.6.0 (default, Jan 12 2017, 11:26:36)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World")
Hello World
Pentru a crea fișierele sursă Python, avem nevoie de un editor în care să-l puteți scrie și
salva. Un editor de programator bun vă va face viața mai ușoară în scrierea fișierelor
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-o. Un editor bun vă va ajuta să scrieți ușor
11 programele Python, făcând călătoria dvs. mai confortabilă și vă ajută să ajungeți la
destinație (atingeți obiectivul) într-un mod mult mai rapid și mai sigur.
Una dintre cerințele de bază este sintaxa, evidențiind unde toate părțile diferite ale
programului dvs. Python sunt colorate, astfel încât să puteți vedea programul dvs. și să
vizualizați funcționarea acestuia.
Dacă utilizați Windows, nu utilizați Notepad - este o alegere greșită, deoarece nu face
evidențierea sintaxei și, de asemenea, nu este importantă faptul că nu acceptă indentarea
textului, care este foarte importantă în cazul nostru așa cum vom vedea mai
târziu. Editorii buni vor face automat acest lucru.
În cazul în care sunteți dispus să faceți timp pentru a învăța Vim sau Emacs, atunci vă
recomand să învățați să le folosiți pe oricare dintre ele, deoarece va fi foarte util pentru
dvs. pe termen lung. Cu toate acestea, așa cum am menționat mai devreme, începătorii
pot începe cu PyCharm și se concentrează mai degrabă pe Python decât pe editor în acest
moment.
Pentru a reitera, vă rugăm să alegeți un editor adecvat - acesta poate face programele de
scriere Python mai distractive și mai ușor.
PyCharm
PyCharm Educational Edition este un editor gratuit pe care îl puteți folosi pentru scrierea
programelor Python.
Când deschideți PyCharm, veți vedea acest lucru, faceți clic pe Create New Project :
A Byte of Python Primii pași
12
Selectați Pure Python:
13
14
Acum faceți clic dreapta pe ceea ce ați tastat (fără a selecta textul) și faceți clic pe Run
'hello'.
15
A
r trebui să vedeți acum rezultatul (ce se imprimă) al programului dvs.:
Pfui! Acestea au fost câțiva pași pentru a începe, dar de acum încolo, de fiecare dată când
vă cerem să creați un fișier nou, amintiți-vă doar să faceți clic dreapta pe helloworld pe
stânga -> New-> Python File și să continuați aceiași pași pentru a tasta și a rula după cum
este arătat mai sus .
A Byte of Python Primii pași
Puteți găsi mai multe informații despre PyCharm în pagina de pornire rapidă PyCharm .
Vim
1. Instalați Vim
o Utilizatorii Mac OS X ar trebui să instaleze macvim pachetul prin HomeBrew
o Utilizatorii de Windows ar trebui să descarce "executabilul de auto-
instalare" de pe site-ul Vim
o Utilizatorii GNU / Linux ar trebui să obțină Vim din depozitele de software
16 ale distribuției, de exemplu utilizatorii Debian și Ubuntu pot instala pachetul vim.
2. Instalați pluginul jedi-vim pentru completarea automată.
3. Instalați jedi python corespunzător :pip install -U jedi
Emacs
1. Instalați Emacs 24+ .
o Utilizatorii Mac OS X ar trebui să primească Emacs de
la http://emacsformacosx.com
o Utilizatorii Windows ar trebui să primească Emacs de
la http://ftp.gnu.org/gnu/emacs/windows/
o Utilizatorii GNU / Linux ar trebui să primească Emacs din depozitele
software ale distribuției lor, de exemplu utilizatorii Debian și Ubuntu pot
instala emacs24pachetul.
2. Instalați ELPY
Porniți editor ales de dvs., introduceți următorul program și salvați - l ca hello.py.
Dacă utilizați PyCharm, am discutat deja cum să rulați dintr-un fișier sursă .
Unde ar trebui să salvați dosarul? În orice dosar pentru care cunoașteți locația
dosarului. 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 X
/tmp/py pe GNU / Linux
1
autorul uimitoarei cărți "Perl pentru începători"
A Byte of Python Primii pași
C:\py pe Windows
Pentru a crea dosarul de mai sus (pentru sistemul de operare pe care îl utilizați),
utilizați mkdir, de exemplu, comanda din terminal mkdir /tmp/py.
IMPORTANT: Asigurați-vă întotdeauna că îi dați extensia fișierului .py, de exemplu foo.py.
Pentru a rula programul Python:
Dacă ați obținut rezultatul de mai sus, felicitări! - ați executat cu succes primul program
Python. Ați trecut cu succes cea mai grea parte din programele de învățare, adică
începerea primului program!
În cazul în care a apărut o eroare, tastați programul de mai sus exact așa cum este arătat
mai sus și executați din nou programul. Rețineți că Python este sensibil la minuscule,
adică print nu este același cu Print - notați literele mici p din prima și majusculă P din cea de-
a doua. De asemenea, asigurați-vă că nu există spații sau file înainte de primul caracter
din fiecare rând - vom vedea de ce acest lucru este important mai târziu.
Cum funcționează
A Byte of Python Primii pași
Un program Python este compus din declarații . În primul nostru program, avem o singură
declarație. În această declarație, numim print declarația la care furnizăm textul "salut
lume".
Obținerea de ajutor
Dacă aveți nevoie de informații rapide despre orice funcție sau instrucțiune din Python,
puteți utiliza funcționalitatea încorporată help. Acest lucru este foarte util, mai ales atunci
când folosiți promptul interpretului. De exemplu, executați help ('len') - aceasta afișează
ajutorul pentru len - funcția care este utilizată pentru a număra numărul de elemente.
18 SFAT: Apăsați q pentru a ieși din ajutor.
În mod similar, puteți obține informații despre aproape orice în Python. Utilizați help()
pentru a afla mai multe despre utilizarea comenzii help!
În cazul în care trebuie să obțineți ajutor pentru operatori return, atunci trebuie să puneți
acele citate în interiorul lor, help('return') astfel încât Python să nu se confunde cu ceea ce
încercăm să facem.
rezumat
Acum ar trebui să puteți scrie, salva și executa programe Python în largul tău.
Elementele de bază
Doar imprimarea hello world nu este de ajuns, nu-i așa? Vrei să faci mai mult de atât - vrei
să introduci date, să le manipulezi și să scoți ceva din ele. Putem realiza acest lucru în
Python folosind constante și variabile și vom învăța și alte concepte în acest capitol.
Comentarii
19 Comentariile reprezintă orice text în partea dreaptă a simbolului # și sunt în principal utile
ca note pentru cititorul programului.
De exemplu:
print('hello world') # Note that print is a function
sau:
# Note that print is a function
print('hello world')
explicați ipotezele
explică deciziile importante
explicați detalii importante
explicați problemele pe care încercați să le rezolvați
explicați problemele pe care încercați să le depășiți în programul dvs. etc.
Acest lucru este util pentru cititorii programului dvs., astfel încât să poată înțelege cu
ușurință ce anume face programul. Amintiți-vă, acea persoană poți fi chiar tu peste șase
luni!
Constante literare
Un exemplu de o constantă literală este un număr similar 5, 1.23 sau un șir de caractere
similar 'This is a string' sau "It's a string!".
Se numește literal, deoarece este literal - folosiți literalmente valoarea sa. Numărul 2
reprezintă întotdeauna însăși și nimic altceva - este o constantă deoarece valoarea sa nu
poate fi schimbată. Prin urmare, toate acestea sunt denumite constante literale.
Numere
Numerele sunt în principal de două tipuri - întregi și zecimale.
A Byte of Python Elementele de bază
Șiruri de caractere
Un șir este o secvență de caractere .Șirurile sunt de fapt doar o grămadă de cuvinte.
20
Veți folosi șiruri de caractere în aproape fiecare program Python pe care îl scrieți, deci
acordați atenție următoarei părți.
Apostrofe
Aveți posibilitatea să specificați șiruri de caractere utilizând apostrofe, cum ar fi 'Quote me
on this'.
Toate spațiile albe, adică spațiile și filele din cadrul citatelor, sunt păstrate așa cum este.
Ghilimele
Șirurile de caractere intre ghilimele funcționează exact la fel ca șirurile în apostrofe. Un
exemplu este "What's your name?" .
Ghilimele triple
Puteți specifica șiruri multi-linie utilizând apostrof triplu sau ghilimele triple -
( """sau '''). Puteți utiliza în mod gratuit ghilimele simple și ghilimele duble în cadrul
ghilimelelor triple. Un exemplu este:
Nu există niciun tip de date char separat în Python. Nu există o nevoie reală și sunt sigur
că nu o veți pierde.
Notă pentru programatorii Perl / PHP
Metoda de formatare
Uneori este posibil să dorim să construim șiruri din alte informații. Aici este utilă metoda
21 format().
Salvați următoarele rânduri ca fișier str_format.py:
age = 20
name = 'Swaroop'
print('{0} was {1} years old when he wrote this book'.format(name, age))
print('Why is {0} playing with that python?'.format(name))
ieșire:
$ python str_format.py
Swaroop was 20 years old when he wrote this book
Why is Swaroop playing with that python?
Cum funcționează
Un șir poate folosi anumite specificații și ulterior, metoda format poate fi apelată pentru a
înlocui aceste specificații cu argumentele corespunzătoare metodei format.
Observați prima utilizare pe care o folosim {0} și aceasta corespunde variabilei name care
este primul argument al metodei formatelor. În mod similar, a doua specificație {1}
corespunde cu age care este al doilea argument al metodei formatelor. 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.
Observați că am fi putut obține același lucru folosind concatenarea șirului:
name + ' is ' + str(age) + ' years old'
dar este mult mai urât și predispus la erori. În al doilea rând, conversia în șir va fi
efectuată automat de metoda format, în loc de conversia explicită în șiruri de caractere
necesare în acest caz. În al treilea rând, atunci când folosim această metodă format, putem
schimba mesajul fără să avem de-a face cu variabilele folosite și invers.
De asemenea, rețineți că numerele sunt opționale, astfel încât ați putea fi, de asemenea,
scrise ca:
age = 20
name = 'Swaroop'
A Byte of Python Elementele de bază
Ceea ce face metoda Python în format este că înlocuiește fiecare valoare a argumentului în
locul specificației. Pot exista specificații mai detaliate, cum ar fi:
22 print('{0:.3f}'.format(1.0/3))
# fill with underscores (_) with the text centered
# (^) to 11 width '___hello___'
print('{0:_^11}'.format('hello'))
# keyword-based 'Swaroop wrote A Byte of Python'
print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
ieșire:
0.333
___hello___
Swaroop wrote A Byte of Python
Rezultatul este:
ab
Sau puteți end cu un spațiu:
print('a', end=' ')
print('b', end=' ')
print('c')
Rezultatul este:
abc
Secvențe de ieșire
Să presupunem că doriți să aveți un șir care conține o singură citare ( '), cum veți specifica
acest șir? De exemplu, șirul este "What's your name?" . Nu puteți specifica 'What's your name?'
deoarece Python va fi confuz în ceea ce privește locul în care șirul începe și se
A Byte of Python Elementele de bază
termină. Deci, va trebui să precizați că această cotă unică nu indică sfârșitul șirului. Acest
lucru se poate face cu ajutorul a ceea ce se numește secvență de ieșire . Specificați citatul
unic ca \': observați întoarcerea. Acum, puteți specifica ca șirul 'What\'s your name?' .
O altă modalitate de a specifica acest șir specific ar fi "What's your name? „utilizarea de
ghilimele duble. În mod similar, trebuie să utilizați o secvență de ieșire pentru a folosi o
dublă citare în sine într-un șir dublu cotat. De asemenea, trebuie să indicați întoarcerea în
sine utilizând secvența de ieșire \\.
Dacă doriți să specificați un șir de două linii? O modalitate este să folosiți un șir de
apostrofe triple, după cum se arată anterior, sau puteți utiliza o secvență de ieșire pentru
caracterul de linie nouă - \n pentru a indica începerea unei noi linii. Un exemplu este:
23 'This is the first line\nThis is the second line'
O altă secvență de ieșire este util să se știe fila: \t. Există mai multe secvențe de ieșire, dar
am menționat doar cele mai utile aici.
Un lucru de reținut este că într-un șir, un caracter backslash la sfârșitul liniei indică faptul
că șirul este continuat în următoarea linie, dar nu se adaugă nicio linie nouă. De exemplu:
"This is the first sentence. \
This is the second sentence."
este echivalent cu
"This is the first sentence. This is the second sentence."
Runda String
Dacă trebuie să specificați niște șiruri de caractere în care nu este tratată nici o prelucrare
specială, cum ar fi secvențele de ieșire, atunci ceea ce aveți nevoie este să specificați
un șir brut prin prefixare r sau R șir. Un exemplu este:
r"Newlines are indicated by \n"
Utilizați întotdeauna șiruri de caractere atunci când se ocupă de expresii regulate. În caz
contrar, poate fi necesară o mulțime de backwhacking. De exemplu, backreferences pot fi
denumite '\\1'sau r'\1'.
Variabil
Folosind doar constantele literale pot deveni în curând plictisitoare - avem nevoie de o
modalitate de stocare a informațiilor și de manipulare a acestora. Aici variabilele intră în
imagine. Variabilele sunt exact ceea ce implică numele - valoarea lor poate varia, adică
puteți stoca orice folosind o variabilă. Variabilele sunt doar părți ale memoriei
computerului în care stocați anumite informații. Spre deosebire de constantele literale,
aveți nevoie de o metodă de accesare a acestor variabile și, prin urmare, le dați nume.
Denumire Identificator
A Byte of Python Elementele de bază
Tipuri de Date
Variabilele pot conține valori de diferite tipuri, numite tipuri de date. Tipurile de bază sunt
numerele și șirurile, pe care le-am discutat deja. În capitolele ulterioare vom vedea cum
să creăm propriile noastre tipuri folosind clase .
Obiect
Amintiți-vă, Python se referă la orice lucru folosit într-un program ca obiect . Aceasta se
înțelege în sens generic. În loc să spui " ceva ", spunem " obiectul ".
Python este puternic orientat în obiect în sensul că totul este un obiect care include
numere, șiruri și funcții.
Vom vedea acum cum să folosim variabilele împreună cu constantele literale. Salvați
următorul exemplu și executați programul.
Pentru PyCharm
1. Deschideți PyCharm .
2. Creați un fișier nou cu numele de fișier menționat.
3. Introduceți codul programului prezentat în exemplu.
4. Faceți clic dreapta și rulați fișierul curent.
A Byte of Python Elementele de bază
NOTĂ: Ori de câte ori trebuie să furnizați argumente pentru linia de comandă , faceți clic
pe Run-> Edit Configurations și tastați argumentele din Script parameters: secțiune și faceți clic
pe OK butonul:
25
ieșire:
5
A Byte of Python Elementele de bază
6
This is a multi-line string.
This is the second line.
Cum funcționează
Iată cum funcționează acest program. Mai întâi, atribuim valoarea constantă literală 5
variabilei i utilizând operatorul de atribuire ( =). Această linie este numită o instrucțiune
deoarece afirmă că trebuie făcut ceva și în acest caz conectăm numele variabilei i la
26 valoare 5. Apoi, vom tipări valoarea de i utilizare a instrucțiunii print, care, fără îndoială,
doar imprimă valoarea variabilei pe ecran.
Apoi adăugăm 1la valoarea stocată i și o stocăm înapoi. Apoi îl imprimam și, de așteptat,
obținem valoarea 6.
În mod similar, atribuim șirul literal variabilei s și apoi imprimați.
Notă pentru programatorii de limbaj static
Variabilele sunt utilizate doar prin atribuirea unei valori. Nu este necesară / utilizată nicio
declarație sau definiție de tip de date.
Un exemplu de linie logică este o declarație ca print 'hello world' - dacă aceasta se afla pe o
linie de la sine (după cum o vedeți într-un editor), atunci aceasta corespunde și unei linii
fizice.
Implicit, Python încurajează utilizarea unei singure instrucțiuni per linie care face codul
mai ușor de citit.
Dacă doriți să specificați mai multe linii logice pe o singură linie fizică, atunci trebuie să
specificați în mod explicit acest lucru folosind o punct și virgulă ( ;) care indică sfârșitul
unei linii / instrucțiuni logice. De exemplu:
i=5
print(i)
și la fel ca
i = 5; print(i)
A Byte of Python Elementele de bază
Există un fel de situație în care acest concept este cu adevărat util: dacă aveți o lungă linie
de cod, puteți să-l rupeți în mai multe linii fizice, utilizând întârziere. Aceasta este
menționată ca o conexiune clară explicită :
s = 'This is a string. \
This continues the string.'
print(s)
27
ieșire:
This is a string. This continues the string.
În mod similar,
i=\
5
este la fel ca
i=5
Uneori există o ipoteză implicită în care nu este nevoie să folosiți o backslash. Acesta este
cazul în care linia logică are o paranteză de pornire, începând paranteze pătrate sau un
braț de plecare inițial, dar nu una finală. Aceasta se numește asociere implicită . Puteți
vedea acest lucru în acțiune atunci când scriem programe folosind lista în capitolele
ulterioare.
Indentare
Spațiul alb este important în Python. De fapt, spațiile albe de la începutul liniei sunt
importante . Aceasta se numește indentare . Spațiul principal (spațiile și filele) de la
începutul liniei logice este utilizat pentru a determina nivelul de indentare al liniei logice,
care la rândul său este folosit pentru a determina gruparea de declarații.
Un lucru pe care trebuie să-l amintiți este că o indentare greșită poate da naștere unor
erori. De exemplu:
i=5
# Error below! Notice a single space at the start of the line
print('Value is', i)
print('I repeat, the value is', i)
print('Value is', i)
^
IndentationError: unexpected indent
Observați că există un singur spațiu la începutul liniei a doua. Eroarea indicată de Python
ne spune că sintaxa programului este nevalidă, adică programul nu a fost scris corect. Ce
înseamnă pentru tine este ca nu poți începe arbitrar noi blocuri de declarații (cu excepția
blocului principal implicit pe care l-ai folosit de-a lungul operațiunii, desigur). Cazurile în
care puteți utiliza blocuri noi vor fi detaliate în capitolele ulterioare, cum ar fi fluxul de
control .
28 Modul de indentare
rezumat
Acum, după ce am trecut prin multe detalii detaliate, putem trece la lucruri mai
interesante, cum ar fi declarațiile de flux de control. Asigurați-vă că vă simțiți confortabil
cu ceea ce ați citit în acest capitol.
A Byte of Python Operatori și expresii
Operatori și expresii
Cele mai multe declarații (linii logice) pe care le scrieți vor conține expresii . Un exemplu
simplu al unei expresii este 2 + 3. O expresie poate fi împărțită în operatori și operanzi.
Operatorii sunt funcții care fac ceva și pot fi reprezentate prin simboluri precum + sau prin
cuvinte cheie speciale. Operatorii necesită funcționarea unor date și aceste date se
numesc operanzi . În acest caz, 2 și 3sunt operanzii.
29 Operatorii
Vom examina pe scurt operatorii și utilizarea lor.
Rețineți că puteți evalua expresiile date în exemple folosind interpretul interactiv. De
exemplu, pentru a testa expresia 2 + 3, folosiți promptul interactiv al interpretului Python:
>>> 2 + 3
5
>>> 3 * 5
15
>>>
+ (Plus)
o Adaugă două obiecte
o 3 + 5 da 8. 'a' + 'b' da 'ab'.
- (minus)
o Dă scăderea unui număr de celălalt; dacă primul operand este absent, se
presupune că este zero.
o -5.2 dă un număr negativ și 50 – 24 dă 26.
* (înmulțește)
o Dă înmulțirea celor două numere sau returnează șirul repetat de mai multe
ori.
o 2 * 3 da 6. 'la' * 3 da 'lalala'.
** (putere)
o Returnează x la puterea y
o 3 ** 4 dă 81 (ie 3 * 3 * 3 * 3)
A Byte of Python Operatori și expresii
/ (împarte)
o Împărțiți x cu y
o 13 / 3 dă 4.333333333333333
// (împărțire și rest)
o Împărțiți x cu y și rotunjește rezultatul până la cea mai apropiată valoare
30 întreagă. Rețineți că dacă una dintre valori este float, rezultatul obținut va fi tot float.
o 13 // 3 dă 4
o -13 // 3 dă -5
o 9//1.81 dă 4.0
% (Modulo)
o Returnează restul împărțirii
o 13 % 3 da 1. -25.5 % 2.25 da 1.5.
<< (schimbare stânga)
o Se schimbă biții numărului în stânga după numărul de biți
specificați. (Fiecare număr este reprezentat în memorie de biți sau cifre binare, adică 0 și
1)
o 2 << 2 da 8. 2 este reprezentat de 10 biți.
o Transmisia stânga cu 2 biți dă 1000 care reprezintă zecimală 8.
>> (schimbare dreapta)
o Se schimbă biții numărului în dreapta cu numărul de biți specificați.
o 11 >> 1 da 5.
o 11 este reprezentat în biți prin 1011 care, atunci când dreapta este deplasată
cu 1 biți, 101 care este zecimală 5.
^ (operatorul logic XOR)
o Bitul XOR al numerelor
o 5 ^ 3 dă 6
~ (inversat în biți)
o Inversiunea logică a lui x este - (x + 1)
o ~5 da -6. Mai multe detalii la http://stackoverflow.com/a/11810203
31 < (mai
mic decât)
o Returnează dacă x este mai mică decât y. Toți operatorii de comparație
returnează True sau False. Rețineți capitalizarea acestor nume.
o 5 < 3 dă False și 3 < 5 dă True.
o Comparațiile pot fi legate în mod arbitrar: 3 < 5 < 7 dă True.
== (egal cu)
o Compară dacă obiectele sunt egale
o x = 2; y = 2; x == y se întoarce True
o x = 'str'; y = 'stR'; x == y se întoarce False
o x = 'str'; y = 'str'; x == y se întoarce True
!= (diferit)
o Compară dacă obiectele nu sunt egale
A Byte of Python Operatori și expresii
o x = 2; y = 3; x != y se întoarce True
not (NU boolean)
o Dacă x este True, se întoarce False. Dacă x este False, se întoarce True.
o x = True; not x se întoarce False.
32
and (ȘI
boolean)
o x and y returnează False dacă x este False, altfel returnează evaluarea lui y
o x = False; y = True; x and y revine False din moment ce x este Fals. În acest caz,
Python nu va evalua, deoarece știe că partea stângă a expresiei "și" este False ceea ce
implică faptul că întreaga expresie va fi False indiferent de celelalte valori. Aceasta se
numește evaluare la scurtcircuit.
or (SAU boolean)
o Dacă x este True, se întoarce True, altfel returnă evaluarea lui y
o x = True; y = False; x or y se întoarce True. Evaluarea la scurtcircuit se aplică și
aici.
Ordin de evaluare
Dacă ați avut o expresie cum ar fi 2 + 3 * 4, este adunarea făcută mai întâi sau
multiplicarea? Matematica noastră de liceu ne spune că multiplicarea ar trebui făcută mai
A Byte of Python Operatori și expresii
întâi. Acest lucru înseamnă că operatorul de multiplicare are o prioritate mai mare decât
operatorul de adunare.
Următorul tabel dă tabelul de priorități pentru Python, de la cea mai mică prioritate (cea
mai puțin obligatorie) la cea mai înaltă prioritate (cel mai mare caracter
obligatoriu). Aceasta înseamnă că într-o expresie dată, Python va evalua mai întâi
operatorii și expresiile mai mici în tabel, înainte de cele listate mai sus în tabel.
Următorul tabel, preluat din manualul de referință Python , este furnizat din motive de
exhaustivitate. Este mult mai bine să utilizați paranteze pentru a grupa operatorii și
operanzii în mod corespunzător pentru a specifica în mod explicit prioritatea. Acest lucru
face programul mai ușor de citit. Consultați Schimbarea ordinii de evaluare de mai jos
33
pentru detalii.
Asociativitatea
Operatorii sunt, de obicei, asociați de la stânga la dreapta. Acest lucru înseamnă că
operatorii cu aceeași prioritate sunt evaluați în manieră stânga-dreaptă. De exemplu, 2 + 3
+ 4 este evaluată (2 + 3) + 4.
Expresii
Exemplu (salvați ca expression.py):
34 length = 5
breadth = 2
area = length * breadth
print('Area is', area)
print('Perimeter is', 2 * (length + breadth))
ieșire:
$ python expression.py
Area is 10
Perimeter is 14
Cum funcționează
rezumat
Am văzut cum să folosim operatori, operanzi și expresii - acestea sunt elementele de bază
ale oricărui program. Apoi, vom vedea cum să le folosim în programele noastre folosind
declarații.
A Byte of Python Operatori și expresii
35
A Byte of Python Control Flow
Control Flow
În programele pe care le-am văzut până acum, au existat întotdeauna o serie de declarații
executate cu fidelitate de Python în ordinea exactă de sus în jos. Dacă ați fi vrut să
schimbați modul în care funcționează? De exemplu, doriți ca programul să ia anumite
decizii și să facă diferite lucruri în funcție de situații diferite, 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ă utilizând declarații de flux de
36 control. Există trei declarații de flux de control în Python - if, for și while.
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 if-block ), altfel procesăm un alt bloc de
instrucțiuni (numit alt bloc ). Altă clauză este opțională.
Exemplu (salvați ca if.py):
number = 23
guess = int(input('Enter an integer : '))
if guess == number:
# New block starts here
print('Congratulations, you guessed it.')
print('(but you do not win any prizes!)')
# New block ends here
elif guess < number:
# Another block
print('No, it is a little higher than that')
# You can do whatever you want in a block ...
else:
print('No, it is a little lower than that')
# you must have guessed > number to reach here
print('Done')
# This last statement is always executed,
# after the if statement is executed.
ieșire:
$ python if.py
Enter an integer : 50
A Byte of Python Control Flow
$ python if.py
Enter an integer : 22
No, it is a little higher than that
Done
37 $ python if.py
Enter an integer : 23
Congratulations, you guessed it.
(but you do not win any prizes!)
Done
Cum funcționează
În acest program, luăm presupuneri de la utilizator și verificăm dacă acesta este numărul
pe care îl avem. Am setat variabila number la orice întreg dorim, sa spunem 23. Apoi, luăm
presupunerea 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 funcției încorporate input care îl imprimă pe ecran și așteaptă introducerea
de la utilizator. Odată ce introducem ceva și apăsăm [enter], funcția input() returnează
ceea ce am introdus, ca un șir. Apoi convertim acest șir la un întreg folosind int și apoi
stocăm-l în variabila guess. De fapt, aceasta int este o clasă, dar tot ce trebuie să știți chiar
acum este că o puteți folosi pentru a converti un șir la un întreg (presupunând că șirul
conține un întreg valid în text).
Apoi, vom compara estimarea utilizatorului cu numărul pe care l-am ales. Dacă acestea
sunt egale, vom imprima un mesaj de succes. Observați că folosim nivele de indentare
pentru a spune Python care dintre afirmații aparțin blocului. Acesta este motivul pentru
care indentarea este atât de importantă în Python. Sper că vă respectați regula de
"indentare consistentă". Nu-i așa?
Observați modul în care instrucțiunea if are două puncte ”:” la sfârșit - indicăm Python că
urmează un bloc de declarații.
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 acesta. Ce am folosit aici
este clauza elif care combină de fapt două afirmații înrudite if else-if else într-o
singură declarație combinată if-elif-else. Acest lucru face programul mai ușor și reduce
cantitatea de indentare necesară.
Declarațiile elif și declarațiile else trebuie să aibă, de asemenea, semnul două puncte ”:” la
sfârșitul liniei logice urmate de blocul de declarații corespunzător (cu indentare
corespunzătoare, desigur)
Puteți avea o altă declarație if în interiorul blocului if-a unei declarații if și așa mai departe
- aceasta se numește o declarație imbricată if.
A Byte of Python Control Flow
if True:
print('Yes, it is true')
Declarația while
Instrucțiunea while vă permite să executați în mod repetat un bloc de declarații atâta timp
cât o condiție este adevărată. O declarație while este un exemplu de ceea ce se numește
o declarație de buclă . O declarație while poate avea o clauză else opțională .
Exemplu (salvați ca while.py):
number = 23
running = True
while running:
guess = int(input('Enter an integer : '))
if guess == number:
print('Congratulations, you guessed it.')
# this causes the while loop to stop
running = False
elif guess < number:
print('No, it is a little higher than that.')
else:
print('No, it is a little lower than that.')
else:
A Byte of Python Control Flow
ieșire:
$ python while.py
Enter an integer : 50
No, it is a little lower than that.
39
Enter an integer : 22
No, it is a little higher than that.
Enter an integer : 23
Congratulations, you guessed it.
The while loop is over.
Done
Cum funcționează
În acest program, jucăm încă jocul de ghicit, dar avantajul este că utilizatorul are
permisiunea să păstreze ghicitul până când ghicește corect - nu este nevoie să executați în
mod repetat programul pentru fiecare ghicire, așa cum am făcut în secțiunea
anterioară . Acest lucru demonstrează cu ușurință utilizarea declarației while.
Am mutat declarațiile input și if în interiorul buclei while și setați variabila running la True
înainte de bucla în timp. Mai întâi, verificăm dacă variabila running este True și apoi
continuăm executarea blocului de timp corespunzător. După ce se execută acest bloc, se
verifică din nou condiția care în acest caz este variabila running. Dacă este adevărat,
executăm din nou blocul de timp, altfel vom continua să executăm blocul opțional
altcineva și apoi vom continua cu următoarea instrucțiune.
Blocul else este executat atunci când starea buclei while devine False - aceasta poate fi chiar
și prima dată că această condiție este verificată. Dacă există o clauză else pentru o buclă
while, aceasta este întotdeauna executată dacă nu ieși din bucla cu o instrucțiune break.
True și False sunt numite tipuri Boolean și puteți lua în considerare ca acestea să fie
echivalentă cu valoarea 1și respectiv, 0.
Notă pentru programatorii C / C ++
Bucla for
Instrucțiunea for..in este o altă instrucțiune looping care repetă 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 chiar acum este
că o secvență este doar o colecție ordonată de articole.
A Byte of Python Control Flow
ieșire:
$ python for.py
1
40
2
3
4
The for loop is over
Cum funcționează
În C / C ++, dacă doriți să scrieți for (int i = 0; i < 5; i++) , atunci în Python scrieți doar for i in
range (0,5). După cum puteți vedea, bucla for este mai simplă, mai expresivă și mai puțin
predispusă la erori în Python.
Declarația break
Instrucțiunea break este folosită pentru a ieși dintr-o declarație de buclă, adică opriți
executarea unei instrucțiuni de buclă, chiar dacă condiția de buclă nu a devenit False sau
secvența de elemente nu a fost repetată complet.
O notă importantă este că dacă rupe o instrucțiune for sau buclă while, orice bloc din buclă
41 corespunzătoare else este nu executat.
while True:
s = input('Enter something : ')
if s == 'quit':
break
print('Length of the string is', len(s))
print('Done')
ieșire:
$ python break.py
Enter something : Programming is fun
Length of the string is 18
Enter something : When the work is done
Length of the string is 21
Enter something : if you wanna make your work also fun:
Length of the string is 37
Enter something : use Python!
Length of the string is 11
Enter something : quit
Done
Cum funcționează
În acest program, luăm în mod repetat intrarea utilizatorului și imprimăm fiecare dată
fiecare lungime. Oferim o condiție specială pentru a opri programul, verificând dacă este
introdusă de utilizator 'quit'. Ne oprim programul de rupere în afara buclei și să ajungă la
sfârșitul programului.
Lungimea șirului de intrare poate fi găsită utilizând funcția încorporată len.
Amintiți-vă că declarația break poate fi utilizată și cu bucla for.
A Byte of Python Control Flow
Intrarea pe care am folosit-o aici este un poem mini pe care l-am scris:
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
42
Declarația Continue
Instrucțiunea continue este folosită pentru a spune lui Python să ignore restul
instrucțiunilor din blocul actual de buclă și să continue la următoarea iterație a buclă.
Exemplu (salvați ca continue.py):
while True:
s = input('Enter something : ')
if s == 'quit':
break
if len(s) < 3:
print('Too small')
continue
print('Input is of sufficient length')
# Do other kinds of processing here...
ieșire:
$ python continue.py
Enter something : a
Too small
Enter something : 12
Too small
Enter something : abc
Input is of sufficient length
Enter something : quit
Cum funcționează
A Byte of Python Control Flow
În acest program, acceptăm intrarea de la utilizator, dar procesăm șirul de intrare numai
dacă are cel puțin 3 caractere. Deci, folosim funcția încorporată len pentru a obține
lungimea și dacă lungimea este mai mică de 3, vom sări peste restul instrucțiunilor din
bloc utilizând instrucțiunea continue. În caz contrar, restul declarațiilor din buclă sunt
executate, făcând orice fel de procesare pe care dorim să o facem aici.
Rețineți că declarația continue funcționează și cu bucla for.
Rezumat
43 Am văzut cum să folosim cele trei declarații de control al fluxului - if, while și , for împreună
cu cele asociate lor, declarațiile break și continue. Acestea sunt unele dintre cele mai
frecvent utilizate părți ale Python și, prin urmare, a utilizarea lor într-un mod confortabil
este esențială.
Funcții
Funcțiile sunt bucăți de programe reutilizabile. Ele vă permit să dați un nume unui bloc de
declarații, permițându-vă să rulați blocul folosind numele specificat oriunde în program și
de câte ori. Aceasta se numește apelarea funcției. Am folosit deja multe funcții
încorporate, cum ar fi len și range.
Conceptul de funcții este probabil cel mai important element de construcție al oricărui
soft non-trivial (în orice limbaj de programare), așa că vom explora diferite aspecte ale
funcțiilor din acest capitol.
44
Funcțiile sunt definite folosind cuvântul cheie def. După acest cuvânt cheie apare un nume
de identificator pentru funcție, urmat de o pereche de paranteze care pot include unele
nume de variabile și de două puncte (:) care finalizează linia. În continuare urmează blocul
de instrucțiuni care fac parte din această funcție. Un exemplu va arăta că acest lucru este
de fapt foarte simplu:
ieșire:
$ python function1.py
hello world
hello world
Cum funcționează
Definim o funcție numită say_hello folosind sintaxa așa cum este explicat mai sus. Această
funcție nu are parametri și, prin urmare, nu există variabile declarate în
paranteze. Parametrii funcțiilor sunt doar intrări în funcție, astfel încât să putem
transmite valori diferite și să obținem rezultate corespunzătoare.
Observați că putem numi aceeași funcție de două ori, ceea ce înseamnă că nu trebuie să
scriem din nou același cod.
Parametrii funcțiilor
O funcție poate lua parametri, care sunt valori pe care le furnizați funcției, astfel încât
funcția să poată face ceva folosind aceste valori. Acești parametri sunt la fel ca variabilele,
A Byte of Python Funcții
cu excepția faptului că valorile acestor variabile sunt definite atunci când apelăm funcția
și sunt deja atribuite valori când funcționează funcția.
Parametrii sunt specificați în perechea de paranteze din definiția funcției, separate prin
virgule. Atunci când apelăm funcția, furnizăm valorile în același mod. Rețineți
terminologia utilizată - numele furnizate în definiția funcției sunt numite parametri, în
timp ce valorile pe care le furnizați în apelul pentru funcții sunt numite argumente .
x=5
y=7
ieșire:
$ python function_param.py
4 is maximum
7 is maximum
Cum funcționează
Aici, definim o funcție numită print_max care folosește doi parametri numiți a și b. Aflăm
numărul mai mare folosind o simplă declarație if..else și apoi imprimați numărul mai mare.
Prima dată când numim funcția print_max, furnizăm direct numerele ca argumente. În al
doilea caz, numim funcția cu variabile ca argumente. print_max(x, y) determină valoarea
argumentului x care va fi atribuită parametrului a și valoarea argumentului care y va fi
alocat parametrului b. Funcția print_max funcționează în același mod , în ambele cazuri.
A Byte of Python Funcții
Variabile locale
Când declarați variabilele în interiorul unei definiții a funcției, ele nu sunt în nici un fel
legate de alte variabile cu aceleași nume folosite în afara funcției - de exemplu, numele
variabilelor sunt locale pentru funcție. Aceasta se numește domeniul de aplicare al
variabilei. Toate variabilele au domeniul de aplicare al blocului în care sunt declarate
începând de la punctul de definire a numelui.
46 x = 50
def func(x):
print('x is', x)
x=2
print('Changed local x to', x)
func(x)
print('x is still', x)
ieșire:
$ python function_local.py
x is 50
Changed local x to 2
x is still 50
Cum funcționează
Prima dată când imprimăm valoarea numelui x cu prima linie din corpul funcției, Python
utilizează valoarea parametrului declarat în blocul principal, deasupra definiției funcției.
În continuare, vom atribui valoarea 2 valoarea x. Numele x este local pentru funcția
noastră. Deci, când schimbăm valoarea funcției x, definiția x din blocul principal rămâne
neafectată.
Cu ultima instrucțiune print, afișăm valoarea definită x în blocul principal, confirmând astfel
că aceasta nu este efectiv afectată de atribuirea locală în cadrul funcției numite anterior.
Declarația global
Dacă doriți să atribuiți o valoare unui nume definit la cel mai înalt nivel al programului
(adică nu în interiorul vreunui scop, cum ar fi funcții sau clase), atunci trebuie să îi spuneți
lui Python că numele nu este local, ci este global . Facem asta folosind instrucțiunea
global. Este imposibil să atribuiți o valoare unei variabile definite în afara unei funcții
fără instrucțiunea global.
Puteți utiliza valorile unor astfel de variabile definite în afara funcției (presupunând că nu
există nici o variabilă cu același nume în cadrul funcției). Cu toate acestea, acest lucru nu
este încurajat și ar trebui evitat deoarece nu este clar pentru cititorul programului unde
A Byte of Python Funcții
def func():
global x
print('x is', x)
x=2
47 print('Changed global x to', x)
func()
print('Value of x is', x)
ieșire:
$ python function_global.py
x is 50
Changed global x to 2
Value of x is 2
Cum funcționează
Instrucțiunea global este folosită pentru a declara că x este o variabilă globală - prin
urmare, atunci când atribuim o valoare în interiorul funcției x, acea modificare se reflectă
atunci când folosim valoarea din blocul principal x.
Puteți specifica mai mult de o variabilă globală folosind aceeași instrucțiune global, de
ex global x, y, z.
ieșire:
$ python function_default.py
Hello
WorldWorldWorldWorldWorld
Cum funcționează
Funcția denumită say este utilizată pentru a imprima un șir de câte ori este specificat. Dacă
48 nu furnizăm o valoare, atunci, implicit, șirul este imprimat o singură dată. Acest lucru se
realizează prin specificarea valorii argumentului implicit a lui 1 parametrului times.
În prima utilizare a lui say, furnizăm numai șirul și imprimă șirul o singură dată. În cea de-a
doua utilizare say, furnizăm atât șirul, cât și un argument 5care spune că dorim
să spunem mesajul de șir de 5 ori.
ATENȚIE
Numai acei parametri care se află la sfârșitul listei de parametri pot primi valori implicite
ale parametrilor, adică nu puteți avea un parametru cu o valoare implicită a unui
argument înainte de un parametru fără o valoare de argument implicită în lista de
parametri a funcției.
Acest lucru se datorează faptului că valorile sunt atribuite parametrilor după poziție. De
exemplu, def func(a, b=5) este valid, dar nu def func(a=5, b) este valid .
Există două avantaje - unu, folosind funcția este mai ușoară, deoarece nu avem nevoie să
ne îngrijorăm de ordinea argumentelor. Doi, putem da valori numai acelor parametri la
care dorim, cu condiția ca ceilalți parametri să aibă valori implicite ale argumentului.
func(3, 7)
func(25, c=24)
func(c=50, a=100)
A Byte of Python Funcții
ieșire:
$ python function_keyword.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
Cum funcționează
49 Funcția numită func are un parametru fără o valoare de argument implicită, urmată de doi
parametri cu valorile implicite ale argumentului.
În prima utilizare, func(3, 7) parametrul a obține valoarea 3, parametrul b obține valoarea 7
și c primește valoarea implicită 10.
În a doua utilizare func (25, c=24), variabila a obține valoarea de 25 datorită poziției
argumentului. Apoi, parametrul c obține valoarea 24 datorată numirii argumentelor
cuvintelor cheie. Variabila b obține valoarea implicită de 5.
În a treia utilizare func(c=50, a=100), folosim argumentele cuvintelor cheie pentru toate
valorile specificate. Observați că specificăm valoarea pentru parametru c înainte de
aceea, a chiar dacă a este definită anterior c în definiția funcției.
Parametrii VarArgs
Uneori s-ar putea dori să definească o funcție care poate lua orice număr de parametri,
adică numărul variabil de argumente, acest lucru poate fi realizat prin utilizarea de steluțe
( salvați ca function_varargs.py):
ieșire:
$ python function_varargs.py
a 10
single_item 1
single_item 2
A Byte of Python Funcții
single_item 3
Inge 1560
John 2231
Jack 1123
None
Cum funcționează
Declarația return
Instrucțiunea return este utilizată pentru a reveni dintr-o funcție, adică a ieși din
funcție. Putem returna opțional o valoare din funcție, de asemenea.
Exemplu (salvați ca function_return.py):
def maximum(x, y):
if x > y:
return x
elif x == y:
return 'The numbers are equal'
else:
return y
print(maximum(2, 3))
ieșire:
$ python function_return.py
3
Cum funcționează
Fiecare funcție implică implicit o declarație return None la sfârșit dacă nu ați scris propria
voastră declarație return. Puteți vedea acest lucru executând în print(some_function()) cazul în
care funcția some_function nu utilizează instrucțiunea return, cum ar fi:
def some_function():
pass
51 DocStrings
Python are o caracteristică minuțioasă numită șiruri de documentație , de obicei
menționată prin docstrings de nume mai scurte . DocStrings este un instrument important
pe care ar trebui să-l utilizați, deoarece ajută la documentarea mai bună a programului și
îl face mai ușor de înțeles. În mod surprinzător, putem obține chiar și docstring-ul, de
exemplu, o funcție, atunci când programul este de fapt rulat!
ieșire:
$ python function_docstring.py
5 is maximum
Prints the maximum of two numbers.
The two values must be integers.
Cum funcționează
Convenția urmată pentru un docstring este un șir multi-linie în care prima linie începe cu
o literă de majuscule și se termină cu un punct. Apoi, a doua linie este goală, urmată de
orice explicație detaliată pornind de la a treia linie. Vă recomandăm cu tărie să urmați
această convenție pentru toate docstrings dvs. pentru toate funcțiile dvs. non-banale.
rezumat
Am văzut atât de multe aspecte ale funcțiilor, dar rețineți că încă nu le-am acoperit toate
aspectele. Cu toate acestea, am acoperit deja cele mai multe dintre ceea ce veți folosi în
ceea ce privește funcțiile Python în fiecare zi.
Module
Ați văzut cum puteți reutiliza codul în programul dvs. prin definirea funcțiilor o dată. Dacă
doriți să reutilizați o serie de funcții în alte programe pe care le scrieți? După cum probabil
ați ghicit, răspunsul este modulul.
Există diferite metode de scriere a modulelor, dar cea mai simplă modalitate este de a
crea un fișier cu o extensie .py care conține funcții și variabile.
O altă metodă este de a scrie modulele în limbajul nativ în care a fost scris interpretul
53 Python. De exemplu, puteți scrie module în limbajul de programare C și când sunt
compilate, ele pot fi folosite din codul dvs. Python când utilizați interpretul standard
Python.
import sys
print('The command line arguments are:')
for i in sys.argv:
print(i)
print('\n\nThe PYTHONPATH is', sys.path, '\n')
ieșire:
$ python module_using_sys.py we are arguments # each arg is separated by white space
The command line arguments are:
module_using_sys.py
we
are
arguments
Cum funcționează
Atunci când Python execută instrucțiunea import sys, ea caută modulul sys. În acest caz,
acesta este unul dintre modulele încorporate și, prin urmare, Python știe de unde să o
găsească.
Dacă nu a fost un modul compilat, adică un modul scris în Python, interpretul Python îl va
căuta în directoarele listate în variabila sa sys.path. Dacă modulul este găsit, atunci se
execută instrucțiunile din corpul acelui modul și modulul este disponibil pentru
utilizare. Rețineți că inițializarea se face numai pentru prima dată când importăm un
modul.
Variabila argv în sys modulul este accesat cu ajutorul ex : notație punctata sys.argv. Aceasta
indică în mod clar faptul că acest nume face parte din modulul sys. Un alt avantaj al
54 acestei abordări este că numele nu contravine nici unei argv variabile utilizate în
programul dvs. sys.argv
Variabila este o listă de șiruri (liste sunt explicate în detaliu într - un capitol ulterior ). Mai
exact, sys.argv conține lista argumentelor 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, căutați o modalitate de a
specifica argumentele liniei de comandă la program din meniuri.
Fișierele Byte-compilat.pyc
Importul unui modul este o afacere relativ costisitoare, astfel încât Python face câteva
trucuri pentru a-l face mai rapid. O modalitate este de a crea fișiere compilate byte cu
extensia .pyc care este o formă intermediară pe care Python o transformă în program
(amintiți-vă la secțiunea introductivă despre modul în care funcționează Python?). Acest
fișier .pyc este util atunci când importați modulul data viitoare dintr-un program diferit - va
fi mult mai rapid deoarece o parte din procesul de procesare necesar pentru importarea
unui modul este deja realizat. De asemenea, aceste fișiere compilate de octeți sunt
independente de platformă.
A Byte of Python Module
Instrucțiunea de la import
Dacă doriți să importați direct variabila argv în programul dvs. (pentru a evita tastarea sys.
oricând pentru aceasta), atunci puteți utiliza instrucțiunea from sys import argv .
AVERTISMENT: În general, evitați utilizarea instrucțiunii from..import, utilizați în schimb
instrucțiunea import. Acest lucru se datorează faptului că programul dvs. va evita
55 confruntările cu nume și va fi mai ușor de citit.
Exemplu:
from math import sqrt
print("Square root of 16 is", sqrt(16))
Fiecare modul are un nume și declarațiile dintr-un modul pot afla numele modulului
lor. Acest lucru este util pentru scopul special de a afla dacă modulul este rulat
independent sau fiind importat. După cum sa menționat anterior, atunci când un modul
este importat pentru prima dată, codul pe care îl conține este executat. Putem folosi
acest mod pentru a face ca modulul să se comporte în moduri diferite, în funcție de
utilizarea acestuia sau de importul acestuia dintr-un alt modul. Acest lucru poate fi
realizat folosind atributul modulului __name__.
Exemplu (salvați ca module_using_name.py):
if __name__ == '__main__':
print('This program is being run by itself')
else:
print('I am being imported from another module')
ieșire:
$ python module_using_name.py
This program is being run by itself
$ python
>>> import module_using_name
I am being imported from another module
>>>
A Byte of Python Module
Cum funcționează
Fiecare modul Python are definit __name__. În acest caz, acest lucru '__main__' implică
faptul că modulul este rulat în mod autonom de către utilizator și putem lua măsuri
adecvate.
def say_hi():
print('Hi, this is mymodule speaking.')
__version__ = '0.1'
Cele de mai sus au fost un modul de eșantionare . După cum puteți vedea, nu există nimic
deosebit în legătură cu acesta, comparativ cu programul nostru obișnuit Python. Vom
vedea în continuare modul de utilizare a acestui modul în celelalte programe Python.
Amintiți-vă că modulul trebuie plasat fie în același director ca și programul din care îl
importăm, fie într-unul din directoarele listate în sys.path.
Un alt modul (salvat ca mymodule_demo.py):
import mymodule
mymodule.say_hi()
print('Version', mymodule.__version__)
ieșire:
$ python mymodule_demo.py
Hi, this is mymodule speaking.
Version 0.1
Cum funcționează
Observați că folosim aceeași notație punctată pentru a accesa membrii modulului. Python
face o reutilizare reușită a aceleiași notații pentru a da o simțire distinctivă "Pythonic",
astfel încât să nu mai trebuie să învățăm noi modalități de a face lucruri.
say_hi()
print('Version', __version__)
Unul dintre principiile directoare ale Python este că "Explicitul este mai bun decât
Implicit". Rulați import this în Python pentru a afla mai multe.
Funcția dir
Funcția dir() încorporată returnează lista de nume definite de un obiect. Dacă obiectul este
un modul, această listă include funcții, clase și variabile definite în interiorul acelui modul.
Această funcție poate accepta argumente. Dacă argumentul este numele modulului,
funcția returnează lista de nume din modulul specificat. Dacă nu există niciun argument,
funcția returnează lista de nume din modulul curent.
Exemplu:
$ python
>>> import sys
# get names of attributes in sys module
>>> dir(sys)
['__displayhook__', '__doc__',
'argv', 'builtin_module_names',
'version', 'version_info']
# only few entries shown here
# get names of attributes for current module
>>> dir()
['__builtins__', '__doc__',
'__name__', '__package__', 'sys']
# create a new variable 'a'
A Byte of Python Module
>>> a = 5
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'sys', 'a']
# delete/remove a name
>>> del a
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'sys']
58 Cum funcționează
Pachete
Până acum, trebuie să fi început să observați ierarhia organizării programelor. Variabilele
intră, de obicei, în interiorul funcțiilor. Funcțiile și variabilele globale intră, de obicei, în
interiorul modulelor. Dacă ați fi vrut să organizați module? Aici intră pachetele în imagine.
Pachetele sunt doar dosare de module cu un fișier special __init__.py care indică Python că
acest dosar este special deoarece conține module Python.
Să presupunem că doriți să creați un pachet numit "lume" cu subpachete "asia", "africa"
etc., iar aceste subpachete conțin, la rândul lor, module ca "India", "Madagascar" etc.
- foo.py
- africa/
- __init__.py
- madagascar/
- __init__.py
- bar.py
Pachetele sunt doar o convenție pentru organizarea ierarhică a modulelor. Veți vedea
multe exemple de acest lucru în biblioteca standard .
Rezumat
59 La fel cum funcțiile sunt părți reutilizabile ale programelor, modulele sunt programe
reutilizabile. Pachetele reprezintă o altă ierarhie pentru organizarea modulelor. Biblioteca
standard care vine cu Python este un exemplu de astfel de pachete și module.
În continuare, vom afla despre câteva concepte interesante numite structuri de date.
A Byte of Python Structuri de date
Structuri de date
Structurile de date sunt, în principiu, doar că sunt structuri care pot conț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ă folosim fiecare dintre ele și cum ne ușurează viața.
60 Listă
Structura list este o structură de date care deține o colecție ordonată de elemente, adică
puteți stoca o serie de elemente dintr-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 dvs. de
cumpărături, în timp ce în Python puneți virgule între ele.
Lista articolelor trebuie să fie închisă în paranteze pătrate, astfel încât Python înțelege că
specificați o listă. Odată ce ați creat o listă, puteți să adăugați, să eliminați sau să căutați
elemente din listă. Din moment ce putem adăuga și elimina elemente, spunem că o listă
este un tip de date mutabil, adică acest tip poate fi modificat.
ieşire:
$ python ds_using_list.py
I have 4 items to purchase.
These items are: apple mango carrot banana
I also have to buy rice.
My shopping list is now ['apple', 'mango', 'carrot', 'banana', 'rice']
I will sort my list now
Sorted shopping list is ['apple', 'banana', 'carrot', 'mango', 'rice']
The first item I will buy is apple
I bought the apple
My shopping list is now ['banana', 'carrot', 'mango', 'rice']
Cum funcționează
imprimarea conținutului listei prin simpla trecere a listei la funcția print care o imprimă cu
ușurință.
Apoi, sortăm lista utilizând metoda sort din listă. Este important să înțelegeți că această
metodă afectează lista în sine și nu returnează o listă modificată - aceasta este diferită de
modul în care lucrează șirurile. Aceasta este ceea ce înțelegem prin a spune că listele
sunt mutabile și că șirurile sunt imuabile .
Apoi, când încheiem cumpărarea unui element pe piață, dorim să îl eliminăm din
listă. Realizăm acest lucru utilizând declarația del. Aici, menționăm ce element al listei pe
care dorim să-l eliminăm și del instrucțiunea o elimină din listă pentru noi. Specificăm că
vrem să eliminăm primul element din listă și de aceea folosim del shoplist[0] (rețineți că
62 Python începe să numere de la 0).
Dacă doriți să cunoașteți toate metodele definite de obiectul de listă, consultați detaliile
help(list) .
Tuplu
Tuplurile sunt folosite pentru a reține obiecte multiple. Gândiți-vă la ele ca fiind la fel de
asemănătoare cu listele, dar fără funcționalitatea extinsă pe care o oferă clasa de listă. O
caracteristică majoră a tuplurilor este că ele sunt imuabile ca șiruri de caractere, adică nu
puteți modifica tuplurile.
Tuplurile sunt definite prin specificarea elementelor separate prin virgule într-o pereche
opțională de paranteze.
În mod obișnuit, căutările sunt folosite în cazurile în care o declarație sau o funcție
definită de utilizator poate presupune în siguranță că colecția de valori (adică tuplul
valorilor utilizate) nu se va schimba.
new_zoo = 'monkey', 'camel', zoo # parentheses not required but are a good idea
print('Number of cages in the new zoo is', len(new_zoo))
print('All animals in new zoo are', new_zoo)
print('Animals brought from old zoo are', new_zoo[2])
print('Last animal brought from old zoo is', new_zoo[2][2])
print('Number of animals in the new zoo is',
len(new_zoo)-1+len(new_zoo[2]))
ieşire:
A Byte of Python Structuri de date
$ python ds_using_tuple.py
Number of animals in the zoo is 3
Number of cages in the new zoo is 3
All animals in new zoo are ('monkey', 'camel', ('python', 'elephant', 'penguin'))
Animals brought from old zoo are ('python', 'elephant', 'penguin')
Last animal brought from old zoo is penguin
Number of animals in the new zoo is 5
63 Cum funcționează
O listă dintr-o listă nu-și pierde identitatea, adică listele nu sunt aplatizate ca în
Perl. Același lucru este valabil și pentru un tuplu dintr-un tuplu sau un tuplu dintr-o listă
sau o listă în cadrul unui tuplu etc. În ceea ce privește Python, ele sunt doar obiecte
stocate folosind un alt obiect, asta-i tot.
Dicţionar
Un dicționar este ca o agendă de adrese unde puteți găsi adresa sau datele de contact ale
unei persoane, cunoscând doar numele acesteia, adică asociem cheile(numele)
cu valorile (detalii). Rețineți că cheia trebuie să fie unică, așa cum nu puteți afla
informațiile corecte dacă aveți două persoane cu același nume.
A Byte of Python Structuri de date
Rețineți că puteți utiliza numai obiecte imuabile (ca șiruri de caractere) pentru cheile unui
dicționar, dar puteți utiliza obiecte imuabile sau mutabile pentru valorile
dicționarului. Acest lucru se traduce, în principiu, pentru a spune că ar trebui să utilizați
doar obiecte simple pentru chei.
Perechi de chei și valori sunt specificate într-un dicționar folosind notația d = {key1 : value1,
key2 : value2 } . Observați că perechile cheie-valoare sunt separate de punct și virgulă și că
perechile sunt separate prin virgule și toate acestea sunt închise într-o pereche de
acolade.
Rețineți că perechile cheie-valoare dintr-un dicționar nu sunt ordonate în nici un fel. Dacă
doriți o anumită comandă, atunci va trebui să le sortați înainte de a le folosi.
64
Dicționarele pe care le veți folosi sunt instanțe / obiecte ale clasei dict.
ab = {
'Swaroop': 'swaroop@swaroopch.com',
'Larry': 'larry@wall.org',
'Matsumoto': 'matz@ruby-lang.org',
'Spammer': 'spammer@hotmail.com'
}
if 'Guido' in ab:
print("\nGuido's address is", ab['Guido'])
ieşire:
$ python ds_using_dict.py
A Byte of Python Structuri de date
Cum funcționează
Dacă ați utilizat argumentele cuvintelor cheie în funcțiile dvs., ați folosit deja
dicționare! Gândește-te doar la asta - perechea cheie-valoare este specificată de tine în
lista de parametri a definiției funcției și atunci când accesezi variabilele în cadrul funcției
tale, este doar o accesare cheie a unui dicționar (care se numește tabelul simbolului în
designul compilatorului terminologie).
Secvenţă
Liste, tuple și șiruri de caractere sunt exemple de secvențe, dar care sunt secvențele și
ceea ce este atât de special în privința lor?
A Byte of Python Structuri de date
# Slicing on a list #
print('Item 1 to 3 is', shoplist[1:3])
print('Item 2 to end is', shoplist[2:])
print('Item 1 to -1 is', shoplist[1:-1])
print('Item start to end is', shoplist[:])
# Slicing on a string #
print('characters 1 to 3 is', name[1:3])
print('characters 2 to end is', name[2:])
print('characters 1 to -1 is', name[1:-1])
print('characters start to end is', name[:])
ieşire:
$ python ds_seq.py
Item 0 is apple
Item 1 is mango
Item 2 is carrot
Item 3 is banana
Item -1 is banana
Item -2 is carrot
Character 0 is s
Item 1 to 3 is ['mango', 'carrot']
Item 2 to end is ['carrot', 'banana']
Item 1 to -1 is ['mango', 'carrot']
Item start to end is ['apple', 'mango', 'carrot', 'banana']
characters 1 to 3 is wa
characters 2 to end is aroop
characters 1 to -1 is waroo
characters start to end is swaroop
Cum funcționează
În primul rând, vom vedea cum să folosim indexurile pentru a obține elemente individuale
dintr-o secvență. Aceasta este denumită și operația de abonament . Ori de câte ori
specificați un număr unei secvențe în paranteze pătrate așa cum se arată mai sus, Python
vă va prelua elementul corespunzător acelei poziții în secvență. Amintiți-vă că Python
A Byte of Python Structuri de date
Primul număr (înainte de colon) în operația de tăiere se referă la poziția de la care începe
67
slice-ul, iar al doilea număr (după colon) indică unde se va opri slice-ul. Dacă primul
număr nu este specificat, Python va începe la începutul secvenței. Dacă al doilea număr
este lăsat afară, Python se va opri la sfârșitul secvenței. Rețineți că partea
întoarsă pornește în poziția inițială și se va termina chiar înainte de poziția finală , adică se
include poziția de pornire, dar poziția finală este exclusă de la secțiunea de secvență.
A stabilit
Seturile sunt colecții neordonate de obiecte simple. Acestea sunt folosite atunci când
existența unui obiect dintr-o colecție este mai importantă decât ordinea sau de câte ori
apare.
A Byte of Python Structuri de date
Folosind seturi, puteți testa pentru apartenență, indiferent dacă este vorba de un subset
al altui set, găsiți intersecția dintre două seturi și așa mai departe.
>>> bri = set(['brazil', 'russia', 'india'])
>>> 'india' in bri
True
>>> 'usa' in bri
False
>>> bric = bri.copy()
>>> bric.add('china')
>>> bric.issuperset(bri)
True
68 >>> bri.remove('russia')
>>> bri & bric # OR bri.intersection(bric)
{'brazil', 'india'}
Cum funcționează
Dacă vă amintiți matematica bazată pe teoria seturilor de la școală, atunci acest exemplu
este destul de explicativ. Dar dacă nu, puteți face Google "teoria seturilor" și "diagrama
Venn" pentru a înțelege mai bine utilizarea seturilor în Python.
Referințe
Când creați un obiect și îl atribuiți unei variabile, variabila se referă numai la obiect și nu
reprezintă obiectul însuși! Aceasta înseamnă că numele variabilei indică acea parte a
memoriei computerului în care este stocat obiectul. Aceasta se numește legarea numelui
de obiect.
if name.startswith('Swa'):
print('Yes, the string starts with "Swa"')
if 'a' in name:
print('Yes, it contains the string "a"')
if name.find('war') != -1:
print('Yes, it contains the string "war"')
delimiter = '_*_'
mylist = ['Brazil', 'Russia', 'India', 'China']
print(delimiter.join(mylist))
ieşire:
A Byte of Python Structuri de date
$ python ds_str_methods.py
Yes, the string starts with "Swa"
Yes, it contains the string "a"
Yes, it contains the string "war"
Brazil_*_Russia_*_India_*_China
Cum functioneaza
rezumat
Am explorat în detaliu diferitele structuri de date construite din Python. Aceste structuri
de date vor fi esențiale pentru scrierea de programe de dimensiuni rezonabile.
Acum că avem multe dintre elementele de bază ale Python, vom vedea în continuare cum
să proiectăm și să scriem un program Python în lumea reală.
A Byte of Python Rezolvarea problemelor
# Rezolvarea problemelor
Am explorat diferite părți ale limbajului Python și acum ne vom uita la modul în care toate
aceste părți se potrivesc împreună, prin proiectarea și scrierea unui program
care face ceva util. Ideea este să învățați cum să scrieți un script Python pe cont propriu.
Problema
Soluția
Deoarece proiectarea programului nostru este acum rezonabil stabilă, putem scrie codul
care este o implementare a soluției noastre.
Salvați ca backup_ver1.py:
import os
import time
if os.system(zip_command) == 0:
print('Successful backup to', target)
else:
print('Backup FAILED')
ieşire:
$ python backup_ver1.py
Zip command is:
73 zip -r /Users/swa/backup/20140328084844.zip /Users/swa/notes
Running:
adding: Users/swa/notes/ (stored 0%)
adding: Users/swa/notes/blah1.txt (stored 0%)
adding: Users/swa/notes/blah2.txt (stored 0%)
adding: Users/swa/notes/blah3.txt (stored 0%)
Successful backup to /Users/swa/backup/20140328084844.zip
Dacă programul de mai sus nu funcționează pentru dvs., copiați linia imprimată după Zip
command islinie în ieșire, lipiți-o în coajă (pe GNU / Linux și Mac OS X) / cmd(pe
Windows), vedeți ce este eroarea și încercați repara-l. Verificați, de asemenea, manualul
de comandă a zipului cu privire la ceea ce ar putea fi greșit. Dacă această comandă
reușește, atunci problema ar putea fi în programul Python în sine, deci verificați dacă se
potrivește exact cu programul scris mai sus.
Cum functioneaza
În loc de secvențe de evacuare duble înapoi, puteți utiliza, de asemenea, șiruri brute. De
exemplu, utilizați 'C:\\Documents'sau r'C:\Documents'. Cu toate
acestea, nu utilizați 'C:\Documents'deoarece ați terminat folosind o secvență de evacuare
necunoscută \D.
Acum, că avem un script de salvare de rezervă, îl putem folosi ori de câte ori dorim să
facem o copie de rezervă a fișierelor. 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, s-ar putea să existe probleme dacă
nu ați proiectat corect programul sau dacă ați făcut o greșeală atunci când tastați codul
etc. În mod corespunzător, va trebui să reveniți la faza de proiectare sau va trebui să
depanați programul.
A doua versiune
A Byte of Python Rezolvarea problemelor
Prima versiune a scenariului nostru funcționează. Cu toate acestea, putem face unele
rafinări pentru a-l, astfel încât să poată funcționa mai bine zilnic. Aceasta se numește faza
de întreținere a software-ului.
Unul dintre îmbunătățirile pe care le-am simțit era util este un mecanism mai bun de
denumire a fișierelor - folosind timpul ca numele fișierului într-un director
cu data curentă ca un director din directorul principal de backup. Primul avantaj este că
backup-urile sunt stocate într-o manieră ierarhică și, prin urmare, este mult mai ușor de
gestionat. Al doilea avantaj este că numele de fișiere 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
75 rezervă pentru fiecare zi de când directorul va fi creat numai dacă ați făcut o copie de
rezervă pentru acea zi.
Salvați ca backup_ver2.py:
import os
import time
# specified in a list.
# Example on Windows:
source = ['/Users/swa/notes']
# Example on Windows:
# target_dir = 'E:\\Backup'
target_dir = '/Users/swa/backup'
if not os.path.exists(target_dir):
now = time.strftime('%H%M%S')
if not os.path.exists(today):
os.mkdir(today)
' '.join(source))
print(zip_command)
77 print('Running:')
if os.system(zip_command) == 0:
else:
print('Backup FAILED')
ieşire:
$ python backup_ver2.py
Running:
Cum functioneaza
A treia versiune
Cea de-a doua versiune funcționează bine atunci când fac multe backup-uri, dar când
există o mulțime de copii de siguranță, mi se pare greu să diferențiez ce au făcut backup-
urile! De exemplu, s-ar fi putut face unele modificări majore la un program sau o
prezentare, apoi vreau să asociez ce sunt aceste schimbări cu numele arhivei zip. Acest
lucru poate fi ușor realizat prin atașarea unui comentariu furnizat de utilizator la numele
arhivei zip.
Salvați ca backup_ver3.py:
import os
import time
# specified in a list.
# Example on Windows:
source = ['/Users/swa/notes']
# Example on Windows:
# target_dir = 'E:\\Backup'
target_dir = '/Users/swa/backup'
if not os.path.exists(target_dir):
now = time.strftime('%H%M%S')
if len(comment) == 0:
else:
if not os.path.exists(today):
os.mkdir(today)
' '.join(source))
print(zip_command)
print('Running:')
if os.system(zip_command) == 0:
else:
print('Backup FAILED')
ieşire:
$ python backup_ver3.py
O observație 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 găsit
operatorul de adăugare ( +) fără nici un operand în acea linie logică și, prin urmare, nu știe
cum să continue. Amintiți-vă că putem preciza că linia logică continuă în următoarea linie
fizică prin folosirea unei lunete din urmă la sfârșitul liniei fizice. Deci, facem această
81 corecție programului nostru. Această corecție a programului când găsim erori se
numește fixarea erorilor .
A patra versiune
Salvați ca backup_ver4.py:
import os
import time
# specified in a list.
# Example on Windows:
source = ['/Users/swa/notes']
# Example on Windows:
# target_dir = 'E:\\Backup'
A Byte of Python Rezolvarea problemelor
target_dir = '/Users/swa/backup'
82 if not os.path.exists(target_dir):
os.mkdir(target_dir) # make directory
now = time.strftime('%H%M%S')
if len(comment) == 0:
else:
if not os.path.exists(today):
os.mkdir(today)
83
# 5. We use the zip command to put the files in a zip archive
' '.join(source))
print(zip_command)
print('Running:')
if os.system(zip_command) == 0:
else:
print('Backup FAILED')
ieşire:
$ python backup_ver4.py
Running:
A Byte of Python Rezolvarea problemelor
84 Cum functioneaza
Acest program funcționează acum! Să trecem prin îmbunătățirile reale pe care le-am făcut
în versiunea 3. Noi luăm în considerare comentariile utilizatorului folosind inputfuncția și
apoi verificăm dacă utilizatorul a introdus de fapt ceva prin aflarea lungimii intrării
utilizând lenfuncția. Dacă utilizatorul tocmai a apăsat enterfără să introducă nimic (poate
că a fost doar o copie de rezervă de rutină sau nu au fost făcute schimbări speciale),
atunci procedăm așa cum am făcut înainte.
Cu toate acestea, dacă a fost furnizat un comentariu, atunci acesta este atașat la numele
arhivei zip chiar înainte de .zipextensie. Observați că înlocuim spațiile din comentariu cu
sublinierile - aceasta este pentru că gestionarea numelor de fișiere fără spații este mult
mai ușoară.
A patra versiune este un script de lucru satisfăcător pentru majoritatea utilizatorilor, dar
există întotdeauna loc pentru îmbunătățire. De exemplu, puteți include un nivel
de verbositate pentru comanda zip prin specificarea unei -vopțiuni pentru a face
programul dvs. să devină mai vorbăreț sau o -qopțiune pentru a face liniște .
1. Ce (analiză)
2. Cum (Design)
3. Face-o (punerea în aplicare)
4. Testarea (testarea și depanarea)
5. Utilizare (operare sau desfășurare)
85 6. Mențineți (perfecționarea)
Tine minte:
rezumat
Am văzut cum să creați propriile noastre programe / scenarii Python și diferitele etape
implicate în scrierea unor astfel de programe. S-ar putea să fiți util să vă creați propriul
program, așa cum am făcut în acest capitol, pentru a vă familiariza cu Python, precum și
pentru rezolvarea problemelor.
86
A Byte of Python Programarea orientată pe obiecte
În toate programele pe care le-am scris până acum, am proiectat programul nostru în
jurul funcțiilor, adică blocuri de declarații care manipulează date. Aceasta se
numește procedură orientată spre programare. Există și o altă modalitate de organizare a
programului dvs., care este de a combina datele și funcționalitatea și a le înfășura în
interiorul unui element numit un obiect. Aceasta se numește paradigma de
programare orientată obiect . De cele mai multe ori puteți utiliza programarea
procedurală, dar când scrieți programe mari sau aveți o problemă mai potrivită acestei
metode, puteți utiliza tehnici de programare orientate obiect.
87
Clasele și obiectele sunt cele două aspecte principale ale programării orientate
obiect. O clasă creează un tip nou unde obiectele sunt instanțe ale clasei. O analogie este
că puteți avea variabile de tip intcare se traduce prin a spune că variabilele care stochează
numere întregi sunt variabile care sunt instanțe (obiecte) ale intclasei.
Rețineți că chiar și numerele întregi sunt tratate ca obiecte (din intclasă). Acest lucru este
diferit de C ++ și Java (înainte de versiunea 1.5) unde întregi sunt tipuri primitive
primitive.
Programatorii C # și Java 1.5 vor găsi acest lucru similar cu conceptul de box și unboxing .
Câmpurile sunt de două tipuri - pot aparține fiecărui exemplu / obiect al clasei sau pot
aparține clasei în sine. Acestea se numesc variabile de instanță și respectiv variabile de
clasă .
self
Deși puteți da orice nume pentru acest parametru, este foarte recomandat să folosiți
numele self- orice alt nume este cu siguranta încruntat. Există numeroase avantaje pentru
utilizarea unui nume standard - orice cititor al programului dvs. o va recunoaște imediat și
chiar IDE-urile specializate (medii integrate de dezvoltare) vă pot ajuta dacă utilizați self.
Acest lucru înseamnă, de asemenea, că, dacă aveți o metodă care nu are argumente,
trebuie să aveți încă un argument - self.
Clase
Cea mai simplă clasă posibilă este prezentată în exemplul următor (salvând
ca oop_simplestclass.py).
class Person:
p = Person()
print(p)
ieşire:
$ python oop_simplestclass.py
Cum functioneaza
Apoi, vom crea un obiect / instanță din această clasă utilizând numele clasei urmat de o
pereche de paranteze. (Vom afla mai multe despre instanțiere în secțiunea
A Byte of Python Programarea orientată pe obiecte
metode
Am discutat deja că clasele / obiectele pot avea metode la fel ca și funcțiile, cu excepția
89 faptului că avem o selfvariabilă suplimentară . Vom vedea acum un exemplu (cu excepția
ca oop_method.py).
class Person:
def say_hi(self):
p = Person()
p.say_hi()
# Person().say_hi()
ieşire:
$ python oop_method.py
Cum functioneaza
__init__metoda
__init__Metoda este rulat de îndată ce un obiect al unei clase este instantiat ( de exemplu
, create). Metoda este utilă pentru a face orice inițializare (adică trecerea valorilor inițiale
A Byte of Python Programarea orientată pe obiecte
în obiectul dvs.) pe care doriți să o faceți cu obiectul dvs. Observați dublul subliniere atât
la începutul, cât și la sfârșitul numelui.
class Person:
self.name = name
90
def say_hi(self):
p = Person('Swaroop')
p.say_hi()
# Person().say_hi()
ieşire:
$ python oop_init.py
Cum functioneaza
La crearea unei instanțe noi p, a clasei Person, facem acest lucru folosind numele clasei
urmat de argumentele din paranteze: p = Persoană ("Swaroop").
Obiect variabile sunt deținute de fiecare obiect / instanță individuale ale clasei. În acest
caz, fiecare obiect are o copie proprie a câmpului, adică nu sunt partajate și nu sunt legate
î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 (salvare ca oop_objvar.py):
class Robot:
population = 0
self.name = name
print("(Initializing {})".format(self.name))
Robot.population += 1
def die(self):
"""I am dying."""
92
Robot.population -= 1
if Robot.population == 0:
else:
Robot.population))
def say_hi(self):
@classmethod
def how_many(cls):
droid1 = Robot("R2-D2")
droid1.say_hi()
Robot.how_many()
93
droid2 = Robot("C-3PO")
droid2.say_hi()
Robot.how_many()
droid1.die()
droid2.die()
Robot.how_many()
ieşire:
$ python oop_objvar.py
(Initializing R2-D2)
We have 1 robots.
(Initializing C-3PO)
We have 2 robots.
We have 0 robots.
Cum functioneaza
Acesta este un exemplu lung, dar ajută la demonstrarea naturii variabilelor de clasă și de
obiect. Aici, populationaparține Robotclasei și, prin urmare, este o variabilă de
clasă. nameVariabila aparține obiectului (este atribuit folosind self) și , prin urmare , este
o variabilă obiect.
how_many = classmethod(how_many)
Toți membrii clasei sunt publici. O excepție: dacă utilizați membri de date cu nume
folosind prefixul dublu de subliniere, cum ar fi __privatevar, Python folosește numele-
mangling pentru a face efectiv o variabilă privată.
Astfel, convenția urmată este aceea că orice variabilă care trebuie utilizată numai în
cadrul clasei sau al obiectului trebuie să înceapă cu o subliniere și toate celelalte nume
sunt publice și pot fi folosite de alte clase / obiecte. Rețineți că aceasta este doar o
convenție și nu este impusă de Python (cu excepția prefixului dublu de subliniere).
Moştenire
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 la ambele clase independente. Acest
lucru devine rapid greu.
A Byte of Python Programarea orientată pe obiecte
class SchoolMember:
self.name = name
self.age = age
def tell(self):
'''Tell my details.'''
class Teacher(SchoolMember):
A Byte of Python Programarea orientată pe obiecte
'''Represents a teacher.'''
self.salary = salary
97
def tell(self):
SchoolMember.tell(self)
print('Salary: "{:d}"'.format(self.salary))
class Student(SchoolMember):
'''Represents a student.'''
self.marks = marks
def tell(self):
SchoolMember.tell(self)
print('Marks: "{:d}"'.format(self.marks))
print()
members = [t, s]
member.tell()
ieşire:
$ python oop_subclass.py
Cum functioneaza
Pentru a folosi moștenirea, specificăm numele clasei de bază într-un tuplu după numele
clasei din definiția clasei (de exemplu, class Teacher(SchoolMember)). Apoi, observăm
că __init__metoda clasei de bază este denumită în mod explicit folosindself variabila
astfel încât să putem inițializa partea de clasă de bază a unei instanțe din subclasă. Acest
lucru este foarte important de reținut - Deoarece definim o__init__ metodă Teacher și
o Student subclasă, Python nu sună automat constructorul clasei de bază SchoolMember,
trebuie să-l numiți în mod explicit.
O notă privind terminologia - dacă mai multe clase sunt listate în macheta de moștenire,
atunci se numește moștenire multiplă .
rezumat
Apoi, vom învăța cum să facem față cu intrarea / ieșirea și cum să accesăm fișierele din
Python.
A Byte of Python Intrare și ieșire
Intrare și ieșire
Vor exista situații în care programul dvs. trebuie să interacționeze cu utilizatorul. De
exemplu, doriți să primiți informații de la utilizator și apoi să imprimați unele rezultate
înapoi. Putem realiza acest lucru folosind input()funcția și printrespectiv funcția.
Pentru ieșire, putem folosi și diferitele metode ale strclasei (șir). De exemplu, puteți
utiliza rjustmetoda pentru a obține un șir care este corect justificat la o lățime
specificată. Vedeți help(str)mai multe detalii.
100 Un alt tip comun de intrare / ieșire se ocupă de fișiere. Abilitatea de a crea, citi și scrie
fișiere este esențială pentru multe programe și vom explora acest aspect în acest capitol.
Intrare de la utilizator
def reverse(text):
return text[::-1]
def is_palindrome(text):
if is_palindrome(something):
print("Yes, it is a palindrome")
else:
ieşire:
$ python3 io_input.py
$ python3 io_input.py
Yes, it is a palindrome
101
$ python3 io_input.py
Yes, it is a palindrome
Cum functioneaza
Utilizăm caracteristica de tăiere pentru a inversa textul. Am văzut deja cum putem
face felii din secvențe utilizând seq[a:b]codul pornind de la poziția ala poziția b. Putem de
asemenea să furnizăm un al treilea argument care determină pasul prin care se face
felierea. Pasul implicit se 1datorează faptului că returnează o parte continuă a
textului. Dacă faceți un pas negativ, adică -1veți returna textul în sens invers.
Luăm textul și îl inversăm. Dacă textul original și textul inversat sunt egale, atunci textul
este un palindrom .
Exerciții fizice
Fișiere
Puteți deschide și utiliza fișiere pentru citire sau scriere prin crearea unui obiect
al fileclasei și utilizarea acesteia read, readlinesau writemetode în mod corespunzător
pentru a citi sau scrie la dosar. Capacitatea de a citi sau de a scrie în fișier depinde de
A Byte of Python Intrare și ieșire
modul pe care l-ați specificat pentru deschiderea fișierului. Apoi, în cele din urmă, când ați
terminat cu fișierul, apelați closemetoda de a spune Python că am terminat folosind
fișierul.
poem = '''\
Programming is fun
use Python!
'''
f = open('poem.txt', 'w')
f.write(poem)
f.close()
# If no mode is specified,
f = open('poem.txt')
while True:
line = f.readline()
if len(line) == 0:
A Byte of Python Intrare și ieșire
break
print(line, end='')
ieşire:
$ python3 io_using_file.py
Programming is fun
use Python!
Cum functioneaza
În exemplul nostru, vom deschide / crea fișierul în modul de scriere text și vom
folosi writemetoda obiectului de fișier pentru a scrie variabila șir poemla fișier și apoi vom
fi în final closefișierul.
Apoi deschidem din nou același fișier pentru citire. Nu este nevoie să specificăm un mod
deoarece "fișierul de citire a textului" este modul implicit. Citiți în fiecare linie a fișierului
folosind readlinemetoda într-o buclă. Această metodă returnează o linie completă care
include caracterul de linie nouă la sfârșitul liniei. Când un șir gol este returnat, înseamnă
că am ajuns la sfârșitul fișierului și ne "izbucnim" din bucla.
murătură
shoplistfile = 'shoplist.data'
f = open(shoplistfile, 'wb')
pickle.dump(shoplist, f)
f.close()
del shoplist
f = open(shoplistfile, 'rb')
storedlist = pickle.load(f)
print(storedlist)
ieşire:
$ python io_pickle.py
Unicode
Până acum, când scriem și folosim șiruri sau citim și scriem într-un fișier, am folosit numai
caractere simple englezești. Atât caracterele englezești cât și cele non-engleză pot fi
reprezentate în Unicode (pentru mai multe informații, consultați articolele de la sfârșitul
acestei secțiuni), iar Python 3 stochează în mod implicit variabilele de șir (gândiți-vă la
textul pe care l-am scris folosind un singur sau dublu sau triplu citate) în Unicode.
NOTĂ: Dacă utilizați Python 2 și dorim să citim și să scriem alte limbi decât cele din limba
engleză, trebuie să folosim unicodetipul și totul începe cu caracterul u, de ex.u"hello
world"
'hello world'
<class 'str'>
'hello world'
<class 'str'>
Atunci când datele sunt transmise prin Internet, trebuie să le trimitem în octeți ... ceva ce
înțelege ușor calculatorul. Regulile pentru traducerea Unicode (ceea ce Python utilizează
A Byte of Python Intrare și ieșire
# encoding=utf-8
import io
f.close()
print(text)
Cum functioneaza
De fiecare dată când scriem un program care utilizează literalmente Unicode (prin
introducerea unui ușir înaintea șirului) așa cum am folosit mai sus, trebuie să ne asigurăm
că Python în sine ni se spune că programul nostru folosește UTF-8 și trebuie să punem #
encoding=utf-8 comentariu în partea de sus a programului nostru.
rezumat
Am discutat diverse tipuri de intrări / ieșiri, despre manipularea fișierelor, despre modulul
de pickle și despre Unicode.
107