【Python】 f-stringの使い方の基本

Python データソースと書式

f-string(フォーマット済文字列リテラル)は文字列のフォーマットを制御する方法の一つで、Python3.6から導入されています。
これは従来より使用されている%やstr.format()より簡易化が図られています。
今回は、このf-stringの基本について、具体例を交えながらまとめます。

確認した環境

  • OS: Ubuntu16.04LTS
  • Python3.7.4

f-stringとは

formatted string literal (フォーマット済み文字列リテラル)とよび、従来str.format()で書式設定していたものを、もっと簡易化したものです。
Python3.6から導入されています。

主な特徴

  • 文字列の先頭に’f’ または ‘F’ を付けます。
  • {}で囲われた置換フィールドの中にPythonの式を書きます。スクリプトが実行されると、この式の評価結果が出力されます。
  • 書式設定は上記のPythonの式の後にコンマ(:)で区切って指定します。

format()との比較

format()との違いを比較してみます。
大きな違いは、先頭に’f’を付けること、および置換フィールド{}に変数を直接記載することです。これだけですが、だいぶすっきりと、且つ直感的になったように思います。

  • formatの場合
  • >>> a = 7
    >>> b = 3
    >>> name = 'Hibikisan'
    
    >>> '{0} | {1} ÷ {2} = {3:.3f}'.format(name, a, b, a/b)
    'hibikisan | 7 ÷ 3 = 2.333'
  • f-stringsの場合
  • 
    >>> a = 7
    >>> b = 3
    >>> name = 'Hibikisan'
    
    >>> f'{name} | {a} ÷ {b} = {a/b:.3f}'
    'hibikisan | 7 ÷ 3 = 2.333' 

使い方の詳細

文字列の先頭に’f’または’F’を付与

f-stringを表す接頭辞は、小文字の’f’、大文字の’F’どちらでも使えます。

>>> city = 'Tokyo'

# 先頭に'f'
  >>> f'{city} in Japan'
'Tokyo in Japan'

# 先頭に'F'
>>> F'{city} in Japan'
'Tokyo in Japan'

文字列リテラルを囲う引用符

文字列は一重引用符 (‘)、二重引用符 (“)、三連の一重引用符(”’)や三連の二重引用符(“””)で囲います。このうちどれでも使えますが、最初と最後の引用符は同じであるひつようがあります。

>>> a = 123

# 一重引用符 (')
>>> f'val = {a}'
'val = 123'

# 二重引用符 (")
>>> f"val = {a}"
'val = 123'

# 三連の一重引用符
>>> f'''val = {a}'''
'val = 123'

# 三連の二重引用符
>>> f"""val = {a}"""
'val = 123'

エスケープシーケンス

バックスラッシュ (\) 文字で、改行文字(\n)、タブ(\t)、クオート文字(\’)などをエスケープできます。

# 改行(\n)
>>> print(f'Tokyo\nYokohama')
Tokyo
Yokohama

# タブ(\t)
>>> print(f'Tokyo\tYokohama')
Tokyo	Yokohama

但し、RAW文字リテラル(※)の場合は、バックスラッシュ(\)文字はエスケープ文字とは見なされず、通常の文字として扱われます。
(※)先頭に’r’または’R’を付けた文字リテラル。この場合はバックスラッシュ(\)は通常の文字として扱われる。

# バックスラッシュは通常の文字として扱われる
>>> print(fr'Tokyo\nYokohama')
Tokyo\nYokohama

>>> print(rf'Tokyo\tYokohama')
Tokyo\tYokohama

置換フィールドの記述

{}で囲われた置換フィールドの中にPythonの式を書きます。色々な例を以下に挙げてみます。

  • 数値演算
  • >>> a = 7
    >>> b = 2
    >>> f'{a} + {b} = {a+b}'
    '7 + 2 = 9'
  • リスト
  • >>> l = [1, 2, 3]
    >>> f'{l[0]}'
    '1'
    >>> f'{l[1]}'
    '2'
    >>> f'{l[2]}'
    '3'
  • 辞書
  • >>> d = {'a': 1, 'b':2, 'c':3}
    >>> f'{d["a"]}'
    '1'
    >>> f'{d["b"]}'
    '2'
    >>> f'{d["c"]}'
    '3'

    ※キー(key)の指定する際に、引用符がf-stringの文字リテラルの引用符と重複しないように注意

    # 引用符に注意
    >>> f'{d['a']}'
      File "", line 1
        f'{d['a']}'
              ^
    SyntaxError: invalid syntax
  • 関数も使えます
  • >>> def func(a, b):
    ...     return a+b
    
    >>> a = 2
    >>> b = 5
    >>> f'{func(a, b)}'
    '7'
  • 改行も入れられます
  • a = 10
    b = 5
    
    def func(a, b):
        return a+b
    
    print(f'''Sample strings {func(a, b
        )}''')
    
    # Sample strings 15
  • コメントは入りません
  • print(f'''Sample strings {func(a, b
        ) # comment} ''')
      
      # SyntaxError: f-string expression part cannot include '#'
  • 式を空にすることはできません。空にするとErrorが送出されます。
  • >>> a = 1
    >>> b = 3
    >>> f'{}, {b}'
      File "", line 1
    SyntaxError: f-string: empty expression not allowed
  • 式の中でバックスラッシュは使用できません
  • >>> f'{"abc\ndef"}'
      File "", line 1
    SyntaxError: f-string expression part cannot include a backslash
    
    # バックスラッシュが必要な場合は、一時変数を作成すれば対応可能です。
    >>> s = "abc\ndef"
    >>> f'{s}'
    'abc\ndef'

書式設定

書式設定はPython式の後にコロン(:)に続けて記述します。
記述方法は、format()で使われる書式指定ミニ言語仕様と同じです。

(参考記事)【Python】formatを用いた書式設定の基本

  • 整数値(’*’でパディング、右寄せ、フィールド幅15)
  • >>> a = 1234567
    >>> f'{a:*>15d}'
    '********1234567'
  • 浮動小数点(0パディング、右寄せ、フィールド幅10、小数点以下3桁まで表示)
  • >>> a = 3.141592653589793
    >>> f'{a:010.3f}'
    '000003.142'
  • 文字列(”*”でパディング、右寄せ、フィールド幅10)
  • >>> s = 'abcdef'
    >>> f'{s:*>10s}'
    '****abcdef'
  • 10進数→2進数変換(接頭辞’0b’あり)
  • >>> a = 1000
    >>> f'{a:#0b}'
    '0b1111101000'
  • 2進数→10進数変換
  • >>> a_ = 0b1111101000
    >>> f'{a:d}'
    '1000'

    入れ子構造

    入れ子構造も可能です

    >>> a = 100
    >>> for n in ['0b', '0o', '0x']:
    ...     f'{a:5d} <==> {a:#{n}}'
    ... 
    '  100 <==> 0b1100100'
    '  100 <==> 0o144'
    '  100 <==> 0x64'

    まとめ

    Python3.6から導入されたf-stringの使い方についてまとめました。

    参考)公式リファレンス:2.4.3. フォーマット済み文字列リテラル

    Learn more...

    書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

    シェアする
    ひびきをフォローする
    Hbk project

    コメント

    1. […] 参考記事)【Python】 f-stringの使い方の基本 […]