Operatory w Pythonie. Wyrażenia i operatory logiczne

Często w prawdziwe życie zgadzamy się z jakimkolwiek oświadczeniem lub go odrzucamy. Na przykład, jeśli powiedzą ci, że suma liczb 3 i 5 jest większa niż 7, zgodzisz się, mówiąc: „Tak, to prawda”. Jeśli ktoś twierdzi, że suma trzech i pięciu jest mniejsza niż siedem, uzna takie stwierdzenie za fałszywe.

Takie zwroty sugerują tylko dwie możliwe odpowiedzi - „tak”, gdy wyrażenie jest oceniane jako prawda, prawda lub „nie”, gdy zdanie jest oceniane jako błędne lub fałszywe. W programowaniu i matematyce, jeśli wynik oceny wyrażenia może być tylko prawdziwy lub fałszywy, to takie wyrażenie nazywa się logicznym.

Na przykład wyrażenie 4 > 5 jest wartością logiczną, ponieważ jego wynik jest albo prawdziwy, albo fałszywy. Wyrażenie 4 + 5 nie jest wyrażeniem logicznym, ponieważ wynikiem jego wykonania jest liczba.

W ostatniej lekcji zapoznaliśmy się z trzema typami danych - liczbami całkowitymi i liczbami rzeczywistymi oraz łańcuchami. Dziś przedstawiamy czwartą - typ danych logicznych(wpisz bool). Nazywa się to również wartością logiczną. Ten typ ma tylko dwie możliwe wartości: Prawdziwe(prawda) i Fałszywe(Fałszywe).

>>> a=Prawda >>>typ(a) >>> b=Fałsz >>>typ(b)

Tutaj zmienna a została ustawiona na True, a następnie przetestowana pod kątem typu za pomocą wbudowanej w Pythona funkcji type(). Interpreter zgłosił, że jest to zmienna klasy bool. W tym przypadku pojęcia „klasa” i „typ danych” to jedno i to samo. Zmienna b jest również powiązana z wartością logiczną.

W programowaniu Fałsz jest zwykle równy zeru, a Prawda jest równa jedynce. Aby to sprawdzić, możesz przekonwertować wartość logiczną na typ całkowity:

>>> wewn.(prawda) 1 >>> int(Fałsz) 0

Możliwa jest również sytuacja odwrotna. Możesz przekonwertować dowolną wartość na typ logiczny:

>>> bool (3.4 ) Prawdziwe >>> bool (-150 ) Prawdziwe >>> bool(0) Fałszywe >>> bool(" ") Prawdziwe >>> bool("") Fałszywe

I tu działa zasada: wszystko, co nie jest zerem i nie jest pustką, jest prawdą.

Operatory logiczne

Mówię dalej język naturalny(na przykład rosyjski) oznaczamy porównania słowami „równe”, „większe”, „mniej”. Języki programowania używają znaków specjalnych podobnych do tych używanych w matematyce: > (większe niż),< (меньше), >= (większe lub równe),<= (меньше или равно), == (равно), != (не равно).

Nie myl operacji przypisywania zmiennych, oznaczanej w Pythonie pojedynczym znakiem równości, z operacją porównania (dwa znaki równości). Przypisanie i porównanie to różne operacje.

>>> a = 10 >>>b=5 >>> a + b > 14 Prawdziwe >>> a< 14 - b Fałszywe >>> a<= b + 5 Prawdziwe >>> a != b Prawdziwe >>> a == b Fałszywe >>> c = a == b >>> a, b, c(10, 5, fałsz)

W tym przykładzie wyrażenie c = a == b składa się z dwóch podwyrażeń. Najpierw następuje porównanie (==) zmiennych a i b . Następnie wynik operacji logicznej jest przypisywany do zmiennej c. Wyrażenie a , pne po prostu wyświetla wartości zmiennych na ekranie.

Złożone wyrażenia logiczne

Wyrażenia logiczne, takie jak kByte >= 1023, są proste, ponieważ wykonują tylko jedną operację logiczną. Jednak w praktyce często potrzebne są bardziej złożone wyrażenia. Może być konieczne uzyskanie odpowiedzi „Tak” lub „Nie” w zależności od wyniku wykonania dwóch prostych wyrażeń. Na przykład „na zewnątrz pada śnieg lub deszcz”, „zmienna wiadomości jest większa niż 12 i mniejsza niż 20”.

W takich przypadkach używane są specjalne operatory, które łączą dwa lub więcej prostych wyrażeń logicznych. Powszechnie stosowane są dwa operatory - tzw. logiczne AND ( oraz) i LUB ( lub).

oraz, konieczne jest, aby wyniki obu prostych wyrażeń, które łączą podany operator, były prawdziwe. Jeśli przynajmniej w jednym przypadku wynikiem będzie False, to całe wyrażenie złożone będzie fałszywe.

Aby uzyskać True podczas korzystania z operatora lub, konieczne jest, aby wynik co najmniej jednego prostego wyrażenia, które jest częścią złożonego, był prawdziwy. W przypadku operatora lub wyrażenie złożone staje się fałszywe tylko wtedy, gdy oba jego składowe wyrażenia proste są fałszywe.

Powiedzmy, że zmiennej x przypisano wartość 8 (x = 8), zmiennej y przypisano 13 (y = 13). wyrażenie logiczne y< 15 and x >8 będzie działać w następujący sposób. Wyrażenie y zostanie wykonane jako pierwsze< 15 . Его результатом будет True. Затем выполнится выражение x >8 . Jego wynik będzie fałszem. Wyrażenie zostanie następnie zredukowane do True i False , co zwróci False.

