답변:
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"이라는 책을 읽을 수 있습니다. 여기에는 많은 흥미로운 세부 사항이 있으며 파이썬을 더 깊이 이해하는 데 도움이 될 수 있습니다.