Python入門 - 文字列型(str); 文字列の仕組みと出力方法について
本ページではPythonの入門コンテンツとして初学者向けにPythonでの文字列の取り扱いについて記載します。
Pythonにおける「文字列」とは#
文字列 (string) 、という単語は文字が列状に集まったもの、つまり日本語や英語の文など、日常生活で目にする文章などを指していますね。
Pythonにおける文字列も大抵の場合はそうです。意味の通る文章を文字列として記述する場合が大多数です。しかし、プログラミング言語であるため Pythonが「こいつは文字列だ」と判断するために厳密な定義があります。
Pythonの文字列は、 以下のいずれかの条件を満たす必要があります。
シングルクオーテーション(single quotation; 一重引用符 ' )で囲まれていること
ダブルクオーテーション(double quotation; 二重引用符 " )で囲まれていること
3つのシングルクオーテーション( ''' )で囲まれていること
3つのダブルクオーテーション( """ )で囲まれていること
これらを満たしていればどのようなものでも文字列であり、逆に言うとこれらの条件を満たしていなければ意味の通った文章であろうとも文字列ではありません。
文字だけだとわかりづらいので、具体的な例で示しますね。
# シングルクオーテーションで囲まれているので文字列
'これは文字列'
# ダブルクオーテーションで囲まれているので文字列
"これも文字列"
# 3つのシングルクオーテーションで囲まれているので文字列
'''これも文字列
3つの引用符による形式は複数行に渡って記述ができます。
こんな感じに。'''
# 3つのダブルクオーテーションで囲まれているので文字列
"""これも文字列
3つの引用符による形式は複数行に渡って記述ができます。
こんな感じに。"""
# これは囲まれていないので文字列ではない
これは文字列じゃないです
# 意味はなしていないし数字も記号も入っているけど、文字列
'hsj789_!!()%&)#(dsaf_*{}[]p@djap'
3つの二重引用符を利用した文字列は docstring と呼ばれる機能として利用されることが多く、コード上で文字列として利用することは稀かもしれません。まだ触れていませんが、Pythonではコードを記述する際にインデントを多用するためこの形式で文字列を記述できても使い勝手が微妙な場面があるためです。
文字列の中にはどんな文字も書くことができるのか?#
文字列としての定義を満たすことができればどのような文字をいれてもよい、というのはそうなのですが、以下の文字には注意が必要です。
改行
バックスラッシュ ( \ )
文字列の定義にかかわる文字 ( ', " )
改行#
プログラム上では、改行も立派な文字です。これは 改行コード あるいは 改行文字 と呼ばれ、その文字が現れたらプログラム側は改行を行うことが取り決められています。
少し上の例でも出てきていますが、3つの引用符を利用する方法以外では文字列の中で改行を行うことができません。
'途中で改行すると
エラーになります'
しかし、3つの引用符を用いない場合でも 改行文字を文字列の中に含めることはできます。 \n という特殊な文字を入れることで改行を行うことができます。
print('これは途中で\n改行されています。')
上記のコードを実行してみると、 \n を入れている個所で出力が改行されていることが確認できるかと思います。
バックスラッシュ ( \ )#
バックスラッシュ ( \ ) はプログラミングを経験したことがない人はなじみがないかもしれませんが、Windowsでのファイルパスを示す文字列に利用されているものです。表示に利用しているフォントによっては、円マークとして表示される場合もあります[1] 。
バックススラッシュは文字列の中では特別な記号として取り扱われ、 エスケープ文字 (escape character)とも呼ばれます。エスケープ文字を利用することで、本来通常の文字だけでは表現できないものを書くことができます。
例えば先ほど説明した改行文字 \n がまさにこの特殊な文字です。これ以外にも例えば以下のようなものがあります。
文字 | 意味 |
---|---|
\n | 改行(new line)文字 |
\t | 水平タブ(horizontal tab)文字 |
\v | 垂直タブ(vertical tab)文字 |
\a | ベル文字 (OSの用意したベル音が鳴る) |
しかしこれだとバクスラッシュそのものが文字列の中に書けないのではないか、とお気づきの方もいらっしゃるかもしれません。バックスラッシュ自体を表示したい場合には、バックスラッシュの前にバックスラッシュを置けばOKです。
print('バックスラッシュ -> \\')
文字列の定義にかかわる文字 ( ', " )#
これらの文字は文字列の開始と終了にかかわってくるため、通常の方法では文字列として入れ込むことができません。シングルクオーテーションで囲まれた文字列の途中でシングルクオーテーションが出てくると、そこで文字列が終了したと勘違いしてしまうためです。
例えば以下は文字列として認識できず、エラーになります。
'ここまではいいけど'ここからは文字列として認識できない'
それではどうすればシングルクオーテーションやダブルクオーテーションを文字列の中に含めることができるのでしょうか。以下のように解決することができます。
違う種類のクオーテーションで囲むようにする
エスケープ文字を利用する
違う種類のクオーテーションで囲むようにする#
これは単純で見た目的にもわかりやすい方法です。例えばシングルクオーテーションを文字列に含めたい場合にはダブルクオーテーションで囲むようにすればよい、といった具合です。
"ダブルクオーテーションの中であれば 'シングルクオーテーション' を使っても問題がない"
'シングルクオーテーションの中であれば "ダブルクオーテーション" を使っても問題がない'
"""3つの引用符による方法であれば
"ダブルクオーテーション" も
'シングルクオーテーション' も
両方問題がない"""
エスケープ文字を利用する#
ここでもエスケープ文字が活躍します。ダブルクオーテーションあるいはシングルクオーテーションをエスケープすることでそのまま文字列として表現できるようになります。
'これなら\' シングルクオーテーション\' もOK'
"これなら\" ダブルクオーテーション\" もOK"
ただし、こちらの方はエスケープ文字が入ってきてしまうため可読性が低くなりやすいです。
文字列を出力する方法#
これまでにも何度か登場していますが、文字列をターミナル上に表示するためには print() という関数を利用します。
print("何かしらの文字列")
現時点では、 print() のカッコの中に何かを入れるとその内容が表示されるもの、と思ってください。
いくつか出力を試してみる#
実際に今までに出てきた文字列を出力してみましょう。単にそのまま文字列が出てくるだけではありますが...
print("これなら\" ダブルクオーテーション\" もOK\nここで改行")
print("""3つの引用符による方法であれば
"ダブルクオーテーション" も
'シングルクオーテーション' も
両方問題がない""")
環境によっては無効化されている場合がありますが、以下の例ではベル文字を出力することでターミナルから警告音を鳴らすことができます。
print('\a')
以下の例では水平タブにより綺麗に整列したテーブルを表示することができます。
print('\tName\tAge\n\tAlice\t17\n\tBob\t19\n')
# よりわかりやすく書くならこう
print('\tName\tAge')
print('\tAlice\t17')
print('\tBob\t19')
出力は以下のようになるはずです。
Name Age
Alice 17
Bob 19
Alice と Bob はよくアルファベット順で適当な名前を表現する際に利用されるもので、他意はありません。
ちなみに、こちらの例で気づかれたかもしれませんが、 print() は文字列の後に自動的に改行を入れます。
そのほかの文字列の機能#
ちょっとここまでのセクションには入りきらなかった文字列に対する幾つかの特徴をここで記載します。
文字列を結合する#
Python の文字列は + を利用することでくっつけることが可能です。まるで足し算をするようです。
print('この文字列と' + 'この文字列を結合')
上記の例ではあまり意味がありませんが、プログラム上で文字列を結合したい場合は割とあります。
逆に引き算もできそうに思えてしまいますが、引き算はできません。
文字列を繰り返す#
それでは掛け算ならできるのでは?と思ったかもしれません。 できます。
Python では 掛け算は × の代わりに * を利用して表現します。
print('abc'*4)
上記を実行することで abcabcabcabc が出力されます。
ちなみに、割り算はできません。
文字列であることを確認する#
ここまで文字列と表現してきましたが、実はPython上では文字列は str という「型」として認識されています。
型 (type) というものはプログラミング言語でデータを保存したり表示したりする際に必要となる情報です。これらは単なる数値などにも定義されており、Python上に存在するデータはすべての型というものを持っています。
Pythonで特定のデータの「型」が何なのかを確認するためには type という関数を利用します。
type('文字列だよ')
# => <class 'str'>
何やら class という表記がくっついていますが、Pythonの型にはこれがつくものだと思っておいてください[2] 。
まとめ#
本ページでは Python 上で文字列というものがどのように表現されるのかを確認しました。また、文字列を表示する方法も確認しました。
今後はこの文字列と出力を利用してプログラムの結果を出力したり、途中経過を確認したりするため非常に重要な機能を学んだことになります。