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