Оператори та вирази


Оператори та вирази (англ. "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.
  • > (Більше ніж)(англ."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.
  • 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.Тут також застосовується скорочена оцінка виразів.

Короткий запис математичних операцій та привласнення

Зазвичай виконується математична операція над змінною, а потім привласнюється результат цієї операції тій самій змінній, отже, для таких виразів існує скорочення:

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 (операторів).

Contents © 2023 Horst JENS - This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License Creative Commons License.