Operatori în Python. Expresii booleene și operatori

Adesea în viata reala suntem de acord cu orice afirmație sau o negăm. De exemplu, dacă vi se spune că suma numerelor 3 și 5 este mai mare decât 7, veți fi de acord, spuneți: „Da, este adevărat”. Dacă cineva susține că suma de trei și cinci este mai mică de șapte, atunci vei considera o astfel de afirmație ca fiind falsă.

Astfel de fraze sugerează doar două răspunsuri posibile - fie „da”, când expresia este evaluată ca adevărată, adevărată sau „nu”, când afirmația este evaluată ca eronată, falsă. În programare și matematică, dacă rezultatul evaluării unei expresii poate fi doar adevărat sau fals, atunci o astfel de expresie se numește logică.

De exemplu, expresia 4 > 5 este booleană deoarece rezultatul său este fie adevărat, fie fals. Expresia 4 + 5 nu este o expresie logică, deoarece rezultatul executării sale este un număr.

În lecția înainte de ultimul, ne-am familiarizat cu trei tipuri de date - numere întregi și numere reale, precum și șiruri. Astăzi vă prezentăm al patrulea - tip de date boolean(de tip bool). Se mai numește și boolean. Acest tip are doar două valori posibile: Adevărat(adevărat) și Fals(Fals).

>>> a=Adevărat >>>tip(a) >>> b=fals >>>tip (b)

Aici, variabila a a fost setată la True și apoi testată de tip folosind funcția încorporată type() din Python. Interpretul a raportat că aceasta este o variabilă de clasă bool. Conceptele de „clasă” și „tip de date” în acest caz sunt unul și același. Variabila b este, de asemenea, asociată cu o valoare booleană.

În programare, False este de obicei echivalat cu zero, iar True este echivalat cu unu. Pentru a verifica acest lucru, puteți converti o valoare booleană într-un tip întreg:

>>> int(Adevărat) 1 >>> int(Fals) 0

Este posibil și opusul. Puteți converti orice valoare într-un tip boolean:

>>> bool (3.4) Adevărat >>> bool (-150 ) Adevărat >>> bool(0) Fals >>> bool(" ") Adevărat >>> bool("") Fals

Și aici funcționează regula: tot ceea ce nu este 0 și nu gol este adevărat.

Operatori logici

Vorbind mai departe limbaj natural(de exemplu, rusă) desemnăm comparații cu cuvintele „egal”, „mai mare”, „mai puțin”. Limbajele de programare folosesc caractere speciale similare cu cele utilizate în matematică: > (mai mare decât),< (меньше), >= (mai mare sau egal),<= (меньше или равно), == (равно), != (не равно).

Nu confundați operația de atribuire a variabilelor, notată în Python printr-un singur semn egal, cu operația de comparare (două semne egal). Atribuirea și compararea sunt operațiuni diferite.

>>> a = 10 >>>b=5 >>> a + b > 14 Adevărat >>> a< 14 - b Fals >>> a<= b + 5 Adevărat >>> a != b Adevărat >>> a == b Fals >>> c = a == b >>> a, b, c(10, 5, fals)

În acest exemplu, expresia c = a == b constă din două subexpresii. În primul rând, există o comparație (==) a variabilelor a și b . După aceea, rezultatul operației logice este atribuit variabilei c. Expresia a , b, c pur și simplu afișează valorile variabilelor pe ecran.

Expresii booleene complexe

Expresiile booleene precum kByte >= 1023 sunt simple deoarece efectuează o singură operație logică. Cu toate acestea, în practică este adesea nevoie de expresii mai complexe. Poate fi necesar să obțineți un răspuns „Da” sau „Nu”, în funcție de rezultatul executării a două expresii simple. De exemplu, „afară ninge sau plouă”, „variabila știri este mai mare de 12 și mai mică de 20”.

În astfel de cazuri, se folosesc operatori speciali care combină două sau mai multe expresii logice simple. Doi operatori sunt utilizați pe scară largă - așa-numitul AND logic ( și) și SAU ( sau).

și, este necesar ca rezultatele ambelor expresii simple care leagă operator dat, au fost adevărate. Dacă cel puțin într-un caz rezultatul este Fals, atunci întreaga expresie complexă va fi falsă.

Pentru a obține True atunci când utilizați operatorul sau, este necesar ca rezultatul a cel puțin unei expresii simple, care face parte dintr-o expresie complexă, să fie adevărat. În cazul operatorului sau o expresie compusă devine falsă numai atunci când ambele expresii simple constitutive ale ei sunt false.

Să presupunem că variabilei x i s-a atribuit valoarea 8 (x = 8), variabilei y i s-a atribuit 13 (y = 13). Expresia booleană y< 15 and x >8 va rula după cum urmează. Expresia y va fi executată mai întâi< 15 . Его результатом будет True. Затем выполнится выражение x >8 . Rezultatul acestuia va fi Fals. Expresia va fi apoi redusă la True și False , care va returna False.

>>>x=8 >>>y=13 >>>y< 15 and x > 8 Fals

