pythonでは文字列の先頭にf, r, b,uを付けることが付けることが可能です。それぞれ別個の機能を持っており、大文字にしても同じ機能を持ちます。
はじめに(用語の確認)
リテラル:プログラム内に書かれた文字とか数字などの定数のことです。3とか、”hello”とか。
文字列リテラル:リテラルのうち、文字列を表すものです。”hello”や“I’m seventeen forever.”は文字列リテラルです。
f…フォーマット済み文字列リテラル(f-string)
python3.6で追加された新機能で、 .format()
を使うことなく 文字列の中に変数を埋め込むことが出来ます。
before
name = 'King Kai'
like = 'driving'
print("My name is {0}. I like {1}.".format(name, like))# My name is King Kai. I like driving.
after
name = 'King Kai'
like = 'driving'
print(f"My name is {name}. I like {like}.")# My name is King Kai. I like driving.
簡単だし便利ですね。fというのはformatのfのことなのでした。ちなみに以下のように関数を呼ぶことも出来ます。
def add(a,b):
return a+bx = 3
y = 5
print(f'When x = {x} and y = {y}, the sum is {add(x,y)}.')# When x = 3 and y=5, the sum is 8.
r… raw string
pythonでは文字列で表せない文字(タブや改行、改ページなど)をバックスラッシュを付けた記号で記述します。これをエスケープシーケンスと言います。例えば以下の様に記述できます。
# \nは改行、\bはバックスペース、\"はダブルクォーテーションマークprint("hello!\nMy naz\bme is \"King Kai\".")# hello!
# My name is "King Kai"
通常はバックスラッシュがあった場合エスケープシーケンスが働きますが、raw stringを用いることでそれを無視することが出来ます。
print(r"hello!\nMy naa\bme is \"King Kai\".")# hello!\nMy naa\bme is \"King Kai\"
\を表示できるため、パスを入力するときなんかに使えます。
b…バイト列リテラル
str型ではなくバイト型のインスタンスを作成します。
greeting = b'hello'
print(greeting)
print(type(greeting))# b'hello'
# <class 'bytes'>
接頭のbがバイト型を表すものです。外部からbyte列を渡されたりする場合に役に立つでしょう。ただしバイト列リテラルはASCII文字しか含むことが出来ません。日本語を扱いたい場合は素直にencodeしてください。
greeting = b'こんにちは'
→SyntaxError: bytes can only contain ASCII literal characters.
greeting = 'こんにちは'
print(greeting.encode('utf-8'))# b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
# (\x〇〇はascii文字であることを示す。〇〇は16進数
encode/decodeがある以上、 b’...‘
に出番はあるのでしょうか…
u…Unicodeに変換する
python2.xではバイト列も文字列として使っていた都合上、標準の文字コードがASCIIであったため、日本語を扱いたい場合には文字列の先頭にuをつけ print(u'こんにちは')
とする必要がありました。python3.xからはバイト列と文字列が分けられ、文字列はUnicodeとして扱われることになっため、先頭のuが使われることはなくなりました。python3.xでuを付けても何のエラーもなく動きますが、付けない場合と比べて何も変化はありません。
組み合わせる
上記の4文字は組み合わせることが可能です。例えばfとrだと以下の様になります。
def add(a,b):
return a+b
x = 3
y = 5print(f'When x = {x} and y = {y}.\nThe sum is {add(x,y)}.')
# When x = 3 and y = 5.
# the sum is 8.print(fr'When x = {x} and y = {y}.\nThe sum is {add(x,y)}.')
# When x = 3 and y = 5.\nthe sum is 8.
まとめ
fとrだけ使えればOK!
もしより詳しく知りたい方がいましたら、下記をご覧ください。
https://docs.python.org/ja/3/reference/lexical_analysis.html