Python'un any() Fonksiyonu Ne Yapar?
Python'un any() yerleşik fonksiyonlarından biridir. yinelenebilir bir nesneyi, örneğin bir listeyi veya demeti kabul eder ve yinelenebilir içindeki en az bir değer doğruluk değeri taşıyorsa True döndürür. Doğruluk değeri taşıyan (truthy) bir değer, bool() ile Boole'a dönüştürüldüğünde True olarak değerlendirilir. Yinelenebilirdeki tüm değerler yanlış (falsy) ise, any() False döndürür:
print(any([True, False, False, True]))
print(any([False, False, False, False]))
print(any([0, 0, 5, 0]))
True
False
True
Yinelenebilir, Boole değerleri veya diğer nesneleri içerebilir; çünkü tüm nesneler Boole'a dönüştürüldüğünde True ya da False olarak değerlendirilir. Üçüncü örnekte liste dört tam sayı içerir. 0 tamsayısı yanlış (falsy) kabul edilir, ancak sıfır olmayan tüm sayılar doğrudur (truthy). Doğru ve yanlış değerler arasındaki farkı daha iyi anlamak için Python mantıksal operatörleri hakkındaki bu blog yazısını okuyun.
Yinelenebilir boşsa, boş bir yinelenebilirde doğruluk değeri taşıyan hiçbir değer olmadığı için any() False döndürür:
print(any([]))
False
Bir sonraki bölüm, any()'nin nasıl çalıştığını daha derinlemesine inceler.
any() Nasıl Çalışır?
Yerleşik any() bağımsız değişken olarak herhangi bir yinelenebiliri kabul eder. Yinelenebilir, Python'un üzerinde döngü kurabildiği herhangi bir veri yapısıdır.
Şu demeti düşünün:
an_iterable = ("", 0.0, "DataCamp", False, [])
Demet, farklı türlerde çeşitli nesneler içerir. Bu nesnelerden birkaçı yanlıştır (falsy):
- Boş dize
"" - Ondalıklı sayı
0.0 - Boole
False - Boş liste
[]
Bu nesneler, bool()'a gönderildiğinde False olarak değerlendirildikleri için yanlıştır (falsy).
Boş olmayan "DataCamp" dizesi doğrudur (truthy).
En az bir öğenin doğru olup olmadığını kontrol etmenin basit bir yolu bir for döngüsü kullanmaktır:
def check_if_contains_truthy(data):
output = False
for item in data:
if item:
output = True
return output
print(check_if_contains_truthy(an_iterable))
True
Ancak bu verimsizdir; çünkü fonksiyonun yalnızca en az bir doğru değerin olup olmadığını kontrol etmesi gerekir. İlk doğru değeri bulduğunda, yinelenebilirin geri kalan öğelerini kontrol etmeye devam etmesine gerek yoktur. Fonksiyon, ilk doğru değeri bulur bulmaz dönecek şekilde değiştirilebilir:
def check_if_contains_truthy(data):
for item in data:
if item:
return True
return False
print(check_if_contains_truthy(an_iterable))
True
return ifadesi fonksiyonun yürütülmesini durdurur. Bu nedenle, fonksiyon ilk doğru değeri bulduğunda True döndürür ve yinelenebilir üzerinde yinelemeye devam etmez. Fonksiyon yalnızca, for döngüsü yinelenebilirdeki tüm öğeler üzerinde dolaşır ve hiçbirinin doğru olmadığı durumda False döndürür.
Yerleşik any() benzer bir deseni izler ve ilk doğru değeri bulduğunda kısa devre yapar (short-circuit). Bu tembel değerlendirme (lazy evaluation) gereksiz işlemleri engeller ve performansı artırır. Python'un any() fonksiyonu, yukarıda gösterilen fonksiyonun daha verimli bir sürümüdür. Bu iyileştirilmiş verimlilik, bir deyimin Python tarafından yürütülmesinin ne kadar sürdüğünü ölçen timeit modülündeki timeit() fonksiyonu kullanılarak doğrulanır:
from timeit import timeit
print("Execution time for 'check_if_contains_truthy()'")
print(
timeit(
"check_if_contains_truthy(an_iterable)",
number=10_000_000,
globals=globals(),
)
)
print("Execution time for 'any()'")
print(
timeit(
"any(an_iterable)",
number=10_000_000,
globals=globals(),
)
)
Execution time for 'check_if_contains_truthy()'
0.6335119580035098
Execution time for 'any()'
0.39488654200249584
timeit() fonksiyonunun ilk bağımsız değişkeni, yürütülecek deyimi içeren bir dizedir. İkinci bağımsız değişken, deyimin kaç kez çalıştırılacağını belirler. Bu örnekte, anlamlı süreler elde etmek için her iki deyim de 10.000.000 kez yürütülür. Son bağımsız değişken, genel değişkenleri timeit() fonksiyonuna geçirir.
Python'un any() fonksiyonu, check_if_contains_truthy()'den daha hızlıdır. Bir yinelenebilirde en az bir doğru değer olup olmadığını bulmak için any() kullanmak, for döngüsü kullanmaktan daha Pythonik ve verimlidir.
any() için Kullanım Senaryoları
Python'un any() fonksiyonu için bazı kullanım senaryolarına bakalım.
En az bir kullanıcı girdisi geçerli mi kontrol edin
Bir liste veya demette toplanmış bir dizi kullanıcı girdisini düşünün. Program, girdilerden en az birinin geçerli olup olmadığını, örneğin boş olmayan bir dize olup olmadığını kontrol etmek isteyebilir:
user_inputs = ["", "10.99", ""]
if any(user_inputs):
print("At least one valid input present")
# Rest of code...
else:
print("There are no valid inputs")
At least one valid input present
Dizelerden biri boş olmadığından, any() True döndürür ve if bloğundaki kod yürütülür.
En az bir dosya var mı kontrol edin
Yerleşik any(), bir dosya adı listesindeki en az bir dosyanın bir dizinde mevcut olup olmadığını kontrol etmek için kullanılabilir:
from pathlib import Path
files = ["article.md", "use_any.py", "scratch.py", "test_file.txt"]
cwd = Path.cwd()
# Create a test file to test code
Path("test_file.txt").write_text("This is a test file")
if any(Path(file).exists() for file in files):
print("At least one of the files exists")
# Rest of code…
else:
print("None of the files exist")
At least one of the files exists
Kod, geçerli çalışma dizinini pathlib modülü ve Path.cwd() kullanılarak alır. Bu kodun kolayca test edilebilmesi için çalışma dizininde test_file.txt adlı bir dosya oluşturur. Python'un any() fonksiyonu, dosya adlarından en az birinin geçerli çalışma dizininde mevcut olup olmadığını kontrol etmek için kullanılır.
Bir yinelenebilirden öğe filtreleme
Yerleşik any() fonksiyonu bir üreteç ifadesi ile bağımsız değişken olarak kullanılarak bir yinelenebilirden öğeler de filtrelenebilir. Bu örnekte, any() bir kişinin yaşının 18'in altında olduğu en az bir girdi olup olmadığını görmek için bir sözlük listesini tarar:
records = [
{"name": "Sarah", "age": 23},
{"name": "Jake", "age": 30},
{"name": "Paul", "age": 17},
]
if any(record["age"] < 18 for record in records):
print("There's at least one minor.")
else:
print("All records are adults.")
There's at least one minor.
Üreteç ifadesi, her sözlüğün "age" anahtarına karşılık gelen değere bağlı olarak True veya False üretir. Üreteç ifadesi yinelenebilir olduğu için any() içinde kullanılabilir.
Python'un any() fonksiyonunda tembel değerlendirmeye yeniden bakış
Önceki örnek, any()'nin tembel değerlendirildiğini göstermek için de kullanılabilir. Sözlük listesindeki şu değişikliği düşünün:
records = [
{"name": "Sarah", "age": 23},
{"name": "Jake", "age": 30},
{"name": "Paul", "age": 17},
{"name": "Jill"},
]
if any(record["age"] < 18 for record in records):
print("There's at least one minor.")
else:
print("All records are adults.")
There's at least one minor.
records içindeki dördüncü sözlükte "age" anahtarına sahip bir öğe yoktur. Ancak, bu öğe için "age" karşılık gelen değeri almaya çalışırken bir hata oluşmaz; çünkü any() süreçte daha önce doğru bir değer bulmuştur. Fonksiyon, ilk doğru değere rastladığında kısa devre yapar.
Sözlüğünde "age" anahtarı eksik olan kayıt, yaşı 18'in altında olan herhangi bir öğeden önce gelirse kod bir KeyError yükseltir:
records = [
{"name": "Jill"},
{"name": "Sarah", "age": 23},
{"name": "Jake", "age": 30},
{"name": "Paul", "age": 17},
]
if any(record["age"] < 18 for record in records):
print("There's at least one minor.")
else:
print("All records are adults.")
Traceback (most recent call last):
...
if any(record["age"] < 18 for record in records):
~~~~~^^^^^^
KeyError: 'age'
Bu örnek, Python'un any() fonksiyonunu kullanırken kısa devre davranışını göstermek için tasarlanmıştır. Eğer kod, "age" anahtarı olmayan öğeler için istisna yükseltmemeliyse bir alternatif vardır. Sözlük değerine köşeli parantez gösterimiyle erişmek yerine, varsayılan değerle .get() sözlük yöntemi kullanılabilir. Varsayılan davranışın yaşı olmayan kayıtların reşit olmadığı varsayımı olması durumunda, if ifadesi aşağıdaki sürümle değiştirilebilir:
if any(record.get("age", 18) < 18 for record in records):
# ...
Kod, yaşı olmayan herhangi bir kaydın reşit olmadığını varsaymalıysa, varsayılan değerin 18'den küçük bir değer olması gerekir.
Python: any() ve all() Karşılaştırması
Python'un any() fonksiyonunun bir eşlikçisi vardır: all(). Bu yerleşik fonksiyon da bir yinelenebiliri kabul eder ve tüm yinelenebilir öğeler doğruysa True döndürür.
Kullanıcı girdilerini doğrulamak için bu eğitimde daha önce yer alan bir örneği ele alın. Uygulama en az bir geçerli girdi gerektiriyorsa Python'un any() fonksiyonu kullanışlıdır. Ancak tüm kullanıcı girdilerinin geçerli olması gerekiyorsa all() kullanılabilir:
user_inputs = ["", "10.99", ""]
if any(user_inputs):
print("At least one valid input present")
# Rest of code...
else:
print("There are no valid inputs")
if all(user_inputs):
print("All inputs are valid")
# Rest of code...
else:
print("Not all inputs are valid")
At least one valid input present
Not all inputs are valid
Ancak kullanıcı girdilerindeki dizelerin tümü boş değilse, all() True döndürür:
user_inputs = ["5.99", "10.99", "19.99"]
# …
At least one valid input present
All inputs are valid
Benzer şekilde, yerleşik all() da tembel değerlendirilir. Fonksiyon, ilk yanlış değeri bulduğunda kısa devre yapar.
Sonuç
Python'un any() fonksiyonu, yinelenebilir bir yapıdaki öğelerden herhangi birinin doğru olup olmadığını bulur. Fonksiyon, yinelenebilirde en az bir öğe True ise ya da Boole'a dönüştürüldüğünde True olarak değerlendiriliyorsa True döndürür. Aynı çıktıya bir döngü ile de ulaşılabilse de, bu yerleşik fonksiyon daha okunaklı ve daha verimli bir çözüm sunar.
Malta Üniversitesi’nde lisans düzeyinde Fizik ve Matematik okudum. Ardından Londra’ya taşındım ve Imperial College’da Fizik alanında doktoramı tamamladım. İnsan retinasını görüntülemek için yeni optik teknikler üzerine çalıştım. Şimdi Python hakkında yazmaya, Python’u anlatmaya ve Python öğretmeye odaklanıyorum.


Python programlarında yaygın bir gereksinim, bir veri yapısındaki en az bir öğenin
Trueolup olmadığını kontrol etmektir.Bir yinelenebilir üzerinde döngü kurup her öğenin
Trueya daFalseolarak değerlendirilip değerlendirilmediğini kontrol etmek mümkün olsa da, Python'unany()fonksiyonu bu sonuca ulaşmanın daha verimli ve daha Pythonik bir yoludur.Bu eğitim, Python'un yerleşik
any()fonksiyonunu inceler ve bu fonksiyon için çeşitli örnekler ve kullanım senaryoları gösterir.