-
Notifications
You must be signed in to change notification settings - Fork 83
Dekoratoriai I
Dekoratoriai priima funkcijas, prie tų funkcijų prideda papildomą funkcionalumą, ir grąžina rezultatą. Dekoratorius yra šiek tiek sudėtinga perprasti, ir galbūt praktikoje patiems niekada neprireiks rašyti savo dekoratoriaus. Tačiau jų veikimo principą suprasti reikia todėl, kad su jais nuolat susidursime įvairiuose Python framework'uose. Tam, kad lengviau suprasti dekoratorius, pravartu susipažinti su higher order functions (aukštesnio rango funkcijos?)
Primityvus pavyzdys:
Turime funkciją, kuri grąžina tekstą:
def returns_string(some_string):
return some_string
Taip pat naudojame f-ją, kuri į parametrus priima kažkokį tekstą ir šalia jo funkciją:
def returns_upper_string(text, func):
if type(text) != str:
return 'input must be a type of string'
some_text = func(text)
return some_text.upper()
f-ja patikrina, ar gautas parametras yra string tipo ir grąžina rezultatą visomis didžiosiomis raidėmis.
print(returns_upper_string('higher order functions!', returns_string))
HIGHER ORDER FUNCTIONS!
Tai yra vadinamoji higher order function, jai kaip antras parametras tinka bet kokia funkcija, kuri grąžina tekstą. Pvz.:
def returns_reversed_string(string):
return string[::-1]
print(returns_upper_string('higher order functions!', returns_reversed_string))
#!SNOITCNUF REDRO REHGIH
Šiuo atveju sukūrėme dar vieną funkciją, kuri veikia analogiškai pirmąjai, tik tekstą grąžina atvirkščiai. Pasiūlius ją aukštesnio rango funkcijai, ji ją puikiai priėmė, bei nuo savęs pridėjo papildomo funkcionalumo - ALL CAPS :)
Dabar pamėginsime analogišką rezultatą išgauti rašant dekoratorių:
def upper_decorator(func):
def wrapper(our_text):
if type(our_text) != str:
return 'input must be a type of string'
some_text = func(our_text)
return some_text.upper()
return wrapper
Kaip matome, dekoratorius rašomas labai panašiai, kaip ir mūsų aukštesnio rango funkcija, tik jos turinys "suvyniojamas" į apvalkalą (wrapper). Į dekoratoriaus parametrus dedame funkciją, kurią jis "apgaubs". Wrapper parametruose - tos funkcijos parametrai.
Parašius dekoratorių, python mums leidžia "apvilkti" savo funkcijas naudojant tokią sintaksę:
@upper_decorator
def returns_string(some_string):
return some_string
@upper_decorator
def returns_reversed_string(string):
return string[::-1]
ir paskui ją labai paprastai iškviesti:
print(returns_string('Decorator!'))
print(returns_reversed_string('Decorator!'))
# DECORATOR!
# !ROTAROCED
Praktikoje savo dekoratorių rašymas menkai tikėtinas, tačiau jie labai paplitę pvz. backend'o framework'uose, tokiuose, kaip Django arba Flask. Pvz.:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == "__main__":
app.run()
Šiuo atveju nepasimesime ir suprasime, kad mūsų funkciją hello_world gaubia Flask'o modulyje įrašytas dekoratorius route.
© Donatas Noreika ir Jotautas Treigys
Dekoratoriai
Iteratoriai ir generatoriai
RegEx
Pillow
NumPy
Pandas
- Pandas I
- Užduotys I
- Atsakymai I
- Pandas II
- Užduotys II
- Atsakymai II
- Pandas III
- Užduotys III
- Atsakymai III
Seaborn
Mašininis mokymasis
- 1 Tiesinės regresijos modelis
- 1 Užduotis
- 1 Atsakymas
- 2 Modeliai - klasifikatoriai
- 2 Užduotis
- 2 Atsakymas
- 3 Modeliai praktikoje
- 3 Užduotis (atnaujinta), atsakymas
- 3 Užduotis
- 3 Atsakymas (kodas su komentarais)
Requests, JSON, API
Web Scraping (Beautiful Soup)
Duomenų bazės
- SQL 1
- Užduotys
- Atsakymai
- SQL 2
- Užduotys
- Atsakymai
- SQL 3
- Užduotys
- Atsakymai
- SQL 4
- Užduotis
- SQL per Python
- Užduotis
- ORM 1
- Užduotys
- ORM 2
- Užduotis
- Atsakymas
Flask
- Įžanga
- Užduotys
- I dalis
- Užduotis
- I dalies kodas (atsakymas)
- II dalis
- Užduotis
- Atsakymas (kodas)
- III dalis
- Užduotis
- Atsakymas
- IV dalis
- Užduotis
- Atsakymas
- Flask Many2one, CRUD
- Flask One2many, many2many CRUD
- Flask: REST API kūrimas
- Flask: API su One2many (kodas)
- Flask: vartotojai
- Flask: nuotraukos pridėjimas, admin puslapis, puslapiavimas
- Flask: password reset, error pages
- Flask: projekto sutvarkymas
- Flask diegimas į serverį
Django
- 1. Įžanga, Modeliai
- 2. Administratoriaus svetainė
- 3. Šablonai
- 4. Views
- 5. Puslapiavimas, Paieška, Nuotraukos
- 6. Autorizacija
- 7. Vartotojai II, HTML laukai
- 8. Registracija, Formos
- 9. Vartotojo profilis
- 10. Create, Update, Delete rodinių klasės
- 11. Vertimai
- Užduotis: Autoservisas
- Biblioteka: kodas iki 6-tos dalies
- Biblioteka: kodas nuo 6-tos dalies
- Django diegimas į serverį
- Django diegimas į serverį 2
Django REST
Odoo
- Kurso programa: projektų valdymas
- 1 pamoka
- 2 pamoka
- 3 pamoka
- 4 pamoka
- 5 pamoka
- 6 pamoka
- 7 pamoka
- 8 pamoka
- 9 pamoka
Linux