logo

Python の F 文字列

このチュートリアルでは、文字列フォーマットのメカニズムについて学びます。 f-string は文字列をフォーマットする最良の方法です。文字列の書式設定スタイルにより、文字列がより読みやすく、より簡潔になり、エラーが発生しにくくなります。また、他のものよりも高速です。

このトピックを深く掘り下げる前に、まず f 文字列の前に使用されていたテクニックについて説明します。

xd xd 意味

Python の古い文字列フォーマット

文字列をフォーマットするには主に 2 つの方法があります: % - フォーマットと str.format()。 ただし、どちらの方法にもいくつかの制限があります。これらのメソッドを簡単に紹介しましょう。

1.% - フォーマット

これは文字列をフォーマットする伝統的な方法ですが、ドキュメントでは次のステートメントを含むこの方法を推奨しています。

ここで説明する書式設定操作には、いくつかの一般的なエラー (タプルや辞書を正しく表示できないなど) につながるさまざまな癖があります。

新しい形式の文字列リテラルを使用するか、 str.format() インターフェースはこれらのエラーを回避するのに役立ちます。 - 公式ドキュメント

% - 書式設定の使用方法

% 演算子を使用して組み込み演算を実行できます。次の例を理解してみましょう。

 student = 'Michel' 'Hello, %s.' % student 

出力:

 Hello Michel 

タプルを使用して複数の変数を保存することもできます。次の例を見てみましょう。

 name = 'Sharma' age = 24 'Hello, %s. You are %s.' % (name, age) 

出力:

 Hello Sharma You are 24. 

% 形式が推奨されない理由

変数が増加し、文字列が長くなると、コードが非常に読みにくくなるからです。コードが乱雑に見えます。次の例を見てみましょう。

例 -

 first_name = 'Steve' last_name = 'Rogers' age = 70 profession = 'Superhero' group = 'Marvel? print(''Hello, %s %s. Your age is %s. You are a %s. You were a member of %s.' %(first_name, last_name, age, profession)') 

出力:

 Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel. 

上記のコードからわかるように、コードは読みにくくなり、エラーが発生しやすくなりました。このため、文字列をフォーマットするこの方法は適切ではありません。

2.str.format() メソッド

これは、Python 2.6 で導入された文字列をフォーマットするもう 1 つの一般的な方法です。どのように使用できるかを見てみましょう。

str.format() の使用方法

これは % フォーマットの改善です。これは、オブジェクトに対して呼び出される通常の組み込み関数とそのオブジェクトが文字列に変換されるのと似ています。

次の例を見てみましょう。

