else - Предложение для циклов
Наверняка вы знаете, что в пайтоне для циклов for и while предусмотрен блок else. И с этим блоком возникает много путаницы, потому что его действие на первый взгляд неинтуитивно. Но с этим легко справиться.
else Предложение после цикла выполняется только тогда, когда после всех итераций нет явного break. Вы можете думать об этом как о предложении "nobreak".
#theory // Just Python & Max
Наверняка вы знаете, что в пайтоне для циклов for и while предусмотрен блок else. И с этим блоком возникает много путаницы, потому что его действие на первый взгляд неинтуитивно. Но с этим легко справиться.
else Предложение после цикла выполняется только тогда, когда после всех итераций нет явного break. Вы можете думать об этом как о предложении "nobreak".
#theory // Just Python & Max
Многоточие
В Python Ellipsis это глобально доступный встроенный объект, который эквивалентен ... .
1) В качестве заполнителя для кода, который еще не был написан (точно так же, как pass инструкция)
2) В синтаксисе нарезки для представления полных фрагментов в оставшемся направлении
#theory // Just Python & Max
В Python Ellipsis это глобально доступный встроенный объект, который эквивалентен ... .
>>> ...
Ellipsis
В основном многоточие используются для нескольких целей,1) В качестве заполнителя для кода, который еще не был написан (точно так же, как pass инструкция)
2) В синтаксисе нарезки для представления полных фрагментов в оставшемся направлении
#theory // Just Python & Max
else - Предложение в обработке исключений
При написании кода по обработке помимо необязательного finally блока есть еще и необязательный else блок. Напомню, что этот блок кода выполняется если try блок завершился успешно, без летящих исключений.
Зачем нужен else блок, если все можно поместить в try блок?
Пока мое понимание на уровне правила: Если понадобился else блок, то код функции сложноват. Код в else следует поместить в отдельный метод и вызывать не в том куске кода, где хочется написать else, а уровнем по выше, т.е. более высокоуровневой функции.
#theory // Just Python & Max
При написании кода по обработке помимо необязательного finally блока есть еще и необязательный else блок. Напомню, что этот блок кода выполняется если try блок завершился успешно, без летящих исключений.
Зачем нужен else блок, если все можно поместить в try блок?
Пока мое понимание на уровне правила: Если понадобился else блок, то код функции сложноват. Код в else следует поместить в отдельный метод и вызывать не в том куске кода, где хочется написать else, а уровнем по выше, т.е. более высокоуровневой функции.
#theory // Just Python & Max
Inpinity
Как можно представить бесконечное число в python? Независимо от того, какое число вы вводите в программу, ни одно число не должно быть больше этого представления бесконечности.
Это возможно реализовать с помощью inpinity.
При этом хэш бесконечности равен 10⁵ x π. Интересно, что хэш float('-inf') в Python 3 равен "-10⁵ x π", тогда как в Python 2 "-10⁵ x e".
#theory // Just Python & Max
Как можно представить бесконечное число в python? Независимо от того, какое число вы вводите в программу, ни одно число не должно быть больше этого представления бесконечности.
Это возможно реализовать с помощью inpinity.
При этом хэш бесконечности равен 10⁵ x π. Интересно, что хэш float('-inf') в Python 3 равен "-10⁵ x π", тогда как в Python 2 "-10⁵ x e".
#theory // Just Python & Max
Давайте переделаем (ч.1)
Искажение имен используется, чтобы избежать конфликтов именования между различными пространствами имен.
В Python интерпретатор изменяет (искажает) имена членов класса, начинающиеся с __ (двойное подчеркивание, также известное как "dunder") и не заканчивающиеся более чем одним завершающим подчеркиванием, добавляя _NameOfTheClass впереди.
#theory // Just Python & Max
Искажение имен используется, чтобы избежать конфликтов именования между различными пространствами имен.
В Python интерпретатор изменяет (искажает) имена членов класса, начинающиеся с __ (двойное подчеркивание, также известное как "dunder") и не заканчивающиеся более чем одним завершающим подчеркиванием, добавляя _NameOfTheClass впереди.
#theory // Just Python & Max
Давайте переделаем (ч.2)
Итак, чтобы получить доступ к атрибуту __honey в первом фрагменте, нам пришлось добавить _Yo в начало, что предотвратило бы конфликты с атрибутом того же имени, определенным в любом другом классе.
Но тогда почему это не сработало во втором фрагменте? Потому что искажение имен исключает имена, заканчивающиеся двойным подчеркиванием.
#theory // Just Python & Max
Итак, чтобы получить доступ к атрибуту __honey в первом фрагменте, нам пришлось добавить _Yo в начало, что предотвратило бы конфликты с атрибутом того же имени, определенным в любом другом классе.
Но тогда почему это не сработало во втором фрагменте? Потому что искажение имен исключает имена, заканчивающиеся двойным подчеркиванием.
#theory // Just Python & Max
Открываем локально поисковую строку Google
Порой мы так глубоко погружаемся в написание кода, что нам неохота открывать браузер для поиска нужной информации. Установив потрясающую библиотеку google, можно делать запрос в поисковик прямо в консоли.
#theory // Just Python & Max
Порой мы так глубоко погружаемся в написание кода, что нам неохота открывать браузер для поиска нужной информации. Установив потрясающую библиотеку google, можно делать запрос в поисковик прямо в консоли.
#theory // Just Python & Max
Загрузка материалов из Instagram
Всем нам часто попадаются хорошие посты в Instagram, которые хотелось бы сохранить на своем устройстве, чтобы иметь офлайн-доступ. Это можно сделать при помощи библиотеки instaloader.
#theory // Just Python & Max
Всем нам часто попадаются хорошие посты в Instagram, которые хотелось бы сохранить на своем устройстве, чтобы иметь офлайн-доступ. Это можно сделать при помощи библиотеки instaloader.
#theory // Just Python & Max
Выводим аудио дорожку из видео
Бывает так, что у нас есть mp4-файл, но нам нужна только звуковая дорожка из него. Скажем, чтобы сделать другое видео с таким же звуковым сопровождением. Эта проблема решается установкой библиотеки moviepy.
#theory // Just Python & Max
Бывает так, что у нас есть mp4-файл, но нам нужна только звуковая дорожка из него. Скажем, чтобы сделать другое видео с таким же звуковым сопровождением. Эта проблема решается установкой библиотеки moviepy.
#theory // Just Python & Max
Давайте переделаем (ч.3)
Третий фрагмент также был следствием искажения имени. Имя __variable в инструкции return __variable было искажено до _A__variable, которое также является именем переменной, объявленной нами во внешней области видимости.
Кроме того, если искаженное имя длиннее 255 символов, произойдет усечение.
#theory // Just Python & Max
Третий фрагмент также был следствием искажения имени. Имя __variable в инструкции return __variable было искажено до _A__variable, которое также является именем переменной, объявленной нами во внешней области видимости.
Кроме того, если искаженное имя длиннее 255 символов, произойдет усечение.
#theory // Just Python & Max
Пропуск строк
Некоторые незападные символы выглядят идентично буквам английского алфавита, но интерпретатор считает их разными.
Встроенная ord() функция возвращает кодовую точку символа в Юникоде, а различные кодовые позиции кириллицы 'e' и латиницы 'e' оправдывают поведение нашего примера примера.
#theory // Just Python & Max
Некоторые незападные символы выглядят идентично буквам английского алфавита, но интерпретатор считает их разными.
Встроенная ord() функция возвращает кодовую точку символа в Юникоде, а различные кодовые позиции кириллицы 'e' и латиницы 'e' оправдывают поведение нашего примера примера.
#theory // Just Python & Max
Освойте нейросети для контента за 3 дня
ИИ это не про замену людей — это про усиление ваших умений и делегирование рутины. 80% контента уже делается с помощью ИИ и базовые навыки необходимы всем, кто работает с созданием контента.
Регистрируйтесь на бесплатный мини-курс, где вы получите готовое портфолио и научитесь:
— Писать продающие посты без «ИИ‑шаблонов»;
— Делать стильные визуалы для брендов и соцсетей;
— Проводить нейрофотосессии с реальными или вымышленными моделями;
— Готовить презентации, креативные арты и постеры.
Переходите по ссылке, чтобы получить доступ и бонусные материалы.
Реклама. Информация о рекламодателе по ссылкам в посте.
ИИ это не про замену людей — это про усиление ваших умений и делегирование рутины. 80% контента уже делается с помощью ИИ и базовые навыки необходимы всем, кто работает с созданием контента.
Регистрируйтесь на бесплатный мини-курс, где вы получите готовое портфолио и научитесь:
— Писать продающие посты без «ИИ‑шаблонов»;
— Делать стильные визуалы для брендов и соцсетей;
— Проводить нейрофотосессии с реальными или вымышленными моделями;
— Готовить презентации, креативные арты и постеры.
Переходите по ссылке, чтобы получить доступ и бонусные материалы.
Реклама. Информация о рекламодателе по ссылкам в посте.
Телепортация
Обратите внимание, что массив numpy, созданный в energy_send функции, не возвращается, так что пространство памяти свободно для перераспределения.
numpy.empty() возвращает следующий свободный слот памяти без его повторной инициализации. Эта область памяти просто оказывается той же, которая была только что освобождена (обычно, но не всегда).
#theory // Just Python & Max
Обратите внимание, что массив numpy, созданный в energy_send функции, не возвращается, так что пространство памяти свободно для перераспределения.
numpy.empty() возвращает следующий свободный слот памяти без его повторной инициализации. Эта область памяти просто оказывается той же, которая была только что освобождена (обычно, но не всегда).
#theory // Just Python & Max
Ну, что-то здесь не так...
Почему в первом выводе у нас получилось 10, а не 100?
Это потому что мы смешали табуляцию и пробелы. Символ, непосредственно предшествующий возвращению, является "табуляцией", и в другом месте примера код имеет отступ, кратный "4 пробелам".
"tab" в последней строке square функции заменяется восемью пробелами, и она попадает в цикл.
Зато Python 3 достаточно любезен, чтобы автоматически выдавать ошибку в таких случаях.
#theory // Just Python & Max
Почему в первом выводе у нас получилось 10, а не 100?
Это потому что мы смешали табуляцию и пробелы. Символ, непосредственно предшествующий возвращению, является "табуляцией", и в другом месте примера код имеет отступ, кратный "4 пробелам".
"tab" в последней строке square функции заменяется восемью пробелами, и она попадает в цикл.
Зато Python 3 достаточно любезен, чтобы автоматически выдавать ошибку в таких случаях.
#theory // Just Python & Max
ИИ больше не про хобби — он становится обязательным навыком, чтобы оставаться востребованным на рынке труда.
По оценкам экспертов, в ближайшее время до 80% вакансий будут требовать умения работать с нейросетями:
— генерировать визуал, видео, тексты для любых ниш;
— создавать реалистичный ИИ-контент;
— автоматизировать рутину.
Хорошие новости — освоить базовый минимум в создании контента с помощью ИИ можно всего за 3 дня. Вы сделаете ИИ своим рабочим инструментом и сократите рабочее время без потери качества.
Переходите по ссылке и получайте персональный доступ к урокам и бонусным материалам.
Реклама. Информация о рекламодателе по ссылкам в посте.
По оценкам экспертов, в ближайшее время до 80% вакансий будут требовать умения работать с нейросетями:
— генерировать визуал, видео, тексты для любых ниш;
— создавать реалистичный ИИ-контент;
— автоматизировать рутину.
Хорошие новости — освоить базовый минимум в создании контента с помощью ИИ можно всего за 3 дня. Вы сделаете ИИ своим рабочим инструментом и сократите рабочее время без потери качества.
Переходите по ссылке и получайте персональный доступ к урокам и бонусным материалам.
Реклама. Информация о рекламодателе по ссылкам в посте.
+= быстрее
Почему +- быстрее?
+= быстрее, чем + в объединениях более двух строк, потому что первая строка (например, s1 для s1 += s2 + s3) не уничтожается при вычислении полной строки.
#theory // Just Python & Max
Почему +- быстрее?
+= быстрее, чем + в объединениях более двух строк, потому что первая строка (например, s1 для s1 += s2 + s3) не уничтожается при вычислении полной строки.
#theory // Just Python & Max
Давайте создадим гигантскую строку!
Для создании длинной строки не используйте +. В Python str является неизменяемым, поэтому левая и правая строки должны копироваться в новую строку для каждой пары конкатенаций. Если вы объедините четыре строки длиной 10, вы будете копировать (10+10) + ((10+10)+10) + (((10+10)+10)+10) = 90 символы вместо всего лишь 40 символов. Ситуация ухудшается квадратично по мере увеличения количества и размера строки
Поэтому рекомендуется использовать синтаксис .format. or % (однако они работают немного медленнее, чем + для очень коротких строк).
Или лучше, если у вас уже есть содержимое, доступное в виде итеративного объекта, тогда используйте ''.join(iterable_object) который намного быстрее.
#theory // Just Python & Max
Для создании длинной строки не используйте +. В Python str является неизменяемым, поэтому левая и правая строки должны копироваться в новую строку для каждой пары конкатенаций. Если вы объедините четыре строки длиной 10, вы будете копировать (10+10) + ((10+10)+10) + (((10+10)+10)+10) = 90 символы вместо всего лишь 40 символов. Ситуация ухудшается квадратично по мере увеличения количества и размера строки
Поэтому рекомендуется использовать синтаксис .format. or % (однако они работают немного медленнее, чем + для очень коротких строк).
Или лучше, если у вас уже есть содержимое, доступное в виде итеративного объекта, тогда используйте ''.join(iterable_object) который намного быстрее.
#theory // Just Python & Max
Замедление dict поиска
CPython имеет общую функцию поиска по словарю, которая обрабатывает все типы ключей (str, int, любой объект ...), и специализированную для общего случая словарей, состоящих только из str ключей.
Специализированная функция знает, что все существующие ключи являются строками, и использует более быстрое и простое сравнение строк для сравнения ключей вместо вызова eq метода.
При первом обращении к dict экземпляру с помощью не-str ключа он модифицируется, поэтому в будущих поисковых системах используется универсальная функция.
#theory // Just Python & Max
CPython имеет общую функцию поиска по словарю, которая обрабатывает все типы ключей (str, int, любой объект ...), и специализированную для общего случая словарей, состоящих только из str ключей.
Специализированная функция знает, что все существующие ключи являются строками, и использует более быстрое и простое сравнение строк для сравнения ключей вместо вызова eq метода.
При первом обращении к dict экземпляру с помощью не-str ключа он модифицируется, поэтому в будущих поисковых системах используется универсальная функция.
#theory // Just Python & Max
Раздувающийся экземпляр dict (ч.1)
Как мы видим, при каждом новом выводе словари становятся раздутыми. Почему это происходит?
CPython способен повторно использовать один и тот же объект "keys" в нескольких словарях. Это было добавлено в PEP 412 с целью уменьшить использование памяти, особенно в словарях экземпляров, где ключи (атрибуты экземпляра), как правило, являются общими для всех экземпляров.
Эта оптимизация полностью выполняется, например, для словарей, но она отключается, если нарушаются определенные допущения.
#theory // Just Python & Max
Как мы видим, при каждом новом выводе словари становятся раздутыми. Почему это происходит?
CPython способен повторно использовать один и тот же объект "keys" в нескольких словарях. Это было добавлено в PEP 412 с целью уменьшить использование памяти, особенно в словарях экземпляров, где ключи (атрибуты экземпляра), как правило, являются общими для всех экземпляров.
Эта оптимизация полностью выполняется, например, для словарей, но она отключается, если нарушаются определенные допущения.
#theory // Just Python & Max