web-dev-qa-db-ja.com

python-3.6で 'f'プレフィックスを持つ文字列

Python 3.6。新しいコードを調べてみると、この新しい構文に出くわしました。

f"My formatting string!"

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

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

誰もがこの内部の仕組みに光を当てることができますか?特に、f接頭辞付き文字列が取ることができる変数のスコープは何ですか?

51
DevShark

PEP 498Literal String Interpolation を参照してください:

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

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

詳細は リファレンスドキュメント にあります。

フォーマットされた文字列リテラルの式は、いくつかの例外を除き、括弧で囲まれた通常のPython式のように扱われます。空の式は許可されず、lambda式は明示的な括弧:置換式には改行を含めることができますが(たとえば、三重引用符で囲まれた文字列で)、コメントを含めることはできません。

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

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

43
Martijn Pieters

このPEP498にはPython <3.6へのバックポートがあることに注意してください

pip install fstring

from fstring import fstring

x = 1

y = 2.0

plus_result = "3.0"

print fstring("{x}+{y}={plus_result}")

# Prints: 1+2.0=3.0
6
RinSlow

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

print(f"My cool string is called {name.upper()}.")
5
David Gladson