はじめに
Pythonでは文字列の先頭にfをつけるとf文字列になり、変数の埋め込みができるようになります。知らないよって人はぜひお試しあれ。
先日f文字列を使っているときに、試しにf以外にも文字をつけてみたら、r、b、uが使えることに気づいたので、これらについて調べてみました。
フォーマット文字列
一応f文字列の使い方はこんな感じです
a = 1
b = 2
print(f'{a}と{b}を足すと{a+b}になります')
1と2を足すと3になります
ちなみに変数の後に:
をつけると、小数点以下の表示桁数を指定したり、実は結構いろんなことができたりします。
a = 1/7
print(f'7分の1は約{a:.2f}です')
7分の1は約0.14です
これは結構便利なので、ゲームのスコア表示とか、筆者も使うときがあります。
これ以外の用法についても、以下のサイトがまとめてくれていたので、気になる人はどうぞ。
raw文字列
'文字列\n文字列'
こんなふうに改行をしたいときは\n
と打ちますよね?このように、文字列の中でそのままだと指定できない文字を、エスケープシーケンスで指定する場合、raw文字列と普通の文字列で挙動が変わります。
端的に言えば、raw文字列はエスケープ文字を処理せずに、そのままの文字列として出力します。つまり以下のようになります。
print('文字列\n文字列')
print(r'文字列\n文字列')
文字列
文字列
文字列\n文字列
また、標準ライブラリのre
を用いて正規表現を扱う際には、raw文字列を使うことが推奨されているので、raw文字列は筆者もたまに使いますね。というか筆者がゲーム以外を作らないから「たまに」なだけで、結構頻出な気がします。
バイト列
print('Hello World!!')
print(b'Hello World!!')
'Hello World!!'
b'Hello World!!'
注意点として、ASCIIしか扱えないらしいです。encode
とdecode
なら日本語も使えるし、これを使わないといけない場面ってあるんでしょうか?
バイト列自体は使いますが、これはあまり使った記憶がないですね。
バイト列にフォーカスして詳しくまとめている記事があったので、もっと詳しいことを知りたければどうぞ
Unicode文字列
先にネタバレすると以下の二つは全く同じです
print('文字列')
print(u'文字列')
文字列
文字列
Python2ではデフォルトでUnicodeとして文字列を扱っていなかったので、u''
としていたらしいです。なので現在は使い道が存在しないものみたいです。
おまけ
実はこいつら組み合わせられるらしいです。
fr または rf
a = 1
b = 2
print(rf'{a}\n{b}')
print(fr'{a}\n{b}')
1\n2
1\n2
rb
print(r'Hello\nWorld!!')
print(b'Hello\nWorld!!')
print(rb'Hello\nWorld!!')
Hello\nWorld!!
b'Hello\nWorld!!'
b'Hello\\nWorld!!'
なんかバックスラッシュが一つ増えました。
print(repr(r'Hello\nWorld!!'))
Hello\\nWorld!!
普通のraw文字列も内部的にはエスケープされたバックスラッシュ+nになっていますが、rbだけが表示の方もそうなっているようです。
結論
f文字列とraw文字列だけ知っていれば、とりあえず問題なさそう
最後に
ここまで読んでくださりありがとうございました。日本語を出力するだけでもu''
と付ける必要があったところから、f''
とすれば、変数の埋め込みができるようになったところまで、文字列一つとっても歴史があるんだなぁと感じました。