Menu

Operatory w Pythonie: arytmetyczne, porównania, logiczne, in oraz is

Pełny przegląd operatorów w Pythonie: arytmetycznych, porównania, logicznych, przypisania, przynależności i tożsamości, z przykładem dla każdego.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Operatory to po prostu symbole działań

Operator to symbol (albo krótkie słowo kluczowe), który mówi Pythonowi, żeby zrobił coś z jedną lub dwiema wartościami: dodał je, porównał albo sprawdził, czy jedna zawiera drugą. Kilka znasz już z podstaw matematyki; Python ma ich jeszcze garść do logiki, zawierania i tożsamości.

Przejdziemy po kolei przez główne kategorie.

Operatory arytmetyczne

Standardowe operatory matematyczne plus kilka specjalności Pythona:

Dwie rzeczy z tej listy łatwo zapomnieć:

  • / zwraca float, nawet gdy obie strony są liczbami całkowitymi. 10 / 2 daje 5.0. Do dzielenia całkowitego użyj //.
  • % to modulo. n % 2 == 0 to najczystszy sposób sprawdzenia, czy n jest parzyste.

Python stosuje standardową kolejność działań: ** wiąże silniej niż * i /, a te silniej niż + i -. Nawiasy mają pierwszeństwo przed wszystkim:

Gdy masz jakiekolwiek wątpliwości, nie żałuj nawiasów. Nic nie kosztują, a zamiar staje się oczywisty.

Operatory porównania

Sześć porównań, każde zwraca wartość logiczną:

Python pozwala łączyć porównania w łańcuchy, co jest nietypowe i przydatne:

Czyta się to jako "age wynosi co najmniej 18 i mniej niż 65". Pod spodem jest to równoważne 18 <= age and age < 65, ale wygląda bardziej jak zapis matematyczny.

Operatory logiczne

Zapisywane jako angielskie słowa, a nie symbole:

Dwa szczegóły, które warto znać:

Obliczanie skrócone. and zatrzymuje się na pierwszej wartości falsy; or zatrzymuje się na pierwszej wartości truthy. Prawa strona nie jest nawet obliczana, jeśli lewa już rozstrzyga odpowiedź. Dzięki temu możesz bezpiecznie chronić się przed błędami:

and/or zwracają wartość, nie zawsze True/False. Zwracają ten operand, który rozstrzygnął wynik:

W prawdziwym kodzie zobaczysz name = user_input or "anonymous": to wzorzec wartości domyślnej zbudowany na tym zachowaniu.

Pełne zasady działania tych trzech operatorów, w tym to, które wartości są falsy, jaki priorytet mają względem siebie not, and i or oraz dlaczego and to nie to samo co &, znajdziesz na stronie and, or, not w Pythonie.

Operatory przypisania

= przypisuje. Formy złożone łączą działanie z przypisaniem:

Formy złożone działają też dla napisów (s += "more") i list (lst += [4, 5]). Nie są szybsze od pełnego zapisu, są po prostu krótsze.

Przynależność: in i not in

Sprawdzają, czy wartość występuje w kontenerze:

in działa na każdym obiekcie iterowalnym: listach, krotkach, zbiorach, napisach, słownikach i innych. Przy dużych wyszukiwaniach in na liście to O(n), a in na zbiorze albo słowniku to O(1). Ma to znaczenie, gdy sprawdzasz przynależność wiele razy.

Tożsamość: is i is not

is sprawdza, czy dwie zmienne wskazują ten sam obiekt w pamięci, a nie tylko równe wartości:

Prawie zawsze chodzi ci o ==. Jedyne miejsce, gdzie is naprawdę błyszczy, to sprawdzanie None, True i False:

Konwencja społeczności jest stanowcza: is None, a nie == None. Tak samo is True (choć rzadko jest potrzebne).

Operatory bitowe (przy pierwszym czytaniu możesz pominąć)

Python ma też operatory bitowe, &, |, ^, ~, <<, >>, do operowania na pojedynczych bitach liczby całkowitej. Przydają się w kryptografii, niskopoziomowej obsłudze sieci i niektórych algorytmach. Przy pierwszym podejściu możesz je spokojnie zignorować.

Operator walrus (:=)

Python 3.8 dodał :=, który w jednym wyrażeniu przypisuje i zwraca wartość. Przydaje się w warunkach, gdzie chcesz jednocześnie zapamiętać i sprawdzić wynik:

Bez operatora walrus trzeba by wywołać len(numbers) dwa razy albo dopisać dodatkową linię. Nie jest niezbędny; używaj go tam, gdzie ogranicza powtórzenia.

Ściąga z priorytetów operatorów

Od najsilniej do najsłabiej wiążących, dla operatorów, których faktycznie będziesz używać:

  1. **: potęgowanie
  2. *, /, //, %: mnożenie i dzielenie
  3. +, -: dodawanie i odejmowanie
  4. <, <=, >, >=, ==, !=: porównania
  5. not
  6. and
  7. or

W razie wątpliwości dodaj nawiasy. Jasność wygrywa ze sprytem.

Najczęściej zadawane pytania

Jakie są główne rodzaje operatorów w Pythonie?

Arytmetyczne (+, -, *, /, //, %, **), porównania (==, !=, <, <=, >, >=), logiczne (and, or, not), przypisania (=, +=, -=, …), przynależności (in, not in) i tożsamości (is, is not).

Czym różni się == od is w Pythonie?

== sprawdza, czy dwie wartości są równe. is sprawdza, czy dwie zmienne wskazują dokładnie ten sam obiekt w pamięci. Dla None, True i False używaj is, bo to singletony. We wszystkich innych przypadkach prawie zawsze chodzi ci o ==.

Co robi operator % w Pythonie?

Dla liczb % to operator modulo: zwraca resztę z dzielenia. 17 % 5 to 2. Dla napisów to starsza składnia formatowania (na przykład "hello %s" % name), ale f-stringi w dużej mierze ją zastąpiły.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