Pythonのf-strings – PEP 498 – リテラル文字列補間

Pythonのf-文字列またはフォーマット済み文字列は、文字列をフォーマットする新しい方法です。この機能は、Python 3.6でPEP-498の下で導入されました。これはまた、リテラル文字列補間とも呼ばれます。

f-文字列が必要な理由は何ですか?

Pythonは文字列をフォーマットするさまざまな方法を提供しています。それらを素早く見て、それらが持つ問題点について見てみましょう。

  • %フォーマット – 単純なフォーマットには優れていますが、文字列、整数、倍精度浮動小数点数にしか対応していません。オブジェクトとは使用できません。

  • テンプレート文字列 – これは非常に基本的です。テンプレート文字列は、辞書のようなキーワード引数と動作します。関数を呼び出すことは許されず、引数は文字列でなければなりません。

  • 文字列のformat() – Pythonの文字列 format() 関数は、%-formattingとテンプレート文字列の問題や限られた機能を克服するために導入されました。しかし、それはあまりにも冗長です。簡単な例でその冗長性を見てみましょう。

    >>> age = 4 * 10
    >>> 'My age is {age}.'.format(age=age)
    'My age is 40.'
    

Pythonのf-stringsは、format()関数とほぼ同様に機能しますが、format()関数が持つすべての冗長性を取り除きます。上記の文字列をどのように簡単にフォーマットできるかを見てみましょう。

>>> f'My age is {age}'
'My age is 40.'

Pythonのf-stringsは、文字列フォーマットのための最小限の構文を持つために導入されました。式は実行時に評価されます。Python 3.6以上のバージョンを使用している場合は、すべての文字列フォーマット要件にf-stringsを使用する必要があります。

Pythonのf-stringsの例

簡単なf-stringsの例を見てみましょう。

name = 'Pankaj'
age = 34

f_string = f'My Name is {name} and my age is {age}'

print(f_string)
print(F'My Name is {name} and my age is {age}')  # f and F are same

name = 'David'
age = 40

# f_stringはすでに評価され、今後変更されません
print(f_string)

出力:

My Name is Pankaj and my age is 34
My Name is Pankaj and my age is 34
My Name is Pankaj and my age is 34

Pythonはステートメントを一つ一つ実行し、f-stringの式が評価されると、プログラムの後半で’name’と’age’変数が変更されても値は変わりません。したがって、上記のコードスニペットでは、f_stringの値は変更されません。

1. 式と変換を伴うf-strings

f-stringsを使用してdatetimeを特定の形式に変換したり、f-stringsで数学的な式を実行したりできます。

from datetime import datetime

name = 'David'
age = 40
d = datetime.now()

print(f'Age after five years will be {age+5}')  # age = 40
print(f'Name with quotes = {name!r}')  # name = David
print(f'Default Formatted Date = {d}')
print(f'Custom Formatted Date = {d:%m/%d/%Y}')

出力:

Age after five years will be 45
Name with quotes = 'David'
Default Formatted Date = 2018-10-10 11:47:12.818831
Custom Formatted Date = 10/10/2018

2. f-stringsは生の文字列をサポート

f-stringsを使用して生の文字列を作成することもできます。

print(f'Default Formatted Date:\n{d}')
print(fr'Default Formatted Date:\n {d}')

出力:

Default Formatted Date:
2018-10-10 11:47:12.818831
Default Formatted Date:\n 2018-10-10 11:47:12.818831

3. f-stringsオブジェクトと属性を使用する

f-stringsではオブジェクトの属性にもアクセスすることができます。

class Employee:
    id = 0
    name = ''

    def __init__(self, i, n):
        self.id = i
        self.name = n

    def __str__(self):
        return f'E[id={self.id}, name={self.name}]'


emp = Employee(10, 'Pankaj')
print(emp)

print(f'Employee: {emp}\nName is {emp.name} and id is {emp.id}')

出力:

E[id=10, name=Pankaj]
Employee: E[id=10, name=Pankaj]
Name is Pankaj and id is 10

4. f-stringsで関数を呼び出す

f-stringsのフォーマット内で関数を呼び出すこともできます。

def add(x, y):
    return x + y


print(f'Sum(10,20) = {add(10, 20)}')

出力: Sum(10,20) = 30

5. f-stringsのスペース

式に先行または後続するスペースは無視されます。リテラル文字列部分にスペースが含まれている場合は、保持されます。

>>> age = 4 * 20
>>> f'   Age = {  age   }  '
'   Age = 80  '

6. f-strings内でのラムダ式

f-stringsの式内でもラムダ式を使用することができます。

x = -20.45
print(f'Lambda Example: {(lambda x: abs(x)) (x)}')

print(f'Lambda Square Example: {(lambda x: pow(x, 2)) (5)}')

出力:

Lambda Example: 20.45
Lambda Square Example: 25

7. f-stringsのさまざまな例

Pythonのf-stringsのさまざまな例を見てみましょう。

print(f'{"quoted string"}')
print(f'{{ {4*10} }}')
print(f'{{{4*10}}}')

出力:

quoted string
{ 40 }
{40}

これで、Pythonのフォーマット済み文字列、またはf-stringsについての説明は以上です。

完全なPythonスクリプトやその他のPythonの例は、当社のGitHubリポジトリからご覧いただけます。

参考:PEP-498公式ドキュメント

Source:
https://www.digitalocean.com/community/tutorials/python-f-strings-literal-string-interpolation