a_byte_of_python__op_exp.uk
Оператори та вирази (англ. "Operators and Expressions")
Більшість statements (логічних рядків), які ви пишете, міститимуть вирази. Простим прикладом виразу є 2 + 3
. Вираз можна розбити на оператори та операнди.
Оператори — це певний функціонал, який виконує певні дії та який може бути представлений такими символами, як наприклад «+», або спеціальними ключовими словами. Операторам потрібні деякі дані для роботи, і такі дані називаються операндами. У цьому випадку "2" і "3" є операндами.
Оператори (англ."Operators")
Ми коротко розглянемо операторів та їх використання.
Зверніть увагу, що ви можете обчислити вирази, наведені в прикладах, використовуючи інтерпретатор інтерактивно. Наприклад, щоб перевірити вираз 2 + 3
, скористайтесь інтерактивним командним рядком інтерпретатора Python:
>>> 2 + 3 5 >>> 3 * 5 15 >>>
Ось короткий огляд доступних операторів:
-
+
(Додавання) ( англ."plus")- Підсумовує два об'єкта
-
3 + 5
дорівнює8
.'a' + 'b'
дорівнює'ab'
.
-
-
(Віднімання) ( англ."minus")- Дає віднімання одного числа від іншого; якщо перший операнд відсутній, він вважається нульовим.
-
-5.2
дасть негативне число, а50 - 24
дасть26
.
-
*
(Mноження) (англ. "multiply")- Видає множення двох чисел або повертає рядок, що повторюється задане число разів.
-
2 * 3
дорівнює6
.'la' * 3
дорівнює'lalala'
.
-
**
(Піднесення до степеня)(англ."power")- Повертає число х,зведене в ступінь y
-
3 ** 4
дорівнює81
(тобто3 * 3 * 3 * 3
)
-
/
(Ділення) (англ. "divide")- Ділить x на y
-
13 / 3
дорівнює4.333333333333333
-
//
(Цілочисельний поділ) (англ. "divide and floor")- Розділіть x на y та округліть відповідь вниз до найближчого цілого значення. Зауважте, що якщо одне зі значень є числом з плаваючою комою, ви отримаєте значення з плаваючою комою.
-
13 // 3
дорівнює4
-
-13 // 3
дорівнює-5
-
9//1.81
дорівнює4.0
-
%
(Поділ по модулю) (англ. "modulo")- Повертає залишок від ділення
-
13 % 3
дорівнює1
.-25.5 % 2.25
дорівнює1.5
.
-
<<
(оператори зсуву вліво на задану кількість біт)(англ."left shift")- Зсуває біти числа вліво на задане число позицій. (Кожне число представлено в пам’яті бітами або двійковими цифрами, тобто 0 і 1)
-
2 << 2
дорівнює8
. У двійковій системи числення2
представляє собою10
. - Зрушення вліво на 2 біта дає «1000», що у десятковій системи числення означає 8.
-
>>
(оператори зсуву вправо на задану кількість біт)(англ."right shift")- Зсуває біти числа вправо на задане число позицій.
-
11 >> 1
дорівнює5
. - У двійковій системи числення
11
представлено в бітах як1011
яке при зсуві вправо на 1 біт дорівнює101
і яке є десятковим5
.
-
&
(побітове І)(англ."bit-wise AND")- Побітова операція І над числами: якщо обидва біти дорівнюють
1
, то результат дорівнює1
. В іншому випадку це0
. -
5 & 3
дорівнює1
(0101 & 0011
дорівнює0001
)
- Побітова операція І над числами: якщо обидва біти дорівнюють
-
|
(побітове АБО)(англ."bit-wise OR")- Побітова операція АБО
над числами: якщо обидва біти дорівнюють
0
, результат0
. В іншому випадку це1
. -
5 | 3
дорівнює7
(0101 | 0011
дорівнює0111
)
- Побітова операція АБО
над числами: якщо обидва біти дорівнюють
-
^
(бітове виключне АБО)(англ."bit-wise XOR")- Побітова операція виключне АБО над числами: якщо обидва біти (
1 або 0
) однакові, результат дорівнює0
. В іншому випадку це1
. -
5 ^ 3
дорівнює6
(O101 ^ 0011
дорівнює0110
)
- Побітова операція виключне АБО над числами: якщо обидва біти (
-
~
(побітове НЕ) (англ."bit-wise invert")- Побітова операція НЕ для числа x відповідає -(x+1)
-
~5
дорівнює-6
. Детальніше на http://stackoverflow.com/a/11810203
-
<
(менше ніж) (англ."less than")- Визначає чи вірно те, що x менше за y. Усі оператори порівняння повертають
True
абоFalse
. Зверніть увагу на написання цих імен з великої літери. -
5 < 3
дорівнюєFalse
, а3 < 5
дорівнюєTrue
. - Можна складати довільні ланцюжки:
3 < 5 < 7
даєTrue
.
- Визначає чи вірно те, що x менше за y. Усі оператори порівняння повертають
-
>
(Більше ніж)(англ."greater than")- Визначає чи вірно те, що x більше за y
-
5 > 3
повертаєTrue
. Якщо обидва операнди є числами, вони спочатку перетворюються на однаковий тип. В іншому випадку завжди повертаєтьсяFalse
.
-
<=
(менше або дорівнює) (англ."less than or equal to")- Визначає чи вірно те, що x менше або дорівнює y
-
x = 3; y = 6; x <= y
повертаєTrue
-
>=
(більше або дорівнює)(англ."greater than or equal to")- Визначає чи вірно те, що x більше або дорівнює y
-
x = 4; y = 3; x >= 3
повертаєTrue
-
==
(дорівнює) (англ."equal to")- Порівнює, чи однакові об'єкти
-
x = 2; y = 2; x == y
повертаєTrue
-
x = 'str'; y = 'stR'; x == y
повертаєFalse
-
x = 'str'; y = 'str'; x == y
повертаєTrue
-
!=
(не дорівнює) (англ."not equal to")- Порівнює, якщо об'єкти не рівні
-
x = 2; y = 3; x != y
повертаєTrue
-
not
(логічне НЕ)(англ."boolean NOT")- Якщо x дорівнює
True
, оператор повернеFalse
. Якщо ж x дорівнюєFalse
, отримаємоTrue
. -
x = True; not x
повертаєFalse
.
- Якщо x дорівнює
-
and
(логічне І) (англ."boolean AND")-
x and y
повертаєFalse
,якщо x дорівнюєFalse
,в протилежному випадку повертає значення y -
x = False; y = True; x and y
повертаєFalse
оскільки x є False. У цьому випадку Python не обчислюватиме y, оскільки він знає, що ліва частина виразу «and» має значення «False», що означає, що весь вираз буде «False» незалежно від інших значень.Це називається скороченою оцінкою булевих (логічних) виразів (англ. "short-circuit evaluation").
-
-
or
(логічне АБО)(англ."boolean OR")- Якщо x дорівнює
True
, він повертає True, в протилежному випадку отримаємо значення y -
x = True; y = False; x or y
повертаєTrue
.Тут також застосовується скорочена оцінка виразів.
- Якщо x дорівнює
Короткий запис математичних операцій та привласнення
Зазвичай виконується математична операція над змінною, а потім привласнюється результат цієї операції тій самій змінній, отже, для таких виразів існує скорочення:
a = 2 a = a * 3
можна записати як:
a = 2 a *= 3
Зверніть увагу, що вирази виду var = var operation expression
("змінна = змінна операція
вираз") стає var operation= expression
("змінна операція = вираз").
Порядок обчислення (англ. "Evaluation Order")
Якщо у вас є такий вираз, як «2 + 3 * 4», спочатку виконується додавання чи множення? Шкільний курс математики говорить нам, що спочатку потрібно виконати множення. Це означає, що оператор множення має вищий пріоритет, ніж оператор додавання.
У наcтупній таблиці нижче наведено пріоритет операторів Python, починаючи з самого найнижчого пріоритету (найслабше зв'язування, англ."least binding") до найвищого пріоритету (найсильніше зв'язування,англ."most binding").Це означає, що у будь-якому вираженні Python спочатку оцінить оператори та вирази, розташовані нижче в таблиці, а потім ті, що перераховані вище в таблиці.
Для повноти опису наведено наступну таблицю, взяту з Посібника мови Python (англ.""Python reference manual). Набагато краще використовувати дужки для відповідного групування операторів і операндів, щоб явно вказати порядок обчислення виразів. Це робить програму більш читабельною. Див. Зміна порядку оцінювання (англ. "Changing the Order of Evaluation") нижче для отримання додаткової інформації.
-
lambda
: Лямбда-вираз (англ."Lambda Expression") -
if - else
: Умовний вираз (англ."Conditional expression") -
or
: Логічне АБО (англ."Boolean OR") -
and
: Логічне І (англ."Boolean AND") -
not x
: Логічне НЕ (англ."Boolean NOT") -
in, not in, is, is not, <, <=, >, >=, !=, ==
: Порівняння, включаючи тести на приналежність і тести на тотожність -
|
: Побітне АБО (англ."Bitwise OR") -
^
: Побітне ВИКЛЮЧНО АБО (англ."Bitwise XOR") -
&
: Побітне I (англ."Bitwise AND") -
<<, >>
: Зміщеня (англ."Shifts") -
+, -
: Додавання і віднімання(англ."Addition and subtraction") -
*, /, //, %
: Множення, ділення, цілочисельне ділення та залишок від ділення (англ."Multiplication", "Division", "Floor Division" and "Remainder") -
+x, -x, ~x
: Позитивне, негативне, побітове НЕ (англ."Positive", "Negative", "bitwise NOT") -
**
: (Піднесення до степеня)(англ. " Exponentiation") -
x[index], x[index:index], x(arguments...), x.attribute
: Звернення за індексом,зріз,виклик функції, посилання на атрибут (англ."Subscription", "slicing", "call", "attribute reference") -
(expressions,..), [expressions,..], {key: value,..}, {expressions...}
: Зв’язка або кортеж,список,словник,множина (англ."Binding or tuple display, "list display", "dictionary display", "set display")
Оператори, які ми ще не зустрічали, будуть пояснені в наступних розділах.
Оператори з однаковим пріоритетом містяться в одному рядку у наведеній вище таблиці. Наприклад, «+» і «-» мають однаковий пріоритет.
Зміна порядку обчислення
Щоб зробити вирази більш зрозумілими, ми можемо використовувати круглі дужки.Наприклад, 2 + (3 * 4)
легше зрозуміти, ніж 2 + 3 * 4
, яке вимагає знання пріоритетів операторів. Як і в усьому іншому, дужки слід використовувати розумно (не перестарайтеся) і вони не повинні бути зайвими, як у (2 + (3 * 4))
.
Є додаткова перевага використання круглих дужок - це допомагає нам змінити порядок обчислення. Наприклад, якщо ви хочете, щоб додавання обчислювалося перед множенням у виразі, ви можете написати щось на зразок (2 + 3) * 4
.
Асоціативність
Оператори зазвичай обробляються зліва направо. Це означає, що оператори з однаковим пріоритетом обчислюються зліва направо. Наприклад, "2 + 3 + 4" обчислюється як "(2 + 3) + 4".
Вирази (англ. "Expressions")
Приклад (зберегти як expression.py
):
довжина = 5 ширина = 2 площа = довжина * ширина print('Площа дорівнює', площа) print('Периметр дорівнює', 2 * (довжина + ширина))
Висновок:
$ python expression.py Площа дорівнює 10 Периметр дорівнює 14
Як це працює
Довжина і ширина прямокутника зберігаються в однойменних змінних(довжина та ширина) відповідно. Ми використовуємо їх для обчислення площі та периметра прямокутника за допомогою виразів. Ми зберігаємо результат виразу довжина * ширина
у змінній площа
, а потім друкуємо його за допомогою функції print
. У другому випадку ми безпосередньо використовуємо значення виразу 2 * (довжина + ширина)
у функції друку.
Також зверніть увагу на те, як Python "гарно друкує" результат.Навіть незважаючи на те, що ми не вказали пробіл у кінці речення у лапках 'Площа дорівнює'
, Python розміщує його для нас, щоб ми отримали чистий гарний результат, і програма стала набагато читабельнішою таким чином (оскільки не потрібно турбуватися про пробіли в рядках, які ми використовуємо для виведення(друку)). Це приклад того, як Python полегшує життя програміста.
Резюме
Ми побачили, як використовувати оператори, операнди та вирази - це основні будівельні блоки будь-якої програми. Далі ми побачимо, як використовувати їх у наших програмах за допомогою statements (операторів).