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リポジトリからご覧いただけます。
Source:
https://www.digitalocean.com/community/tutorials/python-f-strings-literal-string-interpolation