Bu yazıda, Python’un dahili fonksiyonlarından biri olan any() fonksiyonunu keşfedeceğiz. any() fonksiyonu, bir tekrarlanabilir(iterable) nesne üzerindeki değerleri kontrol etmek ve en az bir değerin doğru (True) olduğunu belirlemek için kullanılır. Eğer tekrarlanabilir(iterable) nesne içinde hiçbir öğe True değilse veya tekrarlanabilir nesne boş ise, any() fonksiyonu False değerini döndürür.
Bu yapısıyla esasında all() fonksiyonu ile benzerlik gösteriyor. all() tüm öğelerin True olmasını gerektiriyordu, any() fonksiyonunda ise herhangi bir değerin True olması durumunda True döndürüyor.
nums = [0, 0, 1, 0] sonuc = any(nums) print(sonuc)
Çıktı:
True
Bu örnekte, nums adında bir liste tanımlanmıştır. Liste içerisinde tek bir eleman değeri dahi True olunca any() fonksiyonu True değerini döndürür.
nums2=[0, 0, 0, 0] sonuc2 = all(nums2) print(sonuc2)
Çıktı:
False
Bu örnekte ise, nums2 adında bir liste tanımladık ve any() fonksiyonunda liste içerisindeki tüm elemanların değeri False olduğunda False değerini alacaktır.
Peki bu fonksiyonu hangi durumlarda kullanabiliriz? Aklınıza örnek senaryolar geliyor mu?
Ben bir kaç örnek senaryo paylaşayım, siz de aklınıza gelen ya da üzerinde çalıştığınız projelerden örnek senaryolar var ise ve yorumlarda paylaşırsanız ortak vizyonumuzun gelişmesine katkıda bulunacaktır.
any() Fonksiyonu ile Proje Geliştirme Örnekleri
e-Ticaret Sepet Kontrolü
e-Ticaret uygulamalarında bir ürünün satın alınabilmesi için stokta en az bir ürün olması gerekir. Daha önce all() fonksiyonunda benzer bir örnek senaryo incelemiş ve stokta olmayan ürünü satışa vermemek için önlemimizi almıştık.
Ama gerçek hayat projelerinde tüm olası durumları düşünmemiz gerekir. Eğer stokta tek bir adet kalmış olan ürünü aynı anda iki kullanıcı sepetlerine eklemişler ise ve biri satın almayı gerçekleştirdiyse diğer kullanıcının sepetindeki ürünün stoku “0”a düşmüş olacaktır. Stoku olmayan ürünü ödeme adımına göndermemiz gerekir. Bunun için any() fonksiyonunu kullanarak, kullanıcının sepetinde stokta olmayan ürün olup olmadığını kontrol etmeliyiz.
# ETİCARET SEPET KONTROLÜ ÖRNEK SENARYOSU def sepet_durumu(urunler): return any(urun['stok_adedi'] > 0 for urun in urunler) # Sepetteki ürünler urunler = [ {'urun_adi': 'Ürün 1', 'stok_adedi': 5}, {'urun_adi': 'Ürün 2', 'stok_adedi': 0}, {'urun_adi': 'Ürün 3', 'stok_adedi': 10} ] def odeme_fonksiyonu(sepet): print("Tüm ürünleriniz stokta mevcut. Ödemeyi gerçekleştirebilirsiniz") if sepet_durumu(urunler): odeme_fonksiyonu(urunler) else: print("Sepetinizde stokta olmayan ürünler var!")
Çıktı:
Tüm ürünleriniz stokta mevcut. Ödemeyi gerçekleştirebilirsiniz
Şifre Doğrulama
Bir web uygulaması geliştirdiğinizi varsayalım. Kullanıcıların şifreleri ne kadar kompleks olursa güvenlik seviyesi o kadar yüksek olur. Örneğin kullanıcının şifresini belirlerken en az bir büyük harf içermesi gerektiğini kontrol edelim:
# ŞİFRE KONTROLÜ ÖRNEK SENARYOSU # Kullanıcıdan bir şifre iste sifre = input("Lütfen bir şifre giriniz: ") # Şifrenin herhangi bir karakterinin büyük harf olup olmadığını kontrol et if any(x.isupper() for x in sifre): # Eğer büyük harf varsa, şifrenin güvenli olduğunu belirt print("Şifrenizde en az 1 tane büyük harf mevcut. Şifreniz güvenli teşekkür ederiz.") else: # Eğer büyük harf yoksa, şifrenin en az bir tane büyük harf içermesi gerektiğini belirt print("Şifreniz en az bir tane büyük harf içermelidir.")
Çıktı:
Lütfen bir şifre giriniz: Bs9W87 Şifrenizde en az 1 tane büyük harf mevcut. Şifreniz güvenli teşekkür ederiz.
Tabii ki gerçek hayat uygulamalarında daha kompleks beklentiler ve çözüm getiren kodlar olacaktır ama burada sadece fonksiyonun kullanımına örnek vermek açısından her seviyeye uygun temel örnekler verdiğimizi unutmayın!
Dosya Upload
Bir web uygulaması geliştirdiğinizi düşünelim. Kullanıcının dosya yüklemesine izin veren bir iş başvurusu sayfanız var, ama siz art niyetli kişilerin CV yerine zararlı kodlar içeren dosyalar yüklemesini önlemek istiyorsunuz. Dolayısıyla sadece belirli uzantılara sahip dosyaların yüklenebilmesi için bir kontrol gerçekleştirebilirsiniz.
# Dosya uzantılarını kontrol etme gonderilen_dosyalar = ["ozgecmis.pdf", "cv.docx", "script.py"] uygun_dosyalar = (".docx", ".doc", ".pdf") if any(not dosya.lower().endswith(uygun_dosyalar) for dosya in gonderilen_dosyalar): print("Dosyanız uygun formatta değil") else: print("Tüm dosyalar uygun formatta. Başvurunuz için teşekkür ederiz")
Çıktı:
Dosyanız uygun formatta değil
Metin İşlemleri
Bildiğiniz gibi metinler de karakterlerden oluşan dizilerdir. Dolayısıyla metinleri de bir dizi olarak any() fonksiyonunun parametresi olacak şekilde kullanabiliriz. Örneğin verilen bir kelimenin palindrom olup olmadığını kontrol etmek istediğimizi varsayalım.
Bir kelimenin palindrom olması, onun ters çevrildiğinde de aynı kalması anlamına gelir. Örneğin, “kayak”, “madam” gibi kelimeler palindrom’dur.
Peki bir kelimenin palindrom olup olmadığını kontrol etmek için, any() fonksiyonunu nasıl kullanabiliriz?
# METİN İŞLEMLERİ ÖRNEK SENARYOSU def palindrom_mu(kelime): # Kelimenin uzunluğunu bulalım uzunluk = len(kelime) # Kelimenin yarısına kadar olan kısmını alalım ilk_yarisi = kelime[:uzunluk//2] # Kelimenin yarısından sonraki kısmını ters çevirelim ikinci_yarisini_cevir = kelime[uzunluk-1:uzunluk//2-1:-1] # İki parçayı karşılaştırıp, herhangi bir harfinin farklı olup olmadığını kontrol edelim return not any(x != y for x, y in zip(ilk_yarisi, ikinci_yarisini_cevir)) # Sonuçları yazdıralım print(palindrom_mu("kayak")) # True print(palindrom_mu("python")) # False
Çıktı:
True
False
Sunucu Kontrolü
Bir web sitesinin çalışıp çalışmadığını kontrol etmek için, requests kütüphanesini kullanarak web sitesine bir istek (request) gönderip, dönen yanıtın (response) durum kodunu (status code) kontrol edebiliriz. Durum kodu 200 ise, web sitesi çalışıyordur. Durum kodu 200 dışında bir değer ise, web sitesi çalışmıyor veya bir sorun vardır.
Bu senaryoda any() fonksiyonunu şöyle kullanabiliriz:
# SUNUCU KONTROLÜ ÖRNEK SENARYOSU import requests def calisiyor_mu(url): try: # Web sitesine bir istek gönder yanit = requests.get(url) # Yanıtın durum kodunu al kod = yanit.status_code # Durum kodunun 200 olup olmadığını kontrol et return any(kod == x for x in [200]) except requests.exceptions.RequestException as e: return False # Örnek kullanım print(calisiyor_mu("https://www.python.org/")) # True print(calisiyor_mu("https://www.buwebsitesicalismiyor.com/")) # False
Çıktı:
True
False
Burada yer alan örnek kodları çalıştırarak sonuçlarını görmek için; https://replit.com/@ObenSEVEN/any-Fonksiyonu
Bağlantıda Kalalım