Ders 31: Decorators | Python Decorator Kullanımı | Python ileri seviye fonksiyonlar.
ฝัง
- เผยแพร่เมื่อ 19 ก.ย. 2024
- Merhabalar arkadaşlar bu derste Python'da decorator kullanımına değindik. İlk defa karşılaşacak arkadaşlar için biraz karmaşık bir konsept olabilir. Mümkün olduğunca detaylı incelemeye çalıştım. Umarım faydalı olur hepinize iyi günler dilerim.
Müthiş bir videoydu, teşekkürler :)
Ahmed Faruk Çakmak faydasını gördüğünüze çok sevindim. Kolay gelsin :)
@@pythonagiris5616 İterator ve Generatorlar ile ilgili video gelir mi acaba ? Kanalda varsa da ben bulamadım
import time
def zaman_hesapla(fonk):
def wrapper(*args,**kwargs):
baslangic = time.time()
sonuc = fonk(*args,**kwargs)
bitis = time.time()
print(f"islem {bitis - baslangic} saniye surdu")
#time.sleep(3)
return sonuc
return wrapper
@zaman_hesapla
def kareleri_al(liste):
sonuc = []
for i in liste:
sonuc.append(i * i)
return sonuc
@zaman_hesapla
def kupleri_al(liste):
sonuc = []
for i in liste:
sonuc.append(i ** 3)
return sonuc
@zaman_hesapla
def topla(*args):
time.sleep(1)
return sum(args)
print(kupleri_al(range(1000)))
Anlatım harika sayın hocam, emeğinize sağlık.
Çok teşekkürler hocam, yeni videolarınızı bekliyorum
geç de olsa teşekkür ederim ☺️. Aradan geçen zamanda muhtemelen benden daha fazla bilgi sahibi olmuşsunuzdur :)
@@pythonagiris5616 python dilini bıraktım
Js çalışıyorum artık
Teşekkürler hocam
@@nurullahanas4906 umarım sizin için daha hayırlı olur.
## Yukaridan Asagi Siralama!
#1 Decorator ve Test fonksiyonu ilk basta cagirilmadigi icin calismadi.
#2 Decorator fonksiyonu calisti ve bu fonksiyona, (func) kismindan Test fonksiyonunu Callsiz gonderdi.
#3 Wrapper ici okumaya basladi func() icine Test fonksiyonu () li sekilde eklendi, wrapper cagirilmadigi icin herhangi bir islem yapilmadan, decorator fonksiyonunun sonucu olan return calisti ve Wrapper fonksiyonu Callsiz bir sekilde Ders degiskenine geri donduruldu. Kisacasi Ders Wrapper olmus oldu!
#4 Ders fonksiyonunu() bir sekilde cagirinca Wrapper fonksiyonu devreye girdi ve calisti.
#5 Ilk 'Test fonksiyonu calismadan onceki islemler' yazdirdi
#6 Ikinci olarak Test fonksiyonuna gidip 'Test fonksiyonu calisiyor' yazdirdi
#7 Son olarak 'Test fonksiyonu calistiktan sonraki islemler' yazdirip islemi tamaldi.
Bu konuyu başka bir yerden dinleyip anlamamıştım sonra burdan dinledim ve anladım. Teşekkür ederim çok yardımınız dokundu.
Ders için teşekkürler udemyde paralı derslerden daha iyi bir ders anlatımınız var. Belki ileride PySide(Veya PyQt) dersleri de gelir :)
Output bölümünün kaybolma sebebi ( sizin deyiminizle burası niye kayboluyor dediğiniz yer ) output alanı açıkken sağ köşedeki ayarlara girin oradan "view mode" seçeneğini seçin ve "dock pinned" olanı seçin.. taskbar özellikleri yani
Çok teşekkür ederim :)
Sağ olun var olun hocam emeğinize sağlık.
c'deki fonksiyon pointer'ları gibi bir şey sanırım :)
Video çok güzel olmuş.
Gerçekten çok başarılı bir anlatımınız var, çok yardımcı oldu. Teşekkür ediyorum.
Çok faydali kanal ve çok hoş bir anlatım.T
🤩🤩🤩
allah razı olsun hocammmmmmmm
Gercekten cok guzel bir sekilde anlatmissiniz, tesekkurler
cabaniz icin tesekkurler.. harikasiniz
Normalde corey schafer dan python öğreniyorum baya iyi oda ama açık söylemek gerekirse decorator konusunu corey schafer dan daha iyi ve basit anlatmışssınız.Teşekkürler
Kendisini ben de takip ediyor ve çok beğeniyorum. Planımı ona benzer şekilde oluşturup nasıl daha anlaşılır diye düşünüp örneklerimi belirliyorum. Beğendiğinize çok sevindim :)
@@pythonagiris5616 tarz benziyor zaten aynı konuda oda time.time ile islem yapıp zaman farkını buluyordu :D
ağzına sağlık hocam. kralsın
Teşekkürler iyiki varsınız
Kaan Alp siz de iyi ki varsınız . Çok teşekkür ederim :)
Mükemmel bir video. Teşekkürler
hocam anlatımınız çok net teşekkür ederim benim merak ettiğim neden wrapperi de döndürmek zorundayız biz return wrapper dediğimizde wrapper fonksiyonunun içeriğini göndermiş olmuyor muyuz o return ettiğimiz nereye eşitleniyor çünkü biz wrapperi spesifik olarak çağırmıyoruz. ilk örnetke fonksiyon 2 wrapperin referansı oluyor ama diğer örneklerde bir referans belirlemiyoruz
up
cok faydali bir ders olmus tesekkurler .
aynı zaman hesaplama fonk da return ettiğimiz değeri de bi yerde kullanmıyoruz ama değeri kaybetmemek için onu bi değişkene atamak zorundayız? sebebini veya tuttuğumuz değerin nerede kullanılddığını anlamadım. 26.dk lardan bahsediyorum. 1 önceki kod örneğiyle bi fark göremedim
Çox təşəkkür edirəm, faydalı bir video olub.🙏
Çok faydalandım. Teşekkürler !
O zaman video amacına ulaşmış demektir :) kolay gelsin.
bence zor
Mantığını anladım teşekkür ederim
decoratorun sonunda return wrapper yazma sebebimiz nedir tam olarak pythonda neler oluyor onu okuyunca?
bi nevi nesnelere benziyor sanki. girilen degerler il fonksiyonda işleniyor oradan sonuc döndürüyor..
return ile print arasındaki fark nedir hocam
elinize sağlık
def kareleri_al(liste): fonksiyonu ile def zaman_hesapla(fonk): arasında nasıl bi bağlantı oluyor onu çözemedim..
şimdi diyelim sizin 100 tane fonk var ve gidip hepsinin kaç saniye sürdüğünü öğrenmek istiyorsunuz diyelim hocanın yaptığı ilk zaman_hesapla fonksiyonu ile biz burada bir zaman ölçmesini zaten yapıyoruz 1 tane fonk var ise istediğimiz çok kolay fakat 100 tane var diyelim hepsine teker teker gidip zaman ölçme fonksiyonu yazarsanız ne kadar zaman alıcağını işe yaramaz bir durum olur bir kere zaman hesapla fonk yazdıktan sonra onu yazdığımız bütün fonklarda kullanabiliriz @zaman_hesapla şeklinde fonksiyonun üzerine yazdığımız zaman bu zaman ölçme fonksiyonu otomatik hesaplayıp dışarı size vericektir
örnek
@zaman_hesapla
def kareleri_al(liste):
for i in liste:
print(i*i)
örnek kareleri_Al(liste)
bu kareleri al fonk gidip zaman_hesapla(fonk) içerisinde ki fonk alıcak karelerial(liste) içinde ki liste de def wrapper(*args,**kwargs) içindeki args,kwargs değerlerini alıcaktır. neden args ve kwargs derseniz string olabilir int vesaire vesaire bunları önlemek adına ve isterseniz 100 tane değer girersiniz bunun içerisine
çok iyiydi hocam eliniz sağlık
def decorator(func):
print("operations before the function runs")
func()
print("operations after the function runs")
@decorator
def func2():
print("function works") (7:42-de) wrapper-siz yazmiş olursak yine aynı neticeye varmış olmuyor muyuz?
ulasırsın benım bıldgım paramaetre konun ıcıne gırdıgınde wrapper konuya dahıl olur
satır başına import time yazmak şartmı ben yazmassamda fonksiyonu çalıştırabiliyorum ? olayı nedir .
Daha önceki örneklerin birinde yaptıysanızi kernel onu hatırladığı için sonraki örneklerde yazmasanızda bir kere import ettiğiniz için hata vermiyordur. Restart kernel derseniz ve tekrar denerseniz hata aldığınızı göreceksiniz..
14:40 da neden return yazınca 30 vermedi de print yazınca verdi? Emeğinize sağlık çok teşekkürler videolar için:))
Eğer return olduğunda ekrana yazdırmayı için
print(topla(a,b)) böyle yapması lazim
17.13 deki örnekte kare_fonk tanimlayip zaman hesaplanin icine argüment olarak kareleri_al fonksiyonunu koymussunuz ama tam olarak istediginiz örnegi veremediniz sanirim, cünkü normal kareleri al fonksiyonunu calistirdiniz ve girdiginiz listenin kareleri alindi. Zaman hesaplamasi yapilmadi yani.
Anlatim icin tesekkürler
Orada hafif bir tekrar yapıyorum . Dikkat ederseniz hemen öncesinde kareleri al fonksiyonun üstündeki @zaman_hesapla kısmını silmişim. Onu sildiğim için zaman ölçmüyor. Umarım açıklayabilmişimdir.
hocam fonksiyon calisiyor fakat time foksyonu 0.0 saniye surdu diyor bu hata nerden kaynaklaniyor. Kodum bire bir ayni sizinkiylen
Kodunuzu paylaşırsanız neden 0.0 saniye sürdüğünü bulmak daha kolay olur..
Böyle bir hata aldım .Her şey aynı !
sonuc = fonk(*args, **kwargs)
TypeError: karee_al() missing 1 required positional argument: 'liste'
Merhaba görünüşe göre karee_al fonksiyonunuza liste parametresini göndermemişsiniz. isterseniz kodunuzu paylaşabilirsiniz.
@@pythonagiris5616 bende aynı hatayı alıyorum birebir aynı kodu yazdım :(
wrapper() şeklinde yazıyormuşum bu yüzden hata aldım pardon
4. dakkadaki şeyi hangi vidyoda bahsediyorsun
Ders29:fonksiyonlardan fonksiyon döndürme
hocam yeter ki şişirin kafamı hiç problem değil
anlamadım
@zaman_hesapla her fonksiyonun başına tek tek yazılmak zorunda mı?