Czy ktoś mi wytłumaczy po co się zagnieżdża wrappera w decoratorze skoro można zdefiniować po prostu: def wrapper(func): print("---------") func() print("---------") I wywołac go tak: wrapper(func) ?
Kopia i kalka z innych kursów. Nawet nazwy funkcji nie zmienione. Minus, ponieważ to tylko prezentacja budowy funkcji dekorującej, w dodatku na chama zerżnięta z pracy kogoś innego.
Witam .Mam niestety dziwny błąd w przypadku drugiej prostszej metody(@).Pojawia sie to Traceback (most recent call last): File "D:/Michał/nowe1/run.py", line 14, in witaj() TypeError: 'NoneType' object is not callable
@@airzell7987 W mojej opinii w tym temacie trzeba uważać na szczegóły, ja miałem (chyba) ten wyjątek gdy w funkcji dekoratora zwróciłem wywołanie wrapper'a(zamiast return wrapper to zrobiłem return wrapper()).
Print(decorator(hello)()) wyrzuca na końcu None. funkcja wrapper nic nie zwraca. Jak w takim przypadku temu zapobiec ? Owszem, decorator(hello)() nie wyrzuca none, ale przy print juz pojawia sie problem.
Mam problem ze zrozumieniem umiejscowienia nawiasów () oraz kiedy należy, a kiedy nie należy ich dawać. Jakby ktoś mógł mi pomóc to zrozumieć byłbym wdzięczny. Kolejna sprawa, to kod napisany niemal tak samo jak na filmie, ale z dodaniem nawiasu do wrapper(). Działa tak samo: def decorator(func): def wrapper(): print("-----") func() print("-----") return wrapper() def hello(): print("Hello World") decorator(hello) OUTPUT: ----- Hello World -----
przez dodanie nawiasów na końcu funkcji dodajesz tak jakby jej wywołanie (to żeby zadziałała), a bez tylko przypisujesz ta funkcje bez wywołania(działania)
Warto by było do każdej lekcji dodać zadanie domowe ;)
Czy ktoś mi wytłumaczy po co się zagnieżdża wrappera w decoratorze skoro można zdefiniować po prostu:
def wrapper(func):
print("---------")
func()
print("---------")
I wywołac go tak:
wrapper(func)
?
Zapraszam do skorzystania z pełnej "ścieżki programisty Python":
strefakursow.pl/sciezki_kariery/python_developer.html?ref=87991
Bardzo dobra seria. Uczę się jak w szkole. Pozdro
Dobra robota, dzięki!
Nareszcie zrozumiałem. Piona
wrapper - McWrap - owinięte jedzonkoczyli owijać, zawijać xD
Kopia i kalka z innych kursów. Nawet nazwy funkcji nie zmienione. Minus, ponieważ to tylko prezentacja budowy funkcji dekorującej, w dodatku na chama zerżnięta z pracy kogoś innego.
Fajny film!
O, kurczę!
wrapper czyta się "raper", nie "wrejper". Poza tym super.
no i co z tego. myślisz że angole czytają polskie wyrazy tak jak się czyta
@@romanniemczyk6290 Polski nie jest językiem międzynarodowym, więc porównanie bez sensu.
Dlaczego przy tak skonstruowanej funkcji nie działa samo wywołanie decorator(hello) ?
Witam .Mam niestety dziwny błąd w przypadku drugiej prostszej metody(@).Pojawia sie to
Traceback (most recent call last):
File "D:/Michał/nowe1/run.py", line 14, in
witaj()
TypeError: 'NoneType' object is not callable
Udało sie naprawić problem . Mianowic potrzebny był restart Ide. Ciekawe ze się tak program pogubił .Często sie tak zdarza?
A mi cały czas nie działa, restartowałem wielokrotnie...
@@airzell7987 W mojej opinii w tym temacie trzeba uważać na szczegóły, ja miałem (chyba) ten wyjątek gdy w funkcji dekoratora zwróciłem wywołanie wrapper'a(zamiast return wrapper to zrobiłem return wrapper()).
Print(decorator(hello)())
wyrzuca na końcu None.
funkcja wrapper nic nie zwraca.
Jak w takim przypadku temu zapobiec ? Owszem, decorator(hello)() nie wyrzuca none, ale przy print juz pojawia sie problem.
Super! Dzięki!
Dobre wykłady.
Wrapper po angielsku to raper, a nie rejper.
wrapper czyta się "raper" nie 'wrejper'
Mam problem ze zrozumieniem umiejscowienia nawiasów () oraz kiedy należy, a kiedy nie należy ich dawać. Jakby ktoś mógł mi pomóc to zrozumieć byłbym wdzięczny. Kolejna sprawa, to kod napisany niemal tak samo jak na filmie, ale z dodaniem nawiasu do wrapper(). Działa tak samo:
def decorator(func):
def wrapper():
print("-----")
func()
print("-----")
return wrapper()
def hello():
print("Hello World")
decorator(hello)
OUTPUT:
-----
Hello World
-----
przez dodanie nawiasów na końcu funkcji dodajesz tak jakby jej wywołanie (to żeby zadziałała), a bez tylko przypisujesz ta funkcje bez wywołania(działania)
Próbowałem udekorować funkcję, która przyjmuje jakieś argumenty (dodawanie a + b), to wyskakiwał błąd, że "wraper() takes 0 positional arguments but 2 were given" . Zmodyfikowałem i działa. Czy to poprawny sposób?
def decorator(func):
def wraper(*args):
print('--------')
func(*args)
print('--------')
return wraper
def hello():
print("Hello world")
hello = decorator(hello)
hello()
@decorator
def suma(a, b):
print(a + b)
suma(2, 8)
def decorator(func):
def wrapper(x,y):
print("------")
func(x,y)
print("------")
return wrapper
@decorator
def wpisz(x,y):
print(x+y)
To rozwiązało problem
A dzięki własnie we flasku widzę to jest.
zawijanie()
slabo ;)