🧑💻 Пропуск начала итерируемого объекта в Python
Иногда нужно работать с файлом, который, как заранее известно, начинается с некоторого числа ненужных строк — вроде строк с комментариями. Для того чтобы пропустить эти строки, можно, снова, прибегнуть к возможностям itertools.
Продолжение следует...
Clean Code #совет #Python #cleancode
Иногда нужно работать с файлом, который, как заранее известно, начинается с некоторого числа ненужных строк — вроде строк с комментариями. Для того чтобы пропустить эти строки, можно, снова, прибегнуть к возможностям itertools.
Продолжение следует...
Clean Code #совет #Python #cleancode
🧑💻 Пропуск начала итерируемого объекта в Python
...Этот код выдаёт лишь строки, находящиеся после блока комментариев, расположенного в начале файла. Такой подход может быть полезен тогда, когда нужно отбросить лишь элементы (в нашем случае — строки) в начале итерируемого объекта, но при этом точное их количество неизвестно.
Продолжение следует...
Clean Code #совет #Python #cleancode
...Этот код выдаёт лишь строки, находящиеся после блока комментариев, расположенного в начале файла. Такой подход может быть полезен тогда, когда нужно отбросить лишь элементы (в нашем случае — строки) в начале итерируемого объекта, но при этом точное их количество неизвестно.
Продолжение следует...
Clean Code #совет #Python #cleancode
🧑💻 Функции, поддерживающие только именованные аргументы (kwargs)
...Для того чтобы при использовании некоей функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно поступить следующим образом: см. код.
Продолжение следует...
Clean Code #совет #cleancode
...Для того чтобы при использовании некоей функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно поступить следующим образом: см. код.
Продолжение следует...
Clean Code #совет #cleancode
🧑💻 Функции, поддерживающие только именованные аргументы (kwargs)
...Это может быть полезно для того, чтобы улучшить понятность кода. Как видите, наша задача легко решается при помощи использования аргумента * перед списком именованных аргументов. Здесь, что вполне очевидно, можно использовать и позиционные аргументы — в том случае, если поместить их до аргумента *.
Продолжение следует...
Clean Code #совет #cleancode
...Это может быть полезно для того, чтобы улучшить понятность кода. Как видите, наша задача легко решается при помощи использования аргумента * перед списком именованных аргументов. Здесь, что вполне очевидно, можно использовать и позиционные аргументы — в том случае, если поместить их до аргумента *.
Продолжение следует...
Clean Code #совет #cleancode
🧑💻 Создание объектов, поддерживающих выражение with
...Все знают о том, как, например, открыть файл, или, возможно, как установить блокировку с использованием оператора with. Но можно ли самостоятельно реализовать механизм управления блокировками? Да, это вполне реально. Протокол управления контекстом исполнения реализуется с использованием методов
Продолжение следует...
Clean Code #совет #cleancode
...Все знают о том, как, например, открыть файл, или, возможно, как установить блокировку с использованием оператора with. Но можно ли самостоятельно реализовать механизм управления блокировками? Да, это вполне реально. Протокол управления контекстом исполнения реализуется с использованием методов
enter
и exit
.Продолжение следует...
Clean Code #совет #cleancode
🧑💻 Создание объектов, поддерживающих выражение with
...Код 1 — наиболее распространённый способ реализации возможностей менеджера контекста в Python, но то же самое можно сделать и проще: см. код 2.
Здесь протокол управления контекстом реализован с использованием декоратора contextmanager. Первая часть функции tag (до yield) выполняется при входе в блок with. Затем выполняется сам этот блок, а после этого выполняется оставшаяся часть функции tag.
Продолжение следует...
Clean Code #совет #Python #cleancode
...Код 1 — наиболее распространённый способ реализации возможностей менеджера контекста в Python, но то же самое можно сделать и проще: см. код 2.
Здесь протокол управления контекстом реализован с использованием декоратора contextmanager. Первая часть функции tag (до yield) выполняется при входе в блок with. Затем выполняется сам этот блок, а после этого выполняется оставшаяся часть функции tag.
Продолжение следует...
Clean Code #совет #Python #cleancode
🧑💻 Экономия памяти с помощью __slots__
Если вы когда-нибудь писали программы, которые создают по-настоящему большие количества экземпляров некоего класса, то вы могли заметить, что таким программам неожиданно может понадобиться очень много памяти. Происходит это из-за того, что Python использует словари для представления атрибутов экземпляров классов. Это хорошо сказывается на производительности, но, с точки зрения потребления памяти, это неэффективно. Обычно, правда, проблем эта особенность не вызывает. Однако если вы столкнулись в подобной ситуации с нехваткой памяти — можете попробовать воспользоваться атрибутом __slots__.
Продолжение следует...
Clean Code #совет #Python #cleancode
Если вы когда-нибудь писали программы, которые создают по-настоящему большие количества экземпляров некоего класса, то вы могли заметить, что таким программам неожиданно может понадобиться очень много памяти. Происходит это из-за того, что Python использует словари для представления атрибутов экземпляров классов. Это хорошо сказывается на производительности, но, с точки зрения потребления памяти, это неэффективно. Обычно, правда, проблем эта особенность не вызывает. Однако если вы столкнулись в подобной ситуации с нехваткой памяти — можете попробовать воспользоваться атрибутом __slots__.
Продолжение следует...
Clean Code #совет #Python #cleancode
🧑💻 Экономия памяти с помощью __slots__
...Здесь, когда мы объявляем атрибут
Продолжение следует...
Clean Code #совет #Python #cleancode
...Здесь, когда мы объявляем атрибут
__slots__
, Python использует для хранения атрибутов не словарь, а маленький массив фиксированного размера. Это серьёзно сокращает объём памяти, необходимый для каждого из экземпляров класса. У применения атрибута __slots__
есть и некоторые недостатки. Так, пользуясь им, мы не можем объявлять новые атрибуты, мы ограничены только теми, которые имеются в __slots__
. Кроме того, классы c атрибутом __slots__
не могут использовать множественное наследование.Продолжение следует...
Clean Code #совет #Python #cleancode
🧑💻 Ограничение использования процессора и памяти
Если вместо того, чтобы оптимизировать программу, или улучшить то, как она пользуется процессором, вам нужно просто задать жёсткое ограничение на доступные ей ресурсы, можно воспользоваться соответствующей библиотекой resource.
Продолжение следует...
Clean Code #совет #cleancode
Если вместо того, чтобы оптимизировать программу, или улучшить то, как она пользуется процессором, вам нужно просто задать жёсткое ограничение на доступные ей ресурсы, можно воспользоваться соответствующей библиотекой resource.
Продолжение следует...
Clean Code #совет #cleancode
🧑💻 Ограничение использования процессора и памяти
...Тут показано ограничение процессорного времени и объёма памяти. Для того чтобы ограничить использование программой процессора, мы сначала получаем значения нежёсткого (soft) и жёсткого (hard) лимитов для конкретного ресурса (RLIMIT_CPU). Затем мы устанавливаем лимит, используя некое число секунд, задаваемое аргументом seconds, и ранее полученное значение жёсткого лимита. После этого мы регистрируем обработчик signal, который, при превышении выделенного программе процессорного времени, инициирует процедуру выхода. В случае с памятью, мы, опять же, получаем значения для нежёсткого и жёсткого лимитов, после чего устанавливаем ограничение с помощью метода setrlimit, которому передаём размер ограничения (size) и ранее полученное значение жёсткого лимита.
Clean Code #совет #cleancode
...Тут показано ограничение процессорного времени и объёма памяти. Для того чтобы ограничить использование программой процессора, мы сначала получаем значения нежёсткого (soft) и жёсткого (hard) лимитов для конкретного ресурса (RLIMIT_CPU). Затем мы устанавливаем лимит, используя некое число секунд, задаваемое аргументом seconds, и ранее полученное значение жёсткого лимита. После этого мы регистрируем обработчик signal, который, при превышении выделенного программе процессорного времени, инициирует процедуру выхода. В случае с памятью, мы, опять же, получаем значения для нежёсткого и жёсткого лимитов, после чего устанавливаем ограничение с помощью метода setrlimit, которому передаём размер ограничения (size) и ранее полученное значение жёсткого лимита.
Clean Code #совет #cleancode