LoginSignup
28
22

More than 5 years have passed since last update.

わたしの、最高のヒアドキュメント

Last updated at Posted at 2017-05-24

これが私のいのり、私のねがい :pray:

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>

さあ!叶えてよ、インキュベーター!!

ヒアドキュメントへの願いがエントロピーを凌駕した結果 :innocent:

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() も、あるんだよ!

わたしの、最高の参考記事 :sparkling_heart:

28
22
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
28
22