Реализация цикла for с помощью функции и цикла while
#algoritms #iterator #exceptions
def for_loop(iterable, loop_body_func):Здесь использовали конструкцию try-else. Она позволяет выполнять код, если исключения не возникло, и код был выполнен успешно.
iterator = iter(iterable)
next_element_exist = True
while next_element_exist:
try:
element_from_iterator = next(iterator)
except StopIteration:
next_element_exist = False
else:
loop_body_func(element_from_iterator)
#algoritms #iterator #exceptions
* Итерируемый объект — это что-то, что можно итерировать.
* Итератор — это сущность порождаемая функцией iter, с помощью которой происходит итерирование итерируемого объекта.
* Итератор не имеет индексов и может быть использован только один раз.
* Итератор имеет методы __next__ __iter__, а также вызывает исключение StopIteration при невозможности получения следующего элемента
* В случае, если мы передаём в iter итератор, то получаем тот же самый итератор
* Итератор — это сущность порождаемая функцией iter, с помощью которой происходит итерирование итерируемого объекта.
* Итератор не имеет индексов и может быть использован только один раз.
* Итератор имеет методы __next__ __iter__, а также вызывает исключение StopIteration при невозможности получения следующего элемента
* В случае, если мы передаём в iter итератор, то получаем тот же самый итератор
class InfiniteSquaring:#iterrator #iter #next
"""Класс обеспечивает бесконечное последовательное возведение в квадрат заданного числа."""
def __init__(self, initial_number):
# Здесь хранится промежуточное значение
self.number_to_square = initial_number
def __next__(self):
# Здесь мы обновляем значение и возвращаем результат
self.number_to_square = self.number_to_square ** 2
return self.number_to_square
def __iter__(self):
"""Этот метод позволяет при передаче объекта функции iter возвращать самого себя, тем самым в точности реализуя протокол итератора."""
return self
Кэширование (мемоизация) с помощью lru_cache
import functools#lru_cache #decorator
import time
# кэширование до 12 различных результатов
@functools.lru_cache(maxsize=12)
def slow_func(x):
time.sleep(2) # Имитируем длительные вычисления
return x
slow_func(1) # ... ждём 2 секунды до возврата результата
slow_func(1) # результат уже кэширован - он возвращается немедленно!
slow_func(3) # ... опять ждём 2 секунды до возврата результата
https://arpitbhayani.me/blogs/fsm - примеры взаимодействия последовательных процессов на python
#fsm #asyncio
#fsm #asyncio
arpitbhayani.me
Building Finite State Machines with Python Coroutines
The most intuitive way of building and implementing Finite State Machines is by using Python Coroutines and in this article, we find how and why.
https://www.artificialworlds.net/blog/2017/06/12/making-100-million-requests-with-python-aiohttp/ - хороший пример по использованию aiohttp
#aiohttp
#aiohttp
https://medium.com/@yeraydiazdiaz/asyncio-coroutine-patterns-errors-and-cancellation-3bb422e961ff - пример по обработке ошибок и логгированию с asyncio
#asyncio #exceptions #logging
#asyncio #exceptions #logging
Medium
Asyncio Coroutine Patterns: Errors and cancellation
This is the second part of a two part series on coroutine patterns in asyncio, to fully benefit from this article please read the first…
Никогда не стоит использовать f-strings для логгирования в python, такие строки будут выполняться вне зависимости от того, должна ли быть вызвана функция логгирования на текущем уровне. Стоит использовать старый формат для строк.
logger.info('Requests sent: %s success: %s errors: %s', self.request_sent, self.success, self.errors)
#logging #f_stringsЕсли вы хотите вызвать блокирующий метод из корутины и не заблокировать работу всего основного потока - вы можете вызвать ее в другом потоке используя AbstractEventLoop.run_in_executor(executor, func, *args):
fn = functools.partial(method, *args)#asyncio #functools
result = await loop.run_in_executor(None, fn)
Отличная статья о concurrent.futures - https://rednafi.github.io/digressions/python/2020/04/21/python-concurrent-futures.html Показаны примеры с использованием ThreadPoolExecutor и ProcessPoolExecutor.
#concurrent #futures #ThreadPoolExecutor #ProcessPoolExecutor
#concurrent #futures #ThreadPoolExecutor #ProcessPoolExecutor
Red’s Digressions
Effortless Concurrency with Python’s concurrent.futures
Running simple tasks concurrently with concurrent.futures
https://habr.com/ru/post/145835/ - метаклассы в python
В данной статье не показано как использовать метакласс, описанный классом, а не функцией. Вот пример:
#metaclass #type #object
В данной статье не показано как использовать метакласс, описанный классом, а не функцией. Вот пример:
>>> class Foo(metaclass=UpperAttrMetaclass):
... boo = 1
...
...
>>> f = Foo()
>>> f.boo
Traceback (most recent call last):
File "<input>", line 1, in <module>
f.boo
AttributeError: 'Foo' object has no attribute 'boo'
>>> f.BOO
1
#metaclass #type #object
Хабр
Метаклассы в Python
Как сказал один из пользователей StackOverflow, «using SO is like doing lookups with a hashtable instead of a linked list». Мы снова обращаемся к этому замечател...
https://pythonist.ru/samye-populyarnye-biblioteki-python-ispolzuemye-v-hakinge/ - библиотеки для работы с сетью и криптографией
#libraries #networking #cryptography
#libraries #networking #cryptography
Pythonist
Самые популярные библиотеки Python, используемые в хакинге
Python стал самым удобным языком среди пентестеров. Мы покажем наиболее популярные библиотеки Python для этичного взлома.
https://pythonist.ru/keshirovanie/ - статья со ссылками о кешировании веб приложений
#cache #redis #memcached
#cache #redis #memcached
Pythonist
Кэширование на сайтах: что это такое и зачем это нужно
Давайте разберемся, что такое кэширование, а также рассмотрим, какие ресурсы помогут программисту изучить этот вопрос поглубже.
https://ru.hexlet.io/blog/posts/izuchaem-prodvinutye-vozmozhnosti-python-chast-2-zamykaniya-dekoratory-modul-functools - статья по декораторам, а также здесь описаны замыкания(closures)
#decorators #closures
#decorators #closures
ru.hexlet.io
Изучаем продвинутые возможности Python, часть 2: замыкания, декораторы, модуль functools
В первой части серии публикаций о продвинутых возможностях Python мы познакомились с итераторами, генераторами и модулем itertools. В сегодняшней публикации речь пойдёт о замыканиях, декораторах и модуле functools.