Dacă am scrie expresia astfel: x > 8 și y< 15 , то оно также вернуло бы False. Однако сравнение y < 15 не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение (x >8) a returnat deja false, ceea ce, în cazul operatorului și, face ca întreaga expresie să fie falsă.

În cazul operatorului or, a doua expresie simplă este verificată dacă prima a returnat false și nu este verificată dacă prima a returnat deja adevărată. Întrucât un singur Adevărat este suficient pentru adevărul întregii expresii, indiferent de care parte se află.

>>>y< 15 or x > 8 Adevărat

Python are și un operator logic unar nu, adică negație. El transformă adevărul în minciuni și minciuna în adevăr. Este unară pentru că se aplică unei singure expresii după ea, și nu la dreapta și la stânga acesteia, ca în cazul binarului și și sau.

Operatorii sunt constructe care pot manipula valoarea operanzilor. Luați în considerare expresia 4 + 5 = 9. Aici, 4 și 5 se numesc operanzi și + se numește operator.

Tipuri de operatori

limbajul Python acceptă următoarele tipuri de operatori:

  • Operatori aritmetici
  • Operatori (relaționali) de comparație
  • Operatori de atribuire
  • Operatori logici
  • Operatori de biți
  • Operatori membri
  • Operatori de identitate

Să trecem prin toți operatorii unul câte unul.

Operatori aritmetici în Python

dar valoarea este 10 și variabila b conține valoarea 21, atunci:

operatorDescriereexemplu
+ AdaosAdăugarea de valori de ambele părți ale operatorului.a + b = 31
– ScădereaScădeți operandul drept din operandul stâng.a – b = -11
* ÎnmulțireaÎnmulțirea unei valori de fiecare parte a unui operatora*b=210
/ DiviziaÎmparte operandul din stânga la operandul din dreaptab/a = 2,1
% ModulÎmparte operandul din stânga la operandul din dreapta și returnează restulb % a = 1
** ExpozantEfectuează calcul exponențial pe operatoria ** b = 10 la puterea lui 20
// împărțire cu rotunjireDiviziunea de gen – Separarea operanzilor, unde rezultatul este factorul în care cifra de după virgulă este eliminată. Dar dacă unul dintre operanzi este negativ, atunci rezultatul este rotunjit, adică. se rotunjește de la zero (în raport cu infinitul negativ):9 // 2 = 4 și 9,0 // 2,0 = 4,0, -11 // 3 = -4, -11,0 // 3 = -4,0

Operatori de comparație în Python

Operatorii de comparare valorile de ambele părți ale acestora și decid relația dintre ei. Se mai numesc și operatori relaționali.

Să presupunem că o variabilă dar conţine valoarea 10 şi variabila b are valoarea 20, atunci:

operatorDescriereexemplu
== Dacă valorile celor doi operanzi sunt egale, atunci condiția devine adevărată.(a == b) nu este adevărat.
!= Dacă valorile celor doi operanzi nu sunt egale, atunci condiția devine adevărată.(a! = b) este adevărată.
> Dacă valoarea operandului din stânga este mai mare decât valoarea operandului din dreapta, atunci condiția devine adevărată.(a > b) nu este adevărată.
< Dacă valoarea operandului din stânga este mai mică decât valoarea operandului din dreapta, atunci condiția devine adevărată.(dar< б) истинно.
> = Dacă valoarea operandului din stânga este mai mare sau egală cu valoarea operandului din dreapta, atunci condiția devine adevărată.(a >= b) nu este adevărat.
<= Dacă valoarea operandului din stânga este mai mică sau egală cu valoarea operandului din dreapta, atunci condiția devine adevărată.(dar<= б) истинно.

Operatori de atribuire în Python

Să presupunem că variabila conține dar valoarea este 10 și variabila b are valoarea 20, atunci:

operatorDescriereexemplu
= Atribuie valori cu partea dreaptă a operanzilor în partea stângă a operanduluic = a + b atribuie lui c valoarea lui a + b
+ = Adăugați șiAdaugă operandul din dreapta celui din stânga și atribuie rezultatul celui din stângac + = a este echivalent cu c = c + a
– = scade siScăde operandul din dreapta din operandul din stânga și atribuie rezultatul operandului din stângac – = a este echivalent cu c = c – a
* = înmulțiți șiÎnmulțește operandul din dreapta cu operandul din stânga și atribuie rezultatul operandului din stângac * = a este echivalent cu c = c * a
/ = împărți șiÎmparte operandul din stânga la operandul din dreapta și atribuie rezultatul operandului din stângac / = a este echivalent cu c = c / ac /= a este echivalent cu c = c / a
% = Modul șiPreia un modulo cu doi operanzi și atribuie rezultatul operandului din stângac% = a este echivalent cu c = c % a
** = Expozant șiEfectuează evaluarea exponentului de la operatori și atribuie valoarea operandului din stângac**=a este echivalent cu c=c**a
// = Floor DivisionEfectuează împărțirea operatorului cu rotunjire și atribuie valoarea operandului din stângac // = a este echivalent cu c = c // a

Operatori de biți în Python

Operatorii pe biți operează pe biți și efectuează operații bit cu bit. Să spunem dacă a = 60; și b = 13; În prezent, în format binar, acestea vor arăta astfel:

