2.12. Döngüler¶
Bir döngü, aynı kod bloğunu tekrar tekrar çalıştırır. Python’ın iki biçimi vardır: bir koşul doğru kaldığı sürece devam eden while ve bir dizinin öğeleri arasında gezen for.
while bir koşulu test etmeye devam eder; for bir diziyi tükenene kadar gezer.¶
2.12.1. while döngüleri¶
Bir while döngüsü, her yinelemeden önce koşulunu test eder ve test yanlış olana kadar gövdeyi çalıştırır:
count = 0
while count < 5:
print(count)
count += 1
Çıktı:
0
1
2
3
4
Koşul başlangıçta doğruysa ve hiçbir zaman yanlış olmazsa, döngü sonsuza kadar çalışır. while True: bir ana döngü için standart deyimdir ve açıkça break ile çıkılır:
while True:
step()
if done():
break
2.12.2. for döngüleri¶
Bir for döngüsü, bir yinelenebilirin öğeleri arasında gezer – bir liste, demet, dize, bayt, sözlük veya yinelemeyi destekleyen başka herhangi bir şey:
for fruit in ["apple", "banana", "cherry"]:
print(fruit)
Çıktı:
apple
banana
cherry
Aynı şekil, her öğenin tek karakterlik bir dize olduğu bir dizede de çalışır:
for letter in "OpenMV":
print(letter)
Çıktı:
O
p
e
n
M
V
Bir sözlüğü doğrudan yinelemek, eklenme sırasıyla anahtarlarını verir:
for key in {"a": 1, "b": 2}:
print(key)
Çıktı:
a
b
Her geçiş, döngü değişkenini (fruit, letter, key) bir sonraki öğeye bağlar. Döngü bittikten sonra değişken, son yinelemedeki değeri korur.
2.12.3. range¶
Sayısal bir aralık üzerinde döngüler için range() kullanın:
range(stop)– 0, 1, …, stop - 1.range(start, stop)– start, start + 1, …, stop - 1.range(start, stop, step)– özel bir adımla (negatif değerler geriye doğru sayar).
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 8, 2): # 2, 4, 6
print(i)
for i in range(10, 0, -1): # 10, 9, ..., 1
print(i)
range() değerleri tembel olarak üretir – bellekte bir liste oluşturmaz. Gerçek bir list elde etmek için onu sarın: list(range(10)).
2.12.4. enumerate¶
Döngünün hem dizine hem de öğeye ihtiyacı olduğunda, enumerate() (index, item) çiftleri verir:
for i, name in enumerate(["a", "b", "c"]):
print(i, name)
# 0 a
# 1 b
# 2 c
İkinci bir argüman geçirerek dizini sıfırdan farklı bir değerden başlatın: enumerate(items, start=1).
2.12.5. zip¶
İki (veya daha fazla) yinelenebiliri eşzamanlı olarak gezmek için zip() kullanın. Her konum için bir demet verir ve en kısa girdide durur:
names = ["alice", "bob", "carol"]
scores = [88, 92, 70]
for name, score in zip(names, scores):
print(name, score)
Çıktı:
alice 88
bob 92
carol 70
2.12.6. := ile satır içi atama¶
Walrus operatörü :=, aynı zamanda bir ifade olan bir atamadır. Bir adı bağlar ve aynı anda aynı değere değerlendirilir. Bir while döngüsünde bu, yaygın “oku, kontrol et, gövde” desenini tek satırda toplar:
# without walrus
value = next_value()
while value is not None:
process(value)
value = next_value()
# with walrus
while (value := next_value()) is not None:
process(value)
İki biçim de aynı işi yapar. Atamanın tekrarı okunabilirliği gerçekten bozduğunda := operatörüne başvurun; sırf zekice görünmek için başvurmayın. İfadeyi belirsizlikten korumak için çoğu konumda parantezler gereklidir.