all, any 동작방식 테스트해보기
정확하게 체크하기
찾아보거나 알게된 배경
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
>>>
참고자료
직접해봄