Wyjaśnienie lekcji
Po tej lekcji będziesz potrafić:
any(), aby wykryć, czy co najmniej jeden warunek jest prawdziwy.all(), aby wymagać prawdziwości każdego warunku.any([]) == False oraz all([]) == True, gdy dane wejściowe mogą być puste.Gdy decyzja zależy od wielu wartości, unikaj zbędnych liczników lub długich łańcuchów or i and.
any(values) jest prawdziwe, jeśli co najmniej jedno wejście jest prawdziwe.all(values) jest prawdziwe, jeśli każde wejście jest prawdziwe.Dane możesz najpierw zamienić na wartości logiczne za pomocą wyrażenia listowego. Ta lekcja celowo używa wyrażeń listowych, które już znasz; wyrażenia generatorowe pojawią się później.
checks = [result == "ok" for result in results]Dla pustego wejścia any([]) jest False, ale all([]) jest True. Matematycznie jest to użyteczne, jednak przepływ wydania zwykle wymaga co najmniej jednego sprawdzenia, zanim zgłosi, że wszystkie sprawdzenia przeszły. Dodaj jawny wymóg niepustości, gdy wymaga tego reguła biznesowa.
alerts = [False, True, False]
print(any(alerts))Wynik:
TrueWystarczy jeden element prawdziwy.
latencies = [42, 90, 110]
within_limit = [value <= 120 for value in latencies]
print(all(within_limit))Wynik:
TrueKażde porównanie jest prawdziwe.
print(any([]))
print(all([]))Wynik:
False
TrueJeśli pusta lista oznacza, że nie wykonano żadnych sprawdzeń, może być potrzebne bool(checks) and all(checks).
responses = [" PASS ", "pass", " FAIL "]
normalized = [value.strip().lower() for value in responses]
print(any([value == "fail" for value in normalized]))Wynik:
TrueNormalizuj przed porównaniem, aby wielkość liter i spacje nie zmieniały decyzji.
| Wymaganie | Sprawdzenie |
|---|---|
| Jedna lub więcej wartości spełnia predykat | any([...]) |
| Każda wartość spełnia predykat | all([...]) |
| Żadna wartość nie spełnia predykatu | not any([...]) |
| Wymagana co najmniej jedna wartość i wszystkie poprawne | bool(values) and all([...]) |
all([]) to True — nie oznacza to, że faktycznie przeprowadzono walidację.any() oznacza „co najmniej jeden”, a nie „dokładnie jeden”.not any(...) z not all(...) — opisują różne sytuacje.