첫번째 방식
bag = []
if bag:
print("리스트가 비어 있지 않습니다")
else:
print("리스트가 비어 있습니다")
두번째 방식
if len(bag) == 0:
print("리스트가 비어 있습니다")
else:
print("리스트가 비어 있지 않습니다")
PEP8에서는 첫번째로 하라고 하는 거 같은데
첫번째 방식
bag = []
if bag:
print("리스트가 비어 있지 않습니다")
else:
print("리스트가 비어 있습니다")
두번째 방식
if len(bag) == 0:
print("리스트가 비어 있습니다")
else:
print("리스트가 비어 있지 않습니다")
PEP8에서는 첫번째로 하라고 하는 거 같은데
무적건후자임
감사욤! - dc App
뭔 개소리야
이런건 이제 gpt에 물어봐
제일 첨에 chatgpt(gpt4)한테 물어봤는데, 첫번째 방식대로 하라고 해서 구글링해보니 개발자 스타일별로 갈리는 느낌이라 여기 물어봤어용 - dc App
아 gpt4가 아니라 무료버전이 첫번째로 하라고 해써요 - dc App
방금 gpt4한테 물어보니 gpt4도 첫번째 방식으로 하라고 답하네요 - dc App
파이써닉한건 전자인데 엄밀하게 따지면 두 번째 방식이 정확함. bag이 list가 아니라 boolean이거나 None이거나 하면 리스트가 비어 있습니다가 출력됨. bag이 무조건 list인 경우에는 첫번째 방식을 써도 됨.
2번도 정확한 방법이 아님. 댓글에 적은 예시대로 boolean이나 None이면 리스트가 비어있다고 출력되는게 아니라 타입 에러가 발생함. 정말 엄격하게 할거면 isinstance로 typing.Sized로 프로토콜 체크하고 len으로 길이 확인하는거지만, Sized 프로토콜 확인한 순간부터 len을 하든 안하든 결과는 같음.
파이써닉한 방법은 1번임. 타입이 리스트면 당연히 1번이고, 타입이 리스트가 아니면 어차피 2번도 비정상 작동인건 마찬가지임.
비정상 작동인건 마찬가지인데 그래도 예외가 터지잖아. 예외마저 안 터지면 버그 잡기가 힘들지
예외가 터져도 설계상 문제가 있는거 같음. 타입에 대한 처리는 저 로직에 어떤 의미도 없으니 다른 곳에서 처리되는게 맞음.
그리고 len쓴다고 예외가 터지는 것도 아님. 그냥 __len__ 메소드만 정의돼있으면 그냥 다 통과됨.
1 - dc App
무조건전자
좀 더 엄밀하게 bag이 리스트라는 조건을 추가해도 됨 if isinstance(bag, list):
당연히 전자지 여기애들 뭔소리하고있나