Python Tech 文字列

Python 複数行の文字列をスマートに定義する

Pythonのコーディング規約 PEP8 では1行の長さは最大でも79文字とされています。

しかし、長い文章やSQL、桁数の大きい数値を文字列で格納すると、どうしても1行80文字を超えることがあります。

それでもやはり、どんなエディタでも見やすい良いコードにするには、だいたい80文字を超えないようにするのが良いでしょう。

このページでは、1行の長さを抑えるために、文字列を複数行に渡って定義する方法をまとめています。

  • 1行が長い文字列を行を分けて定義する様々な方法
  • 複数行のある文字列を定義する三連引用符

 

結論

1行が長い文字列を行を分けて定義する様々な方法

()を利用した文字列の結合

text = (
    'hogehoge'
    'fugafuga'
    'piyopiyo'
    'hogerahogera'
)
print(text)
# hogehogefugafugapiyopiyohogerahogera

 

バックスラッシュを利用した文字列の結合

text = 'hoge' \
        'fuga'
print(text)

 

複数行の文字列を改行を含めて定義する方法(三連引用符)

text = """hoge hoge
fuga fuga
piyo piyo"""

print(text)
# hoge hoge
# fuga fuga
# piyo piyo

 

実行環境

Python 3.9.2

 

()を利用して文字列を複数行で定義

例えば次のように長い文字列を、複数の行に分けて書いて定義したいとき。

print('hogehogefugafugapiyopiyohogerahogera')
# hogehogefugafugapiyopiyohogerahogera

 

Pythonでは、丸括弧 () で囲んだ部分はひとつの行とし認識します。これは暗示的な行の結合(Implicit line joining)と呼ばれます。

これと、文字列の連結 + を組み合わせて、次のように複数行で書けます。

text = (
    'hogehoge'
    + 'fugafuga'
    + 'piyopiyo'
    + 'hogerahogera'
)
print(text)
# hogehogefugafugapiyopiyohogerahogera

 

また、Pythonでは、文字列リテラルを(スペースを隔てて)隣り合わせて書くと、それらが連結して認識されます。

s = 'abc' '123'
print(s)
# abc123

 

これと () を利用して、上と同じ内容を次のように書くことも可能です。

text = (
    'hogehoge'
    'fugafuga'
    'piyopiyo'
    'hogerahogera'
)
print(text)
# hogehogefugafugapiyopiyohogerahogera

 

文字列型の変数を連結する場合は演算子 + を用います。

t1 = 'aaaa'
t2 = 'bbbb'
text = (
    t1 
    + t2 
    + 'ccccccccccc'
)
print(text)
# aaaabbbbccccccccccc

 

改行を含める場合

なお、このように複数行に分けて文字列を定義しても、改行そのものは含まれません。改行が必要なときは、改行コード(\n\r\n など)を加えます。

text = (
    'hogehoge'
    'fugafuga\r\n'
    'piyopiyo'
    'hogerahogera\r\n'
)
print(text)
# hogehogefugafuga
# piyopiyohogerahogera

 

バックスラッシュを利用して文字列を複数行で定義

行の末尾にバックスラッシュ(\)を書くと、改行してもその行が継続しているとみなされます。(改行しても無視される)

1行が80文字を超えるような長い行になりそうなときには、バックスラッシュを活用し、何行かに分けてコーディングします。

text = 'hoge' \
        + 'fuga'
print(text)
# hogefuga

 

なお文字列リテラルの場合、2つ以上のリテラルを隣り合わせで書くと1つのリテラルに結合されます。

これを利用して、上のコードは次のように書くこともできます。

text = 'hoge' \
        'fuga'
print(text)
# hogefuga

 

変数の場合にはこのテクニックが使えないので、演算子+ で結合します。

t1 = 'zzzz'
text = 'aaaaaa' \
        + t1 \
        + 'bbbbbbbb'
print(text)
# aaaaaazzzzbbbbbbbb

 

Pythonドキュメントではバックスラッシュ \ を使った行継続をExplicit line joining(明示的な行の結合)と表現しており、括弧 () やブラケット []を使ったImplicit line joining(暗示的な行の結合)とセットで覚えておくといいでしょう。

 

複数行の文字列を改行を含めて定義

複数行にわたる長い文字列を、改行も含めてひとつのリテラルとして定義するにはどうしたらいいでしょうか?

この場合、三連引用符("""..."""または'''...''')を用います。

ダブルクオーテーション、シングルクオーテーションを3つ重ねることで三連引用符となります。文字列はコードに書いたとおりに表現され、コード中に改行したところには改行文字(\nなど)が自動で加えられます。

text = """hoge hoge
fuga fuga
piyo piyo"""
print(text)
# hoge hoge
# fuga fuga
# piyo piyo

text = '''hoge hoge
fuga fuga
piyo piyo'''
print(text)
# hoge hoge
# fuga fuga
# piyo piyo

 

これらは改行文字を使った次のコードと同じ結果です。

text = "hoge hoge\nfuga fuga\npiyo piyo"
print(text)
# hoge hoge
# fuga fuga
# piyo piyo

 

三連引用符では、スペースやタブなども書いたまま反映されます。

text = """hoge hoge
 fuga fuga
\tpiyo piyo"""

print(text)
# hoge hoge
#  fuga fuga
#         piyo piyo

 

改行文字を自動で含めない

改行文字を自動で付与しないようにするには行末にバックスラッシュ \ を挿入します。

text = """hoge hoge
fuga fuga\
piyo piyo"""

print(text)
# hoge hoge
# fuga fugapiyo piyo

 

これを利用して、上で使ったサンプルコードは、次のように書き直せます。

text = """\
hoge hoge
fuga fuga
piyo piyo"""
print(text)
# hoge hoge
# fuga fuga
# piyo piyo

 

 

Pythonの学習法について

Python の勉強が辛くなっていませんか?

Pythonは比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。

ゼロから独学で勉強するのは厳しい道のりです。

今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。

できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。

 

今回参考にしたページ・資料

PEP 8 -- Style Guide for Python Code | Python.org

2. Lexical analysis — Python 3.6.15 documentation

3. 形式ばらない Python の紹介 — Python 3.9.4 ドキュメント

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech, 文字列
-,