The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Поддержка Python 2.7 продлена до 2020 года"
Отправлено Xasd, 14-Апр-14 11:24 
щаз вот подумал -- а ведь можно сделать имитацию работы "yield from" -- через использование декоратора.

[python-2.7 -- хоть и отсталое говно мамонта, но декораторы всё-таки работают:)]

в коде -- выглядеть это может так:


@generator_with_yield_from_emulation
def my_other_generator():
    yield 'xxx'
    
    yield 'yyy'
    
    yield 'zzz'

@generator_with_yield_from_emulation
def my_generator():
    yield 1111
    
    yield 2222
    
    yield yield_from_emulation(my_other_generator())
    
    yield 3333

не сложно придумать реализацию для ``generator_with_yield_from_emulation`` и для ``yield_from_emulation``

например так:


import functools

_yield_from_emulation_marker = object()

def yield_from_emulation(it):
    return _yield_from_emulation_marker, it

def generator_with_yield_from_emulation(func):
    def do_recursive(it):
        for it_value in it:
            if isinstance(it_value, tuple) and len(it_value) == 2 and \
                    it_value[0] is _yield_from_emulation_marker:
                for inner_it_value in do_recursive(it_value[1]):
                    yield inner_it_value
                continue
            
            yield it_value
    
    @functools.wraps(func)
    def wrapped_func(*arg, **kwargs):
        for it_value in do_recursive(func(*arg, **kwargs)):
            yield it_value
    
    return wrapped_func


 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру