Dlaczego python używa pętli' else ' po for I while?

Rozumiem jak działa ta konstrukcja:

for i in range(10):
    print(i)

    if i == 9:
        print("Too big - I'm giving up!")
        break;
else:
    print("Completed successfully")

Ale nie rozumiem, dlaczego else jest tutaj używane jako słowo kluczowe, ponieważ sugeruje, że dany kod działa tylko wtedy, gdy blok for się nie kończy, co jest przeciwieństwem tego, co robi! Bez względu na to, jak o tym myślę, mój mózg nie może płynnie przejść od for do else bloku. Dla mnie, continue lub continuewith byłoby bardziej sensowne (i staram się trenować, aby to czytać jako takie).

I ' m zastanawiasz się, jak programiści Pythona czytają tę konstrukcję w swojej głowie (lub na głos, jeśli chcesz). Może brakuje mi czegoś, co ułatwiłoby rozszyfrowanie takich bloków kodu?

Author: Wolf, 2012-04-02

20 answers

To dziwna konstrukcja nawet dla doświadczonych programistów Pythona. W połączeniu z for-loopami oznacza to w zasadzie " znajdź jakiś element w iterable, w przeciwnym razie, jeśli nie znaleziono żadnego, zrób ...". Jak w:

found_obj = None
for obj in objects:
    if obj.key == search_key:
        found_obj = obj
        break
else:
    print('No object found.')

Ale za każdym razem, gdy widzisz ten konstrukt, lepszą alternatywą jest albo zamknięcie wyszukiwania w funkcji:

def find_obj(search_key):
    for obj in objects:
        if obj.key == search_key:
            return obj

Lub użyć listy:

matching_objs = [o for o in objects if o.key == search_key]
if matching_objs:
    print('Found {}'.format(matching_objs[0]))
else:
    print('No object found.')

Nie jest semantycznie równoważny z pozostałymi dwoma wersjami, ale działa wystarczająco dobrze w krytycznym braku wydajności kod, w którym nie ma znaczenia, czy iterujesz całą listę, czy nie. Inni mogą się nie zgadzać, ale ja osobiście unikałbym używania bloków for-else lub while-else w kodzie produkcyjnym.

Zobacz także [Python-ideas] podsumowanie for...else threads

 318
Author: Björn Lindqvist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 15:22:37

Powszechnym konstruktem jest uruchamianie pętli, dopóki coś nie zostanie znalezione, a następnie wyrwanie się z pętli. Problem polega na tym, że jeśli wyłamię się z pętli lub pętla się skończy, muszę ustalić, który przypadek się wydarzył. Jedną z metod jest utworzenie znacznika lub zmiennej przechowującej, która pozwoli mi wykonać drugi test, aby zobaczyć, jak pętla została zakończona.

Załóżmy na przykład, że muszę przeszukiwać listę i przetwarzać każdy element, aż zostanie znaleziony znacznik, a następnie przestać go przetwarzać. If the flag item is missing then należy podnieść wyjątek.

Za pomocą Pythona for...else construct you have

for i in mylist:
    if i == theflag:
        break
    process(i)
else:
    raise ValueError("List argument missing terminal flag.")

Porównaj to z metodą, która nie używa tego cukru składniowego:

flagfound = False
for i in mylist:
    if i == theflag:
        flagfound = True
        break
    process(i)

if not flagfound:
    raise ValueError("List argument missing terminal flag.")

W pierwszym przypadku {[4] } jest ściśle związana z pętlą for, z którą działa. W drugim Wiązanie nie jest tak mocne, a błędy mogą być wprowadzane podczas konserwacji.

 667
Author: Lance Helsten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-23 05:50:37

Jest znakomita prezentacja Raymonda Hettingera, zatytułowana przekształcanie kodu w piękny, Idiomatyczny Python, w którym krótko omawia historię konstrukcji for ... else. Odpowiednia sekcja to " rozróżnianie wielu punktów wyjścia w pętlach ", zaczynając od 15: 50 i kontynuując przez około trzy minuty. Oto najważniejsze punkty:

  • konstrukcja for ... else została opracowana przez Donalda Knutha jako zamiennik pewnego GOTO zastosowania przypadki;
  • ponowne użycie słowa kluczowego else miało sens, ponieważ "tego użył Knuth, a ludzie wiedzieli, że w tamtym czasie wszystkie [for] Oświadczenia miały if i GOTO pod spodem, i oczekiwali, że else;"
  • z perspektywy czasu powinno się nazywać "bez przerwy" (lub ewentualnie "nobreak"), a wtedy nie byłoby to mylące.*

