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 ドキュメント