[python] 파이썬 문자열 앞의 ab 접두사는 무엇을 의미합니까?

파이썬 소스 코드에서 나는 다음과 같은 문자열 앞에 작은 b 를 본 것을 우연히 발견 했습니다.

b"abcdef"

u유니 코드 문자열을 나타내는 r접두사 와 원시 문자열 리터럴 의 접두사에 대해 알고 있습니다.

뭐라고 않습니다 b및 종류의 소스 코드의있는 스탠드 접두어가없는 일반 문자열처럼 정확하게 것으로 보인다 유용하다?



답변

이것은 Python3 bytes 리터럴 입니다. 이 접두사는 Python 2.5 및 이전 버전에는 없습니다 (일반 문자열 2.x에 해당하는 반면 일반 문자열 3.x는 u접두어 2.x 에있는 리터럴에 해당 ). Python 2.6 이상에서는 3.x와의 호환성을 위해 일반 문자열과 동일합니다 .


답변

b접두사는 의미 bytes문자열 리터럴을 .

Python 3 소스 코드에서 사용되는 경우 표현식은 일반 유니 코드 객체가 아닌 bytes객체를 생성 합니다 . Python 셸에서 또는 목록, dict 또는 기타 컨테이너 콘텐츠의 일부로 에코되는 경우이 표기법을 사용하여 표현 된 객체 를 볼 수 있습니다 .strbytes

bytes객체는 기본적으로 0-255 범위의 정수 시퀀스를 포함하지만, 표시 될 때 Python 은이 바이트를 ASCII 코드 포인트 로 표시 하여 내용을 더 쉽게 읽을 수 있도록합니다. 외부 모든 바이트 인쇄 가능한 ASCII 문자의 범위는 이스케이프 시퀀스 (예 :로 표시됩니다 \n, \x82등). 반대로 ASCII 문자와 이스케이프 시퀀스를 모두 사용하여 바이트 값을 정의 할 수 있습니다. ASCII 값의 경우 숫자 값이 사용됩니다 (예 : b'A'== b'\x41').

bytes객체는 정수 시퀀스로 구성 되기 때문에 bytes목록과 같이 0-255 범위의 값을 가진 다른 정수 시퀀스에서 객체를 생성 할 수 있습니다 .

bytes([72, 101, 108, 108, 111])

및 인덱싱은 정수를 다시 제공합니다 (그러나 슬라이스가 새로운 생산 bytes값을, 위의 예를 들어, value[0]당신을 제공 72하지만, value[:1]이다 b'H'(72)는 대문자의 ASCII 코드 포인트이기 때문에 H가 ).

bytes인코딩 된 텍스트를 포함한 모델 이진 데이터 . 값에 텍스트가 포함되어 있으면 먼저 올바른 코덱을 사용하여 디코딩해야합니다. 예를 들어 데이터가 UTF-8로 인코딩 된 경우 다음을 사용하여 유니 코드 값을 얻을 수 있습니다 .bytesstr

strvalue = bytesvalue.decode('utf-8')

반대로, 텍스트에서 이동 str에 객체 bytes당신이 필요로 인코딩 . 사용할 인코딩을 결정해야합니다. 기본값은 UTF-8을 사용하는 것이지만 필요한 것은 사용 사례에 따라 크게 달라집니다.

bytesvalue = strvalue.encode('utf-8')

생성자를 사용 bytes(strvalue, encoding)하여 동일한 작업을 수행 할 수도 있습니다 .

디코딩 및 인코딩 방법은 모두 오류 처리 방법지정 하기 위해 추가 인수를 사용합니다 .

Python 2, 버전 2.6 및 2.7은 또한 b'..'문자열 리터럴 구문을 사용하여 문자열 리터럴 생성을 지원하여 Python 2와 3 모두에서 작동하는 코드를 쉽게 만듭니다.

bytes객체는 str문자열 처럼 불변 입니다. 가변 바이트 값이 필요한 경우 bytearray()객체를 사용하십시오 .


답변