Więc, jeśli pytanie brzmi: "Dlaczego nie zmienią tego słowa kluczowego?"wtedy Kot Plus Plus prawdopodobnie dał najdokładniejszą odpowiedź - w ten punkt byłby zbyt destrukcyjny dla istniejącego kodu, aby był praktyczny. Ale jeśli naprawdę zadajesz pytanie, dlaczego else został użyty ponownie, cóż, najwyraźniej wtedy wydawało się to dobrym pomysłem.

Osobiście podoba mi się kompromis komentowania # no break in-line wszędzie tam, gdzie else może być mylone, na pierwszy rzut oka, jako należące do pętli. To dość jasne i zwięzłe. Ta opcja dostaje krótką wzmiankę w podsumowaniu, które Bjorn podlinkował na końcu jego odpowiedź:

Dla kompletności, powinienem wspomnieć, że z niewielką zmianą w składnia, Programiści chcący tę składnię mogą ją mieć już teraz:

for item in sequence:
    process(item)
else:  # no break
    suite

* bonusowy cytat z tej części filmu: "tak jak gdybyśmy nazwali lambda makefunction, nikt by nie zapytał:' co robi lambda?'"

 190
Author: Air,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:08

Aby było to proste, można o tym tak myśleć;

  • jeśli napotka polecenie break W pętli for, część else nie zostanie wywołana.
  • Jeśli nie napotka break polecenia w pętli for, zostanie wywołana część else.

Innymi słowy, jeśli iteracja pętli for nie jest "złamana" przez break, zostanie wywołana część else.

 46
Author: Ad Infinitum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-21 11:29:53

Ponieważ nie chcieli wprowadzać nowego słowa kluczowego do języka. Każdy kradnie identyfikator i powoduje problemy z kompatybilnością wsteczną, więc zwykle jest to ostateczność.

 36
Author: Cat Plus Plus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-02 16:20:03

Myślę, że dokumentacja ma świetne Wyjaśnienie else, continue

[...] jest wykonywana, gdy pętla zakończy się poprzez wyczerpanie listy (z for) lub gdy warunek stanie się false( z while), ale nie, gdy pętla zostanie zakończona instrukcją break."

Source: Python 2 docs: Tutorial on control flow

 19
Author: Ayan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-25 11:38:56

Najprostszym sposobem, jaki znalazłem ,aby "uzyskać" to, co zrobił for/else, a co ważniejsze, kiedy go użyć, było skoncentrowanie się na tym, do czego skacze instrukcja break. Konstrukcja For / else jest pojedynczym blokiem. Przerwa wyskakuje z bloku, a więc przeskakuje " nad " klauzulą else. Gdyby treść klauzuli else po prostu podążała za klauzulą for, nigdy nie zostałaby przeskoczona, a więc równoważna logika musiałaby być dostarczona przez umieszczenie jej w klauzuli if. Zostało to już powiedziane, ale nie do końca w tych słowa, Więc może pomóc komuś innemu. Spróbuj uruchomić następujący fragment kodu. Jestem z całego serca za komentarzem "bez przerwy" dla jasności.

for a in range(3):
    print(a)
    if a==4: # change value to force break or not
        break
else: #no break  +10 for whoever thought of this decoration
    print('for completed OK')

print('statement after for loop')
 18
Author: Neil_UK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-05 12:54:02

Przeczytałem coś w stylu:

Jeśli nadal na warunkach, aby uruchomić pętlę, zrób coś, else Zrób coś innego.

 15
Author: pcalcao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-02 16:20:33

Ponieważ część techniczna została dość dużo odpowiedzi, mój komentarz jest tylko w związku z zamieszanie , które produkują to recycled słowo kluczowe.

Będąc Pythonem bardzo wymownym językiem programowania, nadużywanie słowa kluczowego jest bardziej notoryczne. Słowo kluczowe else doskonale opisuje część przepływu drzewa decyzyjnego, "if you can' t do this, (else) do that". To implikowane w naszym własnym języku.

Zamiast tego, używając tego słowa kluczowego z while i for wypowiedzi powodują zamieszanie. Powodem, dla którego nasza kariera programistyczna nauczyła nas, że else oświadczenie znajduje się w drzewie decyzyjnym; jego Zakres logiczny, wrapper, który warunkowo zwraca ścieżkę, którą należy podążać. Tymczasem deklaracje loop mają graficzny, wyraźny cel, aby coś osiągnąć. Cel jest osiągany po ciągłych iteracjach procesu.

