Классические задачи Computer Science на языке Python
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабынан сөз тіркестері  Классические задачи Computer Science на языке Python

Владислав
Владиславдәйексөз келтірді2 ай бұрын
self.bit_string <<= 2 # сдвиг влево на 2 бит
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
Если имя метода или переменной в классе начинается с двух символов подчеркивания, то Python будет искажать это имя, изменяя его имя реа­лизации с помощью «соли», что не позволит другим классам легко его обнаруживать. В этой книге используется одинарное подчеркивание для обозначения приватных переменных и методов, но вы можете применять двойное, если действительно хотите подчеркнуть, что элемент является приватным. Подробнее об именовании в Python читайте в разделе «Описательные стили именования» в PEP 8: http://mng.bz/NA52.
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
Узнать, сколько байтов памяти потребляют ваши объекты Python, поможет функция sys.get­sizeof().
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
Сжать данные самыми простыми способами можно тогда, когда вы понимаете, что типы хранилищ данных используют больше битов, чем необходимо для их содержимого. Например, на низком уровне, если целые числа без знака, значения которых никогда не превысят 65 535, сохраняются в памяти как 64-разрядные целые числа без знака, то они сохраняются неэффективно. Вместо этого их можно хранить как 16-разрядные целые числа без знака. Это уменьшит потребление пространства для фактического хранения чисел на 75 % (16 бит вместо 64). Таким неэффективным способом хранятся миллионы чисел, это может означать до мегабайта впустую потраченного пространства.
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
любую задачу, которая может быть решена рекурсивно, можно решить и итеративным способом.
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
В теле цикла for в fib5() используется распаковка кортежа — возможно, слишком хитроумным способом. Кому-то может показаться, что это сделано для краткости в ущерб удобочитаемости. Другие полагают, что краткость сама по себе улучшает удобство чтения. Суть в том, что переменной last присваивается предыдущее значение next, а next — предыдущее значение last плюс предыдущее значение next. Это позволяет избежать создания временной переменной для хранения старого значения next после изменения last, но перед изменением next. Такое применение распаковки кортежа для определенных переменных широко распространено в Python.
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
last, next = next, last + next
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
В Python есть встроенный декоратор для автоматической мемоизации любой функции. В fib4() декоратор @functools.lru_cache() использован точно с тем же кодом, который мы применили в fib2(). Каждый раз, когда fib4() выполняется для нового аргумента, декоратор выполняет кэширование возвращаемого значения. При последующих вызовах fib4() для того же аргумента сохраненное значение извлекается из кэша и возвращается
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
Мемоизация — это метод, при котором сохраняются результаты выполненных вычислений, так что, когда они снова понадобятся, их можно найти, вместо того чтобы вычислять во второй (или миллионный) раз
Комментарий жазу
Владислав
Владиславдәйексөз келтірді2 ай бұрын
def fib2(n: int) -> int: if n < 2: # базовый случай return n return fib2(n - 2) + fib2(n — 1)
Комментарий жазу