https://ameblo.jp/shwepper/entry-12613133619.html
これの続きです。
後半の最初は文字列についてです。
Pythonで文字列を扱う際は、これは任意の文字列だよということを示すためにその文字列の前後をシングルコーテーションもしくはダブルコーテーションで囲みます。
# シングルコーテーションの場合
'これは文字列'
# ダブルコーテーションの場合
"これは文字列"
試しに対話モードで前後をなにも囲まずにアルファベットのaを入力してエンターキーを押してください。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
上記のようなメッセージが出力されますね。Pythonはこのときaという変数とかの何かしら意味のある名前が定義されていないかを探します。でも見当たらないので『名前エラー: aという名前は定義されていません』と教えてくれています。つまり、aは任意の文字列ではなくて変数の名前か何かだと解釈しちゃってるわけです。
次に出てくるキーワードはエスケープです。公式の文書に『\でエスケープできます』と突然な感じで登場しますが、文字列を使うときに知っておかなければならないものです。\はエスケープ文字と呼ばれます。この\は、プログラミング言語の仕様で定義されている文字の意味を別のものにかえるはたらきをします。
エスケープ文字が¥で表示されたり、\で表示されたりしますが、そのままでOKです。詳しくは下のリンクを参照してください。
https://curio-shiki.com/blog/webpage/yen-mark-backslash
例えばシングルコーテーションやダブルコーテーションには囲まれた部分が文字列であることを表すという意味があります。では、文字列の中でダブルコーテーションを使いたい場合はどうすれば良いでしょう?
"私はこの文字列に"ダブルコーテーション"を使いたい"
対話モードで上記を入力すると、
File "<stdin>", line 1
"私はこの文字列に"ダブルコーテーション"を使いたい"
^
SyntaxError: invalid syntax
エラーが出ると思います。Pythonは文字列をダブルコーテーションで囲まれた部分と定義していますが、上記の場合入れ子になってしまっているため、なんかよく分かんないぞと『構文エラー: 無効な構文』を出力しています。こんな時に使うのが\です。
"私はこの文字列に\"ダブルコーテーション\"を使いたい"
今度はエラーが出ません。これが\のはたらきです。何が起こったかというと、\を付けたことでダブルコーテーションがもつ『囲われた部分が文字列を表す』という意味が『"』というただの文字の一つに変わったのです。
もう一つやってみましょう。今度は文字列の途中に改行を入れたい場合を考えます。対話モードでの直接入力では改行を出力できないので、今回はprint()というPythonに最初から組み込まれている関数を使います。
print("私はこの文字列を
改行したい")
最初の行を入力してエンターキーを押した瞬間にこんな出力がされます。
File "<stdin>", line 1
print("私はこの文字列を
^
SyntaxError: EOL while scanning string literal
『構文エラー: 文字列の途中で行が終わってるよ』って言ってます。Pythonは一行ずつ実行するので、この方法は使えません。
ここでも\が使えます。今度はこうしてみてください。
print("私はこの文字列を\n改行したい")
エラーは出ません。この場合は『n』という文字が\を付けたことで『改行』という意味に変わりました。
よく使うエスケープをまとめておきましょう。
- \' => 文字としての『’』
- \" => 文字としての『"』
- \\ => 文字としての『\』
- \n => 改行
- \t => タブ
C:\some\name
これ、エスケープされると意味が変わっちゃうので、厄介なんです。なので、そんなときに便利なやつも用意されています。使い方も簡単です。その名も『raw string』、ナマの文字列です。
print(r"C:\some\name")
ダブルコーテーションやシングルコーテーションの前にrをつけるだけ。簡単ですね。
また、長くなってしまいました。最後まで辛抱強く読んでくれてありがとうございました!
