gl5_progのメモ

自分のためのメモとかまとめとか

行を分割できる場合、できない場合。

Pythonの文法はインデントに意味があるので、変なことするとすぐにインデントエラーになってしまいます。
http://ideone.com/CQDreC

def GetValue_Hoge():
    return 10
def GetValue_HogeHoge():
    return 20
def GetValue_Foo():
    return 30
def GetValue_Wanwan():
    return 40
 
# 1行ではなく
value = GetValue_Hoge() + GetValue_HogeHoge() + GetValue_Foo() + GetValue_Wanwan()
 
# こうやって複数行に分けたい
value = GetValue_Hoge()
      + GetValue_HogeHoge()
      + GetValue_Foo()
      + GetValue_Wanwan()

実行結果

  File "prog.py", line 17
    + GetValue_HogeHoge()
    ^
IndentationError: unexpected indent

しかし変なことをやっても大丈夫な場合もあります。
http://ideone.com/rVcKmI

# この書き方はエラーにならない
valueList = [
      10
    , 20
    , 30
    , 999
    ]

そこでどういう書き方は大丈夫なのか調べてみました。
http://ideone.com/aw0CgV
長いのでここに転載しませんが、まとめると以下のような感じでしょうか。

  • 式の途中なら分割できる

最初の書き方がダメだったのは、最初の行内で式が完結しているのでそこで文の終わりとみなされ、次の行以降が不正なインデントとなってしまったためです。

value = GetValue_Hoge()
      + GetValue_HogeHoge()
      + GetValue_Foo()
      + GetValue_Wanwan()

このように式の途中なら改行できます。

value = GetValue_Hoge(
      ) + GetValue_HogeHoge(
      ) + GetValue_Foo(
      ) + GetValue_Wanwan()

ただ、上記の書き方はあまり美しくないのでこっちの方がいいでしょう。

value = ( GetValue_Hoge()
        + GetValue_HogeHoge()
        + GetValue_Foo()
        + GetValue_Wanwan()
        )