—————–

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

Funcția încorporată bin() în Python poate fi folosită pentru a obține reprezentarea binară a unui număr întreg.

Următorii operatori de biți sunt acceptați de limbajul Python:

OperatorDescriereExemplu
& binar ANDcopii ale operatorului de biți, rezultând dacă acestea există în ambii operanzi(a și b) (0000 înseamnă 1100)
| SAU binarcopiază bitul dacă acesta există în oricare dintre operanzi.(a | b) = 61 (înseamnă 0011 1101)
^ XOR binarcopiază bitul dacă este setat într-un singur operand, dar nu ambele.(a^b) = 49 (înseamnă 0011 0001)
~ Complement binarEste unară și are efectul bitului „flip”.(~a) = -61 (în forma înseamnă complement dublu 1100 0011 datorită numărului binar cu semn.
<< Двоичный сдвиг влево Valoarea operandului din stânga este mutată la stânga cu numărul de biți specificat de operandul din dreapta.dar<< = 240 (1111 означает 0000)
>> Schimbarea binară la dreaptaValoarea operandului din stânga este mutată la dreapta cu numărul de biți specificat de operandul din dreapta.a>>=15 (0000 înseamnă 1111)

Operatori logici în Python

Următorii operatori logici sunt acceptați de limbajul Python. Să presupunem că variabila este adevărată și variabila b este fals, atunci:

Declarații de membru în Python

Starea instrucțiunilor de testare pentru apartenența la secvență, cum ar fi șiruri de caractere, liste sau tupluri. Există doi operatori membri, după cum se explică mai jos:

Operatori de identitate în Python

Operatorii de identificare compară locațiile de memorie a două obiecte. Există doi operatori de identificare, după cum se explică mai jos:

Operatori prioritari în Python

Următorul tabel listează toți operatorii de la cea mai mare prioritate la cea mai mică.

Număr de serieOperator și descriere
1 **

Exponentiație (pornire)

2 ~ + –

Complement, plus și minus unar (numele metodelor pentru ultimele două sunt +@ și -@)

3 * / % //

Înmulțirea, modulo și restul diviziunii

4 + –

Adunare si scadere

5 >> <<

Schimbarea biților la dreapta și la stânga

6 &

Pe biți „și”

7 ^ |

„SAU” exclusiv pe biți și SAU obișnuit

8 <= <>> =

operatori de comparare

9 <> ==! =

operatori de egalitate

10 = %= /= //= -= += *= **=

operatori de atribuire

11 nu este

operatori de identitate

12 în nu în

operatori de membru

13 nu sau și

Operatori logici

Fiecare operațiune are propriii operatori. Operatorii de bază (adunare, scădere, negație, plus unar, minus unar, alocare) sunt utilizați în operațiile unare și binare. Ternar are trei argumente: o condiție dacă, o expresie dacă condiție == adevărat și o expresie dacă condiție == fals.

Pentru a înțelege ce este un operator, următorul exemplu vă va ajuta.

A=b+c

c se adaugă la b, iar rezultatul este atribuit lui a. Întregul exemplu a = b + c este o expresie. Variabilele care apar în el sunt operanzii. Operația care se efectuează este adăugarea, iar operatorul folosit pentru aceasta este „+”.

Operatori aritmetici Python

Python oferă un număr mare de biblioteci pentru rezolvarea problemelor de calcul. Un set mare de metode pune Python la egalitate cu Matlab și Octave. Operațiile aritmetice sunt aplicate relativ la numere întregi de tip int, numere reale de tip float, complex complex.

Dacă doar numere întregi sunt folosite ca argumente pentru operație, rezultatul va fi, de asemenea, un număr întreg. Operațiile între numere în virgulă mobilă vor avea ca rezultat un întreg și o fracție. Singura operație în care interacțiunea numerelor întregi dă un fracționar este împărțirea.

Toate operațiile aritmetice posibile sunt prezentate în tabel.

Adăugarea unui număr la altul se face de către operatorul suplimentar. Scăderea se face folosind scăderea. Înmulțirea unui număr cu altul se întâmplă cu înmulțirea. Exponentiarea se face folosind exponenta. Diviziunea este folosită pentru împărțire.

Operatorul modul (%) returnează restul atunci când operandul din stânga este împărțit la operandul din dreapta. Dacă variabila a = 10, variabila b = 20, atunci b%a == 0. Care este operatorul de împărțire cu un rest, este ușor de înțeles următorul exemplu. Dacă 9/2 == 4,5, atunci 9//2 returnează rezultatul egal cu 4. Împărțirea cu împărțirea etajului (//) returnează un număr întreg din operația de împărțire a operandului din stânga la dreapta.

Executarea oricăror operațiuni este efectuată direct de numerele în sine sau de variabile, cărora li se atribuie valori numerice. Rezultatul poate fi o altă variabilă sau una dintre cele existente.

Alături de numerele întregi și reale, există numere complexe în Python. Ele constau din părți reale și imaginare. Ele sunt scrise ca c = a + bj, unde a este partea reală,

C.real() #a

b - imaginar.

C.imag() #b

Operațiile aritmetice cu numere complexe au aceleași proprietăți ca și cele cu numere reale. Utilizarea numerelor complexe poate fi reprezentată pe un plan cu un sistem de coordonate dreptunghiular. Punctul de intersecție a a axei X și a axei Y corespunde numărului complex x + yi. Astfel, numerele reale sunt situate pe axa X, iar numerele imaginare sunt situate pe axa Y verticală.

Comparaţie

Operatorii din Python sunt utilizați pentru a compara variabile. Pe lângă cele standard cunoscute din problemele matematice, există o verificare după valoare și după tip, precum și o verificare a inegalității.

Operațiile de comparare sunt sub forma a x b, unde x este operatorul de comparație.

În programare, operatorul „=" funcționează diferit decât în ​​matematică. Potrivirea valorii fiecărui argument este determinată de operatorul „==”, dar „=” atribuie doar o valoare. Cu ajutorul lui != se verifică inegalitatea variabilelor. Acest operator poate fi înlocuit ca "<>”, care nu este un operator standard în alte limbi precum C, Java sau Javascript.

Misiune

Declarațiile Python atribuie o valoare unei variabile.

Atribuirea este unul dintre constructele centrale în programare. Cu ajutorul acestuia, variabilelor li se dau niște valori, acestea se pot schimba în timpul programului.

Algoritm de lucru:

  • calculul valorii din stânga;
  • calculul valorii din dreapta;
  • atribuirea unei valori alteia - în cazul unui conflict de tip, acestea trebuie turnate;
  • returnează rezultatul operației - adevărat sau fals.

Și operațiile matematice funcționează conform acestui principiu:

a x b, unde x este un operator, înseamnă că a = a x b. Astfel, a += b spune că valoarea variabilei a se adaugă la valoarea variabilei b, iar rezultatul acestora este atribuit variabilei a. La fel se întâmplă și cu alte exemple. De exemplu, a **= b reprezintă a = a ** b, adică a este ridicat la puterea lui b, rezultatul este în cele din urmă atribuit lui a.

Termeni

Verificarea condiției se face folosind operatorul ternar Python.

Este format din două sau trei părți:

  • if - expresia de verificat;
  • elif - instrucțiune opțională (asemănătoare cu if else sau elseif);
  • altceva este instrucțiunea principală.
a = int(input()) dacă X: A = Y altfel: A = Z

Expresia poate fi specificată pe o singură linie.

A = Y dacă X altfel Z

Părțile else și elseif pot fi omise, expresia arată astfel:

Dacă 1: print("bună ziua 1")

Python are declarații break and continue. Break breaks execuția codului la toate nivelurile. Continuare oprește iterația curentă, continuă execuția de la punctul următor.

Pe bit

Astfel de operatori Python interpretează operanzii ca o secvență de 0 și 1.

Ei folosesc numere în reprezentare binară, returnează rezultatul ca un număr de 32 de biți.

a = 0 #a = 1 #a = 2 #a = 3 #a = 255 #

Un număr negativ în binar se obține răsturnând un pic și adunând 1.

314 #-314 #+ 1 =

Diferența dintre a >> b și a >>> b este că atunci când se deplasează și se elimină valorile din dreapta, copiile primilor biți sunt adăugate la stânga.

9 #9 >> 2 #-9 #-9 >> 2 #

Dar cu a >>> b, valorile din stânga vor fi umplute cu zerouri.

9 #-9 >>> 2 #

joc de inteligență

Există trei operatori logici în total.

  • și - returnează adevărat dacă a == b == x;
  • sau - returnează adevărat dacă a == x sau b == x;
  • not - returnează false dacă a == b == x.

Afiliere

Operatorul de apartenență testează dacă o variabilă face parte dintr-o secvență.

  • a în b returnează adevărat dacă găsește variabila a în secvența b;
  • a not in b returnează adevărat dacă nu găsește a în secvența b.

Identitate

  • a este b returnează adevărat dacă variabilele din dreapta și din stânga indică același obiect;
  • a nu este b returnează adevărat dacă variabilele nu indică același obiect.

Priorități

Lista arată operatorii și expresiile sortate după prioritatea de execuție de la cea mai mică la cea mai mare.

Operatori în Python și prioritatea lor de execuție:

  • Expresii lambda.
  • Piton.
  • OR boolean.
  • Boolean I.
  • Boolean NU.
  • Operatori de identitate, apartenențe, operatori de atribuire.
  • SAU pe biți.
  • Un pic NU.
  • Bitovy I.
  • Operatorul de deplasare pe biți.
  • Adunare si scadere.
  • Înmulțirea și împărțirea, inclusiv operația de obținere a restului unei împărțiri și a unui număr întreg.
  • Un pic NU.
  • Exponentiatie.
  • Accesarea unui element de matrice prin index, slicing, accesarea unui obiect de clasă, apelarea unei funcții cu argumente.

Primul element din listă este o expresie lambda. Expresia Lambda este folosită pentru a crea funcții anonime. Lambda se comportă ca o funcție normală și este declarată ca

Def (argumente): expresie returnată

Expresia lambda este urmată de operațiile efectuate de operatorul ternar Python.

La sfârșitul listei sunt metodele de manipulare a matricei și a funcțiilor. Accesarea unui element de matrice prin index arată astfel:

În acest caz, a este o matrice, i este indexul elementului.

Tăierea înseamnă transmiterea unei copii complete a unui tablou sau a unei secvențe selective a membrilor unei liste. Intervalul valorii dorite este specificat în . Ca argumente, x este începutul numărării, y este sfârșitul și z este pasul de trecere prin elementele matricei la fiecare iterație. X este implicit la începutul listei, y este sfârșitul și z este unul. Dacă specificați z ca număr negativ, valorile listei sunt transmise în ordine inversă de la sfârșit la început.

  • Traducere

Această parte a articolului acoperă trucuri pentru alegerea uneia dintre cele două valori bazate pe o condiție booleană, transmiterea și primirea unui număr arbitrar de argumente ale funcției și o sursă comună de eroare - faptul că valorile implicite ale argumentelor funcției sunt evaluat o singură dată.

4. Alegerea valorilor

4.1. Calea cea buna
Începând cu versiunea 2.5, Python acceptă sintaxa „value_if_true dacă Test altfel valoare_dacă_fals”. Astfel, puteți alege între două valori fără a apela la sintaxă ciudată și explicații detaliate:
test = Adevărat # test = Rezultat fals = "Testul este adevărat" dacă testul altfel "Testul este fals" # rezultat = "Testul este adevărat"
Vai, tot e cam urat. De asemenea, puteți utiliza mai multe dintre aceste construcții pe aceeași linie:
test1 = Fals test2 = Adevărat rezultat = "Test1 este adevărat" dacă test1 altfel "Test1 este fals, test2 este adevărat" dacă test2 altfel "Test1 și Test2 sunt ambele false"
Primul if/else este executat primul, iar dacă test1 = false, al doilea if/else este executat. Puteți face și lucruri mai complexe, mai ales dacă folosiți paranteze.

Această metodă este destul de nouă și am sentimente contradictorii cu privire la ea. Este o construcție corectă, de înțeles, îmi place... dar este încă urâtă, mai ales când se folosesc mai multe constructe imbricate. Desigur, sintaxa tuturor trucurilor pentru selectarea valorilor este urâtă. Am un punct slab pentru și/sau metoda de mai jos, mi se pare intuitiv acum, acum înțeleg cum funcționează. În plus, nu este mai puțin eficientă decât metoda „corectă”.

În timp ce inline if/else este nou, mai mult Calea cea buna, ar trebui să citiți în continuare următoarele puncte. Chiar dacă intenționați să utilizați Python 2.5, veți vedea aceste moduri în codul mai vechi. Desigur, dacă doriți compatibilitate inversă, ar fi cu adevărat mai bine să le căutați.

4.2. truc și/sau
„și” și „sau” în Python - creaturi complexe. Aplicarea și la mai multe expresii nu returnează doar Adevărat sau Fals. Returnează prima expresie falsă sau ultima expresie dacă toate sunt adevărate. Rezultatul este așteptat: dacă toate expresiile sunt adevărate, se returnează ultima care este adevărată; dacă unul dintre ele este fals, este returnat și convertit în fals atunci când valoarea booleană este testată.

În mod similar, operatorul sau returnează prima valoare adevărată sau ultima dacă niciuna dintre ele nu este adevărată.

Acest lucru nu vă va ajuta dacă doar verificați valoarea booleană a unei expresii. Dar puteți folosi și și sau în alte scopuri. Modul meu preferat este să selectez o valoare într-un stil similar cu operatorul C ternar „test? value_if_true: value_if_false":
test = Adevărat # test = Rezultat fals = test și „Testul este adevărat” sau „Testul este fals” # acum rezultat = „Testul este adevărat”
Cum functioneaza? Dacă test=true, operatorul și îl omite și returnează a doua (ultima) valoare dată acestuia: „Testul este adevărat” sau„Testul este fals”. În plus, sau va returna prima expresie adevărată, adică „Testul este adevărat”.

Dacă test=fals și returnează test, testul rămâne sau„Testul este fals”. Deoarece test=false, sau îl va omite și va returna a doua expresie, „Testul este fals”.

Atenție, fiți atenți cu media ("dacă_adevărat"). Dacă se evaluează ca fals, expresia sau o va omite întotdeauna și va returna ultima valoare („if_false”), indiferent de valoarea testului.

După utilizarea acestei metode, modalitatea corectă (secțiunea 4.1) mi se pare mai puțin intuitivă. Dacă nu aveți nevoie de compatibilitate inversă, încercați ambele moduri și vedeți care vă place cel mai mult. Dacă nu te poți decide, folosește-o pe cea corectă.

Desigur, dacă aveți nevoie de compatibilitate cu Versiuni anterioare Python, modul „corect” nu va funcționa. În acest caz și/sau - cea mai buna alegere in majoritatea situatiilor.

4.3. Adevărat/Fals ca indici
O altă modalitate de a selecta dintre două valori este să utilizați True și False ca indici ai listei, dat fiind faptul că False == 0 și True == 1:
test = Adevărat # test = Rezultat fals = ["Testul este fals","Testul este adevărat"] # acum rezultat = "Testul este adevărat"
Acest mod este mai corect și value_if_true nu trebuie să fie adevărat. Cu toate acestea, are un dezavantaj semnificativ: ambele elemente ale listei sunt evaluate înainte de verificare. Pentru șiruri și alte elemente simple, aceasta nu este o problemă. Dar dacă fiecare dintre ele necesită calcule mari sau operații I/O, evaluarea ambelor expresii nu este permisă. Prin urmare, prefer construcția obișnuită sau și/sau.

De asemenea, rețineți că această metodă funcționează numai atunci când sunteți sigur că testul este o valoare booleană și nu un fel de obiect. În caz contrar, trebuie să scrieți bool(test) în loc de test pentru ca acesta să funcționeze corect.

5. Funcții

5.1. Valorile implicite pentru argumente sunt evaluate o singură dată
Să începem această secțiune cu un avertisment. Această problemă a derutat de multe ori mulți programatori, inclusiv pe mine, chiar și după ce mi-am dat seama de problemă. Este ușor să faci o greșeală folosind valorile implicite:
def function(element, stuff = ): stuff.append(item) print stuff function(1) # printeaza "" function(2) # printeaza "" !!!
Valorile implicite pentru argumente sunt evaluate o singură dată, în momentul în care funcția este definită. Python atribuie pur și simplu această valoare variabilei dorite de fiecare dată când funcția este apelată. Cu toate acestea, nu verifică dacă această valoare s-a schimbat. Prin urmare, dacă o modificați, modificarea va fi în vigoare la apelurile ulterioare către funcție. În exemplul anterior, când am adăugat o valoare la lista de lucruri, i-am schimbat permanent valoarea implicită. Când apelăm din nou funcția, așteptând valoarea implicită, obținem cea schimbată.

Soluție: nu utilizați obiecte mutabile ca valori implicite. Puteți să-l lăsați așa, dacă nu le schimbați, dar este o idee proastă. Iată cum ar fi trebuit scris exemplul anterior:
def function(element, stuff = None): if stuff is None: stuff = stuff.append(item) print stuff function(1) # printeaza "" function(2) # printeaza "" asa cum era de asteptat
Niciunul nu este imuabil (oricum nu încercăm să-l schimbăm), așa că suntem protejați de schimbarea bruscă a valorii implicite.

Pe de altă parte, un programator inteligent ar putea transforma acest lucru într-un truc pentru a folosi variabile statice ca în C.

5.1.1. Forțați ca valorile implicite să fie calculate de fiecare dată
Dacă nu doriți să vă aglomerați codul funcției, puteți solicita interpretului să recalculeze valorile argumentului înainte de fiecare apel. Următorul decorator face asta:
din copie import deepcopy def resetDefaults(f): defaults = f.func_defaults def resetter(*args, **kwds): f.func_defaults = deepcopy(defaults) return f(*args, **kwds) resetter.__name__ = f. __name__ return resetter
Doar aplicați acest decorator la o funcție pentru a obține rezultatele așteptate:
@resetDefaults # așa aplicăm funcția decorator def(articol, chestii = ): stuff.append(item) print stuff function(1) # printează „" function(2) # printează „" așa cum era de așteptat
5.2. Număr variabil de argumente
Python vă permite să utilizați un număr arbitrar de argumente în funcții. Argumentele necesare (dacă există) sunt definite mai întâi, apoi variabila trebuie specificată cu un asterisc. Python îi va da valoarea listei de argumente rămase (nenumite):
def do_something(a, b, c, *args): print a, b, c, args do_something(1,2,3,4,5,6,7,8,9) # prints "1, 2, 3, (4, 5, 6, 7, 8, 9)"
De ce este nevoie de asta? De exemplu, o funcție ar trebui să ia mai multe elemente și să facă același lucru cu ele (de exemplu, adăugare). Puteți forța utilizatorul să treacă o listă funcției: sum_all(). Și puteți permite transmiterea unui număr arbitrar de argumente, apoi obțineți un cod mai curat: sum_all(1,2,3).

O funcție poate avea, de asemenea, un număr variabil de argumente numite. După definirea tuturor celorlalte argumente, specificați variabila cu „**” la început. Python va atribui acestei variabile un dicționar de argumente denumite primite, cu excepția celor necesare:
def do_something_else(a, b, c, *args, **kwargs): tipăriți a, b, c, args, kwargs do_something_else(1,2,3,4,5,6,7,8,9, timeout=1.5 ) # iese „1, 2, 3, (4, 5, 6, 7, 8, 9), („timeout”: 1,5)”
De ce să faci asta? Cred că cel mai obișnuit motiv este că o funcție este un wrapper pentru o altă funcție(i), iar argumentele numite neutilizate pot fi transmise unei alte funcții (vezi 5.3).

5.2.1. Clarificare
Utilizarea argumentelor denumite și a unui număr arbitrar de argumente obișnuite după ele aparent nu este posibilă, deoarece argumentele denumite trebuie definite înaintea parametrului „*”. De exemplu, să ne imaginăm o funcție:
def do_something(a, b, c, actually_print = True, *args): if actually_print: print a, b, c, args
Avem o problemă: nu va funcționa să trecem actually_print ca argument numit dacă trebuie să trecem mai multe nenumite. Ambele opțiuni următoare vor genera o eroare:
do_something(1, 2, 3, 4, 5, actually_print = True) # actually_print este mai întâi setat la 4 (înțelegeți de ce?) și apoi # suprascris, provocând o TypeError ("a primit mai multe valori pentru argumentul cuvântului cheie") do_something(1, 2, 3, actually_print = True, 4, 5, 6) # Argumentele numite nu le pot precede pe cele obișnuite. Apare o SyntaxError. Singura modalitate de a seta actually_print în această situație este să-l transmiteți ca argument obișnuit: do_something(1, 2, 3, True, 4, 5, 6) # result: "1, 2, 3, (4, 5, 6) )"
Singura modalitate de a seta actually_print în această situație este să-l transmiteți ca argument obișnuit:
face_something(1, 2, 3, True, 4, 5, 6) # rezultat: „1, 2, 3, (4, 5, 6)”
5.3. Transmiterea unei liste sau a unui dicționar ca argumente multiple
Deoarece este posibil să obțineți argumente trecute ca listă sau dicționar, nu este surprinzător că puteți transmite și argumente de funcție dintr-o listă sau dicționar. Sintaxa este exact aceeași ca în paragraful anterior, trebuie să puneți un asterisc în fața listei:
args = pow(*args) # returnează pow(5,2), adică 25
Și pentru dicționar (care este folosit mai des), trebuie să puneți două asteriscuri:
def do_something(actually_do_something=True, print_a_bunch_of_numbers=False): if actually_do_something: print "S-a făcut ceva" # if print_a_bunch_of_numbers: print range(10) kwargs = ("actually_do_something":a_do_something":) kwargs) # afișează „S-a făcut ceva” urmat de „”
Referință istorică: în Python înainte de versiunea 2.3, funcția încorporată apply (funcție, arg_list, keyword_arg_dict) a fost folosită în acest scop.
OperatorDescriereExemple
+ Adăugare - Adaugă valorile la stânga și la dreapta operatorului

15 + 5 va rezulta în 20
20 + -3 va rezulta în 17
13,4 + 7 va avea ca rezultat 20,4

- Scădere - Scade operandul drept din stânga 15 - 5 va rezulta în 10
20 - -3 va avea ca rezultat 23
13.4 - 7 va avea ca rezultat 6.4
* Înmulțire - Înmulțirea operanzilor 5 * 5 va avea ca rezultat 25
7 * 3.2 va avea ca rezultat 22.4
-3 * 12 va avea ca rezultat -36
/ Diviziune - Împarte operandul stâng la dreapta 15/5 va rezulta în 3
5 / 2 va avea ca rezultat 2 (În versiunea Python 2.x, la împărțirea a două numere întregi, rezultatul va fi un număr întreg)
5.0 / 2 va avea ca rezultat 2.5 (Pentru a obține rezultatul „corect”, cel puțin un operand trebuie să fie un float)
% Modulo - Împarte operandul din stânga la operandul din dreapta și returnează restul. 6 % 2 va avea ca rezultat 0
7% 2 va avea ca rezultat 1
13,2% 5 din 3,2
** Exponentiation - ridica operandul din stanga la puterea celui drept 5 ** 2 va avea ca rezultat 25
2 ** 3 va avea ca rezultat 8
-3 ** 2 va avea ca rezultat -9
// Diviziune întreagă - O diviziune în care este returnată numai partea întreagă a rezultatului. Partea de după virgulă este eliminată. 12 // 5 va avea ca rezultat 2
4 // 3 va avea ca rezultat 1
25 // 6 va avea ca rezultat 4

Operatori de comparare în Python:

OperatorDescriereExemple
== Verifică dacă ambii operanzi sunt egali. Dacă da, atunci condiția devine adevărată. 5 == 5 va avea ca rezultat True
True == False va avea ca rezultat False
„hello” == „hello” va avea ca rezultat True
!= 12 != 5 va avea ca rezultat True
False != False va avea ca rezultat False
„hi” != „Hi” va avea ca rezultat True
<> Verifică dacă ambii operanzi sunt egali. Dacă nu, atunci condiția devine adevărată.

12 <>5 va avea ca rezultat True. Arată ca un operator!=

> Verifică dacă valoarea operandului din stânga este mai mare decât valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată. 5 > 2 va avea ca rezultat True.
True > False va avea ca rezultat True.
„A” > „B” va avea ca rezultat False.
< Verifică dacă valoarea operandului din stânga este mai mică decât valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată. 3 < 5 в результате будет True.
Adevărat< False в результате будет False.
"A"< "B" в результате будет True.
>= Testează dacă valoarea operandului din stânga este mai mare sau egală cu valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată. 1 >= 1 va avea ca rezultat True.
23 >= 3,2 va avea ca rezultat True.
„C” >= „D” va avea ca rezultat False.
<= Testează dacă valoarea operandului din stânga este mai mică sau egală cu valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată. 4 <= 5 в результате будет True.
0 <= 0.0 в результате будет True.
-0.001 <= -36 в результате будет False.

Operatori de atribuire în Python:

OperatorDescriereExemple
= Atribuie valoarea operandului din dreapta la stânga. c = 23 va atribui valoarea 23 variabilei c
+= Adăugați valoarea operandului din dreapta operandului din stânga și atribuiți acea sumă operandului din stânga.

c = 5
a = 2
c += a este echivalent cu: c = c + a. c va fi egal cu 7

-= Scăde valoarea operandului din dreapta din operandul din stânga și alocă rezultatul operandului din stânga.

c = 5
a = 2
c -= a este echivalent cu: c = c - a. c va fi egal cu 3

*= Înmulțește operandul din dreapta cu operandul din stânga și alocă rezultatul operandului din stânga.

c = 5
a = 2
c *= a este echivalent cu: c = c * a. c va fi egal cu 10

/= Împarte operandul din stânga la operandul din dreapta și atribuie rezultatul operandului din stânga. c = 10
a = 2
c /= a este echivalent cu: c = c / a. c va fi egal cu 5
%= Modulați operanzii și atribuiți rezultatul la stânga. c = 5
a = 2
c % = a este echivalent cu: c = c % a. c va fi egal cu 1
**= Ridică operandul din stânga la puterea operandului din dreapta și alocă rezultatul operandului din stânga. c = 3
a = 2
c **= a este echivalent cu: c = c ** a. c va fi egal cu 9
//= Efectuează o împărțire întreagă a operandului din stânga la dreapta și alocă rezultatul operandului din stânga. c = 11
a = 2
c //= a este echivalent cu: c = c // a. c va fi egal cu 5

Operatori pe biți în Python:

Operatorii pe biți sunt proiectați să lucreze cu date într-un format de biți (binar). Să presupunem că avem două numere a = 60; și b = 13. În binar, acestea vor arăta astfel:

OperatorDescriereExemple
& Operatorul binar „ȘI”, copiază un bit în rezultat numai dacă bitul este prezent în ambii operanzi. (a și b) ne vor da 12, care în binar arată ca 0000 1100
| Operatorul binar „SAU” copiază un bit dacă este prezent în cel puțin un operand. (a | b) ne va da 61, în binar 0011 1101
^ Operatorul binar „SAU exclusiv” copiază doar un bit dacă bitul este prezent într-unul dintre operanzi, nu în ambii. (a^b) ne va da 49, în binar 0011 0001
~ Operator binar complementar. Este unar (adică are nevoie de un singur operand) schimbă biții la inversă, acolo unde a existat o unitate, aceasta devine zero și invers. (~a) va avea ca rezultat -61, care arată ca 1100 0011 în binar.
<< Deplasare biți la stânga. Valoarea operandului din stânga este „deplasată” la stânga cu numărul de biți specificat în operandul din dreapta. A<< 2 в результате даст 240, в двоичном формате 1111 0000
>> Deplasare biți la dreapta. Valoarea operandului din stânga este „deplasată” la dreapta cu numărul de biți specificat în operandul din dreapta. un >> 2 va da 15, în binar 0000 1111

Operatori logici în Python:

OperatorDescriereExemple
și Operatorul logic „ȘI”. Condiția va fi adevărată dacă ambii operanzi sunt adevărati.

Adevărat și Adevărat este egal cu Adevărat.
Adevărat și Fals este egal cu Fals.
Fals și Adevărat este egal cu Fals.
Fals și False este egal cu Fals.

sau Operatorul logic „SAU”. Dacă cel puțin unul dintre operanzi este adevărat, atunci întreaga expresie va fi adevărată. Adevărat sau Adevărat este egal cu Adevărat.
Adevărat sau Fals este egal cu Adevărat.
Fals sau Adevărat este egal cu Adevărat.
Fals sau Fals este egal cu Fals.
nu Operatorul logic „NU”. Inversează valoarea booleană a operandului. nu Adevărat este Fals.
nu Fals este egal cu Adevărat.

Operatori de apartenență în Python:

Pe lângă operatorii de mai sus, Piton există așa-numiți operatori de apartenență menționați pentru a testa prezența unui element în tipurile de date compuse, cum ar fi șiruri, liste, tupluri sau dicționare:

Operatori de identitate în Python:

Operatorii de identitate compară locația a două obiecte în memoria computerului.

Precedența operatorului în Python

Următorul tabel descrie precedența de execuție a instrucțiunilor în Piton de la cel mai mare (efectuat primul) la cel mai mic.

OperatorDescriere
** Exponentiatie
~ + - Operator gratuit
* / % // Înmulțire, împărțire, modulo, împărțire întregă.
+ - Adunare si scadere.
>> << Deplasare pe biți la dreapta și pe biți la stânga.
& „Eu” binar.
^ | Binar „SAU exclusiv” și binar „SAU”
<= < > >= Operatori de comparație
<> == != Operatori de egalitate
= %= /= //= -= += *= **= Operatori de atribuire
nu este Operatori de identitate
în nu în Operatori de membru
nu sau și Operatori logici