
Lulz
11.09.2017
05:22:17

I'm_your_god
11.09.2017
05:22:22
:D

Pavel
11.09.2017
05:22:44
super(B, self).some_func(*args, **kwargs)
явно же вызываем родительскую функцию, которая декорирована. Очень странный wtf

Google

I'm_your_god
11.09.2017
05:23:23
что странного? Просто вопрос на внимательность и понимание внутренностей

Маришка
11.09.2017
05:24:45

Pavel
11.09.2017
05:25:38
Разве это втф?
На первый взгляд это может показать не очевидным, но запомните. В таком наследовании декоратор дёрнется дважды!
ну, мне показалось что автор сообщения писал в духе "ни хрена себе, мы вызываем функцию и она вызывается!"

Маришка
11.09.2017
05:26:09
+

Maxim robox
11.09.2017
05:26:13

Маришка
11.09.2017
05:26:15
Тут это явно все

I'm_your_god
11.09.2017
05:26:38
ну кароч как обычно ссаными тряпками закидали

Ildar
11.09.2017
05:26:48
а ты как хотел?

Maxim robox
11.09.2017
05:26:48
Наслаждайся. =)

I'm_your_god
11.09.2017
05:26:55
вам вот ясно всё и понятно, ну и молодцы :D

Aragaer
11.09.2017
05:26:58
для доклада на каком-нибудь питонмитапе
митонпитапе

I'm_your_god
11.09.2017
05:27:06
наверно все неибаться стартаперы миллионеры

Google

Lulz
11.09.2017
05:27:21

I'm_your_god
11.09.2017
05:27:40
да я уже на плутоне

Ildar
11.09.2017
05:27:40
Там хоть нормально рассказали, что такое декоратор и нах он нужен

Lulz
11.09.2017
05:28:20

Ildar
11.09.2017
05:28:54

Lulz
11.09.2017
05:29:22
какие же сложные юморески здесь
питоняшка

Aleserche
11.09.2017
05:30:59
сначала прочитал как фитоняшка

Lulz
11.09.2017
05:31:23

Aleserche
11.09.2017
05:31:37
ок. Держи нас в курсе

Arrow
11.09.2017
05:54:56
вопрос по django: если у меня в адресной строке должна передаться довольно длинная строчка urlencoded (типа "Hello+World+%21") как мне ее отловить? Написать в urls регулярку типа такой? "(?P<code>[A-Za-z\d%]+)" А оно само сделает urldecode или надо еще какой-то функцией его обработать? если надо то какой?

Николай
11.09.2017
05:56:25

Ildar
11.09.2017
05:57:10

Николай
11.09.2017
05:58:41
Спасибо ?

dk
11.09.2017
05:58:51
Надо будет спросить у наших питонистов, ознакомились ли они с работы Джеймся Пауэла. А то вдруг они и не эксперты никакие...

Arrow
11.09.2017
05:59:10
никто не может подсказать?

Ildar
11.09.2017
05:59:40

Maxim robox
11.09.2017
06:01:32

Arrow
11.09.2017
06:01:56

Google

Arrow
11.09.2017
06:02:02
Можно так можно так

Maxim robox
11.09.2017
06:02:55

Arrow
11.09.2017
06:03:25
т.е. там подставлены % вместо символов невозможных в url?

Maxim robox
11.09.2017
06:05:29
а она будет urlencoded?
Из query параметра сама раскодируется, если не путаю. Если из path kwarg, то самому надо будет декоднуть. Но это же не проблема в любом случае.

Arrow
11.09.2017
06:05:49
какая функция?
чет в гугле пишет только теплейтовский тег urlencode, urldecode нету

Maxim robox
11.09.2017
06:07:59

Arrow
11.09.2017
06:09:22
urllib.parse.unquote
хмм плюсы (которые вместо пробелов) она правда не убирает, но остальное раскодирует
ок, спасибо

Maxim robox
11.09.2017
06:09:40

Arrow
11.09.2017
06:10:18

Tony
11.09.2017
08:05:57
def decorator(func):
def wrapper():
func()
return wrapper
это синтаксис декоратора. А почему не
def decorator(func):
return func
?
другими словами зачем нужен wrapper если можно прописать доп действия в декораторе

Aragaer
11.09.2017
08:07:35
зависит от того, когда эти действия нужны
если они должны выполняться тогда, когда вызывается декоратор - можно так. А если они должны выполняться тогда, когда вызывается декорированная функция, то нужен враппер

Tony
11.09.2017
08:08:13

Aragaer
11.09.2017
08:08:56
def decorator(func):
print("decorator called")
def wrapped():
print("decorated function called")
return wrapped

Tony
11.09.2017
08:09:05
@decorator
def abc():
return 1

Google

Aragaer
11.09.2017
08:10:16
внутри и снаружи враппера разные вещи делаются. В разное время

Tony
11.09.2017
08:10:22
abc() вызовет декоратор, который вызовет функцию

Aragaer
11.09.2017
08:10:52
abc() не вызовет декоратор. Он сразу вызовет враппер

Admin
ERROR: S client not available

Tony
11.09.2017
08:11:19
аааааааа
кажется понял

Aragaer
11.09.2017
08:11:42
запись
@decorator
def abc():
return 1 более-менее эквивалентна следующему:
def func():
return 1
abc = decorator(func)

Tony
11.09.2017
08:11:44
то бишь функция внутри враппера сидит

Lulz
11.09.2017
08:12:12
т.е исполняется

Aragaer
11.09.2017
08:12:28
при выполнении инструкции def

Lulz
11.09.2017
08:12:51

Aragaer
11.09.2017
08:13:17
теоретически я могу сделать такое:
if something:
@decorator
def abc():
return 1
else:
@other_decorator
def abc():
return 2
но за такое побьют ногами же 8)

Lulz
11.09.2017
08:13:36
по почкам©

Aragaer
11.09.2017
08:13:55
питон интерпретируемый, поэтому "при старте" это "при прочтении"
по-моему когда у декоратора еще и аргумент есть, там еще больше слоев накручивается

Tony
11.09.2017
08:15:30

Aragaer
11.09.2017
08:15:38
да, точно

Google

ilya
11.09.2017
08:16:13

Aragaer
11.09.2017
08:16:32
def decorator(param):
def actual_decorator(func):
def wrapper():
func()
return wrapper
return actual_decorator

ilya
11.09.2017
08:16:51
зачем?
чтобы можно было передать аргументы декоратору, а не оборачиваемой ф-ции

Tony
11.09.2017
08:17:43

Lulz
11.09.2017
08:17:59

Aragaer
11.09.2017
08:18:10

Lulz
11.09.2017
08:18:21

Tony
11.09.2017
08:19:43

Aragaer
11.09.2017
08:20:31
def speak(name):
def actual(func):
def wrapper():
print("hey, {}, I'm calling func".format(name))
func()
return wrapper
return actual
@speak("user")
def abcd():
return 1

Tony
11.09.2017
08:21:07
выведет сначала строку, потом вернет 1

ilya
11.09.2017
08:21:41
кстати лучше использовать @wraps(func) дополнительно перед def wrapper():, чтобы не было беды :)

Artem
11.09.2017
08:22:09

Tony
11.09.2017
08:22:22