List comprehensions (listcomp) и generator expressions (genexp) являются мощными инструментами Python, позволяющими создавать списки и генераторы более эффективным и синтаксически компактным способом по сравнению с традиционными циклами for. В этой статье мы рассмотрим их синтаксис, применение и различия, чтобы лучше понять, как и когда использовать каждую из этих конструкций в процессе программирования.
listcomp — это синтаксическая конструкция, которая позволяет создавать список из итерируемых объектов в одну строку кода. Основная структура listcomp включает выражение и цикл for, заключённые в квадратные скобки.
Например:
new_list = ["выражение" for _ in iter_obj]
Где "выражение" используется для создания элементов нового списка, а "iter_obj" определяет, откуда берутся значения для переменной цикла.
genexp очень похож на listcomp, но вместо квадратных скобок используются круглые. Основное отличие заключается в том, что genexp создаёт генератор — объект, который по запросу выдаёт значения, не сохраняя их в памяти целиком. Это делает genexp предпочтительным для создания итераторов, особенно при работе с большими объёмами данных.
new_gen =(_ for _ in iter_obj)
Применение list comprehension обычно оправдано, когда нужно создать новый список на основе существующего итерируемого объекта. Эта конструкция позволяет значительно упростить код, сделать его более читаемым и часто более быстрым по сравнению с использованием циклов for.
genexp же идеально подходят для задач, где необходимо последовательно обрабатывать элементы больших или потенциально бесконечных итерируемых объектов. Так как данные генерируются по мере необходимости, это помогает экономить ресурсы оперативной памяти.
listcomp — это синтаксическая конструкция, которая позволяет создавать список из итерируемых объектов в одну строку кода. Основная структура listcomp включает выражение и цикл for, заключённые в квадратные скобки.
Например:
new_list = ["выражение" for _ in iter_obj]
Где "выражение" используется для создания элементов нового списка, а "iter_obj" определяет, откуда берутся значения для переменной цикла.
genexp очень похож на listcomp, но вместо квадратных скобок используются круглые. Основное отличие заключается в том, что genexp создаёт генератор — объект, который по запросу выдаёт значения, не сохраняя их в памяти целиком. Это делает genexp предпочтительным для создания итераторов, особенно при работе с большими объёмами данных.
new_gen =(_ for _ in iter_obj)
Применение list comprehension обычно оправдано, когда нужно создать новый список на основе существующего итерируемого объекта. Эта конструкция позволяет значительно упростить код, сделать его более читаемым и часто более быстрым по сравнению с использованием циклов for.
genexp же идеально подходят для задач, где необходимо последовательно обрабатывать элементы больших или потенциально бесконечных итерируемых объектов. Так как данные генерируются по мере необходимости, это помогает экономить ресурсы оперативной памяти.
Составное присваивание последовательностей в Python
```Составное присваивание последовательностей в языке программирования Python представляет собой важный аспект работы с данными, особенно при манипуляции изменяемыми и неизменяемыми объектами. Одним из примеров такого присваивания является оператор +=, который известен как оператор "in-place addition".
Оператор += и методы __iadd__ и __add__
Оператор += используется для прибавления значения к переменной и присваивания результата этой же переменной. При использовании этого оператора Python сначала пытается выполнить операцию "in-place", т.е. изменяет существующий объект без создания нового. Это достигается вызовом метода __iadd__. Если метод __iadd__ не реализован для объекта, Python автоматически прибегает к стандартной операции сложения с использованием метода add, создавая новый объект и присваивая его переменной.
Изменяемые и неизменяемые объекты
Изменяемые объекты, такие как списки и словари, часто реализуют метод add, что позволяет эффективно использовать оператор += для изменения содержимого объекта. С другой стороны, неизменяемые объекты, такие как кортежи и строки, не могут быть изменены на месте. В таких случаях метод __iadd__ не реализуется, и оператор += вызывает метод add, создавая новый объект.
Оператор *=, методы __imul__ и __mul__
Подобно оператору +=, оператор *= также имеет свои методы для выполнения операций на месте и создания новых объектов. Метод __imul__ отвечает за умножение на месте, в то время как метод __mul__ используется при отсутствии реализации первого метода.
Пример Леонардо Рохаэльо и Сезара Каваками
На бразильской конференции по Python 2013 года Леонардо Рохаэльо и Сезар Каваками представили задачу, иллюстрирующую использование оператора += в Python. В их примере рассматривалась необходимость изменения списка на месте для оптимизации производительности. В данном контексте они привели пример с использованием кортежа, содержащего изменяемые элементы, и к чему это может привести.
В примере на изображении, кортеж tuple_with_list содержит список в качестве первого элемента. При попытке использовать оператор += для изменения этого списка возникает ошибка TypeError, так как кортеж является неизменяемым типом данных и не поддерживает изменение своих элементов. Однако, несмотря на возникшую ошибку, содержимое списка внутри кортежа изменяется, что иллюстрирует возможность изменения изменяемых объектов, даже если они находятся внутри неизменяемых структур данных.
Реализация методов __iadd__ и __imul__ позволяет выполнять операции на месте, что особенно полезно при работе с большими объемами данных. Пример, представленный на бразильской конференции по Python 2013 года, демонстрирует практическую значимость таких подходов для повышения производительности и эффективности программ.```
```Составное присваивание последовательностей в языке программирования Python представляет собой важный аспект работы с данными, особенно при манипуляции изменяемыми и неизменяемыми объектами. Одним из примеров такого присваивания является оператор +=, который известен как оператор "in-place addition".
Оператор += и методы __iadd__ и __add__
Оператор += используется для прибавления значения к переменной и присваивания результата этой же переменной. При использовании этого оператора Python сначала пытается выполнить операцию "in-place", т.е. изменяет существующий объект без создания нового. Это достигается вызовом метода __iadd__. Если метод __iadd__ не реализован для объекта, Python автоматически прибегает к стандартной операции сложения с использованием метода add, создавая новый объект и присваивая его переменной.
Изменяемые и неизменяемые объекты
Изменяемые объекты, такие как списки и словари, часто реализуют метод add, что позволяет эффективно использовать оператор += для изменения содержимого объекта. С другой стороны, неизменяемые объекты, такие как кортежи и строки, не могут быть изменены на месте. В таких случаях метод __iadd__ не реализуется, и оператор += вызывает метод add, создавая новый объект.
Оператор *=, методы __imul__ и __mul__
Подобно оператору +=, оператор *= также имеет свои методы для выполнения операций на месте и создания новых объектов. Метод __imul__ отвечает за умножение на месте, в то время как метод __mul__ используется при отсутствии реализации первого метода.
Пример Леонардо Рохаэльо и Сезара Каваками
На бразильской конференции по Python 2013 года Леонардо Рохаэльо и Сезар Каваками представили задачу, иллюстрирующую использование оператора += в Python. В их примере рассматривалась необходимость изменения списка на месте для оптимизации производительности. В данном контексте они привели пример с использованием кортежа, содержащего изменяемые элементы, и к чему это может привести.
В примере на изображении, кортеж tuple_with_list содержит список в качестве первого элемента. При попытке использовать оператор += для изменения этого списка возникает ошибка TypeError, так как кортеж является неизменяемым типом данных и не поддерживает изменение своих элементов. Однако, несмотря на возникшую ошибку, содержимое списка внутри кортежа изменяется, что иллюстрирует возможность изменения изменяемых объектов, даже если они находятся внутри неизменяемых структур данных.
Реализация методов __iadd__ и __imul__ позволяет выполнять операции на месте, что особенно полезно при работе с большими объемами данных. Пример, представленный на бразильской конференции по Python 2013 года, демонстрирует практическую значимость таких подходов для повышения производительности и эффективности программ.```
Оператор match/case в Python
Приветствую, научно-технический!
Сегодня у нас в программе тема, которая может показаться сложной на первый взгляд, но на самом деле очень интересная и полезная - это оператор match/case в Python и его поддержка субъектов, являющихся отображениями. Да, звучит внушительно, но давайте разберёмся во всём по порядку и простыми словами.
Что такое match/case и зачем он нужен?
Оператор match/case появился в Python 3.10 и представляет собой новый способ реализации многократных ветвлений, который раньше был доступен только через цепочку if/elif/else. С match/case ваш код может стать более чистым и читаемым, особенно когда нужно обработать множество различных случаев.
Пример использования match/case
Допустим, у нас есть функция, которая обрабатывает различные типы данных: числа, строки, списки и словари.(изображения будут ниже)
Поддержка сложных объектов, таких как словари и датаклассы
Теперь давайте усложним задачу и посмотрим, как match/case может работать с более сложными объектами, например, словарями и датаклассами.(так же пример на изображении дальше)
Датаклассы
Для работы с датаклассами, Python позволяет использовать match/case для проверки типов и значений полей.(следующее изображение)
Надеюсь, этот небольшой обзор помог вам понять основные возможности match/case и вдохновил на использование этой замечательной функции в ваших проектах. Спасибо за внимание, не забывайте ставить лайки.
Приветствую, научно-технический!
Сегодня у нас в программе тема, которая может показаться сложной на первый взгляд, но на самом деле очень интересная и полезная - это оператор match/case в Python и его поддержка субъектов, являющихся отображениями. Да, звучит внушительно, но давайте разберёмся во всём по порядку и простыми словами.
Что такое match/case и зачем он нужен?
Оператор match/case появился в Python 3.10 и представляет собой новый способ реализации многократных ветвлений, который раньше был доступен только через цепочку if/elif/else. С match/case ваш код может стать более чистым и читаемым, особенно когда нужно обработать множество различных случаев.
Пример использования match/case
Допустим, у нас есть функция, которая обрабатывает различные типы данных: числа, строки, списки и словари.(изображения будут ниже)
Поддержка сложных объектов, таких как словари и датаклассы
Теперь давайте усложним задачу и посмотрим, как match/case может работать с более сложными объектами, например, словарями и датаклассами.(так же пример на изображении дальше)
Датаклассы
Для работы с датаклассами, Python позволяет использовать match/case для проверки типов и значений полей.(следующее изображение)
Надеюсь, этот небольшой обзор помог вам понять основные возможности match/case и вдохновил на использование этой замечательной функции в ваших проектах. Спасибо за внимание, не забывайте ставить лайки.
OpenAI продолжает впечатлять мир своими достижениями в области искусственного интеллекта.
Мира Мурати, технический директор компании, недавно сравнила прогресс от GPT-4 к GPT-5 с развитием интеллекта человека от уровня средней школы до университета. Это амбициозное заявление подчеркивает значимость ожидаемых улучшений в новой модели.
Продвинутые Способности к Рассуждению
Одним из ключевых усовершенствований GPT-5 станет значительно продвинутая способность к рассуждениям. Модель будет не только генерировать текст, но и обосновывать свои решения, а также обучаться на их основе. Этот аспект обещает сделать взаимодействие с AI еще более интуитивным и полезным.
GPT-5 также сможет обрабатывать до 50 тысяч слов за раз, что вдвое превышает возможности текущей GPT-4. Это позволит моделям обрабатывать более объемные и сложные тексты, что расширит их применение в различных сферах.
Наиболее захватывающей возможностью новой версии является переход от чат-бота к полноценному агенту, способному выполнять действия в реальном мире. Нейросеть сможет взаимодействовать с умными устройствами и машинами, а данные, собранные с этих устройств, будут использоваться для улучшения качества ответов и принятия решений.
Ожидания и Даты Релиза
Официальных заявлений о дате выпуска GPT-5 пока не поступало. Однако, по словам Миры Мурати, новую модель стоит ожидать не раньше конца 2025 года или начала 2026 года. Сэм Альтман, глава OpenAI, отметил, что следующая версия может даже не называться GPT-5, подчеркнув, что приоритет отдается качеству проекта, а не соблюдению жестких сроков.
Мира Мурати, технический директор компании, недавно сравнила прогресс от GPT-4 к GPT-5 с развитием интеллекта человека от уровня средней школы до университета. Это амбициозное заявление подчеркивает значимость ожидаемых улучшений в новой модели.
Продвинутые Способности к Рассуждению
Одним из ключевых усовершенствований GPT-5 станет значительно продвинутая способность к рассуждениям. Модель будет не только генерировать текст, но и обосновывать свои решения, а также обучаться на их основе. Этот аспект обещает сделать взаимодействие с AI еще более интуитивным и полезным.
GPT-5 также сможет обрабатывать до 50 тысяч слов за раз, что вдвое превышает возможности текущей GPT-4. Это позволит моделям обрабатывать более объемные и сложные тексты, что расширит их применение в различных сферах.
Наиболее захватывающей возможностью новой версии является переход от чат-бота к полноценному агенту, способному выполнять действия в реальном мире. Нейросеть сможет взаимодействовать с умными устройствами и машинами, а данные, собранные с этих устройств, будут использоваться для улучшения качества ответов и принятия решений.
Ожидания и Даты Релиза
Официальных заявлений о дате выпуска GPT-5 пока не поступало. Однако, по словам Миры Мурати, новую модель стоит ожидать не раньше конца 2025 года или начала 2026 года. Сэм Альтман, глава OpenAI, отметил, что следующая версия может даже не называться GPT-5, подчеркнув, что приоритет отдается качеству проекта, а не соблюдению жестких сроков.
Event Stream по протоколу HTTP
Event Stream (событийный поток) по протоколу HTTP является механизмом для отправки обновлений данных с сервера на клиента в режиме реального времени. Он особенно полезен для приложений, требующих частого обновления данных, таких как новостные ленты, чаты и мониторинг состояния. В этой статье мы рассмотрим концепцию событийных потоков, а также приведем примеры реализации на Python, JavaScript и Go.
Важно отметить, что существует другой популярный метод для реального времени - WebSocket. Однако в данной статье мы сосредоточимся именно на Event Stream по протоколу HTTP, также известном как Server-Sent Events (SSE).
Концепция Event Stream
Event Stream (также известный как Server-Sent Events или SSE) позволяет серверу отправлять обновления клиенту через одно длительное HTTP-соединение. В отличие от WebSocket, SSE является односторонним каналом, где данные передаются только от сервера к клиенту. Это упрощает реализацию и снижает накладные расходы.
Основные особенности SSE:
Соединение устанавливается клиентом.
Сервер отправляет события в текстовом формате.
Соединение остается открытым и обновления приходят по мере их появления.
Event Stream по протоколу HTTP (Server-Sent Events) предоставляет простой и эффективный способ доставки данных в реальном времени от сервера к клиенту. В отличие от WebSocket, SSE обеспечивает одностороннюю связь, что делает его легче в реализации и менее требовательным к ресурсам. Рассмотренные примеры на Python, JavaScript и Go демонстрируют, как легко можно настроить сервер для отправки и клиента для получения событийных потоков.
В комментариях будут изображения-примеры, клиент/сервер. (python,js,go)
Event Stream (событийный поток) по протоколу HTTP является механизмом для отправки обновлений данных с сервера на клиента в режиме реального времени. Он особенно полезен для приложений, требующих частого обновления данных, таких как новостные ленты, чаты и мониторинг состояния. В этой статье мы рассмотрим концепцию событийных потоков, а также приведем примеры реализации на Python, JavaScript и Go.
Важно отметить, что существует другой популярный метод для реального времени - WebSocket. Однако в данной статье мы сосредоточимся именно на Event Stream по протоколу HTTP, также известном как Server-Sent Events (SSE).
Концепция Event Stream
Event Stream (также известный как Server-Sent Events или SSE) позволяет серверу отправлять обновления клиенту через одно длительное HTTP-соединение. В отличие от WebSocket, SSE является односторонним каналом, где данные передаются только от сервера к клиенту. Это упрощает реализацию и снижает накладные расходы.
Основные особенности SSE:
Соединение устанавливается клиентом.
Сервер отправляет события в текстовом формате.
Соединение остается открытым и обновления приходят по мере их появления.
Event Stream по протоколу HTTP (Server-Sent Events) предоставляет простой и эффективный способ доставки данных в реальном времени от сервера к клиенту. В отличие от WebSocket, SSE обеспечивает одностороннюю связь, что делает его легче в реализации и менее требовательным к ресурсам. Рассмотренные примеры на Python, JavaScript и Go демонстрируют, как легко можно настроить сервер для отправки и клиента для получения событийных потоков.
В комментариях будут изображения-примеры, клиент/сервер. (python,js,go)
👍2
Сегодня об OpenAI!
Компания представила новый поисковик, его можно найти по адресу https://chatgpt.com/search
Компания представила новый поисковик, его можно найти по адресу https://chatgpt.com/search
Привет, научно-технический. Сегодня пятница, а это значит, что пришло время немного расслабиться и обсудить интересные темы, которые, возможно, поднимут нам настроение и спровоцируют активное обсуждение. А если вы работаете в IT-сфере, то наверняка сталкивались с разного рода ошибками. Сегодня мы поговорим о KeyError и методе missing.
Почему возникает KeyError и как его избежать?
KeyError — это одна из наиболее частых ошибок, с которыми сталкиваются разработчики при работе с словарями (dictionaries) в Python. Эта ошибка возникает, когда пытаешься получить доступ к ключу, которого нет в словаре.
Встроенные структуры данных с поддержкой метода missing
Стоит отметить, что стандартная библиотека Python уже содержит структуру данных, которая использует метод missing. Это collections.defaultdict.
Где метод missing уже имеется
collections.defaultdict: Как уже было сказано, это наиболее известная структура данных в Python, которая использует метод missing.
Собственные подклассы словарей: Вы можете создавать собственные подклассы словарей и определять метод missing для обработки отсутствующих ключей.
Почему возникает KeyError и как его избежать?
KeyError — это одна из наиболее частых ошибок, с которыми сталкиваются разработчики при работе с словарями (dictionaries) в Python. Эта ошибка возникает, когда пытаешься получить доступ к ключу, которого нет в словаре.
Пример:
my_dict = {'name': 'Alice', 'age': 25}
print(my_dict['gender'])
В этом случае возникнет KeyError, так как ключа 'gender' в словаре нет.
Способы обхода:
Метод get: Использование метода get позволяет избежать ошибки, возвращая значение по умолчанию, если ключ не найден.
print(my_dict.get('gender', 'Not specified'))
Проверка наличия ключа: Можно сначала проверить, существует ли ключ в словаре.
if 'gender' in my_dict:
print(my_dict['gender'])
else:
print('Not specified')
Метод __missing__
Метод __missing__ — это специальный метод, который можно определить в подклассе словаря. Он вызывается, когда запрашивается ключ, которого нет в словаре. Этот метод позволяет задать поведение по умолчанию для отсутствующих ключей.
Пример использования метода __missing__:
class DefaultDict(dict):
def __missing__(self, key):
return 'Not specified'
my_dict = DefaultDict(name='Alice', age=25)
print(my_dict['gender']) # Выведет 'Not specified'
Встроенные структуры данных с поддержкой метода missing
Стоит отметить, что стандартная библиотека Python уже содержит структуру данных, которая использует метод missing. Это collections.defaultdict.
Где метод missing уже имеется
collections.defaultdict: Как уже было сказано, это наиболее известная структура данных в Python, которая использует метод missing.
Собственные подклассы словарей: Вы можете создавать собственные подклассы словарей и определять метод missing для обработки отсутствующих ключей.
👍2
PEP 412: Механизм разделяемых ключей в словарях Python
Поговорим о 412: нет, это не тот Москвич, что пылил по дорогам прошлого, а PEP - современный стандарт, который под капотом Python перерабатывает память и повышает эффективность работы вашего кода.
Что такое PEP 412?
PEP 412, известный как "Key-Sharing Dictionaries", описывает механизм, позволяющий нескольким словарям разделять одну и ту же таблицу ключей. Идея заключается в том, чтобы экономить память и повышать эффективность, используя один набор ключей для множества словарей, если эти ключи идентичны. В традиционном подходе каждый словарь создает свою собственную таблицу ключей, что может привести к избыточным расходам памяти, особенно если словари используют одни и те же ключи.
Как это работает?
Когда в программе создается словарь, Python формирует специальную структуру данных для хранения его ключей. До PEP 412 эта структура создавалась заново для каждого словаря, даже если ключи совпадали с уже существующими в других словарях. Теперь же, если Python обнаруживает, что ключи нового словаря идентичны ключам уже существующего, он использует общую структуру для этих ключей. В результате, несколько словарей могут ссылаться на одну и ту же таблицу ключей, что снижает потребление памяти.
Этот подход особенно полезен в ситуациях, когда множество объектов класса имеют одинаковые атрибуты, хранящиеся в словарях. В таких случаях все объекты могут использовать одну и ту же таблицу ключей, что экономит память и снижает накладные расходы на управление данными.
Преимущества PEP 412
Основное преимущество, которое приносит PEP 412, заключается в экономии памяти. Когда многие словари разделяют одну и ту же таблицу ключей, снижаются требования к памяти, так как отсутствует необходимость в создании дублирующихся структур данных. Это становится особенно заметным при работе с большими объемами данных, где экономия памяти приводит к более эффективному использованию ресурсов системы.
Кроме того, хотя основное внимание в PEP 412 уделяется экономии памяти, он также может незначительно улучшить производительность за счет уменьшения числа операций, связанных с созданием и управлением таблицами ключей.
С введением PEP 412, общая таблица ключей позволяет сократить эти издержки. В зависимости от конкретного сценария, экономия памяти может составлять от 30% до 60% по сравнению с тем, как было до внедрения этого механизма. Эта разница особенно заметна в классах, где у всех экземпляров есть одинаковые атрибуты, что позволяет использовать одну и ту же таблицу ключей для всех объектов.
Поговорим о 412: нет, это не тот Москвич, что пылил по дорогам прошлого, а PEP - современный стандарт, который под капотом Python перерабатывает память и повышает эффективность работы вашего кода.
Что такое PEP 412?
PEP 412, известный как "Key-Sharing Dictionaries", описывает механизм, позволяющий нескольким словарям разделять одну и ту же таблицу ключей. Идея заключается в том, чтобы экономить память и повышать эффективность, используя один набор ключей для множества словарей, если эти ключи идентичны. В традиционном подходе каждый словарь создает свою собственную таблицу ключей, что может привести к избыточным расходам памяти, особенно если словари используют одни и те же ключи.
Как это работает?
Когда в программе создается словарь, Python формирует специальную структуру данных для хранения его ключей. До PEP 412 эта структура создавалась заново для каждого словаря, даже если ключи совпадали с уже существующими в других словарях. Теперь же, если Python обнаруживает, что ключи нового словаря идентичны ключам уже существующего, он использует общую структуру для этих ключей. В результате, несколько словарей могут ссылаться на одну и ту же таблицу ключей, что снижает потребление памяти.
Этот подход особенно полезен в ситуациях, когда множество объектов класса имеют одинаковые атрибуты, хранящиеся в словарях. В таких случаях все объекты могут использовать одну и ту же таблицу ключей, что экономит память и снижает накладные расходы на управление данными.
Преимущества PEP 412
Основное преимущество, которое приносит PEP 412, заключается в экономии памяти. Когда многие словари разделяют одну и ту же таблицу ключей, снижаются требования к памяти, так как отсутствует необходимость в создании дублирующихся структур данных. Это становится особенно заметным при работе с большими объемами данных, где экономия памяти приводит к более эффективному использованию ресурсов системы.
Кроме того, хотя основное внимание в PEP 412 уделяется экономии памяти, он также может незначительно улучшить производительность за счет уменьшения числа операций, связанных с созданием и управлением таблицами ключей.
С введением PEP 412, общая таблица ключей позволяет сократить эти издержки. В зависимости от конкретного сценария, экономия памяти может составлять от 30% до 60% по сравнению с тем, как было до внедрения этого механизма. Эта разница особенно заметна в классах, где у всех экземпляров есть одинаковые атрибуты, что позволяет использовать одну и ту же таблицу ключей для всех объектов.
👍1
Утро с Python: Сладость синтаксического сахара и его последствия
Представьте себе утро в одном из живописных графств. Вы сидите в удобном кресле у теплого камина, наслаждаясь уютом. В руках у вас свежий выпуск утренней газеты, написанной Аланом Донованом. На столике рядом — чашка ароматного чая или, может быть, крепкого кофе, поднимается легкий пар.
Мой друг Джеральдо Коэн как-то заметил, что Python — это не столько язык программирования, сколько «набор правильных решений, упакованных в удобную оболочку». Он прав. Python — это синтаксический сахар во всей его красе. Если вы когда-нибудь пользовались Python, вы знаете, насколько простыми и естественными могут быть многие его конструкции. Выражения, которые в других языках требуют многословных и сложных описаний, в Python сводятся к интуитивно понятным и лаконичным формулировкам.
Джеральдо также шутил, что синтаксический сахар в Python вызывает "рак точек с запятой". Это, конечно, юмористическое преувеличение, но оно отражает одну из особенностей Python — отсутствие обязательного использования точек с запятой для разделения выражений, что отличает его от многих других языков программирования. Python избавляет программистов от необходимости ставить точки с запятой в конце каждой строки, что делает код чище и приятнее для чтения. Однако такие решения тоже имеют свою цену, так как они могут снижать строгость кода и требовать большей внимательности при его написании.
Синтаксический сахар, безусловно, упрощает выполнение задач, позволяя сосредоточиться на их решении, а не на деталях синтаксиса. Но как и любой сахар, в больших дозах он может вызвать зависимость — привычка к более простым и лаконичным конструкциям может сделать вас менее внимательным к деталям и строгому синтаксису. Важно помнить, что, несмотря на все свои удобства, Python и подобные языки всё равно требуют от программиста дисциплины и тщательности, особенно при написании сложных и масштабных программных решений.
Представьте себе утро в одном из живописных графств. Вы сидите в удобном кресле у теплого камина, наслаждаясь уютом. В руках у вас свежий выпуск утренней газеты, написанной Аланом Донованом. На столике рядом — чашка ароматного чая или, может быть, крепкого кофе, поднимается легкий пар.
Мой друг Джеральдо Коэн как-то заметил, что Python — это не столько язык программирования, сколько «набор правильных решений, упакованных в удобную оболочку». Он прав. Python — это синтаксический сахар во всей его красе. Если вы когда-нибудь пользовались Python, вы знаете, насколько простыми и естественными могут быть многие его конструкции. Выражения, которые в других языках требуют многословных и сложных описаний, в Python сводятся к интуитивно понятным и лаконичным формулировкам.
Джеральдо также шутил, что синтаксический сахар в Python вызывает "рак точек с запятой". Это, конечно, юмористическое преувеличение, но оно отражает одну из особенностей Python — отсутствие обязательного использования точек с запятой для разделения выражений, что отличает его от многих других языков программирования. Python избавляет программистов от необходимости ставить точки с запятой в конце каждой строки, что делает код чище и приятнее для чтения. Однако такие решения тоже имеют свою цену, так как они могут снижать строгость кода и требовать большей внимательности при его написании.
Синтаксический сахар, безусловно, упрощает выполнение задач, позволяя сосредоточиться на их решении, а не на деталях синтаксиса. Но как и любой сахар, в больших дозах он может вызвать зависимость — привычка к более простым и лаконичным конструкциям может сделать вас менее внимательным к деталям и строгому синтаксису. Важно помнить, что, несмотря на все свои удобства, Python и подобные языки всё равно требуют от программиста дисциплины и тщательности, особенно при написании сложных и масштабных программных решений.
История появления Дня программиста началась с идеи отметить вклад программистов в развитие технологий и их важную роль в современном обществе. Одним из главных инициаторов создания этого праздника был Валентин Балтин, российский разработчик программного обеспечения. В 2002 году он предложил ввести официальную дату, посвящённую программистам, и начал собирать подписи для обращения в правительство с целью признания этого дня на государственном уровне.
Число 256 было выбрано не случайно. В мире компьютерных технологий это число играет важную роль, так как 256 — это степень двойки (2^8), которая представляет количество возможных значений в одном байте данных (8 бит). Для программистов это символическое число, связанное с основами работы компьютеров и цифровых систем.
Балтин вместе с коллегами начал активную кампанию, направленную на официальное признание Дня программиста. Они обращались в разные инстанции и писали петиции, чтобы утвердить 256-й день года как профессиональный праздник. Эта идея получила широкую поддержку среди IT-специалистов.
В 2009 году их усилия увенчались успехом. Президент России Дмитрий Медведев подписал указ № 1034 «О Дне программиста», который установил этот праздник официально. Таким образом, День программиста был закреплён на уровне государства и стал ежегодно отмечаться на 256-й день года — 13 сентября в обычные годы и 12 сентября в високосные годы.
Этот день быстро стал значимым для программистов не только в России, но и в других странах, где IT-специалисты также отмечают свой вклад в цифровую эпоху, хотя официально праздник признан в основном в России.
Как вы относитесь к Дню программиста?
Число 256 было выбрано не случайно. В мире компьютерных технологий это число играет важную роль, так как 256 — это степень двойки (2^8), которая представляет количество возможных значений в одном байте данных (8 бит). Для программистов это символическое число, связанное с основами работы компьютеров и цифровых систем.
Балтин вместе с коллегами начал активную кампанию, направленную на официальное признание Дня программиста. Они обращались в разные инстанции и писали петиции, чтобы утвердить 256-й день года как профессиональный праздник. Эта идея получила широкую поддержку среди IT-специалистов.
В 2009 году их усилия увенчались успехом. Президент России Дмитрий Медведев подписал указ № 1034 «О Дне программиста», который установил этот праздник официально. Таким образом, День программиста был закреплён на уровне государства и стал ежегодно отмечаться на 256-й день года — 13 сентября в обычные годы и 12 сентября в високосные годы.
Этот день быстро стал значимым для программистов не только в России, но и в других странах, где IT-специалисты также отмечают свой вклад в цифровую эпоху, хотя официально праздник признан в основном в России.
Как вы относитесь к Дню программиста?
❤1
CamelCase vs snake_case: как появился каждый стиль и где что использовать
В программировании есть несколько популярных способов именования переменных и функций, и каждый из них имеет свои особенности. CamelCase и snake_case — самые распространенные стили, которые выбирают в зависимости от языка программирования и его традиций. Появление и использование этих стилей обусловлено многими факторами, включая читабельность, удобство написания и восприятие кода. Ну и, конечно, Go тут тоже не остался в стороне со своим mixedCase.
CamelCase
Этот стиль именования получил название из-за того, что заглавные буквы в середине имени похожи на горбы верблюда. Здесь каждое новое слово начинается с заглавной буквы, но без разделителей. CamelCase чаще всего встречается в JavaScript, Java, C# и Swift. Пример: myVariableName.
Почему так? Всё просто: это делает код более компактным, особенно в языках, где используется много коротких слов. Если вспомнить JavaScript, там это прям повсеместная практика, да и в Java аналогично — это стандарт для методов и переменных.
snake_case
Этот стиль именования использует символ подчеркивания для разделения слов. Все буквы в нем пишутся строчными, что добавляет аккуратности и ясности при работе с длинными именами переменных. Snake_case широко принят в Python и Ruby. Пример: my_variable_name.
Здесь подчеркивание выступает естественным разделителем, делая переменные с несколькими словами легко читаемыми. Особенно этот стиль нравится тем, кто предпочитает четкость в коде и использует более длинные описательные имена.
mixedCase в Go
Теперь к Go. В этом языке принято использовать mixedCase, который выглядит как CamelCase, но с упрощениями. Например, myVariableName для переменных и DoSomething для методов. Отличительная черта Go — это строгое разделение между экспортируемыми и приватными именами. Если имя начинается с заглавной буквы, оно доступно в других пакетах. Если с маленькой — доступно только внутри текущего пакета.
Go избегает snake_case, делая акцент на упрощении и лаконичности. Такой подход делает код Go легко читаемым и структурированным, следуя правилу минимализма в языке.
#CamelCase #snake_case #Go #mixedCase #программирование #стилиименования #код #разработка #программист #kangaroo
В программировании есть несколько популярных способов именования переменных и функций, и каждый из них имеет свои особенности. CamelCase и snake_case — самые распространенные стили, которые выбирают в зависимости от языка программирования и его традиций. Появление и использование этих стилей обусловлено многими факторами, включая читабельность, удобство написания и восприятие кода. Ну и, конечно, Go тут тоже не остался в стороне со своим mixedCase.
CamelCase
Этот стиль именования получил название из-за того, что заглавные буквы в середине имени похожи на горбы верблюда. Здесь каждое новое слово начинается с заглавной буквы, но без разделителей. CamelCase чаще всего встречается в JavaScript, Java, C# и Swift. Пример: myVariableName.
Почему так? Всё просто: это делает код более компактным, особенно в языках, где используется много коротких слов. Если вспомнить JavaScript, там это прям повсеместная практика, да и в Java аналогично — это стандарт для методов и переменных.
snake_case
Этот стиль именования использует символ подчеркивания для разделения слов. Все буквы в нем пишутся строчными, что добавляет аккуратности и ясности при работе с длинными именами переменных. Snake_case широко принят в Python и Ruby. Пример: my_variable_name.
Здесь подчеркивание выступает естественным разделителем, делая переменные с несколькими словами легко читаемыми. Особенно этот стиль нравится тем, кто предпочитает четкость в коде и использует более длинные описательные имена.
mixedCase в Go
Теперь к Go. В этом языке принято использовать mixedCase, который выглядит как CamelCase, но с упрощениями. Например, myVariableName для переменных и DoSomething для методов. Отличительная черта Go — это строгое разделение между экспортируемыми и приватными именами. Если имя начинается с заглавной буквы, оно доступно в других пакетах. Если с маленькой — доступно только внутри текущего пакета.
Go избегает snake_case, делая акцент на упрощении и лаконичности. Такой подход делает код Go легко читаемым и структурированным, следуя правилу минимализма в языке.
#CamelCase #snake_case #Go #mixedCase #программирование #стилиименования #код #разработка #программист #kangaroo
Релиз СУБД PostgreSQL 17
После года разработки опубликована новая стабильная ветка СУБД PostgreSQL 17, а PostgreSQL 12.x перестанут поддерживать уже 14 ноября.
Что нового добавлено?
🔸 VACUUM: используется новая структура данных, которая потребляет до 20 раз меньше памяти, ускоряя работу и снижая нагрузку на ресурсы.
🔸 I/O: оптимизация кода WAL повысила пропускную способность записи до 2 раз. Новый интерфейс потокового ввода/вывода ускоряет перебор данных и обновление статистики.
🔸 Оптимизация запросов: ускорены запросы с IN, улучшена работа с индексами BRIN и CTE, а также использованы SIMD-инструкции для ускорения вычислений.
🔸 JSON: добавлена поддержка SQL/JSON, включая JSON-TABLE, jsonpath, и функции для работы с JSON, такие как JSON_EXISTS и JSON_QUERY.
🔸 SQL MERGE: расширены возможности для объединения INSERT, UPDATE и DELETE, добавлена поддержка выражения RETURNING и обновления представлений.
🔸 Загрузка данных: увеличена скорость экспорта данных в команде COPY, добавлена опция ON_ERROR для продолжения импорта после ошибок.
🔸 Секционированные таблицы: добавлена поддержка уникальных идентификаторов и техники оптимизации Constraint exclusion.
🔸 Foreign Data Wrapper: поддержка передачи подзапросов EXISTS и IN на внешний сервер.
🔸 Collation: встроенный движок для обработки локали обеспечивает единое поведение сортировки и сопоставления символов на всех платформах.
🔸 Логическая репликация: упрощён переход на новый релиз без удаления слотов, добавлена поддержка failover и утилита pg_createsubscriber.
🔸 TLS: новая опция sslnegotiation для настройки защищённых TLS-соединений через ALPN.
🔸 Резервное копирование: поддержка инкрементальных бэкапов и новая утилита pg_combinebackup для их объединения. В pg_dump добавлена опция --filter.
🔸 EXPLAIN: добавлены новые опции для вывода информации о времени чтения/записи и использовании памяти.
🔸 Прогресс VACUUM: добавлен индикатор прогресса при работе с индексами.
🔸 pg_wait_events: новое системное представление для анализа причин ожидания сеансов в сочетании с pg_stat_activity.
После года разработки опубликована новая стабильная ветка СУБД PostgreSQL 17, а PostgreSQL 12.x перестанут поддерживать уже 14 ноября.
Что нового добавлено?
🔸 VACUUM: используется новая структура данных, которая потребляет до 20 раз меньше памяти, ускоряя работу и снижая нагрузку на ресурсы.
🔸 I/O: оптимизация кода WAL повысила пропускную способность записи до 2 раз. Новый интерфейс потокового ввода/вывода ускоряет перебор данных и обновление статистики.
🔸 Оптимизация запросов: ускорены запросы с IN, улучшена работа с индексами BRIN и CTE, а также использованы SIMD-инструкции для ускорения вычислений.
🔸 JSON: добавлена поддержка SQL/JSON, включая JSON-TABLE, jsonpath, и функции для работы с JSON, такие как JSON_EXISTS и JSON_QUERY.
🔸 SQL MERGE: расширены возможности для объединения INSERT, UPDATE и DELETE, добавлена поддержка выражения RETURNING и обновления представлений.
🔸 Загрузка данных: увеличена скорость экспорта данных в команде COPY, добавлена опция ON_ERROR для продолжения импорта после ошибок.
🔸 Секционированные таблицы: добавлена поддержка уникальных идентификаторов и техники оптимизации Constraint exclusion.
🔸 Foreign Data Wrapper: поддержка передачи подзапросов EXISTS и IN на внешний сервер.
🔸 Collation: встроенный движок для обработки локали обеспечивает единое поведение сортировки и сопоставления символов на всех платформах.
🔸 Логическая репликация: упрощён переход на новый релиз без удаления слотов, добавлена поддержка failover и утилита pg_createsubscriber.
🔸 TLS: новая опция sslnegotiation для настройки защищённых TLS-соединений через ALPN.
🔸 Резервное копирование: поддержка инкрементальных бэкапов и новая утилита pg_combinebackup для их объединения. В pg_dump добавлена опция --filter.
🔸 EXPLAIN: добавлены новые опции для вывода информации о времени чтения/записи и использовании памяти.
🔸 Прогресс VACUUM: добавлен индикатор прогресса при работе с индексами.
🔸 pg_wait_events: новое системное представление для анализа причин ожидания сеансов в сочетании с pg_stat_activity.
👍2🔥1
Выпущен Linux, внешне неотличимый от Windows пол названием Wubuntu.
Дистрибутив основан на Kubuntu 24.04.1 LTS (Ubuntu с оболочкой KDE). При этом все элементы интерфейса очень похожи на оригиналы в Windows.
Скопирована даже раздражающая надпись об активации системы в правом нижнем углу рабочего стола. Правда, это окно с надписью можно просто закрыть.
Здесь по умолчанию установлен Edge для максимального сходства с Windows, а для тех, кто не желает пользоваться браузером Microsoft, есть предустановленный Google Chrome.
В систему по умолчанию встроен Wine для запуска программ, написанных для Windows
Имеется среда выполнения PrimeOS Android для работы с Android-приложениями. Для геймеров по умолчанию установлен клиент Steam от Valve. Есть даже магазин приложений KDE Discover, заменивший собой Microsoft Store.
https://www.theregister.com/2024/12/05/wubuntu/
https://wubuntu.org/
Дистрибутив основан на Kubuntu 24.04.1 LTS (Ubuntu с оболочкой KDE). При этом все элементы интерфейса очень похожи на оригиналы в Windows.
Скопирована даже раздражающая надпись об активации системы в правом нижнем углу рабочего стола. Правда, это окно с надписью можно просто закрыть.
Здесь по умолчанию установлен Edge для максимального сходства с Windows, а для тех, кто не желает пользоваться браузером Microsoft, есть предустановленный Google Chrome.
В систему по умолчанию встроен Wine для запуска программ, написанных для Windows
Имеется среда выполнения PrimeOS Android для работы с Android-приложениями. Для геймеров по умолчанию установлен клиент Steam от Valve. Есть даже магазин приложений KDE Discover, заменивший собой Microsoft Store.
https://www.theregister.com/2024/12/05/wubuntu/
https://wubuntu.org/
😁2🔥1