>>>x=8 >>>y=13 >>>y< 15 and x > 8 Fałszywe

Jeśli napiszemy takie wyrażenie: x > 8 i y< 15 , то оно также вернуло бы False. Однако сравнение y < 15 не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение (x >8) zwrócił już fałsz, co w przypadku operatora i powoduje, że całe wyrażenie jest fałszywe.

W przypadku operatora lub drugie proste wyrażenie jest sprawdzane, czy pierwsze zwróciło fałsz, a nie sprawdzane, czy pierwsze zwróciło już prawdę. Ponieważ pojedyncza Prawda jest wystarczająca dla prawdziwości całego wyrażenia, bez względu na to, po której stronie lub po której się ono opiera.

>>>y< 15 or x > 8 Prawdziwe

Python ma również jednoargumentowy operator logiczny nie, czyli negacja. Zamienia prawdę w kłamstwa i kłamstwa w prawdę. Jest jednoargumentowy, ponieważ dotyczy pojedynczego wyrażenia po nim, a nie jego prawej i lewej strony, jak w przypadku binarnego i i lub.

Operatory to konstrukcje, które mogą manipulować wartością operandów. Rozważmy wyrażenie 4 + 5 = 9. Tutaj 4 i 5 nazywamy operandami, a + nazywamy operatorem.

Typy operatorów

Język Pythona obsługuje następujące typy operatorów:

  • Operatory arytmetyczne
  • Operatory porównawcze (relacyjne)
  • Operatorzy przypisania
  • Operatory logiczne
  • Operatory bitów
  • Operatorzy członkowscy
  • Operatory tożsamości

Przeanalizujmy wszystkie operatory jeden po drugim.

Operatory arytmetyczne w Pythonie

ale wartość to 10, a zmienna b zawiera wartość 21, to:

operatorOpisprzykład
+ DodatekDodawanie wartości po obu stronach operatora.a + b = 31
– OdejmowanieOdejmij prawy operand od lewego operandu.a – b = -11
* MnożenieMnożenie wartości po obu stronach operatoraa*b=210
/ podziałDzieli lewy operand przez prawy operandb/a = 2,1
% modułuDzieli lewy operand przez prawy operand i zwraca resztęb % a = 1
** WystawcaWykonuje obliczenia wykładnicze na operatoracha ** b = 10 do potęgi 20
// dzielenie z zaokrągleniemPodział według płci – Rozdzielenie operandów, gdzie wynikiem jest czynnik, w którym usuwana jest cyfra po przecinku. Ale jeśli jeden z operandów jest ujemny, to wynik jest zaokrąglany, tj. zaokrągla od zera (w odniesieniu do ujemnej nieskończoności):9 // 2 = 4 i 9,0 // 2,0 = 4,0, -11 // 3 = -4, -11,0 // 3 = -4,0

Operatory porównania w Pythonie

Operatory porównania wartości po obu ich stronach i decydują o relacji między nimi. Nazywa się je również operatorami relacyjnymi.

Załóżmy, że zmienna ale zawiera wartość 10 i zmienną b ma wartość 20, to:

operatorOpisprzykład
== Jeśli wartości dwóch operandów są równe, warunek staje się prawdziwy.(a == b) nie jest prawdą.
!= Jeśli wartości dwóch operandów nie są równe, warunek staje się prawdziwy.(a! = b) jest prawdziwe.
> Jeśli wartość lewego operandu jest większa niż wartość prawego operandu, warunek staje się prawdziwy.(a > b) nie jest prawdą.
< Jeśli wartość lewego operandu jest mniejsza niż wartość prawego operandu, warunek staje się prawdziwy.(ale< б) истинно.
> = Jeśli wartość lewego operandu jest większa lub równa wartości prawego operandu, warunek staje się prawdziwy.(a >= b) nie jest prawdą.
<= Jeśli wartość lewego operandu jest mniejsza lub równa wartości prawego operandu, warunek staje się prawdziwy.(ale<= б) истинно.

Operatory przypisania w Pythonie

Załóżmy, że zmienna zawiera ale wartość to 10, a zmienna b ma wartość 20, to:

operatorOpisprzykład
= Przypisuje wartości z prawej strony operandów do lewej strony operanduc = a + b przypisuje wartość a + b do c
+ = Dodaj iDodaje prawy operand do lewego operandu i przypisuje wynik do lewego operanduc + = a jest równoważne c = c + a
– = odejmij iOdejmuje prawy operand od lewego operandu i przypisuje wynik do lewego operanduc – = a jest równoważne c = c – a
* = pomnóż iMnoży prawy operand przez lewy operand i przypisuje wynik do lewego operanduc * = a jest równoważne c = c * a
/ = dziel iDzieli lewy operand przez prawy operand i przypisuje wynik do lewego operanduc / = a jest równoważne c = c / ac /= a jest równoważne c = c / a
% = Moduł iPobiera modulo z dwoma operandami i przypisuje wynik do lewego operanduc% = a jest równoważne c = c % a
** = Wystawca iWykonuje ocenę wykładnika na podstawie operatorów i przypisuje wartość lewego operanduc**=a jest równoważne c=c**a
// = Podział piętraWykonuje dzielenie operatorów z zaokrąglaniem i przypisuje wartość lewego operanduc // = a jest równoważne c = c // a

