print関数
今回は基本のようなお話で、print関数で変数を使用する場合の書き方を色々試してみたので、個人的な好き嫌いも含めながら解説したいと思います。
Pythonはこれまで結構色々いじってきたと思っているのですが、避けてきたこともいっぱいあります。
その中の一つが今回お話しするprint関数で変数を使用するときの書き方。
例えばこんなふうに変数が二つあったとします。
fruits = "Apple"
price = 100
この変数を使って「Apple is 100 yen.」と出力したいとき、皆さんはどのようにプログラミングされるでしょうか?
まずは私がこれまで書いてきた方法から解説していきましょう。
「+」でつなげる
多分一番簡単な書き方がそれぞれを「+」でつなげていくことでしょう。
つまりこんな感じ。
fruits = "Apple"
price = 100
print(fruits + " is " + str(price) + " yen.")
実行結果
Apple is 100 yen.
ちゃんと意図した通り表示されています。
たまに先に結合させて、変数に格納してから、その変数を呼び出すなんてこともしていました。
fruits = "Apple"
price = 100
sentence = fruits + " is " + str(price) + " yen."
print(sentence)
実行結果
Apple is 100 yen.
個人的にはこれが一番しっくりきて、どの変数がどこに入っているのか分かりやすいので、ずっと使っていました。
しかし最近、なかなか分かりやすい書き方を知って変えてみようかな、それなら他にどんな書き方があるかまとめてみようかなと思ったのが今回の記事の発端です。
分かりやすいと思った書き方:f”{変数} 文字列”
最近知った分かりやすい書き方というのは「f”{変数} 文字列” 」という書き方です。
先ほどの例を使って書いてみるとこうなります。
fruits = "Apple"
price = 100
print(f"{fruits} is {price} yen.")
実行結果
Apple is 100 yen.
これを見ると先ほどの「+でつなげる方法」は何度も「+」が出てきて、文を作るのに長くなってしまいます。
また変数は「”(ダブルクォーテーション)」で括らないのに対し、文字列は「”」で括るため、括った場所と括ってない場所が交互に出てきて分かりづらくなっています。
これを見たときは、「これほどシンプルに書けるのか」とちょっとびっくりしました。
これまで好きになれなかった書き方1:%を使う
比較対象として、私がこれまで好きになれなかった書き方も紹介していきましょう。
その一つ目が「%」を使い書式を指定する書き方です。
fruits = "Apple"
price = 100
print("%s is %d yen."%(fruits, price))
実行結果
Apple is 100 yen.
変数部分に「%s」とか「%d」といった変数の型を挿入し、最後に順番に変数を記入していく方法です。
%sは文字列、%dは数字を表していますが、他に使いそうなものをまとめてみるとこんな感じです。
書式 | 意味 |
%s | 文字列 |
%d | 符号付き整数 |
%i | 符号付き整数 |
%f | 符号付き小数 |
もっと詳しく知りたい方はこちらのページを参照してください。
このようにそれぞれの書式に意味があり、その意味が変数の型と合わないとエラーが出てしまいます。
ということで先ほどの変数部分を逆にしてみましょう。
fruits = "Apple"
price = 100
print("%d is %s yen."%(fruits, price))
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-3975a3682001> in <module>
2 price = 100
3
----> 4 print("%d is %s yen."%(fruits, price))
TypeError: %d format: a number is required, not str
%dでは「str」ではなく、「数字」を入力してくださいと出てきました。
ついでに小数の例も試してみましょう。
少数の場合は「%f」を使います。
fruits = "Apple"
price = 100.5
print("%s is %f yen."%(fruits, price))
実行結果
Apple is 100.500000 yen.
確かに小数で出力されました。
では同じ数字の書式である「%d」ではどうなるでしょうか?
fruits = "Apple"
price = 100.5
print("%s is %d yen."%(fruits, price))
実行結果
Apple is 100 yen.
エラーとならず、出力はされましたが、小数部分はカットされ、整数として出力されました。
この書き方の好きになれなかった点は、変数名が後ろにあるので、どの場所にどの変数が入るのか分かりにくいこと、さらに書式を指定しなければいけないということでした。
これまで好きになれなかった書き方2:.format(変数1, 変数2…)を使う
もう一つの好きになれなかった書き方も紹介します。
それは「.format(変数1, 変数2…)」を使う方法です。
fruits = "Apple"
price = 100
print("{} is {} yen.".format(fruits, price))
実行結果
Apple is 100 yen.
こちらの場合はそれぞれの変数の書式を書く必要はないのですが、やはり後ろに変数があり、どの部分にどの変数が入っているのか分かりにくくなってしまうのが、私の好みでない点でした。
ただこの好みに関しては個人的なものですし、出力される結果は同じなので、皆さんが好みのものを使えばいいのかなと思います。
「’(シングルクォーテーション)」か「”(ダブルクォーテーション)」か?
色々なサイトや本を読んでいると文字列を表示するのに「’(シングルクォーテーション)」で文字を括っているものもあれば、「”(ダブルクォーテーション)」で括ってあるものもあります。
一体どちらを使うのが正解なのでしょうか?
「f”{変数} 文字列”」の例を使って確かめてみましょう。
「’(シングルクォーテーション)」の場合。
fruits = "Apple"
price = 100
print(f'{fruits} is {price} yen.')
実行結果
Apple is 100 yen.
「”(ダブルクォーテーション)」の場合。
fruits = "Apple"
price = 100
print(f"{fruits} is {price} yen.")
実行結果
Apple is 100 yen.
どちらも予想された通り出力されました。
実はPythonでは「’(シングルクォーテーション)」も「”(ダブルクォーテーション)」も文字列に対して使うことができます。
では同じものとして認識されているかというとそうではありません。
そのため前を「’(シングルクォーテーション)」、後ろを「”(ダブルクォーテーション)」にするとエラーが出ます。
fruits = "Apple"
price = 100
print(f'{fruits} is {price} yen.")
実行結果
File "<ipython-input-14-09a977eb4ef9>", line 4
print(f'{fruits} is {price} yen.")
^
SyntaxError: EOL while scanning string literal
状況に応じて使い分けなければいけない時もあるようですし、Python以外の言語をやる時には使い分けが必須の場合もあるので注意です。
ただPythonで普段使っている分にはどちらか一方を使っていれば特に問題はなさそうです。
個人的には「”(ダブルクォーテーション)」の方がタイプしやすいので、こちらばかりを使っています。
ということで今回はprint関数で変数を使う場合の書き方を解説してみました。
皆さんも好みの書き方を見つけて、効率をアップさせるのがいいかと思います。
ではでは今回はこんな感じで。
コメント