ウェブサイト検索

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


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

なぜ私たちはf-stringsが必要なのですか?

Pythonは文字列をフォーマットするためのさまざまな方法を提供しています。これらについて簡単に見てみましょう、そしてそれぞれの問題点は何かを探ります。

  • %フォーマット - シンプルなフォーマットには最適ですが、文字列、整数、倍精度浮動小数点数のみのサポートが限られています。オブジェクトでは使用できません。

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

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

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

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

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

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

Pythonのf文字列の例

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

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 is already evaluated and won't change now
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-ストリングを使用して、datetimeを特定の形式に変換できます。また、f-ストリング内で数学的な式を実行することもできます。

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-string

f文字列内でもオブジェクトの属性にアクセスできます。

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文字列のフォーマットでも関数を呼び出すことができます。

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


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

合計(10,20)=30

5. 空白を含む f-string

式に先頭または末尾に空白がある場合、それは無視されます。リテラル文字列部分に空白が含まれている場合は、それらは保持されます。

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

6. f-文字列を使ったラムダ式

私たちはラムダ式をf-string式の中でも使うことができます。

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文字列の例を見てみましょう。

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

出力 :

quoted string
{ 40 }
{40}

これがPythonのフォーマット済み文字列、つまりf-stringsについてのすべてです。

完全なPythonスクリプトやその他のPythonの例は、私たちのGitHubリポジトリからチェックできます。

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

関連記事: