어떤 프로그래밍 언어를 사용하든 우리는 모두 "if-else" 문을 작성하지만 "for-else"는 어떻습니까?
C, C++, Java 등 많은 언어의 경우 루프 다음에 "else"를 사용하는 것은 완전히 잘못된 것입니다. 그러나 우아한 언어인 Python에는 "이상하지만 유용한" 기능이 있습니다. 올바르게 사용하면 코드가 더 깔끔해집니다.
이 글에서는 Python의 "for-else" 함수를 소개하고 간단한 예를 통해 이를 올바르게 사용하는 방법을 설명합니다.
"for-else" 기능을 처음 접하게 되면 낯설고 이해하기 어려울 것입니다. (이제 막 사용하기 시작한 분들을 위한 Python 개발자 홈페이지) 이 함수를 사용하면 else의 들여쓰기가 잘못되었다고 착각하기 쉽습니다. 하지만 실제로 그 사용법은 놀라울 정도로 간단합니다. 한 문장이면 충분합니다. 코드의 "else" 블록은 루프에 중단이 없을 때만 실행됩니다.
사실이라고 믿기엔 너무 단순하게 들리나요? 예를 들어 살펴보겠습니다.
leaders = ["Elon", "Tim", "Warren"] for i in leaders: if i == "Yang": print("Yang is a leader!") break else: print("Not found Yang!") # Not found Yang!
위에 표시된 대로: 위에 표시된 대로 리더 목록에는 "Yang"이 포함되어 있지 않으므로 for 루프에 중단이 없습니다. 따라서 "else" 블록이 실행되어 정보를 인쇄합니다.
리더 목록에 "양"이 포함되어 있으면 어떻게 되나요?
leaders = ["Yang", "Elon", "Tim", "Warren"] for i in leaders: if i == "Yang": print("Yang is a leader!") break else: print("Not found Yang!") # Yang is a leader!
위와 같이 리더 목록에 "Yang"이 포함되어 있으므로 for 루프가 중단되고 "else" 블록의 내용이 실행되지 않습니다.
요컨대 for-else 기능 자체는 이해하기 어렵지 않지만, 정확하고 능숙하게 사용하는 것은 어렵지 않습니다. 아래에서는 for-else 기능이 적합한 세 가지 시나리오를 소개합니다.
파이썬 프로그램에서 반드시 for-else 기능을 사용할 필요는 없습니다. 솔직히 말해서, 그것 없이도 똑같은 일을 할 수 있지만, 그것을 사용하면 코드가 더 우아해집니다.
특정 요소를 찾기 위해 목록을 반복하는 것이 루프 사용의 기본 시나리오입니다. 일반적으로 대상 요소를 찾으면 계속 반복하는 것은 의미가 없으며 루프에서 벗어나야 합니다. 문제는 요소가 발견되었는지 어떻게 알 수 있느냐는 것입니다.
기존 솔루션은 "mark" 변수를 정의하고 특정 항목을 찾으면 이를 True로 설정하는 것입니다.
leaders = ["Yang", "Elon", "Tim", "Warren"] have_yang = False for i in leaders: if i == "Yang": have_yang = True # Do something break if have_yang == False: # no yang ...# Do others
위의 예에서 볼 수 있듯이 have_yang 변수는 플래그입니다. for 루프가 완료된 후 해당 값이 False이면 "Yang"이 목록에 없으며 다른 작업을 수행할 수 있음을 알 수 있습니다.
이 접근 방식으로도 충분하지만, Python의 "우아한" 기능을 활용하고 싶다면 for-else를 사용하는 것도 또 다른 옵션입니다.
leaders = ["Yang", "Elon", "Tim", "Warren"] for i in leaders: if i == "Yang": have_yang = True # Do something break else:# no yang ...# Do others
이 방법이 더 깔끔해 보이죠?
코드에 중첩 루프가 있는 경우 for-else도 도움이 될 수 있습니다.
for i in range(5): for j in range(5): if j == 2 and i == 0: break if not (j == 2 and i == 0): continue break
위에서 보듯이 중첩된 루프를 벗어나는 것은 내부 루프가 끊어졌는지 알아야 하기 때문에 조금 어렵습니다.
위의 코드는 내부 루프가 중단되었는지 확인하는 서투른 솔루션을 보여줍니다. 확실히 잘 작동하지만 for-else를 사용하면 더 깔끔하게 만들 수 있습니다.
# use the for-else syntax for i in range(5): for j in range(5): if j == 2 and i == 0: break else:# only execute when it's no break in the inner loop continue break
nums = [1, 3, 0, 5] for denominator in nums: try: 20/denominator except ZeroDivisionError: break else:# no found ZeroDivisionError ...# Do others
위에 표시된 것처럼 for 루프에서 ZeroDivisionError가 발생하지 않으면 "else"를 사용할 수 있습니다. 블록에서 해당 후속 작업을 수행합니다.
Python의 for-else 기능은 처음에는 조금 이상해 보일 수 있지만 사용법은 이해하기 어렵지 않으며 특정 시나리오에서 유용할 수 있습니다. 결국 우리는 한 가지 규칙만 기억하면 됩니다. "else" 블록은 루프에 중단이 없을 때만 실행됩니다.
위 내용은 For-else: Python의 이상하지만 유용한 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!