170 похожих чатов

Подскажите, а как генератор, завернутый в декоратор заставить выдавать в

правильном порядке значения и почему так происходит?

Код:
def Decorator(func):
log.info('start...')
def wrapper(args):
return func(args)
log.info('stop...')
return wrapper

В итоге получается такой вывод:
start...
stop....
И тут объекты генератора уже выводятся (мне надо чтобы они между start и stop выводились)

13 ответов

15 просмотров
XYZ- Автор вопроса

А, вроде дошло - сейчас кое-что попробую

Все правильно работает. Выполняется функция-декоратор, выводит что-то и завершает работу, возвращая wrapper, а потом уже и он вызывается. Вероятно, ты хотел вывод делать изнутри wrapper'а, вставив вызов обернутой функции посередине?

XYZ- Автор вопроса
Vitaliy Derbentsev
Все правильно работает. Выполняется функция-декора...

Ага, уже понял. Правда еще не придумал как сделать чтобы выполнялись начальные и конечные инструкции в обернутом генераторе

XYZ- Автор вопроса
Vitaliy Derbentsev
Все правильно работает. Выполняется функция-декора...

изнутри wrapper'a он не выведет "stop", поскольку раньше вернет результат функции. Как такое правильно реализуется, можешь подсказать?

XYZ
изнутри wrapper'a он не выведет "stop", поскольку ...

Ну, так сохрани результат функции в переменную, доделай, что нужно и верни переменную

XYZ- Автор вопроса
Vitaliy Derbentsev
Ну, так сохрани результат функции в переменную, до...

То же самое получается: def Decorator(func): print('start...) def wrapper(*args, **kwargs): result = func(*args, **kwargs) print('stop...') return result return wrapper Но пока что выключу тг, попробую сам подумать - а потом прочитаю ответ :)

XYZ
То же самое получается: def Decorator(func): pri...

Ок прост тут что то многовато вариантов как можно понять что именно Вам надо) если что пинганите меня, у меня несколько вариантов накидалось (хотел убедиться что правильно понимаю как оно работает)

XYZ
То же самое получается: def Decorator(func): pri...

Что получается и что должно получиться в итоге?

XYZ- Автор вопроса
Vitaliy Derbentsev
Что получается и что должно получиться в итоге?

Должна получиться очень простая вещь: в декораторе идет запуск драйвера, выполняются генераторы, потом идет остановка драйвера :)

XYZ- Автор вопроса
XYZ
Должна получиться очень простая вещь: в декораторе...

Сек. Так действия должны производиться не по выдаче генератора, а по началу/завершению итераций через его значения?

XYZ- Автор вопроса
Vitaliy Derbentsev
Сек. Так действия должны производиться не по выдач...

Да. Уже выкинул декоратор из своего кода и делаю по-другому чуть-чуть :)

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта