0. はじめに
動機はタイトルの通り。
システムのログなどで「変数を文章の中に入れて出力したい」みたいな場面は皆様も日常茶飯事かと思います。
が、いくつかの言語をやっているとそれぞれ微妙に文法が違うので、「あれっpythonだとどれでできるんだっけ…?」「javascriptだとこうじゃないんだっけ…?」みたいに僕はいつも混乱しています。
ということで、直近でよく使っているPythonからメモ代わりにまとめてみます。
まだ知らない方法、他言語でのまとめもあれば、今後追加するかも知れません。
1. +
で頑張って連結(連結演算子)
言わずと知れた基本文法。
文字列 + 文字列
のように書くと、文字列を連結できる。
ただし、javascriptとかでは文字列 + 数字
としても数字を自動で文字列化してくれるのでエラーにならないけど、pythonではエラーになるので必ず数字はstr()
で文字列化することに注意。
str1 = "数字:"
value1 = 1
print(str1 + str(value1))
# 出力 >> "数字:1"
短所としては、これだと+
がいっぱい出てきて無駄に長くなったり、数字をstr()
し忘れたりしてちょっと大変。
2. フォーマット済み文字列リテラル
これにはいくつかの書き方がある。
f" "
を使う方法(f文字列)
個人的にはこれが一番好き。
f" "
の中で、変数を埋め込みたい箇所は{変数}
として直接書き込む方法。
value1 = 1
value2 = 2
str = f"数字1つ目:{value1}、数字2つ目:{value2}"
print(str)
# 出力 >> 数字1つ目:1、数字2つ目:2
# 出力だけならもちろんこれもOK
print(f"数字1つ目:{value1}、数字2つ目:{value2}")
# 出力 >> 数字1つ目:1、数字2つ目:2
変数を埋めたいところに直接書き込む形なので直感的に分かりやすいのと、数字もstr()
をしなくて済むので簡便。
ただし、これも埋め込みが多いと全体が少しごちゃっとなる可能性はあるので、この辺は好みですかね。
ちなみにjavascriptでは、
let value = 1;
console.log(`数字1つ目:${value}`);
// 出力 >> 数字1つ目:1
のように、シングルクォーテーションやダブルクォーテーションではなくバックティック(キーボードだとshift + @
)で囲み、変数を埋め込みたい部分はドルマーク付きで${変数}
とします。
現在は業務でよくpythonとjavascriptを使っているので、このあたりでいつも混乱していました笑
.format()
を使う方法(formatメソッド)
変数を埋め込みたい部分を{}
としておき、その後に.format()
として順番に変数を書き込んでいく方法。
value1 = 1
value2 = 2
str = "数字1つ目:{}、数字2つ目:{}".format(value1, value2)
print(str)
# 出力 >> 数字1つ目:1、数字2つ目:2
ただし、ちょっとした短所としては、
-
format()
の中は順番通りにしないと思い通りの出力ができないので、やや間違えやすい。 - もし複数個所に同じ文字列を埋め込みたい(あんまりない気もするが)場合でも、全て順番通りに列挙する必要がある。
あたりが挙げられそう。
そこで、以下のように{仮の変数名}
で書いておき、format()
の中でバインドさせた方が、確実性や可読性が高いかも知れない。
value1 = 1
value2 = 2
str = "数字1つ目:{first}、数字2つ目:{second}".format(first=value1, second=value2)
print(str)
# 出力 >> "数字1つ目:1、数字2つ目:2
これなら、同じ文字列を複数個所に埋め込みたい(あんまりない気もするが)場合も、format()
の中身が比較的すっきりする。
3. %
を使う方法(書式指定子、書式化演算子)
書き方的には.format()
と似ている。
変数を埋め込みたい部分を、その変数の変換型に合わせて%s
や%d
など(書式指定子%
)として仮置きしておき、その後に書式化演算子%
で順番に変数を列挙する方法。
ちょっと言葉では分かりづらいので例。
str1 = "数字1つ目"
value1 = 1
str = "%s:%d" % (str1 , value1)
# 出力 >> 数字1つ目:1
ここでは、str1
を文字列%s
、value1
を符号付き10進整数%d
として埋め込んでいる。
こうした変換型については、下記Qiita記事や公式ドキュメントを参照されたい。
Pythonの%演算子による文字列フォーマット
が、現在ではこれまでに挙げてきた他の方法があり、本方法はあまり推奨されていないとのこと。
まとめ
いくつかの方法を知っておくことで、その時々で分かりやすいコードが書けそうだし、他の言語と混乱することもあるけど逆に他言語を勉強するときの役にも立ちそう。
[参考文献・記事]