7
5

More than 3 years have passed since last update.

[Python] 複数行にわたる文字列の代入

Last updated at Posted at 2020-03-15

SQLの操作などで長い文字列を変数に代入することがありますが,主に以下の2通りの方法があります.

  • 丸括弧()→非明示的な行継続の使用
  • トリプルクォート'''"""の使用

Kosei Kitahara's Works: Google Python スタイルガイドによると前者の方が推奨されています.
後者は以下の通りインデントするとその空白も文字列に含まれてしまうためです.

丸括弧()→非明示的な行継続の使用

text = ('a' # カンマは不要
        'b')
print(text) # ab

# 以下と同じ
text = 'ab'

# 註1: カンマを付けると2つの文字列のタプルとして認識されてしまう
text = ( 'a',
         'b')
print(text) # ('a', 'b')

# 註2: 実用性があるかは分かりませんが1行にまとめることが可能
text = ('a' 'b')
print(text) # ab

# 註3: これも実用性は不明ですが,行継続とタプルを併用することも可能
text = ('a', 'b'
        'c')
print(text) # ('a', 'bc')

改行には\nが必要です.
またこの手法は文字列の代入のみならず関数のインポートなどにも有効です
(関数の引数が多くなったときには自然と使っている?).

from some.deep.module.inside.a.module import (
    a_nice_function, another_nice_function, yet_another_nice_function)

Python ヒッチハイク・ガイド - コードスタイル

formatとの併用

これとformatを併用するときは,最後にまとめて.format()を書く必要があります:

text = ( 'a = {0}, '
         'b = {1}'.format(1, 2))
print(text) # a = 1, b = 2

各行に.format()を書くとSyntaxErrorになります:

# 以下はSyntaxError: invalid syntaxになる
text = ( 'a = {}, '.format(1)
         'b = {}'.format(2))

あまりに.format()の中身が複雑になるときは,文字列のリストを作成→str.join()で結合する方が良い?

トリプルクォート'''"""の使用

「三連引用符」や「三重引用符」とも言うようです.
この場合,コード上で改行した箇所で改行されます.

text = '''hello
world'''
print( text )
# hello
# world

# 以下と同じ
text = 'hello\nworld'

# 註1: 改行したくないときは\を使う
text = '''hello\
world'''
print( text ) # helloworld

# 註2: 最初と最後を改行するとその分改行が含まれてしまう
text = '''
hello
world
'''
print( text )
# (改行)
# hello
# world
# (改行)

# 註3: コード上のインデントを合わせようとするとその空白も文字列として扱われてしまう
text = '''hello
          world'''
print( text )
# hello
#           world

Let's プログラミング: 三連引用符を使った複数行の文字列の記述
note.nkmk.me: Pythonで文字列生成(引用符、strコンストラクタ)

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5