if / else wskaż ścieżkę . Pętle podążaj ścieżką, aż " cel " będzie zakończone .

Problem polega na tym, że else jest słowem, które jasno określa ostatnią opcję w warunku. Semantyka tego słowa jest zarówno dzielona przez Python i ludzki język. Ale słowo else w ludzkim języku nigdy nie jest używane do wskazania działań, które ktoś lub coś podejmie po zakończeniu czegoś. Zostanie ona użyta, jeśli w trakcie jej wypełniania pojawi się problem (bardziej jak break ).

Na końcu, słowo kluczowe będzie / align = "left" / Jest jasne, że był to błąd, wyraźniejszy, gdy każdy programista próbuje wymyślić historię, aby zrozumieć jej użycie jak jakieś urządzenie mnemoniczne. Chciałbym, żeby zamiast tego wybrali słowo kluczowe then. Uważam, że to słowo kluczowe idealnie pasuje do tego iteracyjnego przepływu, payoff po pętli.

Przypomina to sytuację, jaką ma jakieś dziecko po każdym kroku składania zabawki: i potem jaki Tata?

 14
Author: 3rdWorldCitizen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-12 18:12:41

Czytam to tak: "gdy iterable jest całkowicie wyczerpana, a wykonanie ma przejść do następnego polecenia po zakończeniu for, zostanie wykonana klauzula else."Tak więc, gdy iteracja zostanie przerwana przez break, nie zostanie ona wykonana.

 7
Author: 0xc0de,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-07 04:32:57

Świetne odpowiedzi to:

  • to które wyjaśniają historię i
  • to daje prawo cytowanie ułatwiające tłumaczenie/zrozumienie.

Moja uwaga pochodzi z tego, co Donald Knuth kiedyś powiedział (Niestety nie mogę znaleźć odniesienia) , że istnieje konstrukcja, w której while-else jest nie do odróżnienia od if-else, mianowicie (w Pythonie): {]}

x = 2
while x > 3:
    print("foo")
    break
else:
    print("boo")

Ma taki sam przepływ (wyłączając małe różnice poziomów) jak:

x = 2
if x > 3:
    print("foo")
else:
    print("boo")

Chodzi o to, że że if-else można uznać za cukier składniowy dla while-else, który ma implicit break na końcu bloku if. Odwrotna implikacja, że pętla while jest rozszerzeniem do if, jest bardziej powszechna (jest to po prostu powtarzane/zapętlone sprawdzenie warunkowe), ponieważ if jest często nauczane przed while. Nie jest to jednak prawdą, ponieważ oznaczałoby to else blokowanie while-else byłoby wykonywane za każdym razem, gdy warunek jest false.

Aby ułatwić Ci zrozumienie pomyśl o tym, że sposób:

BEZ break, return, itd., pętla kończy się tylko wtedy, gdy warunek nie jest już prawdziwy i w takim przypadku else blok również zostanie wykonany raz. W przypadku Pythona for należy wziąć pod uwagę pętle w stylu C for (z warunkami) lub przetłumaczyć je na while.

Kolejna uwaga:

Przedwczesny break, return, itd. inside loop sprawia, że warunek nie może stać się fałszywy, ponieważ wykonanie wyskoczyło z pętli, podczas gdy warunek był prawdziwy i nigdy nie wróć, żeby sprawdzić jeszcze raz.

 7
Author: WloHu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-20 13:37:21

Zgadzam się, to raczej " elif not [condition (s) raising break]".

Wiem, że to stary wątek, ale patrzę teraz na to samo pytanie i nie jestem pewien, czy ktoś uchwycił odpowiedź na to pytanie w sposób, w jaki je Rozumiem.

Dla mnie istnieją trzy sposoby "odczytywania" else W For... else lub While... else stwierdzeniach, z których wszystkie są równoważne, to:

  1. else == if the loop completes normally (without a break or error)
  2. else == if the loop does not encounter a break
  3. else == else not (condition raising break) (prawdopodobnie istnieje taki warunek, inaczej nie miałbyś pętli)

Tak więc zasadniczo" else "w pętli jest tak naprawdę" elif ..."gdzie"..."is (1) no break, which is equivalent to (2) NOT [condition(s) raising break].

