답변:
my_list = [1,2,3,4,5]
len(my_list)
# 5
튜플도 마찬가지입니다.
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
그리고 문자열은 실제로 문자 배열입니다.
my_string = 'hello world'
len(my_string)
# 11
목록, 튜플 및 기타 컨테이너 유형 또는 반복 가능 항목이 모두 공개 메소드 를 명시 적으로 구현할 필요가 없도록 의도적으로 이러한 방식으로 수행 되었습니다 .length(). 대신 len()'매직' __len__()메소드 를 구현하는 모든 항목을 확인할 수 있습니다 .
물론 이것은 중복되는 것처럼 보일 수 있지만 동일한 언어 내에서도 길이 검사 구현은 상당히 다를 수 있습니다. 한 컬렉션 유형이 .length()메서드를 사용하는 반면 다른 유형이 .length속성을 사용하는 반면 다른 유형이 속성을 사용하는 것을 보는 것은 드문 일이 아닙니다 .count(). 언어 수준의 키워드가 있으면 이러한 모든 유형의 진입 점이 통합됩니다. 따라서 요소 목록으로 간주되지 않는 개체도 여전히 길이를 확인할 수 있습니다. 여기에는 문자열, 대기열, 나무 등이 포함됩니다.
기능적 특성은 len()기능적 스타일의 프로그래밍에도 적합합니다.
lengths = map(len, list_of_containers)
파이썬은 오리 타이핑을 사용합니다 : 상황에 맞는 적절한 인터페이스를 가지고 있다면 객체 가 무엇인지 신경 쓰지 않습니다 . 객체에서 내장 함수 len ()을 호출하면 실제로 내부 __len__ 메서드를 호출하게됩니다. 커스텀 객체는이 인터페이스를 구현할 수 있으며, 객체가 개념적으로 시퀀스가 아니더라도 len ()은 응답을 반환합니다.
전체 인터페이스 목록을 보려면 여기를 참조 하십시오. http://docs.python.org/reference/datamodel.html#basic-customization
파이썬은 다른 사람들이 말한 것처럼 일관성 len()대신에 사용자가 사용하도록 제안합니다 __len__(). 그러나 몇 가지 다른 이점이 있습니다.
일부는 내장의 경우 같은 종류의 list, str, bytearray등의 사이 썬 구현은 len()바로 가기를합니다. ob_size호출하는 것보다 빠른 C 구조로 직접를 반환합니다 __len__().
이러한 세부 사항에 관심이 있다면 Luciano Ramalho의 "Fluent Python"이라는 책을 읽을 수 있습니다. 여기에는 많은 흥미로운 세부 사항이 있으며 파이썬을 더 깊이 이해하는 데 도움이 될 수 있습니다.