2016-03-02 8 views
27

私はPython 3.6を試しています。新しいコードを通って行く、私はこの新しい構文つまずい:Python-3.6の 'f'接頭辞を持つ文字列

f"My formatting string!" 

私たちがこのようなことを行うことができそうです。

>>> name = "George" 
>>> print(f"My cool string is called {name}.") 
My cool string is called George. 

誰もこれの内部の仕組みにいくつかの光を当てることができますか?特に、f接頭文字列が取ることができる変数の範囲は何ですか?

答えて

28

PEP 498 Literal String Interpolationを見る

列から抽出された表現は、F-stringが現れたコンテキストで評価されます。これは、式がローカル変数とグローバル変数に完全にアクセスできることを意味します。関数呼び出しとメソッド呼び出しを含め、有効なPython式を使用できます。

したがって、式は同じスコープ内にあるかのように評価されます。ローカル、クロージャ、およびグローバルは、すべて同じコンテキストで他のコードと同じように動作します。

あなたはreference documentationで詳細を見つける:フォーマットされた文字列リテラルで

式はいくつかの例外を除いて、括弧で囲まれた通常のPythonの表現のように扱われます。空の式は使用できず、式lambdaは明示的なかっこで囲む必要があります。置換式には改行(たとえば、三重引用符で囲まれた文字列)を含めることができますが、コメントを含めることはできません。各式は、書式設定された文字列リテラルが現れるコンテキストで左から順に評価されます。

3.6アルファビルドを試しているので、What's New In Python 3.6 documentationをお読みください。それには、関連する文書やPEPへのリンクを含むすべての変更が要約されています。

ちょうど明確である:3.6は解放されないまだ;最初のアルファは2016年5月まで放出される予定はありません。3.6 release scheduleを参照してください。

+1

それが(彼らは新しいコードに重い使用を発見した場合)、F-文字列がのpython3の以前のバージョンにバックポートされることが期待されますか?私はこのどちらの方法でも答えを見つけることができませんが、これは競合のポイントのようです。 –

+0

これをバックポートする計画はありません。 PEPはこれが3.6の新機能だと述べています。 –

+0

ありがとうございます。私はこれを新しいEnum PEPと比較しようとしていましたが、これは以前の3.xバージョンにバックポートされました。 –

2

f-stringsは、中括弧内のPython式もサポートしています。

print(f"My cool string is called {name.upper()}.") 
関連する問題