home changes contents help options

019:適切な文字列リテラルを選ぶ

文字列リテラル・基本

Python において文字列を表記するにはシングルクォートかダブルクォートで挟みます。 abcde という文字列を2通りの方法で記述してみます。

>>> print "abcde"
abcde
>>> print 'abcde'
abcde

シングルクォート、ダブルクォートの違いは自身を文字列内に直接書くことができないことのみです。 どちらを用いてもかまいません。 私は普段はシングルクォートを用い、シングルクォートが含まれる文字列を書く際にはダブルクォートを使うようにしています。

>>> print 'aaa"bbb' # '' 内には " を直接書くことができる
aaa"bbb
>>> print 'aaa'bbb' # エラーとなる
  File "<stdin>", line 1
    print 'aaa'bbb'
                 ^
SyntaxError: invalid syntax

文字列内に両方のクォート文字が出てきてしまう場合はエスケープする必要があります。 これはクォート文字の前にバックスラッシュをつけることで行います。

>>> print 'aaa\'bbb"ccc'
aaa'bbb"ccc
>>> print "aaa'bbb\"ccc"
aaa'bbb"ccc
>>> print "aaa\'bbb\"ccc" # クォート文字を常にエスケープしても支障はありません
aaa'bbb"ccc

バックスラッシュそのものを文字列に含めるにはバックスラッシュを2つ並べます。

>>> print 'abc\\def'
abc\def

改行を文字列内に含めるには \n を使います。

>>> print 'abc\ndef'
abc
def

Ruby や Perl がもつ変数展開の機能はありません。これは % 演算子による 文字列フォーマット操作 で代用してください。

>>> p = 'Python'
>>> r = 'Recipe'
>>> print '%s %s' % (p, r)
Python Recipe

raw 文字列

通常の文字列ではバックスラッシュをエスケープ用の文字として使用します。 そのためバックスラッシュそのものを多用する文字列ではバックスラッシュがたくさん並んでしまうことになります。 これをさけるために、 raw 文字列が用意されています。 raw 文字列はクォートの前に r をつけることで作ることができます。

>>> print r'abc\def'
abc\def

三重クォート

通常の文字列では改行文字は \n であらわさなければなりません。 改行文字が多用された文字列をリテラルとしてコード内に書いた場合、その全貌がつかみにくくなります。

>>> print 'import sys\nfor s in sys.argv:\n    print s'
import sys
for s in sys.argv:
    print s

コード内での可読性も維持するためには文字列を三重クォートで囲みます。 この中では改行文字を表すのに改行を使うことができます。

>>> print '''\
... import sys
... for s in sys.argv:
...     print s\
... '''
import sys
for s in sys.argv:
    print s

ユニコード文字列

ユニコード文字列はクォートの前に u をつけることで作ることができます。

>>> 'あいうえお'
'\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8'
>>> u'あいうえお'
u'\u3042\u3044\u3046\u3048\u304a'

文字列リテラルの結合

文字列「リテラル」を並べると、文字列を結合することができます。 間には空白や改行が入ってもかまいません。

>>> 'Python' "Recipe"
'PythonRecipe'

この方法で結合できるのは文字列リテラルのみです。 文字列が格納された変数を並べて結合することはできないので注意してください。