例 -

 first_name = 'Mathew' last_name = 'Zukerburg' age = 45 print('Hello, {}. You are {}.'.format(name, age)') 

format メソッド内の辞書要素にアクセスするには、format() メソッドでキーを渡します。

 person = {'name': 'Peter', 'age': 17} 'Hello, {name}. You are {age}.'.format(name=person['name'], age=person['age']) 

出力:

 Hello Peter, You are 17 

str.format() メソッドが推奨されないのはなぜですか?

str.format() は %-format メソッドよりもはるかに効率的ですが、複数のパラメータを扱う場合には依然として非常に冗長になる可能性があります。

Fストリング法

これは、PEP 498 によって導入された新しい文字列書式設定メカニズムです。リテラル文字列補間、または一般的には F 文字列とも呼ばれます。 (文字列リテラルの前の f 文字)。 このメカニズムの主な焦点は、補間を容易にすることです。

文字列の先頭に「F」という文字を付けると、その文字列は f 文字列そのものになります。 f 文字列は、 str.format() 方法。 F 文字列は、書式設定のために文字列リテラル内に Python 式を埋め込む便利な方法を提供します。

例 -

 # Python3 program introducing f-string val = 'Geeks' print(f'{val}for{val} is a portal for {val}.') name = 'Tushar' age = 23 print(f'Hello, My name is {name} and I'm {age} years old.') 

出力:

 Hello, My name is Tushar and I'm 28 years old. 

上記のコードでは、f-string を使用して文字列をフォーマットしました。実行時に評価されます。すべての有効な Python 式をその中に入れることができます。

単一のステートメントで使用できます。

 print(f'{2 * 30})' 

出力:

 60 

ただし、関数内では使用できます。

 def upercase(input): return input.uper() name = 'Sachin Tendulkar' f'{upercase(name)} is great.' 

出力:

 Sachin Tendulkar is great 

f-string はクラス オブジェクトでも使用できます。次の例を理解してみましょう。

例 -

 class Actor: def __init__(self, first_name, last_name, movie): self.first_name = first_name self.last_name = last_name self.movie = movie def __str__(self): return f'{self.first_name} {self.last_name}'s superhit movie is {self.movie}.' def __repr__(self): return f'{self.first_name} {self.last_name} {self.movie}. Superhi!' ac = Actor('Keenu', 'Reevs', 'Matrix') print(f'{ac}') 

出力:

 Keenu Reevs's superhit movie is Matrix. 

説明 -

上記のコードでは、オブジェクトを文字列として表す __str__() と __repr__() を使用しました。したがって、これらのメソッドを少なくとも 1 つクラス定義に含める必要があります。 f-string は __str__() メソッドを使用します。変換フラグを含めることで __repr__() を使用することもできます。 r.

 print(f'{ac}') print(f'{ac}'!r) 

出力:

 Keenu Reevs's superhit movie is Matrix. Keenu Reevs Matrix Superhit 

辞書のF文字列

f 文字列内の辞書キーを操作するときは注意が必要です。辞書キーと f 文字列を使用するための別の引用があります。次の例を理解してみましょう。

例 -

 detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.') 

出力:

 John is 19 years old. 

辞書の場合、以下のメソッドは使用できません。

例 -

 detail = {'name': 'John', 'age': 19} print(f'{detail['name']} is {detail['age']} years old.') 

出力:

 File '', line 2 print(f'{detail['name']} is {detail['age']} years old.') ^ SyntaxError: invalid syntax 

上記のコードでわかるように、二重引用符を一重引用符に変更すると、エラーがスローされます。

スピード

この書式スタイルを採用する理由は、その速度です。 f-string は、定数値ではなく実行時に評価されます。最小限の構文を使用して、文字列リテラル内に式を埋め込みます。定数値ではなく実行時に評価されるため、高速です。

サルマン・カーン・カーンの年齢

次の文字列比較を見てみましょう。

例 - 1:

 import timeit print(timeit.timeit('''name = 'Sachin' age = 74 '%s is %s.' % (name, age)''', number = 10000)) 

出力:

 0.0022497819736599922 

例 - 2:

 import timeit print(timeit.timeit('''name = 'Mathew' age = 40 '{} is {}.'.format(name, age)''', number = 10000)) 

出力:

 0.0025783719611354172 

例 - 3:

 import timeit print(timeit.timeit('''name = 'Rockey' age = 74 f'{name} is {age}.'''', number = 10000)) 

出力:

 0.0019360429723747075 

ご覧のとおり、f 文字列がリストの一番上にあります。

ブレース

コード内で中括弧を表示するには、次のように二重引用符を使用する必要があります。次の例を理解してみましょう。

例 -

 f'{{70 + 40}}' 

出力:

 {70 + 40} 

三重中括弧を使用すると、文字列内に単一の中括弧が表示されます。次の例を理解してみましょう。

例 -

 f'{{{90 + 4}}}' 

出力:

 {94} 

3 つ以上の中括弧を使用すると、より多くの中括弧を表示できます。

例 -

 f'{{{{70 + 4}}}}' 

出力:

 {{70 + 4}} 

バックスラッシュ

f 文字列の文字列部分ではバックスラッシュ エスケープを使用できます。ただし、f 文字列の式部分でバックスラッシュを使用してエスケープすることはできません。次の例を理解してみましょう。

文字列関数Java

例 -

 f'{'Medric Pacalo'}' File '', line 1 f'{'Medric Pacalo'}' 

出力:

 SyntaxError: f-string expression part cannot include a backslash 

インラインコメント

式に # 記号を含めることはできません。構文エラーがスローされます。次の例を理解してみましょう。

例 -

 f'Tony is {10 * 73 #Hate this!}.' f'Tonyr is {2 * 37 #Hate this!}.' 

出力:

 SyntaxError: f-string expression part cannot include '#' 

結論

3 つのメソッドのうちいずれかを使用できますが、f-string メソッドの方がより簡潔で読みやすく便利な方法です。より速く、エラーが発生しにくくなります。ストリング外で考えられるほぼすべてのシナリオと、プログラミングでこのアプローチを検討する必要がある理由について説明しました。