これが私のいのり、私のねがい
Ruby の <<~
のように美しいヒアドキュメントを Python でも生み出したい!
Ruby 2.4.0 リファレンスマニュアル » リテラル » ヒアドキュメント (行指向文字列リテラル) より
開始ラベルを
<<~識別子
のように~
を付けて書くことで、以下のような ヒアドキュメントを書くことができます。
(略)
最もインデントが少ない行を基準にして、全ての行の先頭からから空白を取り除きます。 インデントの深さを決定するために主にタブやスペースで構成された行は無視されるので、注意してください。 しかし、エスケープされたタブやスペースは、通常の文字と同じように扱われます。
ruby
sayaka = '美樹 さやか'
kyoko = '佐倉 杏子'
str = <<~HEREDOC
<div>
<ul>
<li>#{sayaka}</li>
<li>#{kyoko}</li>
</ul>
</div>
HEREDOC
puts(str)
stdout
<div>
<ul>
<li>美樹 さやか</li>
<li>佐倉 杏子</li>
</ul>
</div>
さあ!叶えてよ、インキュベーター!!
ヒアドキュメントへの願いがエントロピーを凌駕した結果
python
def heredoc(str):
from textwrap import dedent
return dedent(str).strip()
if __name__ == '__main__':
sayaka = '美樹 さやか'
kyoko = '佐倉 杏子'
str = heredoc(f'''
<div>
<ul>
<li>{sayaka}</li>
<li>{kyoko}</li>
</ul>
</div>
''')
print(str)
stdout
<div>
<ul>
<li>美樹 さやか</li>
<li>佐倉 杏子</li>
</ul>
</div>
textwrap.dedent() も、str.strip() も、あるんだよ!
わたしの、最高の参考記事
-
Python のヒアドキュメントを見やすくする小技
- ヒアドキュメントを前後のコードに合わせてインデントする場合、この記事とコメントで紹介されている方法に加えて
textwrap.dedent()
が必要でした。
- ヒアドキュメントを前後のコードに合わせてインデントする場合、この記事とコメントで紹介されている方法に加えて