Поздравляю всех подписчиков канала с Новым годом! 🎄
Творческих успехов, завершённых 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
Праздники подходят к концу. А идеи для канала регулярно появляются 💡
Начнём пост с функции генерации уникальных токенов:
Вспомнили? Тогда перепишем код покороче:
в теле цикла , много чего делает в условии цикла .
Забирайте лайфхак в копилку😉
Начнём пост с функции генерации уникальных токенов:
# Импортируем функцию token_urlsafe из модуля secretsА теперь вспомним про моржовый оператор в Python. Писал про него 🔗тут и 🔗тут.
from secrets import token_urlsafe
# Определяем функцию generate_token с параметрами n и prefix, по умолчанию n=5, prefix='/'
def generate_token(n=5, prefix="/"):
"""Генерирует токен с префиксом для короткого url размерностью n без символа "-" в токене."""
# Входим в бесконечный цикл
while True:
# Генерируем случайный токен и добавляем префикс
token = f"{prefix}{token_urlsafe(n)}"
# Проверяем, содержит ли токен символ "-"
if "-" not in token:
# Если не содержит, то выходим из цикла
break
# Возвращаем значение переменной token
return token
Вспомнили? Тогда перепишем код покороче:
from secrets import token_urlsafeЦикл, который ничего не делает
def generate_token(n=5, prefix="/"):
while "-" in (token := f"{prefix}{token_urlsafe(n)}"):
pass
return token
Забирайте лайфхак в копилку
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2✍1
Для начала признаюсь, что не люблю однострочники. Особенно те, которые уходят за край второго 😱 монитора. Код должен быть в первую очередь читаемым и понятным. Но моржовый оператор из прошлого поста вызывал бурную активность в узких кругах. Поэтому ловите финальную версию:
Финальная версия, из прода. Ещё тёплая. Тёплых вам выходных🫶
✍️ - беру на вооружение
🤯 - как это работает?
🎉 - пятница, время отдохнуть от кода
from secrets import token_urlsafe
def generate_token(n=5, prefix="/"):
"""Генерирует токен с префиксом для короткого url размерностью n, исключая символы двойного прочтения."""
while (token := token_urlsafe(n)) and any(char in token for char in ("-", "_", "O", "l", "I", "0", "1",)):
pass
return f"{prefix}{token}"
Финальная версия, из прода. Ещё тёплая. Тёплых вам выходных
Please open Telegram to view this post
VIEW IN TELEGRAM
✍6🤯4🎉3
Какие IDE и редакторы кода вы использовали?
Anonymous Poll
81%
PyCharm
56%
Visual Studio Code
16%
IntelliJ IDEA
31%
Sublime Text
10%
Atom
27%
Notepad++
7%
Eclipse
15%
Nano
22%
Vim
7%
Другие...
👍3
Сейчас PyCharm активно вошёл в мою жизнь. Python основной ЯП, поэтому нет смысла изобретать велосипед. Но даже для Python вполне можно использовать Visual Studio Code или IntelliJ IDEA. А можно покодить в Sublime Text, Atom или Notepad++.
Если же выйти за рамки змеиного языка, вспоминаются другие продукты JetBrains, а также Eclipse, Nano и Vim.
А какими IDE и редакторами кода пользуетесь вы? Чем пользовались раньше? Пиши в комментариях и голосуйте в опросе выше☝
Продолжение в комментах...
Если же выйти за рамки змеиного языка, вспоминаются другие продукты JetBrains, а также Eclipse, Nano и Vim.
А какими IDE и редакторами кода пользуетесь вы? Чем пользовались раньше? Пиши в комментариях и голосуйте в опросе выше☝
Продолжение в комментах...
👍2🔥1
Очевидное рядом или проверка длинны коллекции без использования функции проверки длинны коллекции 🫣
Посмотрите на два простых примера кода. Какой из них работает быстрее и почему?
Вариант 1
Почему?
Список, как и другие коллекция Python - объект. Внутри объекта хранятся не только данные(на самом деле не данные, а указатели на данные) , но и полезная информация. Одна из таких полезностей - количество элементов коллекции. Это целое число, которое автоматически меняется при добавлении и удалении элементов. Объект коллекции всегда помнит сколько в нём элементов.
Вариант 1 обращается к количеству напрямую, получает целое число и если оно ноль, у нас False. А если не ноль - True.
Вариант 2 вызывает функцию len(), которая обращается к счётчику количества элементов в коллекции и получает целое число. Если число больше нуля, у нас True. А если нет - False.
Очевидно, что получение int и его преобразование к bool работает быстрее, чем вызов функции, которая возвращает int для сравнения с другим int и получения bool🧐
P.S. Для любителей асимптотики. Оба варианта работают за O(1) 😉
Посмотрите на два простых примера кода. Какой из них работает быстрее и почему?
Вариант 1
my_list = []Вариант 2
...
# наполняем список данными
...
while my_list:
print(my_list.pop())
my_list = []Для опытного разработчика очевидно, что оптимален первый вариант.
...
# наполняем список данными
...
while len(my_list) > 0:
print(my_list.pop())
Почему?
Список, как и другие коллекция Python - объект. Внутри объекта хранятся не только данные
Вариант 1 обращается к количеству напрямую, получает целое число и если оно ноль, у нас False. А если не ноль - True.
Вариант 2 вызывает функцию len(), которая обращается к счётчику количества элементов в коллекции и получает целое число. Если число больше нуля, у нас True. А если нет - False.
Очевидно, что получение int и его преобразование к bool работает быстрее, чем вызов функции, которая возвращает int для сравнения с другим int и получения bool
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1⚡1
This media is not supported in your browser
VIEW IN TELEGRAM
Угадайте кто из великодушных диктаторов сегодня отмечает свой день рождения? 🤔
Поздравляем Гвидо Ван Россума с 0b1000100 летием 🎂
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🍾2
Какие числовые типы данных есть в Python?
Отличный вопрос для начала собеседования. Забавно, но большинство отвечают на него: «float и int». И это хороший, но неполный ответ новичка.
Что же творится с числами в Python на самом деле?
- float - вещественные числа. Точнее они хотят казаться вещественными. Но фиксированное число байт для их хранения не позволяет добиться желаемой точности. float - имеют ограниченную точность для хранения вещественных чисел. Зато умеют быть бесконечностью - float("inf") и даже не числом - float("Nan").
- int - целые числа. В Python они "резиновые". Для хранения целого выделяется столько байт, сколько нужно для его хранения. Никаких big int, long и т.п. в Python нет, потому что обычный int их заменяет.
- bool - логический тип, который в Python частный случай int. Представлен в двух вариантах: True и False. При приведению к int превращаются в 1 и 0 соответственно. Преобразование int -> bool даёт True для любых целых кроме нуля.
- complex - комплексные числа, они же числа с мнимой единицей. Особенностью является то, что в математике мнимая единица записывается как i, а в Python как j. Впрочем, к записям подобным 3+2j быстро привыкаешь.
- decimal - отдельный модуль для хранения вещественных чисел без проблем с точностью. Выделяет столько памяти, сколько нужно для хранения мантиссы и основания. Обязательно заменяет float везде, где важна каждая цифра после запятой: деньги, расчёты с высокой точностью и т.п.
- fraction - дробные числа. Если надо посчитать ⅓+⅘ и вообще работать с дробями, не нужно изобретать велосипед. Модуль отлично справляется с дробной математикой.
Отличный вопрос для начала собеседования. Забавно, но большинство отвечают на него: «float и int». И это хороший, но неполный ответ новичка.
Что же творится с числами в Python на самом деле?
- float - вещественные числа. Точнее они хотят казаться вещественными. Но фиксированное число байт для их хранения не позволяет добиться желаемой точности. float - имеют ограниченную точность для хранения вещественных чисел. Зато умеют быть бесконечностью - float("inf") и даже не числом - float("Nan").
- int - целые числа. В Python они "резиновые". Для хранения целого выделяется столько байт, сколько нужно для его хранения. Никаких big int, long и т.п. в Python нет, потому что обычный int их заменяет.
- bool - логический тип, который в Python частный случай int. Представлен в двух вариантах: True и False. При приведению к int превращаются в 1 и 0 соответственно. Преобразование int -> bool даёт True для любых целых кроме нуля.
- complex - комплексные числа, они же числа с мнимой единицей. Особенностью является то, что в математике мнимая единица записывается как i, а в Python как j. Впрочем, к записям подобным 3+2j быстро привыкаешь.
- decimal - отдельный модуль для хранения вещественных чисел без проблем с точностью. Выделяет столько памяти, сколько нужно для хранения мантиссы и основания. Обязательно заменяет float везде, где важна каждая цифра после запятой: деньги, расчёты с высокой точностью и т.п.
- fraction - дробные числа. Если надо посчитать ⅓+⅘ и вообще работать с дробями, не нужно изобретать велосипед. Модуль отлично справляется с дробной математикой.
👍7🔥3🤓1
Раскладываем по полочкам очевидное (как показывает практика не для всех)
CRUD расшифровывается как:
- create (создать);
- read (прочитать);
- update (обновить);
- delete (удалить).
Когда речь идёт о работе с базой данных используются следующие команды:
- INSERT (вставить);
- SELECT (выбрать);
- UPDATE (обновить);
- DELETE (удалить).
Как видим есть схожие с CRUD команды, а есть отличные.
Идём дальше. При взаимодействии клиента с сервером часто используют REST API, отправляют следующие запросы:
- POST (опубликовать)
- GET (получить);
- PUT (положить);
- DELETE (удалить).
Так, удаление есть и тут. Хоть где-то стабильность.
Смотрим в код, а там функции с именами вида:
- add (добавить);
- get (получить);
- change (изменить);
- delete (удалить).
Вот мы и добрались до истины.Все хотят удалять. Все варианты имеют единую логику создания, просмотра, изменения и удаления. Просто названия отличаются. Но нас же это не запутает?
P.S. Спасибо Кэпу за post. Надеюсь он поможет новичкам найти свой put в мире IT 😉
CRUD расшифровывается как:
- create (создать);
- read (прочитать);
- update (обновить);
- delete (удалить).
Когда речь идёт о работе с базой данных используются следующие команды:
- INSERT (вставить);
- SELECT (выбрать);
- UPDATE (обновить);
- DELETE (удалить).
Как видим есть схожие с CRUD команды, а есть отличные.
Идём дальше. При взаимодействии клиента с сервером часто используют REST API, отправляют следующие запросы:
- POST (опубликовать)
- GET (получить);
- PUT (положить);
- DELETE (удалить).
Так, удаление есть и тут. Хоть где-то стабильность.
Смотрим в код, а там функции с именами вида:
- add (добавить);
- get (получить);
- change (изменить);
- delete (удалить).
Вот мы и добрались до истины.
P.S. Спасибо Кэпу за post. Надеюсь он поможет новичкам найти свой put в мире IT 😉
👍5🆒2
Воскресный привет!
На связи морж и его оператор. Ловите вариант использования
✍️ - беру на вооружение
🤯 - как это работает?
🎉 - выходные для отдыха, а не кода
На связи морж и его оператор. Ловите вариант использования
:= внутри ifdef func(num: str):Как вам?
if num.isdigit() and (index := int(num)) < MAX_INDEX:
...
✍️ - беру на вооружение
🤯 - как это работает?
🎉 - выходные для отдыха, а не кода
🤯10✍5🎉3🔥1😁1
Изначально планировал давать поясняющий пост (ПП), если основной наберёт ≈10% взрывных мозгов 🤯 Получилось не 10%, а
Давайте детально разберём код:
Нам нужно число, а не строка, чтобы корректно сравнить
Познавательная минутка🤓
Натуральные числа (от лат. naturalis «естественный») - числа, возникающие естественным образом при счёте (1, 2, 3, 4, 5, 6, 7 и так далее).
Конструкция в скобках называется оператором присваивания с объявлением переменной (walrus operator). Моржовый оператор или просто морж доступен с Python 3.8+
Общий смысл этого кода заключается в проверке строкиили нулём и что это число меньше чем константа
5 ÷ 101 ≈ 4.95%. Но ПП готов, поэтому ловите и изучайте.Давайте детально разберём код:
def func(num: str):0). Определяем функцию
func, которая принимает один аргумент num строкового типа. Нам нужно число, а не строка, чтобы корректно сравнить
num с MAX_INDEXif num.isdigit()1).
num.isdigit() проверяет, является ли строка num числом. Метод isdigit() возвращает True, если в строке есть только цифры. Т.е. там записано натуральное число или ноль.Познавательная минутка
Натуральные числа (от лат. naturalis «естественный») - числа, возникающие естественным образом при счёте (1, 2, 3, 4, 5, 6, 7 и так далее).
if num.isdigit() and ...2). Если в
num есть символы помимо цифр, isdigit возвращает False. В этом случае команда and не выполняет код справа. Нас автоматом перекидывает в блок else. Happy end... (index := int(num))3). Преобразуем строку
num в целое число и присваиваем его переменной index. Ошибку ValueError при преобразовании мы исключили левой проверкой. Конструкция в скобках называется оператором присваивания с объявлением переменной (walrus operator). Моржовый оператор или просто морж доступен с Python 3.8+
...(index := int(num)) < MAX_INDEX:4). Благодаря круглым скобкам вокруг моржового присваивания, код "волшебным" образом превращается в обычное сравнение:
index < MAX_INDEXсравниваем значение
index с некоторой константой MAX_INDEX.Общий смысл этого кода заключается в проверке строки
num на то, что она является натуральным числом MAX_INDEX 😉Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6✍1👍1