2013/08/02

Python 2 の print 文の使い方

Python2 の print 文についてご紹介します。

print '文字列'

Python3 からは print は関数として位置づけられています。 Python3 の print() 関数の使い方については次のページなどが参考になるかと思います。

Python 3 の print() 関数の使い方

Python2 で「文字列出力」といえば print 文です。このページでは Python2 系における print 文の使い方を見てみましょう。

基本

s1 = 'world'
print "Hello"  # helloと表示
print s1  # worldと表示
最もベーシックな使い方は「 print 表示したい文字列」です。

print 文を普通に使うと、文字列の末尾で自動的に改行されます。 Ruby の puts に近いイメージでしょうか。'(シンルグクォーテーション)と"(ダブルクォーテーション)にちがいはありません。

複数の引数

s1 = 'tonari no'
s2 = 'kyaku ha'
s3 = 'yoku kaki ku'
print s1, s2  # tonari no kyaku ha yoku kaki kuと表示
print 文の場合「引数」と呼んでよいのかわかりませんが、引数を複数渡したい場合は「,」で区切ってつなげます。結果は、与えられた結果が半角スペースでつなげられたものとなります。

フォーマット指定

n1 = 1.414

print '%d' % n1  # 1
print '%f' % n1  # 1.414000
print '%0.1f' % n1  # 1.4
フォーマット指定は、「print フォーマット % 変数」という形で行います。

s1 = 'Hello'
s2 = 'world'

print '%s, %s' % (s1, s2)  # Hello, worldと表示
変数をひとつだけでなく複数個渡したい場合は、タプルを使います。

s1 = 'Hello'
s2 = 'world'

print '%(str1)s, %(str2)s' % \
        { 'str1': s1, 'str2': s2}
タプルではなく、辞書を渡して表示することもできます。この場合は、「%(キー名)フォーマット」という形でフォーマットを指定します。

たくさんの変数が渡したいとき、辞書の中身をフォーマットして表示したい場合なんかに便利です。

改行なし

print 'Hello',
print 'world'
# Hello worldと表示
print 文を通常のやり方で使うと末尾に改行が自動で追加されてしまいます。これを避けるには、 print 文の最後に,(コンマ)を追加します。

この例では、 Hello のあとの改行が半角スペースに変換されて表示されています。

import sys

sys.stdout.write('Hello')
sys.stdout.write('world')
# Helloworldと表示
「 print 文字列,」という形だと改行の代わりに半角スペースがひとつ入ってしまうのですが、改行も半角スペースも入れたくない場合には、
sys.stdout.write() という関数を使います。

ちなみに、 print 文は内部的にはこの sys.stdout のラッパだそうです。

標準出力以外に出力

f = open('sample.txt', 'w')
print >> f, 'ABC EFG HIJ'
f.close()
# ファイルsamle.txtに文字列ABC EFG HIJが書き込まれる
出力先を標準出力から別のものに変えたい場合は、「 print >> 出力先, 文字列」という形を使います。


その他

その他、特殊文字のエスケープやフォーマット指定子については、他の言語とよく似ているので、ここでは割愛します。

詳細は公式ドキュメントの print 文の箇所文字列フォーマットの箇所をごらんいただくとよいかと思います。

以上です。

繰り返しになりますが、ここで挙げた print 文は python2.* 系でのお話で、 python3 には適用できませんのでご注意ください。

Python 3 の print() 関数の使い方


参考
print 文 - Python 公式ドキュメント
string formatting operations - Python公式ドキュメント
Python - The difference between sys.stdout.write and print - Stack Overflow
Redirect stdout to a file in Python? - Stack Overflow
sys.stdout - Python公式ドキュメント

0 件のコメント: