新しいf-string形式を使用して、いくつかの文字列形式オプションを調べています。私は、リストや他の長さが不明なイテラブルを解凍する必要があります。現在、私は次のように使用して...ブレース抑制付きのリストを展開するためのf-string構文
>>> a = [1, 'a', 3, 'b']
>>> ("unpack a list: " + " {} "*len(a)).format(*a)
'unpack a list: 1 a 3 b '
これは、面倒なビットとはいえ、事前3.6 .format表記を使って仕事をしていません。 新しいf-string形式のオプションは、ランタイム文字列の連結を条件として面白いです。それは私が問題を抱えている{}の数の複製です。前の例では、必要な構造を作成し、.format()セクション内に展開しました。これを行うには
試みは、しかし、私は一緒に中括弧の両方を持つことができないか、それは解凍しない、働いていた一つの変形をもたらした...
に押すと(1)
>>> 'unpack a list' f' {{*a}}'
'unpack a list {*a}'
、I内部{}のペアの周りにスペースを挿入しました。これは控えめな改善でしたが、開閉を残しました{、}。一緒に1囲んでF-文字列に、変異体を組み合せる
(2)
>>> 'unpack a list' f' { {*a} }'
"unpack a list {1, 3, 'a', 'b'}"
は、より良い外観と構文を作った、評価するので、明らかに、左から右にあります。しかし、これは、依然として囲む中括弧を残していました。
(3)
>>> f'unpack a list { {*a} }'
"unpack a list {1, 3, 'a', 'b'}"
おそらく、私は全体の手順をoverthinking、自動開梱のいくつかのフォームを期待していました。これは、中括弧が[]に置き換えられたリスト表現を単純に生成しました。
(4)(3)上記の変形で中括弧を抑制するために必要な、または私は私がするために使用しています.format()のオプションを続けるために辞任していますされて何
>>> f'unpack a list {a}'
"unpack a list [1, 'a', 3, 'b']"
。私はそれをシンプルに保ち、f-stringによって提供される新しい機能を使用し、私が現在快適であるものよりも前のpythonバージョンを元に戻したいと思います。私はf'strings 'が.format()兄弟によって提供されているものの完全な範囲を提供していないと疑い始めています。私はエスケープエンコーディングとf文字列で\を使うことができないことに挑戦していないので、今はそれを残しておきます。私はPEPを読んで広く検索しましたが、明白でないか、あるいは私が望んでいることは現在できません。
EDIT数時間後
私は
f'unpack a list: {str(a)[1:-2]}'
"unpack a list: 1, 'a', 3, 'b"
を必要とするいくつかのケースのために役立つだろう、このバリアントを見つけました。しかし、スライスは、利便性よりも少しあり、まだ周りの文字列の引用符を残し結果
FYI、それが明らかでない場合には:(1)が動作しない理由は、{{ 'その'はf-string内のリテラルブレースをどのように[脱出する](https://www.python.org/dev/peps/pep-0498/#escape-sequences)なので、その例で補間は全く行われません。 –