Питонические атаки
1.19K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Python и отсутствие претендентов

Буквально вчера общался со знакомым .NET-разработчиком, мне во всех красках было описано какой F# замечательный ЯП, почему он превосходит С#(основной инструмент .NET-разработчиков), и почему за ним, очевидно, будущее отрасли.

Разумеется все эти разговоры, что в будущем все предпочтут его C# - крайне спорная штука. Мы все прекрасно понимаем, что все упрется в задачи бизнеса, и если бизнесу будет выгоден такой переход, то он случится, аналогично и обратное(вот такая она суровая реальность).

Однако F#, действительно мощный претендент на место, в каком то смысле это переосмысление, возможно неоднозначное(все таки смена парадигмы), но при этом вполне конкурентоспособное. Он можно сказать дышит в спину C#.

Так вот, довольно интересно, то что буквально все “главные” ЯПы сейчас имеют таких “конкурентов”. 

Еще раз скажу, это действительно конкуренты, не из разряда-так чуть красивше/чуть удобней, здесь речь именно о технической стороне вопроса, закрытии каких-то больших проблем(которые, например, рано легли в основу языка и находятся настолько глубоко, что исправить их просто не представляется возможным).

Java -> Kotlin
C++ -> Rust ежегодно на stackoverflow проходит опрос программистов, и именно этот ЯП лидирует как самый любимый у разработчиков(отрыв от второго места - солидные 20%)
С# -> F#
Js -> TypeScript и Dart

И только питон выделяется из всех, у него вроде как подобных ‘конкурентных’ аналогов нет. Есть много экспериментов на тему ‘так чуть красивше/чуть удобней’, но чего-то серьезного - нет. Справедливо сказать, что таким претендентом в свое время стал сам Python 3, потеснив Python 2, но во-первых, это случилось не вчера, во-вторых, этот пример все равно отличается от выше перечисленных.

Это не значит, что питон лучше/хуже других ЯПов(подобные оценки с инженерной точки зрения просто нелепы), но это значит, что путь развития питона крайне необычен. И судя по реакции сообщества, это движение в верную сторону. И как по мне, это весомый плюс языка, о котором редко говорят.
#python #мысли
Увидел недавно очередную внезапность с float'ами. Берётся список чисел:

>>> mylist = [
... 614.3,
... 453.44,
... 220.8,
... 514.32,
... 322.32,
... 330.3,
... 230.3,
... 518.32,
... 419.52]

И складывается, начиная сначала с одного конца, а затем с другого:

>>> sum(mylist) == sum(mylist[::-1])
False

И суммы не сходятся.

Тема уже избита до невозможности, и все вроде бы уже смирились, что арифметика над числами с плавающей точкой категорически сломана (ладно, она не сломана, она просто с погрешностями). В интернете особенно часто за эту особенность почему-то достаётся JavaScript'у, но на самом деле этим болеют все языки программирования, которые реализуют числа по стандарту IEEE 754, то есть практически все. Даже страничка с забавным доменом есть на эту тему: 0.30000000000000004.com.

Оказывается, что сложение чисел с плавающей точкой не реализует одно из математических свойств сложения — ассоциативность. То есть a + (b + c) не всегда равно (a + b) + c. То есть в зависимости от порядка, в котором складывать числа, погрешность может накапливаться по-разному. Для меня стало открытием, что арифметика сломана настолько.

Минимальный пример:

>>> ε = 1e-16 # small number
>>> print(left := (1 + ε) + ε)
1.0
>>> print(right := 1 + (ε + ε))
1.0000000000000002
>>> left == right
False

Есть специальные алгоритмы, которые позволяют избегать погрешностей при сложении чисел с плавающей точкой, и один из них реализован в стандартной библиотеке как math.fsum:

>>> import math
>>> math.fsum(mylist) == math.fsum(mylist[::-1])
True

И раз уж мы затронули тему чисел с плавающей точкой, то пара хороших советов, которые помогут избежать проблем:

🍁 Если погрешность для вас неприемлема, то конвертируйте ваши числа в decimal.Decimal — да, будет значительно медленнее, но зато точно:

>>> 0.1 + 0.2
0.30000000000000004
>>> from decimal import Decimal
>>> Decimal("0.1") + Decimal("0.2")
Decimal('0.3')

🍁 А если вы считаете деньги, то просто выражайте суммы в целых числах (центы и копейки вместо долларов и рублей) — так будет намного проще и надёжнее. Не используйте float для денежных расчётов! Если вы думаете, что погрешности у float начинаются только где-то в пятнадцатом знаке после запятой, то у меня для вас плохие новости — чем больше числа, тем больше и погрешности. Цена даже одной ошибки может быть очень высока 😬
Forwarded from Python Daily
А вы знали что у builtin функции iter() есть два варианта использования?

