Aktywne Wpisy
Bloodwyn55a +72
Cześć Mirki, chciałbym opisać sytuację na prywatnym parkingu zarządzanym przez firme IT Parking sp. z o.o. i jednocześnie przestrzec przed ich praktykami, może to uchroni któregoś z Was przed mandatem i kopaniem się z koniem potem.
Ps. Wiem, że zielonka ale siedzę tu z Wami na innym koncie od 10 lat także spokojnie ;) Jedynie chcę pozostać anonimowy.
Tl;dr: Firma wystawiła mi "Dodatkową Opłatę Parkingową" za korzystanie z ich parkingu, pomimo posiadania
Ps. Wiem, że zielonka ale siedzę tu z Wami na innym koncie od 10 lat także spokojnie ;) Jedynie chcę pozostać anonimowy.
Tl;dr: Firma wystawiła mi "Dodatkową Opłatę Parkingową" za korzystanie z ich parkingu, pomimo posiadania
zdjecie_z_wenszem +994
1. program natrafia na welcome('Marek') i idzie do tej funkcji
2. przy def welcome(name) jest dekorator, więc wykonuje się funkcja deko(welcome)
3. deco(welcome) zwraca niewywołany wrapper do pierwotnego wywołania welcome('Marek')
4. welcome('Marek') zamienia się (?) na wrapper('Marek') i drukuje się func(name.upper())
Ma to sens?
def deco(func):
....def wrapper(name):
........func(name.upper())
....return wrapper
@deco_
def welcome(name):
....print('Hello,', name)
welcome('Marek')
#python #naukaprogramowania
jeśli zapisałbyś sobie ten kod w pliku dekorator.py i dodał printa przed def wrapper:
def deco(func):
....print("deco called")
....def wrapper(name):
........func(name.upper())
....return wrapper
@deco
def welcome(name):
....print("hello", name)
i w replu zaimportujesz ten plik dekorator.py a następnie wykonasz
welcome("Marek")
:deco called
hello MAREK
czyli wykonało się coś takiego:
welcome = deco(welcome)
i od tego momentu@hyzya17nwf: bzdura. nie wiem co to jest ten "import time" bo spotykam sie z takim okresleniem pierwszy raz, ale dekorator wykonuje sie w momencie jego wywolania a nie w momencie importu. Sek w tym ze moment jego wywolania nie nastepuje w momencie wywolania dekorowanej funkcji / metody / klasy tylko w momencie dekorowania funkcji / metody / klasy. np.:
from dekorator import deco
def main():
deco(welcome)("Marek")
nie jest dokladnym przelozeniem uzycia aliasu. dokladnie wyglada to tak:
welcome = deco(welcome)
wiec doskonale widac skad sie wzielo "wywolanie podczas import time" - po prostu wywolujemy funkcje dekorujaca w tym konkretnym miejscu kodu. a potem juz dokladnie w ten sam sposob jak w przypadku uzycia aliasu (@) mozesz wywolac funkcje
welcome
:welcome("Marek")
welcome
i przypisuje jej funkcjedeco..wrapper
w ktorej atrybutfunc
ma wartosc oryginalnej funkcjiwelcome
(czyli jakies callable).Dzięki za pomoc. Dopiero teraz uświadomiliście mi, że samo użycie
@deco
wystarczy do wywołania funkcji dekorującej i zwrócenia nieaktywnego wrappera, a funkcja którą się dekoruje nie musi być nawet uruchomiona (╯°□°)╯︵ ┻━┻