連載
» 2020年10月02日 05時00分 公開

解決!Python:[解決!Python]print関数で変数や式の値を出力するには

print関数を使って変数などの値を表示する方法と、その際に区切り文字や行末の改行を変更する方法、文字列と変数の値を組み合わせる方法などを紹介する。

[かわさきしんじ,Deep Insider編集部]
「解決!Python」のインデックス

連載目次

# 変数の値やリテラル値を出力する
s = 'deep insider'
a = 10

print(s)  # deep insider:変数の値を出力
print(100# 100:整数リテラルを出力
print('deep insider'# deep insider:文字列リテラルを出力
print([s, a])  # ['deep insider', 10]:リストを出力
print(2 * a)  # 20:式の計算結果を出力

# 複数の値を空白文字で区切って出力
print(s, a)  # deep insider 10

# 末尾の改行文字を出力しない
print(s, end=''# deep insider(改行なし):キーワード引数endに空文字列を指定

# 複数の値を区切る文字を空白文字から別の文字に変更する
print(s, a, sep=','# deep insider,10:キーワード引数sepにカンマ「,」を指定

# 変数や式の値を文字列に埋め込んで出力(出力は全て「value: 10」)
print(f'value: {a}'# f文字列を使用(Python 3.6以降)
print('value: {}'.format(a))  # 文字列のformatメソッドを使用
print('value: %d' % a)  # %演算子を使用


print関数

 print関数は0個以上の値を引数として受け取り、それらを画面などに表示する。その基本構文を以下に示す。

print(*objects, sep=' ', end='\n')


 実際には出力先となるテキストストリームを指定するパラメーターfileなどがあるが、これについてはPythonのドキュメントにあるprint関数の説明を参照のこと。

 引数を渡さなかった場合、print関数は単に改行文字を表示する。

print('first line')
print()
print('second line')


 例えば、上のコード例では文字列'first line'と改行文字と表示された後、2つ目のprint関数呼び出しで改行文字のみが表示され、それに続いて文字列'second line'と改行文字が表示される。

 上の構文に示した通り、パラメーターsepのデフォルト引数値は半角空白文字であり、パラメーターendのデフォルト引数値は改行文字となっている。そのため、これらのパラメーターに値を渡すことなく、複数の値をprint関数に渡すと、それらは空白文字で区切られて、最後に改行が行われる。

 以下に例を示す。

print(1, 2, 3# 1 2 3:print関数に渡した3つの数値が空白文字で区切られる
print(1, 2, 3, sep=', '# 1, 2, 3:3つの数値がカンマと空白文字で区切られる
print(1, 2, sep=':', end='end'# 1:2end:2つの数値がコロンで区切られ、最後にendと表示される


文字列に値を埋め込んで表示する

 「name: ○○, rank: ≪」のように「name:」と「rank:」(と間のカンマ)は常に変わらず、○○と≪が変わるような、定型の文字列とそれに合わせて変数などの値を表示したいといったときには、print関数に必要なものを順番に渡していくのが簡単だ。以下に例を示す(以下の例では、出力は全て「name: kawasaki, rank: 50」のようなものになる)。

names = ['kawasaki', 'isshiki']
ranks = [50, 100]

for name, rank in zip(names, ranks):
    print('name: ', name, ', rank: ', rank, sep='')


 この例では2つのリストをzip関数でひとまとめにしてfor文で処理して、それぞれの要素をprint関数で表示している。この方法は簡単だが、f文字列を使うと、文字列の中にnameやrankの値を埋め込めるようになる(Python 3.6以降)。人によってはこちらの方が読みやすいと感じるかもしれない。

names = ['kawasaki', 'isshiki']
ranks = [50, 100]

for name, rank in zip(names, ranks):
    print(f'name: {name}, rank: {rank}')
    print(f'name: {name}, rank: {rank:03}'# 0埋めで3桁
    print(f'name: {name}, rank: {rank:3}'# 0埋めせずに3桁
    print()


 f文字列は文字列を囲むシングルクオートやダブルクオートなどの前に「f」が付いた文字列のこと。その文字列内には波かっこ「{}」で囲まれた「置換フィールド」を記述でき、そこに変数や式を置くことで、文字列内にその値を埋め込める。2つ目と3つ目例のように、さまざまな書式指定も行えるが、これについては「Python入門」の「文字列の書式指定」などを参照してほしい。

 同様なことは文字列のformatメソッドを使っても行える。

names = ['kawasaki', 'isshiki']
ranks = [50, 100]

for name, rank in zip(names, ranks):
    print('name: {name}, rank: {rank:03}'.format(name=name, rank=rank))
    print('name: {0}, rank: {1:03}'.format(name, rank))
    print('name: {}, rank: {:3}'.format(name, rank))  # Python 3.1以降
    print('name: {0[n]}, rank: {0[r]:3}'.format({'n': name, 'r': rank}))
    print()


 上のformatメソッド呼び出しは全て同じことを行う。

 最初の例ではformatメソッドにキーワード引数としてループ変数を渡している。そのキーワード引数の名前が置換フィールドの名前になっている({name}と{rank})。次の例では、位置引数として2つのループ変数を渡し、置換フィールドでは{0}として位置引数の0番目の値に、{1}として1番目の値にアクセスしている。3番目の例では置換フィールド名を省略しているが、意味的には2番目の例と同じだ(Python 3.1以降でサポート)。

 最後の例では、ループ変数のnameとrankを使って、{'n': xxx, 'r': yyy}という辞書を作り、これをformatメソッドに渡している。置換フィールドでは、「0[n]」「0[r]」のようにして辞書の要素へアクセスをしている。

 f文字列と同様に、さまざまな書式指定も可能だが、これについては「Python入門」の「文字列の書式指定」などを参照してほしい。

 最後に%演算子を使用しても、同様なことを行える。が、現在では上記のf文字列やformatメソッドを使用した方がよいだろう。簡単なコード例だけを示す。

names = ['kawasaki', 'isshiki']
ranks = [50, 100]

for name, rank in zip(names, ranks):
    print('name: %s, rank: %d' % (name, rank))
    print('name: %(name)s, rank: %(rank)03d' % {'name': name, 'rank': rank})
    print()


「解決!Python」のインデックス

解決!Python

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。