Operatory bitowe w Pythonie

Operatory bitowe operują na bitach i wykonują operacje bit po bicie. Powiedzmy, że a = 60; oraz b = 13; Obecnie w formacie binarnym będą wyglądać tak:

—————–

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

Wbudowana funkcja bin() w Pythonie może być użyta do uzyskania binarnej reprezentacji liczby całkowitej.

Następujące operatory bitowe są obsługiwane przez język Python:

OperatorOpisPrzykład
& binarne ANDkopie operatora bitowego, wynikające z tego, że istnieją w obu operandach(a i b) (0000 oznacza 1100)
| binarny ORkopiuje bit, jeśli istnieje w dowolnym z operandów.(a | b) = 61 (oznacza 0011 1101)
^ binarne XORkopiuje bit, jeśli jest ustawiony w jednym operandzie, ale nie w obu.(a^b) = 49 (oznacza 0011 0001)
~ Uzupełnienie binarneJest jednoargumentowy i ma efekt „odwrócenia”.(~a) = -61 (w postaci oznacza podwójne uzupełnienie 1100 0011 ze względu na podpisaną liczbę binarną.
<< Двоичный сдвиг влево Wartość lewego operandu jest przesuwana w lewo o liczbę bitów określoną przez prawy operand.ale<< = 240 (1111 означает 0000)
>> Binarne przesunięcie w prawoWartość lewego operandu jest przesuwana w prawo o liczbę bitów określoną przez prawy operand.a>>=15 (0000 oznacza 1111)

Operatory logiczne w Pythonie

Następujące operatory logiczne są obsługiwane przez język Python. Załóżmy, że zmienna jest prawdziwa, a zmienna b jest fałszem, to:

Oświadczenia członkowskie w Pythonie

Stan instrukcji testowych dla członkostwa w sekwencji, takich jak ciągi, listy lub krotki. Jak wyjaśniono poniżej, istnieją dwa operatory członkowskie:

Operatory tożsamości w Pythonie

Operatory identyfikacji porównują lokalizacje pamięci dwóch obiektów. Istnieją dwa operatory identyfikacji, jak wyjaśniono poniżej:

Operatory priorytetów w Pythonie

W poniższej tabeli wymieniono wszystkie operatory od najwyższego priorytetu do najniższego.

Numer seryjnyOperator i opis
1 **

Potęgowanie (wzmocnienie)

2 ~ + –

Uzupełnienie, jednoargumentowy plus i minus (nazwy metod dla dwóch ostatnich to +@ i -@)

3 * / % //

Mnożenie, modulo i reszta z dzielenia

4 + –

Dodawanie i odejmowanie

5 >> <<

Przesunięcie bitowe w prawo i w lewo

6 &

Bitowe „i”

7 ^ |

Bitowe wyłączne „LUB i zwykłe OR”

8 <= <>> =

operatory porównania

9 <> ==! =

operatorzy równości

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

operatorzy przypisania

11 nie jest

operatorzy identyfikacji

12 w nie w

operatorzy członkostwa

13 nie lub i

Operatory logiczne

Każda operacja ma swoich operatorów. Operatory podstawowe (dodawanie, odejmowanie, negacja, jednoargumentowy plus, jednoargumentowy minus, przypisanie) są używane w operacjach jednoargumentowych i binarnych. Ternary ma trzy argumenty: warunek jeżeli, wyrażenie jeżeli warunek == prawda i wyrażenie jeżeli warunek == fałsz.

Aby zrozumieć, czym jest operator, pomoże poniższy przykład.

A=b+c

c jest dodawane do b, a wynik jest przypisywany do a. Cały przykład a = b + c jest wyrażeniem. Zmienne, które się w nim pojawiają, to operandy. Wykonywana operacja jest dodawaniem, a używanym do tego operatorem jest „+”.

Operatory arytmetyczne Pythona

Python zapewnia ogromną liczbę bibliotek do rozwiązywania problemów obliczeniowych. Duży zestaw metod stawia Pythona na równi z Matlabem i Octave. Operacje arytmetyczne są stosowane względem liczb całkowitych typu int, liczb rzeczywistych typu float, zespolonych.

Jeśli jako argumenty operacji zostaną użyte tylko liczby całkowite, wynikiem będzie również liczba całkowita. Operacje na liczbach zmiennoprzecinkowych dadzą w wyniku liczbę całkowitą i ułamek. Jedyną operacją, w której interakcja liczb całkowitych daje ułamek, jest dzielenie.

Wszystkie możliwe operacje arytmetyczne są pokazane w tabeli.

Dodanie jednej liczby do drugiej odbywa się przez dodatkowy operator. Odejmowanie odbywa się za pomocą odejmowania. Mnożenie jednej liczby przez drugą odbywa się z mnożeniem. Potęgowanie odbywa się za pomocą wykładnika. Dzielenie służy do dzielenia.

Operator modulo (%) zwraca resztę, gdy lewy operand jest dzielony przez prawy operand. Jeśli zmienna a = 10, zmienna b = 20, to b%a == 0. Co to jest operator dzielenia z resztą, łatwo zrozumieć następujący przykład. Jeśli 9/2 == 4,5, to 9//2 zwraca wynik równy 4. Podział podłogi (//) zwraca liczbę całkowitą z operacji dzielenia lewego operandu przez prawy.

Wykonanie dowolnych operacji odbywa się bezpośrednio przez same liczby lub zmienne, którym przypisuje się wartości liczbowe. Wynikiem może być inna zmienna lub jedna z istniejących.

Oprócz liczb całkowitych i rzeczywistych w Pythonie występują liczby zespolone. Składają się z części rzeczywistych i urojonych. Zapisano je jako c = a + bj, gdzie a jest częścią rzeczywistą,

C.real() #a

b - wyimaginowany.

C.imag() #b

Operacje arytmetyczne na liczbach zespolonych mają te same właściwości, co na liczbach rzeczywistych. Użycie liczb zespolonych można przedstawić na płaszczyźnie o prostokątnym układzie współrzędnych. Punkt przecięcia osi X i Y odpowiada liczbie zespolonej x + yi. Zatem liczby rzeczywiste znajdują się na osi X, a liczby urojone na pionowej osi Y.

Porównanie

Operatory w Pythonie służą do porównywania zmiennych. Oprócz standardowych, znanych z problemów matematycznych, istnieje kontrola według wartości i według typu, a także kontrola nierówności.

Operacje porównania mają postać a x b, gdzie x jest operatorem porównania.

W programowaniu operator „=” działa inaczej niż w matematyce. Dopasowanie wartości każdego argumentu jest określane przez operator „==”, ale „=” przypisuje tylko wartość. Za pomocą != sprawdzana jest nierówność zmiennych. Ten operator można zastąpić jako „<>”, który nie jest standardowym operatorem w innych językach, takich jak C, Java czy Javascript.

Zadanie

Instrukcje Pythona przypisują wartość do zmiennej.

Przypisanie jest jedną z głównych konstrukcji w programowaniu. Za jego pomocą zmiennym nadaje się pewne wartości, które mogą zmieniać się w trakcie programu.

Algorytm pracy:

  • obliczenie wartości z lewej strony;
  • obliczenie wartości prawej ręki;
  • przypisanie jednej wartości do drugiej - w przypadku konfliktu typów muszą być rzutowane;
  • zwróć wynik operacji - prawda lub fałsz.

A operacje matematyczne działają zgodnie z tą zasadą:

a x b, gdzie x jest operatorem, oznacza, że ​​a = a x b. Zatem a += b mówi, że wartość zmiennej a jest dodawana do wartości zmiennej b, a ich wynik jest przypisany do zmiennej a. To samo dzieje się z innymi przykładami. Na przykład a **= b oznacza a = a ** b, to znaczy a jest podnoszone do potęgi b, wynik jest ostatecznie przypisywany do a.

Warunki

Sprawdzanie warunków odbywa się za pomocą operatora potrójnego Pythona.

Składa się z dwóch lub trzech części:

  • if - wyrażenie do sprawdzenia;
  • elif - instrukcja opcjonalna (podobna do if else lub elseif);
  • inaczej jest główną instrukcją.
a = int(input()) jeśli X: A = Y inaczej: A = Z

Wyrażenie można podać w jednym wierszu.

A = Y, jeśli X inaczej Z

Części else i elseif można pominąć, wyrażenie wygląda tak:

Jeśli 1: print("witaj 1")

Python ma instrukcje break i continue. Przerwa przerywa wykonywanie kodu na wszystkich poziomach. Kontynuuj zatrzymuje bieżącą iterację, kontynuuje wykonywanie od następnego punktu.

Bitowe

Takie operatory Pythona interpretują operandy jako ciąg zer i jedynek.

Używają liczb w reprezentacji binarnej, zwracają wynik jako liczbę 32-bitową.

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

Liczba ujemna w systemie binarnym jest uzyskiwana przez odwrócenie bitu i dodanie 1.

314 #-314 #+ 1 =

Różnica między a >> b i a >>> b polega na tym, że podczas przesuwania i odrzucania prawych wartości kopie pierwszych bitów są dodawane po lewej stronie.

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

Ale z >>> b, lewe wartości zostaną wypełnione zerami.

9 #-9 >>> 2 #

łamigłówka

W sumie istnieją trzy operatory logiczne.

  • i - zwraca prawdę, jeśli a == b == x;
  • lub - zwraca prawdę, jeśli a == x lub b == x;
  • not - zwraca false jeśli a == b == x.

Przynależność

Operator członkostwa sprawdza, czy zmienna jest częścią jakiejś sekwencji.

  • a in b zwraca prawdę, jeśli znajdzie zmienną a w sekwencji b;
  • a not in b zwraca prawdę, jeśli nie znajdzie a w sekwencji b.

Tożsamość

  • a jest b zwraca prawdę, jeśli zmienne po prawej i lewej stronie wskazują ten sam obiekt;
  • a nie b zwraca prawdę, jeśli zmienne nie wskazują na ten sam obiekt.

Priorytety

Lista zawiera operatory i wyrażenia posortowane według priorytetu wykonania od najniższego do najwyższego.

Operatory w Pythonie i ich pierwszeństwo wykonania:

  • Wyrażenia lambda.
  • Pyton.
  • logiczne LUB.
  • Boole'a I.
  • logiczne NIE.
  • Operatory tożsamości, członkostwa, operatory przypisania.
  • Bitowe LUB.
  • Bit NIE.
  • Bitowy I.
  • Bitowy operator przesunięcia bitowego.
  • Dodawanie i odejmowanie.
  • Mnożenie i dzielenie, w tym operacja uzyskania reszty z dzielenia i liczby całkowitej.
  • Bit NIE.
  • Potęgowanie.
  • Uzyskiwanie dostępu do elementu tablicy przez indeks, krojenie, dostęp do obiektu klasy, wywoływanie funkcji z argumentami.

Pierwsza pozycja na liście to wyrażenie lambda. Wyrażenie lambda służy do tworzenia funkcji anonimowych. Lambda zachowuje się jak normalna funkcja i jest zadeklarowana jako

Domyślne (argumenty): wyrażenie zwrotne

Po wyrażeniu lambda następują operacje wykonywane przez trójargumentowy operator Pythona.

Na końcu listy znajdują się metody manipulacji tablicami i funkcjami. Dostęp do elementu tablicy przez indeks wygląda tak:

W tym przypadku a to tablica, i to indeks elementu.

Krojenie oznacza przekazanie pełnej kopii tablicy lub selektywnej sekwencji elementów listy. Zakres żądanej wartości jest określony w . Jako argumenty x jest początkiem zliczania, y jest końcem, a z jest krokiem przechodzenia przez elementy tablicy w każdej iteracji. X jest domyślnie początkiem listy, y to koniec, a z to jeden. Jeśli określisz z jako liczbę ujemną, wartości listy są przekazywane w odwrotnej kolejności od końca do początku.

  • Tłumaczenie

W tej części artykułu zostaną omówione sztuczki polegające na wyborze jednej z dwóch wartości na podstawie warunku logicznego, przekazywaniu i odbieraniu dowolnej liczby argumentów funkcji oraz częstym źródle błędu - tym, że domyślne wartości argumentów funkcji są oceniane tylko raz.

4. Wybór wartości

4.1. Właściwy sposób
Od wersji 2.5 Python obsługuje składnię „value_if_true Jeśli test w przeciwnym razie wartość_jeśli_fałsz". W ten sposób możesz wybierać między dwiema wartościami bez uciekania się do dziwnej składni i szczegółowych wyjaśnień:
test = Prawda # test = Fałsz wynik = "Test jest prawdą" jeśli test jeszcze "Test jest fałszem" # wynik = "Test jest prawdą"
Niestety, wciąż jest trochę brzydki. Możesz także użyć kilku z tych konstrukcji w tej samej linii:
test1 = fałsz test2 = prawda wynik = "Test1 to prawda" jeśli test1 inaczej "Test1 to fałsz, test2 to prawda" jeśli test2 inaczej "Test1 i Test2 oba są fałszywe"
Pierwszy if/else jest wykonywany jako pierwszy, a jeśli test1 = false, drugi if/else jest wykonywany. Możesz też robić bardziej złożone rzeczy, zwłaszcza jeśli używasz nawiasów.

Ta metoda jest całkiem nowa i mam co do niej mieszane uczucia. To poprawna, zrozumiała konstrukcja, podoba mi się... ale nadal jest brzydka, zwłaszcza gdy używa się wielu zagnieżdżonych konstrukcji. Oczywiście składnia wszystkich trików do wybierania wartości jest brzydka. Mam słabość do poniższej metody i/lub metody, teraz uważam ją za intuicyjną, teraz rozumiem, jak to działa. Ponadto jest nie mniej skuteczna niż „właściwa” metoda.

Podczas gdy inline, jeśli/inne jest nowe, więcej Właściwy sposób, powinieneś przeczytać poniższe punkty. Nawet jeśli planujesz używać Pythona 2.5, zobaczysz te sposoby w starszym kodzie. Oczywiście, jeśli chcesz kompatybilności wstecznej, naprawdę lepiej byłoby je sprawdzić.

4.2. sztuczka i/lub
"i" i "lub" w Pythonie - złożone stworzenia. Stosowanie i do wielu wyrażeń nie tylko zwraca True lub False. Zwraca pierwsze fałszywe wyrażenie lub ostatnie wyrażenie, jeśli wszystkie są prawdziwe. Wynik jest oczekiwany: jeśli wszystkie wyrażenia są prawdziwe, zwracane jest ostatnie, które jest prawdziwe; jeśli jedna z nich jest fałszywa, jest zwracana i konwertowana na fałsz podczas testowania wartości logicznej.

Podobnie operator lub zwraca pierwszą wartość true lub ostatnią, jeśli żadna z nich nie jest prawdziwa.

To nie pomoże, jeśli sprawdzasz tylko wartość logiczną wyrażenia. Ale możesz użyć i i lub do innych celów. Moim ulubionym sposobem jest wybranie wartości w stylu podobnym do operatora trójskładnikowego C „test? value_if_true: value_if_false:
test = prawda # test = fałsz wynik = test i „Test jest prawdą” lub „Test jest fałszem” # teraz wynik = „Test jest prawdą”
Jak to działa? Jeśli test=true, operator i pomija go i zwraca drugą (ostatnią) podaną mu wartość: „Test is True” lub„Test jest fałszywy” . Dalej, lub zwróci pierwsze prawdziwe wyrażenie, tj. „Test to prawda”.

Jeśli test=false i zwraca test, test pozostaje lub„Test jest fałszywy” . Ponieważ test=false lub pominie go i zwróci drugie wyrażenie „Test is False”.

Uwaga, uważaj na średnią ("if_true"). Jeśli zwróci wartość false, wyrażenie lub zawsze ją pominie i zwróci ostatnią wartość ("if_false"), niezależnie od wartości testu.

Po zastosowaniu tej metody właściwy sposób (punkt 4.1) wydaje mi się mniej intuicyjny. Jeśli nie potrzebujesz kompatybilności wstecznej, wypróbuj oba sposoby i zobacz, który z nich najbardziej Ci się podoba. Jeśli nie możesz się zdecydować, użyj właściwego.

Oczywiście, jeśli potrzebujesz kompatybilności z poprzednie wersje Python, „poprawny” sposób nie zadziała. W takim przypadku i/lub - najlepszy wybór w większości sytuacji.

4.3. Prawda/Fałsz jako indeksy
Innym sposobem wyboru spośród dwóch wartości jest użycie True i False jako indeksów listy, biorąc pod uwagę fakt, że False == 0 i True == 1:
test = Prawda # test = Fałsz wynik = ["Test to fałsz","Test to prawda"] # teraz wynik = "Test to prawda"
W ten sposób jest bardziej sprawiedliwy, a value_if_true nie musi być prawdą. Ma jednak istotną wadę: oba elementy listy są oceniane przed sprawdzeniem. W przypadku stringów i innych prostych elementów nie stanowi to problemu. Ale jeśli każde z nich wymaga dużych obliczeń lub operacji we/wy, ocena obu wyrażeń nie jest dozwolona. Dlatego wolę zwykłą konstrukcję lub i/lub.

Zauważ też, że ta metoda działa tylko wtedy, gdy masz pewność, że test jest wartością logiczną, a nie jakimś obiektem. W przeciwnym razie musisz napisać bool(test) zamiast test, aby działał poprawnie.

5. Funkcje

5.1. Domyślne wartości argumentów są oceniane tylko raz
Zacznijmy tę sekcję od ostrzeżenia. Ten problem wielokrotnie wprawiał w zakłopotanie wielu programistów, w tym mnie, nawet po tym, jak rozwiązałem problem. Łatwo popełnić błąd, używając wartości domyślnych:
def function(element, stuff = ): stuff.append(item) print stuff function(1) # drukuje "" function(2) # drukuje "" !!!
Domyślne wartości argumentów są oceniane tylko raz, w momencie definiowania funkcji. Python po prostu przypisuje tę wartość do żądanej zmiennej za każdym razem, gdy funkcja jest wywoływana. Nie sprawdza jednak, czy ta wartość się zmieniła. Dlatego jeśli to zmienisz, zmiana będzie obowiązywać przy kolejnych wywołaniach funkcji. W poprzednim przykładzie, gdy dodaliśmy wartość do listy rzeczy, na stałe zmieniliśmy jej wartość domyślną. Kiedy ponownie wywołamy funkcję, oczekując wartości domyślnej, otrzymamy zmienioną.

Rozwiązanie: Nie używaj obiektów zmiennych jako domyślnych. Możesz zostawić to tak, jak jest, jeśli ich nie zmienisz, ale to zły pomysł. Oto jak powinien zostać napisany poprzedni przykład:
def function(item, stuff = None): jeśli stuff is None: stuff = stuff.append(item) print stuff function(1) # drukuje "" function(2) # drukuje "" zgodnie z oczekiwaniami
Żaden nie jest niezmienny (i tak nie próbujemy go zmienić), więc nie możemy nagle zmienić wartości domyślnej.

Z drugiej strony sprytny programista może zamienić to w chwyt polegający na użyciu zmiennych statycznych, jak w C.

5.1.1. Wymuś każdorazowe obliczanie wartości domyślnych
Jeśli nie chcesz zaśmiecać kodu funkcji, możesz poprosić interpretera o ponowne obliczenie wartości argumentów przed każdym wywołaniem. Robi to następujący dekorator:
from copy 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__ reseter powrotu
Po prostu zastosuj ten dekorator do funkcji, aby uzyskać oczekiwane rezultaty:
@resetDefaults # w ten sposób stosujemy funkcję dekoratora def(item, stuff = ): stuff.append(item) print stuff function(1) # drukuje "" function(2) # drukuje "" zgodnie z oczekiwaniami
5.2. Zmienna liczba argumentów
Python pozwala na użycie dowolnej liczby argumentów w funkcjach. Wymagane argumenty (jeśli istnieją) są definiowane jako pierwsze, a następnie zmienna musi być określona gwiazdką. Python poda mu wartość listy pozostałych (nienazwanych) argumentów:
def zrób_coś(a, b, c, *args): print a, b, c, args zrób_coś(1,2,3,4,5,6,7,8,9) # wypisuje "1, 2, 3, (4, 5, 6, 7, 8, 9)"
Dlaczego jest to potrzebne? Na przykład funkcja powinna brać kilka elementów i robić z nimi to samo (na przykład dodać). Możesz zmusić użytkownika do przekazania listy do funkcji: sum_all(). I możesz zezwolić na przekazywanie dowolnej liczby argumentów, wtedy otrzymasz czystszy kod: sum_all(1,2,3).

Funkcja może mieć również zmienną liczbę nazwanych argumentów. Po zdefiniowaniu wszystkich pozostałych argumentów, określ zmienną z "**" na początku. Python przypisze tej zmiennej słownik otrzymanych nazwanych argumentów, z wyjątkiem wymaganych:
def zrób_coś_else(a, b, c, *args, **kwargs): print a, b, c, args, kwargs do_coś_innego(1,2,3,4,5,6,7,8,9, timeout=1.5 ) # wyjścia "1, 2, 3, (4, 5, 6, 7, 8, 9), ("timeout": 1,5)"
Czemu to robić? Myślę, że najczęstszym powodem jest to, że funkcja jest opakowaniem dla innej funkcji (funkcji), a nieużywane nazwane argumenty można przekazać do innej funkcji (patrz 5.3).

5.2.1. Wyjaśnienie
Użycie nazwanych argumentów i dowolnej liczby zwykłych argumentów po nich jest najwyraźniej niemożliwe, ponieważ nazwane argumenty muszą być zdefiniowane przed parametrem „*”. Na przykład wyobraźmy sobie funkcję:
def zrób_coś(a, b, c, faktycznie_druk = Prawda, *args): jeśli faktycznie_drukuj: drukuj a, b, c, args
Mamy problem: nie będzie możliwe przekazanie fact_print jako nazwanego argumentu, jeśli będziemy musieli przekazać kilka nienazwanych. Obie poniższe opcje wygenerują błąd:
do_something(1, 2, 3, 4, 5, faktycznie_print = True) # fact_print jest najpierw ustawiane na 4 (rozumiesz dlaczego?), a następnie # jest zastępowane, powodując błąd TypeError ("ma wiele wartości dla argumentu słowa kluczowego") do_something(1, 2, 3, faktycznie_print = True, 4, 5, 6) # Nazwane argumenty nie mogą poprzedzać zwykłych. Występuje SyntaxError. Jedynym sposobem ustawienia faktycznie_print w tej sytuacji jest przekazanie go jako zwykłego argumentu: do_something(1, 2, 3, True, 4, 5, 6) # wynik: "1, 2, 3, (4, 5, 6 )"
Jedyny sposób na ustawienie fact_print w tej sytuacji to przekazanie go jako normalnego argumentu:
zrób_coś(1, 2, 3, Prawda, 4, 5, 6) # wynik: "1, 2, 3, (4, 5, 6)"
5.3. Przekazywanie listy lub słownika jako wielu argumentów
Ponieważ możliwe jest uzyskanie przekazanych argumentów jako listy lub słownika, nie jest zaskakujące, że możesz również przekazać argumenty funkcji z listy lub słownika. Składnia jest dokładnie taka sama jak w poprzednim akapicie, przed listą należy umieścić gwiazdkę:
args = pow(*args) # zwraca pow(5,2), czyli 25
A dla słownika (który jest częściej używany) musisz umieścić dwie gwiazdki:
def do_something(actually_do_something=True, print_a_bunch_of_numbers=False): ifctual_do_something: print "Coś zostało zrobione" # if print_a_bunch_of_numbers: true kwargs) # drukuje "Coś zostało zrobione", a następnie ""
Odniesienie historyczne: w Pythonie przed wersją 2.3 w tym celu była używana wbudowana funkcja apply (function, arg_list, Keyword_arg_dict).
OperatorOpisPrzykłady
+ Dodawanie - Dodaje wartości po lewej i prawej stronie operatora

15 + 5 da 20
20 + -3 da 17
13,4 + 7 da 20,4

- Odejmowanie — odejmuje prawy operand od lewego 15 - 5 da 10
20 - -3 da 23
13,4 - 7 da 6,4
* Mnożenie - Mnożenie argumentów 5 * 5 spowoduje 25
7 * 3,2 da 22,4
-3 * 12 da wynik -36
/ Dzielenie - Dzieli lewy operand przez prawy 15 / 5 da 3
5/2 da w wyniku 2 (w wersji Pythona 2.x, po dzieleniu dwóch liczb całkowitych wynik będzie liczbą całkowitą)
5.0 / 2 da w wyniku 2.5 (Aby uzyskać "poprawny" wynik, co najmniej jeden operand musi być liczbą zmiennoprzecinkową)
% Modulo — dzieli lewy operand przez prawy operand i zwraca resztę. 6 % 2 da 0
7% 2 da 1
13,2% 5 z 3,2
** Potęgowanie - podnosi lewy operand do potęgi prawego 5 ** 2 da wynik 25
2 ** 3 da wynik 8
-3 ** 2 da -9
// Podział liczby całkowitej — podział, w którym zwracana jest tylko część wyniku będąca liczbą całkowitą. Część po przecinku jest odrzucana. 12 // 5 da 2
4 // 3 da 1
25 // 6 da 4

Operatory porównania w Pythonie:

OperatorOpisPrzykłady
== Sprawdza, czy oba operandy są równe. Jeśli tak, warunek staje się spełniony. 5 == 5 da w wyniku True
Prawda == Fałsz spowoduje Fałsz
"hello" == "hello" da w wyniku True
!= 12 != 5 da w wyniku True
False ! = False spowoduje False
"hi" != "Hi" da w wyniku True
<> Sprawdza, czy oba operandy są równe. Jeśli nie, warunek staje się prawdziwy.

12 <>5 spowoduje True. Wygląda na operatora!=

> Sprawdza, czy wartość lewego operandu jest większa niż wartość prawego operandu. Jeśli tak, warunek staje się spełniony. 5 > 2 da w wyniku True.
True > False da w wyniku True.
„A” > „B” spowoduje fałsz.
< Sprawdza, czy wartość lewego operandu jest mniejsza niż wartość prawego operandu. Jeśli tak, warunek staje się spełniony. 3 < 5 в результате будет True.
Prawdziwe< False в результате будет False.
"A"< "B" в результате будет True.
>= Testuje, czy wartość lewego operandu jest większa lub równa wartości prawego operandu. Jeśli tak, warunek staje się spełniony. 1 >= 1 da w wyniku True.
23 >= 3.2 da w wyniku True.
"C" >= "D" spowoduje False.
<= Testuje, czy wartość lewego operandu jest mniejsza lub równa wartości prawego operandu. Jeśli tak, warunek staje się spełniony. 4 <= 5 в результате будет True.
0 <= 0.0 в результате будет True.
-0.001 <= -36 в результате будет False.

Operatory przypisania w Pythonie:

OperatorOpisPrzykłady
= Przypisuje wartość prawego operandu do lewego. c = 23 przypisze wartość 23 do zmiennej c
+= Dodaj wartość prawego operandu do lewego operandu i przypisz tę sumę do lewego operandu.

c = 5
a = 2
c += a jest równoważne: c = c + a. c będzie równe 7

-= Odejmuje wartość prawego operandu od lewego operandu i przypisuje wynik do lewego operandu.

c = 5
a = 2
c -= a jest równoważne: c = c - a. c będzie równe 3

*= Mnoży prawy operand przez lewy operand i przypisuje wynik do lewego operandu.

c = 5
a = 2
c *= a jest równoważne: c = c * a. c będzie równe 10

/= Dzieli lewy operand przez prawy operand i przypisuje wynik do lewego operandu. c = 10
a = 2
c /= a jest równoważne: c = c / a. c będzie równe 5
%= Zmoduluj operandy i przypisz wynik po lewej stronie. c = 5
a = 2
c % = a jest równoważne z: c = c % a. c będzie równe 1
**= Podnosi lewy operand do potęgi prawego operandu i przypisuje wynik do lewego operandu. c = 3
a = 2
c **= a jest równoważne: c = c ** a. c będzie równe 9
//= Wykonuje dzielenie całkowite lewego operandu przez prawy i przypisuje wynik do lewego operandu. c = 11
a = 2
c //= a jest równoważne: c = c // a. c będzie równe 5

Operatory bitowe w Pythonie:

Operatory bitowe są przeznaczone do pracy z danymi w formacie bitowym (binarnym). Załóżmy, że mamy dwie liczby a = 60; i b = 13. W systemie binarnym będą wyglądać tak:

OperatorOpisPrzykłady
& Binarny operator „AND”, kopiuje bit do wyniku tylko wtedy, gdy bit jest obecny w obu operandach. (a & b) da nam 12, co w systemie binarnym wygląda jak 0000 1100
| Binarny operator „OR” kopiuje bit, jeśli jest obecny w co najmniej jednym operandzie. (a | b) da nam 61, binarnie 0011 1101
^ Binarny operator „Exclusive OR” kopiuje tylko bit, jeśli jest on obecny w jednym z operandów, a nie w obu. (a^b) da nam 49, binarnie 0011 0001
~ Binarny operator komplementarny. Jest jednoargumentowy (czyli potrzebuje tylko jednego operandu) zmienia bity na odwrotne, gdzie była jednostka, staje się zerem i odwrotnie. (~a) da w wyniku -61, co w postaci binarnej wygląda jak 1100 0011.
<< Przesunięcie bitowe w lewo. Wartość lewego operandu jest „przesuwana” w lewo o liczbę bitów określoną w prawym operandzie. a<< 2 в результате даст 240, в двоичном формате 1111 0000
>> Przesunięcie bitowe w prawo. Wartość lewego operandu jest „przesuwana” w prawo o liczbę bitów określoną w prawym operandzie. a >> 2 da 15, binarnie 0000 1111

Operatory logiczne w Pythonie:

OperatorOpisPrzykłady
oraz Operator logiczny „AND”. Warunek będzie prawdziwy, jeśli oba operandy są prawdziwe.

Prawda i prawda równa się prawdzie.
Prawda i fałsz równa się fałsz.
Fałsz i prawda równa się fałsz.
Fałsz i Fałsz równa się Fałsz.

lub Operator logiczny „LUB”. Jeśli przynajmniej jeden z operandów jest prawdziwy, to całe wyrażenie będzie prawdziwe. Prawda lub prawda równa się Prawda.
Prawda czy fałsz równa się Prawda.
Fałsz lub prawda równa się Prawda.
Fałsz lub Fałsz równa się Fałsz.
nie Operator logiczny „NIE”. Odwraca wartość logiczną operandu. nie prawda jest fałszem.
nie fałsz równa się prawda.

Operatory członkostwa w Pythonie:

Oprócz powyższych operatorów, Pyton istnieją tak zwane operatory przynależności, przeznaczone do testowania obecności elementu w złożonych typach danych, takich jak ciągi, listy, krotki czy słowniki:

Operatory tożsamości w Pythonie:

Operatorzy tożsamości porównują lokalizację dwóch obiektów w pamięci komputera.

Pierwszeństwo operatorów w Pythonie

Poniższa tabela opisuje pierwszeństwo wykonania oświadczeń w Pyton od najwyższego (wykonane jako pierwsze) do najniższego.

OperatorOpis
** Potęgowanie
~ + - Bezpłatny operator
* / % // Mnożenie, dzielenie, modulo, dzielenie całkowite.
+ - Dodawanie i odejmowanie.
>> << Bitowe przesunięcie w prawo i bitowe przesunięcie w lewo.
& Binarne „ja”.
^ | Binarne „wyłączne OR” i binarne „OR”
<= < > >= Operatory porównania
<> == != Operatory równości
= %= /= //= -= += *= **= Operatorzy przypisania
to nie jest Operatory tożsamości
w nie w Operatorzy członkostwa
nie lub i Operatory logiczne