2013-09-03 4 views
0

파이썬 코드를 작성 중이며 파이썬 2와 3을 지원하고 싶습니다. 가장 중요한 데이터 유형 중 하나는 불변의 바이트 순서이므로 파이썬 2 '바이트 ('str '로 앨리어스)와 파이썬 3'바이트 '(특히, 슬라이스와 반복하는 다른 방법은 나에게 매우 짜증납니다).파이썬 2에 '바이트'의 파이썬 3 버전을 가져올 수있는 방법이 있습니까?

처음에는 'bytearray'를 사용했는데 파이썬 2와 3에서 같은 동작을 보였으므로 실제로 변경할 수 있다는 사실은 문제가됩니다. 객체를 해시 할 수 있어야하기 때문입니다.

파이썬 2에서 파이썬 3 '바이트'동작에 액세스 할 수있는 방법이 없다면, 현재 시도하고있는 해결책은 다음과 같습니다. 모든 시퀀스를 변환합니다 (파이썬 2 '바이트'/ 'str'또는 python 3 'bytes')를 정수의 튜플에 추가합니다.

파이썬 2에서 파이썬 3 '바이트 유형을 사용할 수 없다는 가정하에 솔루션을 고려해야 할 것이 있습니까?

+0

파이썬 3에서'bytes'가 파이썬 2에서 문자열과 어떻게 다른지에 대한 예를들 수 있습니까? 당신의 문제가 무엇인지 완전히 명확하지 않습니다. –

+0

여기까지 필자가 발견 한 차이점은 python 2와 3 모두를 사용해보십시오 : '$> python -c 'print ("% r"% (x는 "b"asdf " ;'[ 'a', 's', 'd', 'f'] \ n 'h'와'[97, 115, 100, 102] \ n104' – yorble

답변

3

six module 및 그 b() literal 또는 binary_type class을 사용하십시오. 이렇게하면 Python 버전을 확인하는 부담이 생깁니다.

+0

'six' 모듈을 사용하는 것은 좋은 생각 일 수 있습니다. 그러나 OP가 2.6 이전의 Python 버전을 지원하려고 시도하지 않는다면 어떤 구체적인 문제가 해결되는지 알지 못합니다. –

+0

그래, 나는 2.6보다 오래된 파이썬에 대해 정말로 걱정하지 않는다. 하지만 '6'에 대해 알려 줘서 고마워. 전에 들어 본적이 없어. – yorble

+0

@yorble :'six'는 두 줄의 코드 기반을 작성하는 좋은 방법입니다. 매우 가벼우 며 사실상 표준입니다 (그러나 더 많은 대안이 있습니다). 항목 (예 :'my_bytes [2]')이나 조각 (예 :'my_bytes [1 : 3]')에 접근 할 때받는 것에 대해 걱정이된다면 비슷한 문제에 대한 해결책을 취할 수 있습니다. 예 : 파이썬 2.x와 3.x 모두에서이 작업을하기 위해 다음을 수행했습니다 : https://github.com/tadeck/onetimepass/blob/edadd89d2c104078196a2174406064391f408912/onetimepass/__init__.py#L103 – Tadeck

관련 문제