arr .__ len __ ()은 파이썬에서 배열의 길이를 얻는 데 선호되는 방법입니까? 에서 파이썬

에서 파이썬 , 요소의 수를 얻을 수있는 다음과 같은 유일한 방법은 무엇입니까?

arr.__len__()

그렇다면 왜 이상한 구문입니까?



답변

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있습니다.

l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5

“이상한”구문의 이유는 내부적으로 파이썬이로 변환 len(object)되기 때문 object.__len__()입니다. 이것은 모든 객체에 적용됩니다. 따라서 클래스를 정의하고 길이를 갖는 것이 합리적이라면 __len__()메소드를 정의하면 len해당 인스턴스를 호출 할 수 있습니다 .


답변

파이썬은 오리 타이핑을 사용합니다 : 상황에 맞는 적절한 인터페이스를 가지고 있다면 객체 무엇인지 신경 쓰지 않습니다 . 객체에서 내장 함수 len ()을 호출하면 실제로 내부 __len__ 메서드를 호출하게됩니다. 커스텀 객체는이 인터페이스를 구현할 수 있으며, 객체가 개념적으로 시퀀스가 ​​아니더라도 len ()은 응답을 반환합니다.

전체 인터페이스 목록을 보려면 여기를 참조 하십시오. http://docs.python.org/reference/datamodel.html#basic-customization


답변

파이썬 객체의 길이를 얻는 가장 좋은 방법은 len함수에 인수로 전달하는 것입니다. 내부적으로 파이썬 __len__은 전달 된 객체 의 특수 메소드 를 호출하려고 시도합니다 .


답변

그냥 사용하십시오 len(arr):

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1

답변

당신이 사용할 수있는 len(arr)
배열의 길이를 얻기 위해 이전 답변에서 제안. 2D 배열의 치수를 원할 경우 arr.shape높이와 너비를 반환 할 수 있습니다


답변

len(list_name)function은 list를 매개 변수로 사용하고 list의 __len__()함수를 호출합니다 .