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 / 2daje5.0. Do dzielenia całkowitego użyj//.%to modulo.n % 2 == 0to najczystszy sposób sprawdzenia, czynjest 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ć:
**: potęgowanie*,/,//,%: mnożenie i dzielenie+,-: dodawanie i odejmowanie<,<=,>,>=,==,!=: porównanianotandor
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.