Size: a a a

2020 May 14

AA

Alexander Adler in atinfo chat
Задаешь ожидаемый результат, интервал опроса и таймаут, и вешаешь на любой метод
источник

S

Sergei in atinfo chat
кажется, все тесты да и весь код можно написать в виде декораторов)
источник

AA

Alexander Adler in atinfo chat
В качестве альтернативы можно копипастить один и тот же код )
источник

AA

Alexander Adler in atinfo chat
Но кмк декоратор лучше
источник

S

Sergei in atinfo chat
ну почему сразу копипаста, декоратор, это всего лишь функция, принимающая другую функцию, можно чуть корявей но сделать так:
def log_time(func):
   now = time.now()
   result = func()
   print(time.now() - now)
   return result


def my_func(*args, **kwgs):
   def _my_func():
       do_some_shit(*args, **kwgs)
   return log_time(_my_func)
источник

V

Vita in atinfo chat
декоратор просто позволяет сократить код и все
источник

S

Sergei in atinfo chat
а если б в питоне анонимные функции были бы многострочные, как в джаваскрипте, можно было бы вообще элегантно без декораторов обойтись
источник

V

Vita in atinfo chat
интересно, как б ты применял анонимные ф-и к каждому объекту?
источник

S

Sergei in atinfo chat
вопрос слишком абстрактный чтобы его понять, приведи плиз пример, что имеешь в виду 🙂
источник

S

Sergei in atinfo chat
что значит применять анонимные функции к объекту
источник

S

Sergei in atinfo chat
передавать объект в качестве аргумента?
источник

V

Vita in atinfo chat
ну я просто пытаюсь понять ценность замены декоратора на анонимную ф-ю
источник

AA

Alexander Adler in atinfo chat
Sergei
ну почему сразу копипаста, декоратор, это всего лишь функция, принимающая другую функцию, можно чуть корявей но сделать так:
def log_time(func):
   now = time.now()
   result = func()
   print(time.now() - now)
   return result


def my_func(*args, **kwgs):
   def _my_func():
       do_some_shit(*args, **kwgs)
   return log_time(_my_func)
Да понятно, что так можно. Но даже с т.з. читаемости декораторы лучше
источник

S

Sergei in atinfo chat
Vita
ну я просто пытаюсь понять ценность замены декоратора на анонимную ф-ю
да это равнозначно 🙂 никаких проблем нет, можно обходиться и без “@“
import functools

def log_time(f):
   @functools.wraps(f)
   def w(*args, **kwgs):
       now = time.now()
       r = f(*args, **kwgs)
       print(time.now() - now)
       return r
   return w

def my_func():
   do_some_shit()

my_func = log_time(my_func)  # то что делает декоратор под капотом @log_time


и на джаваскрипте:
const logTime = (f) => {
   const w = function () {
       const now = new Date();
       const r = f.apply(null, arguments);
       console.log(new Date() - now);
       return r;
   };
   return w;
};

const myFunc = logTime(() => {
   doSomeShit();  
});
источник

AA

Alexander Adler in atinfo chat
Надо тогда и без врапса, иначе не по хардкору
источник

S

Sergei in atinfo chat
вот без врапс как раз нельзя)
источник

S

Sergei in atinfo chat
он же пробрасывает имя и документацию
источник

S

Sergei in atinfo chat
хотя его редко используют)
источник

V

Vita in atinfo chat
Alexander Adler
Надо тогда и без врапса, иначе не по хардкору
Можно
источник

S

Sergei in atinfo chat
Кстати с декораторами такая тема еще, что их не переваривает генератор документации sphinx-doc, даже если используется wraps. Он не может прочитать из-под декоратора имя функции и аргументы, и похоже что даже по прошествии 4 лет эта проблема еще актуальна.
источник