66

私はPython 3.6を試しています。新しいコードを調べていると、次の新しい構文に出くわしました。

f"My formatting string!"

次のようなことができるようです。

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

誰かがこれの内部の仕組みに光を当てることができますか? 特に、f プレフィックス付きの文字列が取ることができる変数のスコープは何ですか?

4

4 に答える 4

58

PEP 498リテラル文字列補間を参照してください:

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

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

詳細については、リファレンス ドキュメントを参照してください。

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

3.6 アルファ ビルドを試しているので、 What's New In Python 3.6ドキュメントを読んでください。関連するドキュメントや PEP へのリンクを含め、すべての変更点をまとめています。

明確にするために: 3.6 はまだリリースされていません。最初のアルファ版は 2016 年 5 月までリリースされない予定です。3.6 リリース スケジュールを参照してください。

于 2016-03-02T10:50:52.387 に答える
12

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

print(f"My cool string is called {name.upper()}.")
于 2017-07-21T08:25:40.257 に答える