Используйте рецепт pairwise
из itertools
рецептов и сделайте его декоратором:
blockquote>from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, None) return zip(a, b)
from functools import wraps def pairwise_decorator(func): @wraps(func) def wrapper(*args, **kwargs): return pairwise(func(*args, **kwargs)) return wrapper
Это прекрасно работает с генераторы (как и все функции в модуле
itertools
) и возвращает объектzip
(особый вид генератора) в Python 3.Пример использования:
@pairwise_decorator def f(n): return range(n) list(f(5)) # [(0, 1), (1, 2), (2, 3), (3, 4)]
Чтобы сделать это более общим (вызывать любую функцию на выходе декорированной функции), сделайте это декоратором, принимающим аргумент:
def call_after(outer_func): def decorator(func): @wraps(func) def wrapper(*args, **kwargs): return outer_func(func(*args, **kwargs)) return wrapper return decorator @call_after(pairwise) def f(n): return range(n) @call_after(lambda x: grouper(x, 3)) def g(n): return range(n) list(f(5)) # [(0, 1), (1, 2), (2, 3), (3, 4)] list(g(5)) # [(0, 1, 2), (3, 4, None)]
Можно загрузить Nessus, который свободен и сканирует, чтобы много известных уязвимостей SSL видели, что список связанных с SSL сканирований перейти к этой ссылке на поиск щелчка левой стороны затем вводит SSL в поле поиска, существует более чем 200 проверок безопасности SSL. (отметьте: большинство не будет относиться к Вашей ситуации обязательно),