Myślę, że kluczem jest to, że else jest bez sensu bez "przerwy", więc for...else zawiera:

for:
    do stuff
    conditional break # implied by else
else not break:
    do more stuff

Tak więc podstawowe elementy for...else pętli są następujące i można je przeczytać w plainer English as:

for:
    do stuff
    condition:
        break
else: # read as "else not break" or "else not condition"
    do more stuff

Jak mówią inne plakaty, przerwa jest zazwyczaj podnoszona, gdy jesteś w stanie zlokalizować to, czego szuka twoja pętla, więc else: staje się "co zrobić, jeśli element docelowy nie znajduje się".

Przykład

Można również używać pętli exception handling, breaks I for razem.

for x in range(0,3):
    print("x: {}".format(x))
    if x == 2:
        try:
            raise AssertionError("ASSERTION ERROR: x is {}".format(x))
        except:
            print(AssertionError("ASSERTION ERROR: x is {}".format(x)))
            break
else:
    print("X loop complete without error")

wynik

x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run

Przykład

Prosty przykład z przerwą hit.

for y in range(0,3):
    print("y: {}".format(y))
    if y == 2: # will be executed
        print("BREAK: y is {}\n----------".format(y))
        break
else: # not executed because break is hit
    print("y_loop completed without break----------\n")

wynik

y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run

Przykład

Prosty przykład, w którym nie ma przerwy, nie ma warunku powodującego przerwę i nie ma błędu.

for z in range(0,3):
     print("z: {}".format(z))
     if z == 4: # will not be executed
         print("BREAK: z is {}\n".format(y))
         break
     if z == 4: # will not be executed
         raise AssertionError("ASSERTION ERROR: x is {}".format(x))
else:
     print("z_loop complete without break or error\n----------\n")

wynik

z: 0
z: 1
z: 2
z_loop complete without break or error
----------
 6
Author: NotAnAmbiTurner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-08 17:22:29

Słowo kluczowe else może być tutaj mylące i jak wiele osób wskazało, coś w rodzaju nobreak, notbreak jest bardziej odpowiedni.

Aby logicznie zrozumieć for ... else ..., porównaj go z try...except...else, a nie if...else..., większość programistów Pythona zna następujący kod:

try:
    do_something()
except:
    print("Error happened.") # The try block threw an exception
else:
    print("Everything is find.") # The try block does things just find.

Podobnie, pomyśl o break jako o specjalnym rodzaju Exception:

for x in iterable:
    do_something(x)
except break:
    pass # Implied by Python's loop semantics
else:
    print('no break encountered')  # No break statement was encountered

Różnica jest python implikuje except break i nie można tego wypisać, więc staje się:

for x in iterable:
    do_something(x)
else:
    print('no break encountered')  # No break statement was encountered

Tak, wiem to porównanie może być trudne i męczące, ale wyjaśnia zamieszanie.

 6
Author: cizixs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-05 02:36:42

Kody w bloku instrukcji else będą wykonywane, gdy pętla for nie została przerwana.

for x in xrange(1,5):
    if x == 5:
        print 'find 5'
        break
else:
    print 'can not find 5!'
#can not find 5!

Z Docs: instrukcje break I continue oraz klauzule else na pętlach

Instrukcje pętli mogą mieć klauzulę else; jest ona wykonywana, gdy pętla zakończy się z powodu wyczerpania listy (z for) lub gdy warunek stanie się false( z while), ale nie gdy pętla zostanie zakończona instrukcją break. Przykładem tego jest następująca pętla, która wyszukuje dla liczb pierwszych:

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:
...         # loop fell through without finding a factor
...         print(n, 'is a prime number')
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

(Tak, to jest prawidłowy kod. Przyjrzyj się uważnie: klauzula else należy do pętli for, a nie do instrukcji if.)

W przypadku użycia z pętlą, klauzula else ma więcej wspólnego z klauzulą else instrukcji try niż z instrukcjami if: klauzula else instrukcji TRY jest uruchamiana, gdy nie występuje wyjątek, a klauzula else pętli jest uruchamiana, gdy nie występuje przerwa. Więcej informacji na temat instrukcji try i wyjątków można znaleźć w sekcji Obsługa wyjątków.

The continue twierdzenie, również zapożyczone z C, kontynuuje kolejną iterację pętli:

>>> for num in range(2, 10):
...     if num % 2 == 0:
...         print("Found an even number", num)
...         continue
...     print("Found a number", num)
Found an even number 2
Found a number 3
Found an even number 4
Found a number 5
Found an even number 6
Found a number 7
Found an even number 8
Found a number 9
 5
