나는 제 3 자 API 찾고 있어요 그리고 그들은 다음 코드 조각이 :파이썬에서 ' 0 0'의 의미?
def array_u16 (n): return array('H', '\0\0'*n)
내가 '\0'
이 NULL
의미 이해, '\0\0'
어떤 특별한 의미를하거나 그냥 2 개 NULL
의 뜻인가합니까?
나는 제 3 자 API 찾고 있어요 그리고 그들은 다음 코드 조각이 :파이썬에서 ' 0 0'의 의미?
def array_u16 (n): return array('H', '\0\0'*n)
내가 '\0'
이 NULL
의미 이해, '\0\0'
어떤 특별한 의미를하거나 그냥 2 개 NULL
의 뜻인가합니까?
이 함수는 16 비트 배열을 반환합니다. 따라서 \0\0
은 아마도 2 바이트 (16 비트)의 데이터 생성을 의미합니다. 즉, 2 바이트의 n 워드를 반환합니다.
array
클래스는 형식 문자 (형식 코드라고 함)와 이니셜 라이저를 허용합니다. H
은 최소 크기가 2 바이트 인 부호없는 short를 의미하므로 '\0\0'
을 만족합니다. * n
부분은 전체 배열을 NULL 바이트로 초기화하는 것입니다.
두 바이트가 n
번 제공되므로, 배열의 크기는 과 같을 것입니다. '\0'
이 제공된 경우 결과 배열은 size == n//2
(due to the type-code 'H'
requiring 2
bytes)이됩니다. 그것은 분명히 카운터 직관적이다 :
>>> array('H', b'\0\0' * 10)
array('H', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
로 : 당신이 같은 조각을 필요로하는 경우
>>> array('H', '\0' * 10) # 5 elements
array('H', [0, 0, 0, 0, 0])
>>> array('H', '\0\0' * 10) # 10 elements
array('H', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
주
파이썬3
에서
initializer
인수
array
에 당신에게
해야
provide a bytes
object를 작동하는 것을 당신은 또한 파이썬 2에서
u''
문자열을 제공 할 수 없습니다. 그 이외의 동작은 정확히 동일합니다.
그래서 '\0\0'
은 편의를위한 것입니다. 어떠한 의미도 '\0\0'
에 첨부되지 않습니다. (그들은 예를 들어,에서와 마찬가지로, C
를)
어떤 의미가 정말 '\0'
파이썬에서 또 다른 문자열입니다 '\0'
중 하나에 첨부되지 않았습니다.
이 문제에 대한 또 다른 예로서, 2
바이트 최소 부호의 int위한 'I'
유형 코드와 배열의 초기화를 수행하지만 64bit
에 4
파이썬 빌드. 당신이 제공 한 조각의 정신에
>>> array('I', b'\0\0\0\0' * 10)
array('I', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
네, 네 번 b'\0'
문자열 10
요소를 얻을 수 있습니다.최종 참고로
-다음 타이밍 파이썬 3에서 수행하지만이 같은이다 - 그가 사용하는 이유가 궁금 할 것이다 대신 '\0\0\' * n
더 직관적으로 보이는 초기화 [0] * n
을 배열 음, 꽤 빠릅니다 : 물론
n = 10000
%timeit array('I', [0]*n)
1000 loops, best of 3: 212 µs per loop
%timeit array('I', b'\0\0\0\0'* n)
100000 loops, best of 3: 6.36 µs per loop
, 당신이 bytearray
array
에 공급함으로써 ('b'
이외의 타입 코드에 대한) 더 잘 할 수 있습니다. 널 바이트 a bytearray
is by providing an int
as the number of items to initialize를 초기화하는 한 가지 방법은 : 내가 정확히 기억한다면
%timeit array('I', bytearray(n))
1000000 loops, best of 3: 1.72 µs per loop
하지만, ByteArray의 초기화의 bytearray(int)
방법은 3.7+
:-)에서 사용되지 얻을 수 있습니다.