Python просто | з Коропом
222 subscribers
68 photos
43 links
Легко і доступно розказую про Пайтон

Ви завжди знайдете тут щось нове та корисне для себе 😊

Автор — @kor0p, практикуючий Пайтоніст з п'ятирічним досвідом 😎


Чат — @python_kor0p_chat
Download Telegram
Яким буде результат у останньому рядку?
Anonymous Quiz
33%
['Viktor']
2%
['Hi']
60%
['Hi', 'Viktor']
5%
Не знаю 🤷‍♂️
🤔3
Відповідь: ['Hi', 'Viktor']

Пояснення:
Класи у Пайтоні можуть мати статичні атрибути, які задаються на етапі створення класу

Такі атрибути можуть бути використані й у об'єктах цього класу, але для них всіх (і класу і його об'єктів) такі атрибути будуть спільними — тобто вказуватимуть на один і той же об'єкт. Відповідно зміна у одному об'єкті змінить цей атрибут й у інших

Щоб задати початкове значення для атрибуту, використовуйте __init__

Якщо ж ви свідомо робите статичний атрибут, вказуйте тип ClassVar[list], щоб інші розробники знали про це



Спробувати самостійно | Підписатись
3
❌ Міф: self — це ключове слово у Пайтоні, яке використовується для звернення до поточного об'єкта класу

✅ Правда:

1. self це не ключове слово
Ключовими словами є return, def та інші. Такі слова не можуть бути назвою змінної, оскільки це буде синтаксичною помилкою 🌚

2. Замість self можна підставити будь-що
Але за правилами PEP8, треба використовувати саме це ім'я для звичайних методів, а cls — для методів класу (@classmethod) 😅

3. self це не звернення до поточного об'єкта класу
self це змінна, яку Пайтон передає автоматично у метод
Ви ж можете (але не варто) передати будь-яку іншу змінну, наприклад: dict.__dir__(0) 🤯
Оскільки __dir__ це просто функція (якщо ми її викликаємо напряму з класу, і вона не позначена як @classmethod чи @staticmethod), то замість self ми можемо передати будь-що 👀

Не читайте інших газет каналів, читайте тільки наш ❤️
👍4❤2🔥1
range(len(...)) — це буквально минуле століття, адже функція enumerate доступна ще з Python 2.3, і я бігме не розумію чому досі існує код як у прикладі зліва)


Спробувати самостійно | Підписатись
3💔2
У випадку необхідності об'єднати два словники — використовуйте | (бінарне або)

Ця операція доступна починаючи з Python3.9

Спробувати самостійно | Підписатись
❤6🤯1🆒11
Якщо вам треба створити словник з однаковими значеннями, використайте dict.fromkeys()

Цей метод заповнює новий словник з кожного елементу з першого аргументу iterable як ключів та другого аргументу value як значення для усіх них

Варто зауважити, що значення value не копіюється, а передається як є
Тому, якщо це буде мутабельний об'єкт (словник, масив тощо), то краще використати варіант 1 — з швидким виразом (comprehension)


Спробувати самостійно | Підписатись
❤3👍11
Якщо ви хочете робити такі ж самі картинки з кодом, вам всього лиш треба зайти на carbon.now.sh

Але у мене там дещо модифікований конфіг, базований на темі Material
Знайти ви його зможете у коментарях :)
👍3💅3
Що таке взагалі мутабельність, і чому про це питають на співбесіді? 🤔

Сет — мутабельний, тому коли ми передаємо його як аргумент, Пайтон передає його референс, відповідно навіть при відкладеному виконанні ми побачимо актуальне значення

Числа у Пайтоні — іммутабельний об'єкт. Але якщо його запихнути у список — уже ні? (приклад 3)

Ні, число досі іммутабельне, а саме список — ні. У цьому прикладі ми не змінюємо число, а оновлюємо конкретну змінну (перший елемент списку)

Але чому ж у прикладі №2 виводиться неактуальне значення?

Через те саме
Числа — іммутабельні, і тому Пайтон передає НЕ референс, а реальне значення

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


Спробувати самостійно | Підписатись
4👍3❤1🔥1
Щоб додати числа — просто використай sum()

А чому тільки числа?)
sum() може додати що завгодно, тільки передайте параметр start, оскільки за замовчуванням там стоїть 0

Ставте 💅, якщо хочете побачити мою реалізацію
Ставте 😎, якщо самі знаєте як це зробити


Спробувати самостійно | Підписатись
💅17😎2211
Python просто | з Коропом
Щоб додати числа — просто використай sum() А чому тільки числа?) sum() може додати що завгодно, тільки передайте параметр start, оскільки за замовчуванням там стоїть 0 Ставте 💅, якщо хочете побачити мою реалізацію Ставте 😎, якщо самі знаєте як це зробити…
Просили? Ось вам!
Що, не просили? Ой не чує баба...

▫️Створюємо змінну для збереження результату, задавши start як початкове значення
▫️Ітеруємось по усіх елементах, і додаємо кожен до результату
▫️Повертаємо результат

Коротше, як бачите, реалізація проста як світ)

Тому досліджуйте і досліджуваними будете буде вам щастя 😊


Спробувати самостійно | Підписатись
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤3😁1🌚11
Ви можете передавати генератор як аргумент
І навіть без додаткових дужок

Тааак, виглядає трохи дивно, але це працює 🤯

Точніше, працює лише доти, доки це єдиний аргумент 😅


Спробувати самостійно | Підписатись
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤111
Останні два дні не було постів, бо в мене просто не було сил на це
🤒

Можете поки що в коментарях накидати теми, які вас цікавлять, або ж питання які давно вас турбують
Спробую на щось відповісти або навіть оформити у вигляді поста згодом


Також, я думав над таким цікавим форматом, як задачі з призом
Суть така:
- я виставляю задачу
- ви кидаєте відповіді у бота
- я обираю найкращий
- публікую його і свій варіант на наступний день

Яке вирішення буде вважатись найкращим?
Це може бути найшвидше, найменше коду чи найбільш просте — залежно від задачі (тобто для кожної по-різному)

Як часто будуть такі задачки?
Десь раз в тиждень

Яким буде приз?
Це ще вирішимо, бо у мене декілька варіантів:
- маленька грошова сума (≈100грн)
- менторство зі мною (на ≈2 години) або кол зі мною (на годину)
- система балів (де за результатами місяця більший приз, наприклад книга по Пайтону, курс по Пайтону чи підписка PyCharm Pro)

Отож, діліться думками про все це — у коментарях 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤2
Python просто | з Коропом
При написанні типових користувацьких програм варто додавати пояснення та контекст для деяких помилок Але при цьому не завжди треба ловити цю помилку. Для цього можна у блоці except дописати raise і помилка піде далі, аж поки не зупинить виконання програми…
Я уже розповідав про ре-рейз помилок, але й сам забув, що замість print'а краще використати метод add_note() 😅

Цей метод дозволяє додати нотатку для будь-якої помилки, щоб мати більше контексту

Усі ці нотатки зберігаються у атрибуті __notes__ (але якщо нотаток не було, то й атрибута не буде, це важливо)

Він доступний лише з версії 3.11, але уже встиг увійти у активний обіг (принаймні у мене 👀)

Документація

А за посиланням нижче є аж 4 додаткових приклади 😉

Спробувати самостійно | Підписатись
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥11