2017-07-27 6 views
6

私はフォーマットされたバイト文字列リテラルを探しています。具体的には、Python 3.6+にフォーマットされたバイト文字列リテラルがありますか?

name = "Hello" 
bytes(f"Some format string {name}") 

相当のものfb"Some format string {name}"のようなものが考えられます。

このようなことはありますか?

+3

私はそうは思わない。 'bytes'は' .format'メソッドを持っていないので、f-stringに相当するものがあれば驚いています。最も近いのは[バイトフォーマット](https://docs.python.org/3/library/stdtypes.html#printf-style-bytes-formatting)です。 –

+2

また、btwは、ジェネリックで常にpythonの質問にタグを付けます[python]タグ。質問がバージョン固有の場合は、汎用タグに加えてバージョン固有のタグ*を使用してください。 –

答えて

7

The idea is explicitly dismissed in the PEP

我々はbytes.format()をサポートしていないのと同じ理由のために、あなたは 'b'文字列リテラルで'f'を組み合わせることはできません。主な問題 は、オブジェクトの__format__()メソッドがバイト文字列と互換性のないUnicodeデータ を返す可能性があることです。

バイナリf-ストリングは、最初に bytes.format()の解決策を必要とします。このアイデアは過去に提案されており、最近 のPEP 461にあります。通常 このような特徴の議論は、加工対象物は、それがバイトに変換し、又は

  • bytes.format()を有する汎用または拡張可能のようではない方法を制御できるよう__bformat__()などのメソッドを追加いずれか

    • を示唆していますstr.format()となります。

    このような機能が将来のオプションとして残っている場合は、 が必要です。

  • +0

    すごく、これはまさに私が欲しかったものです。私は参照を見つけるのが苦労していた。ありがとう! –

    -2

    これは、Python 2からPython3に加えられたより大きな変更の1つでした。彼らはユニコードと文字列を別々に扱います。

    これはバイトに変換する方法です。

    string = "some string format" 
    string.encode() 
    print(string) 
    

    これは、文字列にデコードする方法です。

    string.decode() 
    

    私はチャールズSeverenceによってこのcoursera lectureてUnicodeに3変化に対するPythonの2の間の差のためのより良い理解を持っていました。 Python 2と3の違いや、文字やユニコードの処理方法については、17分のビデオ全体を見ることができます。

    実際の質問は、文字列とバイトの両方を持つ文字列をどのようにフォーマットできるかを理解しています。

    inBytes = b"testing" 
    inString = 'Hello' 
    type(inString) #This will yield <class 'str'> 
    type(inBytes) #this will yield <class 'bytes'> 
    

    ここでは、変数とバイト変数の文字列があることがわかります。

    これは、バイトと文字列を1つの文字列に結合する方法です。

    formattedString=(inString + ' ' + inBytes.encode()) 
    
    +6

    私はあなたの時間と努力を感謝しますが、あなたの答えは質問に無関係です。 – direprobs

    +0

    エンリコの質問は、新しいバージョンで大幅に変更されたPython 3のバイトと文字列をどのように変換できるのか、私は理解しました。私の答えは、彼がPython 3で同様の操作をどのように扱うことができるのかを理解するのに役立ちました。だから私はこの応答が彼の質問に関連していると感じています。 – Dom

    +0

    これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューの投稿](レビュー/低品質の投稿/ 16853347) –

    関連する問題