Author: GoingMyWay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Oto sposób na zastanowienie się nad tym, że nie widziałem nikogo innego wspominającego powyżej:

Po pierwsze, pamiętaj, że pętle for są w zasadzie tylko cukrem składniowym wokół pętli while. Na przykład pętla

for item in sequence:
    do_something(item)

Można przepisać (w przybliżeniu) jako

item = None
while sequence.hasnext():
    item = sequence.next()
    do_something(item)

Po Drugie, pamiętaj, że pętle while są w zasadzie powtórzonymi blokami if! Zawsze możesz odczytać pętlę while jako "jeśli ten warunek jest prawdziwy, wykonaj ciało, a następnie wróć i sprawdź ponownie".

Więc while / else sprawia, że perfect sense: jest to dokładnie ta sama struktura jak if / else, z dodaną funkcjonalnością zapętlania dopóki warunek nie stanie się fałszywy, zamiast sprawdzać warunek tylko raz.

And then for / else makes perfect sense too: ponieważ wszystkie pętle for są tylko cukrem składniowym na szczycie pętli while, musisz tylko dowiedzieć się, czym jest ukryty warunek while-loop, a następnie else odpowiada, kiedy warunek ten staje się fałszywy.

 5
Author: Aaron Gable,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-11 17:52:30
for i in range(3):
    print(i)

    if i == 2:
        print("Too big - I'm giving up!")
        break;
else:
    print("Completed successfully")

"else" tutaj jest szalenie proste, po prostu mean

1, "if for clause is completed"

for i in range(3):
    print(i)

    if i == 2:
        print("Too big - I'm giving up!")
        break;
if "for clause is completed":
    print("Completed successfully")

Jest to pisanie tak długich wypowiedzi jak "klauzula for jest zakończona", więc wprowadzają "else".

else Oto jeśli w swojej naturze.

2, How about for clause is not run at all

In [331]: for i in range(0):
     ...:     print(i)
     ...: 
     ...:     if i == 9:
     ...:         print("Too big - I'm giving up!")
     ...:         break
     ...: else:
     ...:     print("Completed successfully")
     ...:     
Completed successfully

Więc to całkowicie twierdzenie jest kombinacją logiczną:

if "for clause is completed" or "not run at all":
     do else stuff

Lub ująć to tak:

if "for clause is not partially run":
    do else stuff

Lub w ten sposób:

if "for clause not encounter a break":
    do else stuff
 3
Author: Calculus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-25 04:29:46

Można by pomyśleć o tym jak, else jak w przypadku reszty rzeczy, lub innych rzeczy, które nie zostały zrobione w pętli.

 2
Author: jamylak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-02 16:25:26

Oto kolejny idiomatyczny przypadek użycia poza wyszukiwaniem. Załóżmy, że chcesz poczekać, aż warunek będzie prawdziwy, np. port, który ma być otwarty na zdalnym serwerze, wraz z pewnym limitem czasu. Następnie można użyć while...else skonstruować TAK:

import socket
import time

sock = socket.socket()
timeout = time.time() + 15
while time.time() < timeout:
    if sock.connect_ex(('127.0.0.1', 80)) is 0:
        print('Port is open now!')
        break
    print('Still waiting...')
else:
    raise TimeoutError()
 2
Author: Jonathan Sudiaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 14:03:29

[10]} ja tylko starałem się to zrozumieć. Okazało się, że następujące pomaga!

• pomyśl o else jako o połączeniu z if wewnątrz pętli (zamiast z for) - jeśli warunek jest spełniony, przerwij pętlę, w przeciwnym razie zrób to-z wyjątkiem jednego else sparowanego z wieloma ifs!
• Jeśli nie ifs były spełnione w ogóle, następnie wykonać else.
* Wielokrotność if s może być również traktowana jako if-elifs!

 2
Author: Germaine Goh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-11 15:06:54

Rozważam strukturę jak dla (if) a else B, A Dla (if)-else jest specjalnym if-else, mniej więcej . Może pomóc zrozumieć else .

A i B są wykonywane co najwyżej raz, co jest taką samą strukturą jak If-else.

For(if) może być traktowane jako specjalne if, które wykonuje pętlę, aby spróbować spełnić warunek if. Gdy warunek if jest spełniony, a i przełamują; Else , B.

 -2
Author: Jie Zhang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-13 18:41:45