ひらめの日常

日常のメモをつらつらと

Python3.6で文字列を扱うならf-strings

f-stringsとは

Python3.6から追加された文字列の操作のための新しい記法の一つです。例をあげてみるとこのような感じになります。

name = 'Bob'
age = 20
f"my name is {name}. I am {age} year's old."
# => my name is Bob. I am 20 years's old.

f'文字列'というように、文字列の前にfをつけて宣言します。そして{}の中で動的に変数を展開し、その値を出力しています。

ドキュメントはこちらです。
www.python.org

This PEP is driven by the desire to have a simpler way to format strings in Python.

とあるように、文字列をフォーマットするためのより簡潔な記法を実現しています。 今までだと上記の例でしたら、次のように書く必要があり、format()の分行が長くなります。
さらに、文章が長くなり代入する文字列も増えてくると、{}を発見した後にfomatの中身をみてもう一度{}を確認しに行く...といったコードリーディングの際にも冗長性が発生します。

"my name is {n}. I am {a} year's old.".format(n=name, a=age)

使い方例

こちらの記事を参考にしました。

qiita.com

関数を評価

{}内は動的に評価されるために、関数を書いてその返り値を出力することができます。

def calc_tax(price):
    return price * 1.08

f'This pencil is {calc_tax(100)} yen.'
# => This pencil is 108 yen.

配列アクセス

fruits = ['apples', 'oranges', 'bananas']
f'I like {fruits[0]}'
# => I like apples.

{}のネスト

{}はネスとしてもよく、その都度変数が展開されます。

float_val = 0.123456
size = 4
f'result: {float_val:.{size}}'  
#=> 'result: 0.1235'

注意点

f-strings記法では、バックスラッシュ(\)を入れてはいけません。一番最初にあげた例だと、次のように書くことができそうですが、SyntaxErrorが帰ってきます。

f'my name is {name}. I am {age} year\'s old'
# => SyntaxError: f-string expression part cannot include a backslash