2

アサーションが失敗する Python 実装が存在する可能性があります。

assert all(byte in range(256) for byte in any_bytes_object) # Python 3 semantics 
assert all(byte in range(256) for byte in map(ord, any_bytes_object)) # Python 2

CHAR_BIT == 8POSIX では(1 バイトあたり 8 ビット)と明示的に指定されています。Pythonにも同様の保証はありますか? それはどこかに文書化されていますか?

Python 2 リファレンスには、「文字は (少なくとも) 8 ビット バイトを表す」と記載されています。

name が (古い Python バージョンで) 定義されていない場合bytes(Jython 2.5 など)、質問はstr型 (バイト文字列) に関するものです。つまり、bytes = strPython 2 です。

4

3 に答える 3

1

user2357112 によって引用された公式ドキュメントに加えて、bytes オブジェクトを導入した Python 拡張提案を参照できます。

PEP 358 -- 指定された「bytes」オブジェクト:

バイト オブジェクトには、0 から 255 の範囲の変更可能な一連の整数が格納されます。

bytes オブジェクトがimmutableになったことがわかっているため、この仕様は完全には適用できず、その「範囲」部分も意味がない可能性があります。

興味深いことに、PEP 3137 -- Immutable Bytes and Mutable Bufferは、PEP 358 を部分的に置き換え (バイトを不変として指定し、バイト配列を可変の等価物として導入します)、バイト オブジェクトとバイト配列 ("int[eger]s範囲内(256)")ですが、それらから何が出るかはわかりません。

どちらの PEP も「ビット」または「ビット」についてまったく言及していません。(ビット単位のブール演算から、Python の整数がビット パターンにどのようにマップされるかはわかっているので、驚くようなことはないはずです。)

于 2016-03-28T16:08:02.427 に答える