>  Q&A  >  본문

Python, for-else, while-else是否造成了语义歧义 ( 增加心智负担 )?

看到用了 for-else/while-else的代码, 往往不能马上搞懂 else 处代码的意思

因为, 脑袋不能马上反应, else 到底表示了什么样的语义( 还需要转几个弯 )

(但是 try - except -else 没有带来语义上的歧义)

相关代码

for i in range(5):
...     print(i)
... else:
...     print('Iterated over everything :)')


for i in range(5):
...     if i == 2:
...         break
...     print(i)
... else:
...     print('Iterated over everything :)')


for i in []:
...     print(i)
... else:
...     print('Still iterated over everything (i.e. nothing)')



> i = 0
>>> while i <= 5:
...     i += 1
...     print i
... else:
...     print 'Yep'



for x in data:
    if meets_condition(x):
        break
else:
    # raise error or do additional processing 
PHP中文网PHP中文网2741일 전685

모든 응답(4)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-18 10:30:27

    주체는 의미가 불분명한 것은 이해할 수 있다고 믿습니다. 결국, 다른 언어에서는 else가 if에만 사용됩니다. 여기서 else가 자연스러운 의미를 따르지 않는다는 점은 말할 것도 없습니다.

    자연스러운 의미에서 else는 "기타"를 의미하지만, for, while에 else를 입력해 보면 이 절을 설명하기 위해 "위 프로그램에서 고려한 상황을 제외하고"를 사용하는 것은 무리입니다. "메인 블록이 정상적으로 끝난 후의 상황"으로 이해하는 것이 더 정확하다고 생각합니다. 소위 메인 블록은 루프 본문이거나 else에 연결된 try 절입니다. 소위 정상은 제어 흐름이 없다는 것을 의미합니다. 특별한 수단(예외 또는 루프)으로 중단되었습니다.

    이렇게 이해하는 것이 더 명확할 수 있습니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:30:27

    다음 예가 마음에 듭니다.

    으아악

    다른 변수가 없으면 for 루프 뒤에 bool 변수와 if/else를 추가해야 합니다. for/else를 사용하는 것이 훨씬 간단합니다. 점차 익숙해지실 겁니다 ;-)

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:30:27

    모호함은 없습니다. 익숙하지 않을 뿐입니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:30:27

    Fluent Python의 작가认为是会增加的,他这样说到:if를 제외한 모든 경우에 else는 키워드에 대한 선택이 매우 좋지 않다고 생각합니다. 이는 "이 루프를 실행하고, 그렇지 않으면 저것을 하십시오"와 같은 제외 대안을 의미하지만 루프의 else에 대한 의미는 정반대입니다. "이 루프를 실행한 다음 저것을 하십시오." 이는 then을 더 나은 키워드로 제안합니다. 이는 try 컨텍스트에서도 의미가 있습니다. "이것을 시도한 다음 저것을 하십시오." 그러나 새로운 키워드를 추가하는 것은 언어에 엄청난 변화를 가져오는 것이며, 귀도는 이를 전염병처럼 피합니다.

    회신하다
    0
  • 취소회신하다