Python3.6の非常にクールな新機能の1つは、書式設定された文字列リテラル(https://docs.python.org/3.6/whatsnew/3.6.html#whatsnew36-pep498)の実装です。オブジェクトのPython書式の文字列リテラル
残念ながら、それはよく知られているフォーマット()関数のように動作しません:
>> a="abcd"
>> print(f"{a[:2]}")
>> 'ab'
を見ての通り、スライスは、(文字列の実際のすべてのPython関数)が可能です。 しかしformat()
はスライスでは動作しません:stringオブジェクトに新しいフォーマットされた文字列リテラルの機能を取得する方法が
>> print("{a[:2]}".format(a="abcd")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
あります?
>> string_object = "{a[:2]}" # may also be comming from a file
>> # some way to get the result 'ab' with 'string_object'
いいえ、Docsによると、それは意味をなさないでしょう:https://docs.python.org/3.6/reference/lexical_analysis.html#f-strings私が見ることができる限り、それは.format()とにかく。 –
技術的には、 'eval()'で行うことができます。これは一般的には悪い考えですが、この場合、フォーマット文字列自体に任意のPythonコードが含まれる可能性があるため、安全性を保証することは二重に困難です。したがって、最初に文字列( 'ast.parse()')を解析して単一の書式文字列しか含まれていない場合でも、その単一書式文字列は 'eval()'自体と同じように危険です。 – kindall