Pythonのエスケープについて知りたいな。
どういうときに使うのか解説して欲しい。
こちらの悩みを解決しますね。
本記事の内容
・エスケープ文字とは
・エスケープ文字を使うときの注意点
この記事を書いている自分は、プログラミング歴4年の駆け出し以上中堅未満のエンジニアです。
過去には、AI囲碁をWebアプリ化したり、Pythonでのアプリ開発、Web制作やフロントエンドのデザインまで幅広くやってきました。
今回はそんな経験をもとに解説していこうかと。
当サイトでは、覚えるべきところを全てまとめているので、画面を撮影して何度も読み返すことをおすすめします。
それでは、解説していきます!
エスケープを0から解説
エスケープ文字とは
初めに結論を書くと、以下の2つの役割を果たします。
エスケープの役割
- 文中の特殊な文字を無効にする
- 特殊な文字を出力
一つ目から見ていきましょう。
エスケープ文字で、文中の特殊な文字を無効にする
特殊な文字を無効にする理由は、エラーを回避するためです。
たとえば、Pythonで「Hello World」のような出力をさせたい場合は、
print('Hello World')
のように括弧の中にクォーテーションを入れる必要があります.
ですがたとえば、下のようなプログラムではどうでしょうか。
print(‘It’s my life’)
文字列全体を囲っているクォーテーションを文中にも入れると、構文エラーになります。
結果>>SyntaxError: invalid character in identifier
これはシングルクォーテーションの中に、もう一つ同じクォーテーションを挿入しているためです。
このようなエラーを回避するために、エスケープ文字で、文中の特殊な文字を無効にするのです。
では、「文中の特殊な文字を無効にする」方法を解説します。
これを行う上で、重要なことは以下の2つです。
「文中の特殊な文字を無効にする」ときに重要なこと
- エスケープ文字を理解する
- 基本的にダブルクォーテーションを使う
順番に見ていきましょう。
一つ目は、「エスケープ文字を理解する」です。
エスケープの解説で注意すべきこと
- 「エスケープ文字」=「エスケープシーケンス」
- \とバックスラッシュは同じ意味
※フォントの関係で、バックスラッシュが\になっています。ご了承ください。
m(__)m
先ほどのような「文字列の中でクォーテーションを使って発生するエラー」を防ぐために、エスケープ文字をクォーテーションの手前に加えます。
print(‘It\’s my life’)
先程の例と見比べてみると、バックスラッシュ(\)が入っていて、「これは文字列の終わりではありませんよ」ということを明示的に示すことができます。
バックスラッシュを使うときに覚えておくべきこと
- Windowsならそのまま¥マーク
- macなら、optionキーに¥マークでバックスラッシュ。この場合¥は同じ役割を果たさない
二つめは、「基本的にダブルクォーテーションを使う」ということです。
さて、シングルクォーテーションの例を見てきましたが、ダブルクォーテーションで囲えば上記の問題は解決します。
例:print(“it’s my life”)
出力結果:it’s my life
このように、文中のシングルクォーテーションも文字列として扱われるためエラーが出ません。
そのため、printで文中の文字を囲うときはダブルクォーテーションを意識しながら書いた方が効率的と言えるでしょう。
では、これを使えば絶対に安心か、というと、そうでないパターンもやはりあります。
滅多にありませんが、文中にダブルクォーテーションを出力したい場合がそれです。
では、おさらいも兼ねて、エスケープ文字を使って文を入出力したいと思います。
例:print(“彼は”プログラミングが好きです”と答えた。”)
この場合は、実行してもエラーになります。ダブルクォーテーションの間に同じ表記があるからです。
ではこの場合どうすれば良いのかというと
print(“彼は\”プログラミングが好きです\”と答えた。”)
もしくは
print( ‘彼は”プログラミングが好きです”と答えた。’ )
のようにすると、エラーは出ません。
出力結果:彼は”プログラミングが好きです”と答えた。
ここまで、よく遭遇するエスケープ文字の役割について書いてきました。
すなわち、意味のある記号や役割などを無効にしてくれるのが、エスケープ文字になります。
反面、エスケープ文字には、「特別な意味を持たせる用途」も含まれています。
次は、それについて解説します。
エスケープ文字で、特殊な文字を出力
エスケープ文字で、特殊な文字を出力できます。
知っておくべきものの一覧は、以下の通りです。
エスケープ文字 | 出力 |
---|---|
\a | 端末ベル |
\b | バックスペース |
\f | フォームフィード |
\n | 改行 |
\newline | 改行 |
\r | 復帰 |
\t | 水平タブ |
\v | 垂直タブ |
\\ | \ |
中でも代表的なのが、改行です。
例:print(“彼はプログラミングが好きです
と答えた”)
上の文はエラーになります。文の途中で改行されているためです。
そこで、(\n)というエスケープ文字を使います。
print("彼はプログラミングが好きです\nと答えた")
出力結果は以下になります。
改行されていますね。
エスケープ文字には、先程の、クォーテーションを無効にする意味があると同時に、様々な意味を与えるという役割も果たします(\tでタブを表す、など)。
エスケープ文字を使うときの注意点
注意点としましては、他の人が書いたコードを後から読む際などに
エスケープ文字を使うときの注意点
- 正規表現などの意味を知らないと何を表しているのかわからない
- 入力文の内容において正しくプログラムの指示を理解しないといけない
- 修正する際にコードが見づらくなる可能性がある
まとめて解説します。
^や?などの正規表現を打ち消したりできるエスケープ文字は、当然元の意味を知らないと理解ができなくなります。
入力文の中でバックスラッシュがある場合、それが何を意味するのか(意味を打ち消すものなのか与えるものなのか)理解できるためのコードを読み解く力が重要になります。
また、それらのコードがエスケープ文字によって見づらくなっている場合、可読性を上げるために修正が入ることもあり、リファクタリング能力が問われることもあります。
エスケープ文字は、便利かつ重要な局面で力を発揮する反面、覚えなければならないことが多いという一面を抱えています。
コメント