all, any 동작방식 테스트해보기

최대 1 분 소요

정확하게 체크하기

찾아보거나 알게된 배경

all, any가 어디까지 조건을 확인하는지 궁금해서 간단하게 프린트해보며 확인해봤다.


요약

  • any로 아이템들에 대해서 인자로 넣으면 , True가 나오는 지점까지만 수행된다.
    • 단, any(generator) 형태로 사용해야 하며, list로 줄 경우 전체가 평가된 뒤, any가 수행된다
  • all로 아이템들에 대해서 인자로 넣으면, False가 나오는 지점까지만 수행된다.
    • 단, all(generator) 형태로 사용해야 하며, list로 줄 경우 전체가 평가된 뒤, all가 수행된다

결론

any든 all이든 특별한 이유가 없다면 generator를 넣어서 쓰는 것이 낫다


테스트

>>> def print_any(i):
...     print(i)
...     return i
...
>>> all(print_any(i) for i in range(5))
0
False
>>> all(print_any(i) for i in range(5)+1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'range' and 'int'
>>> all(print_any(i) for i in range(5+1))
0
False
>>> all(print_any(i+1) for i in range(5))
1
2
3
4
5
True
>>> all(print_any(3-i) for i in range(5))
3
2
1
0
False
>>> any(print_any(3-i) for i in range(5))
3
True
>>> any(print_any(i) for i in range(5))
0
1
True
>>> any([print_any(i) for i in range(5)])
0
1
2
3
4
True
>>>

참고자료

직접해봄

태그:

카테고리:

업데이트: