파이썬 3.x 는 타입을 명확하게 구분합니다 :
str
= '...'
리터럴 = 일련의 유니 코드 문자 (UTF-16 또는 UTF-32, Python 컴파일 방식에 따라 다름)
bytes
= b'...'
리터럴 = 일련의 8 진수 (0에서 255 사이의 정수)
자바 나 C #을 나왔습니다에 익숙한 당신이 경우, 생각 str
등 String
과 bytes
같은 byte[]
. 당신은 SQL에 익숙하다면, 생각 str
등 NVARCHAR
과 bytes
같은 BINARY
나 BLOB
. 당신이 Windows 레지스트리에 익숙하다면, 생각 str
등 REG_SZ
과 bytes
같은 REG_BINARY
. C (++)에 익숙하다면 char
, CHARACTER는 BYTE가 아니기 때문에 배운 모든 것과 문자열 을 잊어 버리십시오 . 그 아이디어는 오래 쓸모가 없습니다.
str
텍스트를 나타내려고 할 때 사용 합니다.
print('שלום עולם')
bytes
구조체와 같은 하위 수준 이진 데이터를 나타내려고 할 때 사용 합니다.
NaN = struct.unpack('>d', b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]
a 를 객체로 인코딩 할 수 있습니다 .str
bytes
>>> '\uFEFF'.encode('UTF-8')
b'\xef\xbb\xbf'
그리고를 a bytes
로 디코딩 할 수 있습니다 str
.
>>> b'\xE2\x82\xAC'.decode('UTF-8')
'€'
그러나 두 가지 유형을 자유롭게 혼합 할 수는 없습니다.
>>> b'\xEF\xBB\xBF' + 'Text with a UTF-8 BOM'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to str
이 b'...'
표기법은 바이트 0x01-0x7F를 16 진수 대신 ASCII 문자로 지정할 수 있다는 점에서 다소 혼란 스럽습니다.
>>> b'A' == b'\x41'
True
그러나 나는 문자가 바이트가 아니라는 것을 강조해야합니다 .
>>> 'A' == b'A'
False
Python 2.x에서
3.0 이전 버전의 Python에서는 텍스트와 이진 데이터 간의 구분이 부족했습니다. 대신에
unicode
= u'...'
리터럴 = 유니 코드 문자 시퀀스 = 3.xstr
str
= '...'
리터럴 = 혼란스러운 바이트 / 문자 시퀀스
- 일반적으로 일부 지정되지 않은 인코딩으로 인코딩 된 텍스트입니다.
- 그러나
struct.pack
출력 과 같은 이진 데이터를 나타내는 데에도 사용됩니다 .
2.x에서 -3.x 로의 전환을 용이하게하기 위해 b'...'
리터럴 구문은 이진 문자열 ( bytes
3.x에 있어야 함 )과 텍스트 문자열 ( str
3에 있어야 함)을 구별 할 수 있도록 Python 2.6으로 백 포트되었습니다. .엑스). b
접두사는 2.X에서 아무것도하지 않는다,하지만 알 2to3
3.x에서의 유니 코드 문자열로 변환하지 스크립트를
예, b'...'
파이썬의 리터럴은 PHP에서와 같은 목적을 가지고 있습니다.
또한 호기심에서 다른 일을하는 b와 u보다 더 많은 상징이 있습니까?
r
접두사 (예, 원시 문자열을 생성 r'\t'
백 슬래시 +입니다 t
대신 탭), 트리플 따옴표 '''...'''
또는 """..."""
여러 줄 문자열 리터럴을 할 수 있습니다.