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)
함수는 목록을 매개 변수로 취하고 목록의 __len__()
함수를 호출합니다 .
파이썬은 다른 사람들이 말한 것처럼 일관성 len()
대신 사용자가 사용하도록 제안합니다 __len__()
. 그러나 몇 가지 다른 이점이 있습니다.
For some built-in types like list
, str
, bytearray
and so on, the Cython implementation of len()
takes a shortcut. It directly returns the ob_size
in a C structure, which is faster than calling __len__()
.
If you are interested in such details, you could read the book called "Fluent Python" by Luciano Ramalho. There're many interesting details in it, and may help you understand Python more deeply.
'program tip' 카테고리의 다른 글
터미널에서 현재 라인을 삭제 / 삭제하려면 어떻게합니까? (0) | 2020.09.30 |
---|---|
C #에 확장 속성이 있습니까? (0) | 2020.09.30 |
어떻게 쉽게 수평 중앙에 (0) | 2020.09.30 |
Bootstrap-테이블 내부에 대한 텍스트 정렬 클래스 (0) | 2020.09.30 |
SQL Server '변경 사항 저장이 허용되지 않음'오류 ► 테이블 다시 생성이 필요한 변경 사항 저장 방지 (0) | 2020.09.30 |