Первый, о котором знают все - вызывает у объекта метод __iter__() и возвращает результат.

А вот второй принимает Callable без аргументов и значение, на котором нужно остановиться. Можно применять, например, для чтения файлов блоками:
from functools import partial
with open('mydata.db', 'rb') as f:
for block in iter(partial(f.read, 64), b''):
process_block(block)

Более простой пример:
>>> a = (i for i in (1, 2, 3, 4, 5))
>>> list(iter(lambda: next(a), 4))
[1, 2, 3]

#python_cookbook #iter #nothabr #pydaily
Вышел стабильный релиз psycopg==3.0. Можно пробовать внедрять в свои проекты.

pip install --upgrade pip           # to upgrade pip
pip install psycopg[binary,pool] # to install package and dependencies


🐍 + 🐘 = 🎉

https://twitter.com/psycopg/status/1447962001121157133?s=21

#psycopg
Ну все, теперь точно можно обновляться до 3.10, потому что уже выпустили первый багфикс релиз. От версии с 1 или больше на конце уже можно ожидать какой-то надежности. Все самые очевидные грабли уже потоптаны. Да и большинство либ к этому моменту уже тоже должно было адаптироваться, так что обязательно попробуйте обновиться.

Анонс: https://pythoninsider.blogspot.com/2021/12/python-3101-is-available.html

Список изменений: https://docs.python.org/3/whatsnew/changelog.html#python-3-10-1-final
В следующем релизе macOS Monterey 12.3 🍎, которая сейчас находится в бета-тестировании, обещают наконец-то удалить из системы предустановленный Python 2. Начиная с какой-то из предыдущих версий уже и так выскакивало окошко с предупреждением, если вдруг пайчарм случайно потрогает Python 2, а теперь устаревшая версия языка изгоняется из системы окончательно.

И это крайне логичное действие — незачем в системе держать легаси, которое лишь создаёт проблемы и путаницу. Большинство пользователей получат более компактную ОС и меньше проблем с выбором правильного интерпретатора, а те, кому всё ещё нужен Python 2, поставят его явно вручную. Они ведь всё равно уже привыкли страдать.

Пожалуй, макось из ныне живущих операционных систем продержалась со вторым питоном дольше всех.

Стоит отметить, что это не хейт отдельно взятого языка программирования. Эппл взяла курс на удаление многих скриптовых рантаймов, которые издревле поставлялись вместе с ОС, включая и Ruby, и Perl, и Python. Теперь всё это, если нужно, придётся ставить отдельно.

#macos #python2
👍1
Forwarded from Chernov sharit
А вы говорите у вас на проекте legacy. Тут в python закинули PEP по удалению неиспользуемых батареек и большинство датируется 90х годами.

https://peps.python.org/pep-0594/

#python
4
Forwarded from Chernov sharit
Прекрасно, когда TL;DR есть от автора статьи (:

———

TL;DR: I built a wifi-equipped water gun to shoot the pigeons on my balcony, controlled over the internet by a python script running openCV reading the camera image of my old iPhone.

https://maxnagy.com/posts/pigeons/

#python #fun
🔥7😁1
О, кстати, прикол. Не задумывался, что лямбда-функции тоже можно аннотировать. Делать я так, конечно, всё равно не буду.

Твит здесь.
❤‍🔥131🥰1
Большое интервью Гвидо ван Россума час назад вышло у Лекса Фридмана

https://www.youtube.com/watch?v=-DVyjdw4t9I

0:00 - Introduction
0:48 - CPython
6:01 - Code readability
10:22 - Indentation
26:58 - Bugs
38:26 - Programming fads
53:37 - Speed of Python 3.11
1:18:31 - Type hinting
1:23:49 - mypy
1:29:05 - TypeScript vs JavaScript
1:45:05 - Best IDE for Python
1:55:05 - Parallelism
2:12:58 - Global Interpreter Lock (GIL)
2:22:36 - Python 4.0
2:34:53 - Machine learning
2:44:35 - Benevolent Dictator for Life (BDFL)
2:56:11 - Advice for beginners
3:02:43 - GitHub Copilot
3:06:10 - Future of Python

#IT #Python
🔥19👍3
Крутая идея про "приватные" переменные — называть их маленькими буквами. При прочтении кода вслух имя переменной произносится шепотом. Пора расширять PEP8!

твит
😁38🙈13💩3👎2🔥1💅1