1: 2016-07-22 (金) 03:50:24 njf |
現: 2017-03-28 (火) 21:35:14 njf |
- | Pythonの文字列の連結は、簡単なものなら+演算子で行う。 | + | [[Python]]の文字列の連結は、簡単なものなら+演算子で行います。 |
| | | |
| >>> a = "1 " + "2" | | >>> a = "1 " + "2" |
| '1 2' | | '1 2' |
| | | |
- | しかし、+は演算のたびに新しい文字列オブジェクトを生成するため、たくさんの文字列を連結すると遅くなる。 | + | しかし、+は演算のたびに新しい文字列オブジェクトを生成するので、たくさんの文字列を連結すると遅くなります。 |
| | | |
- | そのような場合は、たとえばリストやタプルを連結するならjoinを使う。 | + | そのような場合は、たとえばリストやタプルを連結するならjoinを使います。 |
| | | |
- | >>> b = ("This ", "is ", "a ", "pen.") | + | >>> b = ("This", "is", "a", "pen.") |
- | >>> "".join(b) | + | >>> " ".join(b) |
| 'This is a pen.' | | 'This is a pen.' |
| | | |
- | joinは指定された文字を挟んで文字列を連結する。 | + | joinは指定された文字を挟んで文字列を連結します。 |
| | | |
| >>> "|".join(b) | | >>> "|".join(b) |
- | 'This |is |a |pen.' | + | 'This|is|a|pen.' |
| + | |
| + | 空文字列も使えます。 |
| + | |
| + | >>> "".join(b) |
| + | 'Thisisapen.' |
| + | |
| + | %を使うと文字列を文字列の中に埋め込めます。 |
| + | |
| + | >>> "%s pen %s %s ballpoint %s" % b |
| + | 'This pen is a ballpoint pen.' |
| + | |
| + | これらを使った方が、多くの文字列を連結するときには処理が速くなり、また可読性も高くなります。 |
| + | |
| + | **文字列定義を連続して書くときの注意 [#s5552800] |
| + | |
| + | 文字列の定義は連続して書くとひとつの文字列に連結されます。 |
| + | |
| + | >>> a = 'abc' 'defg' |
| + | >>> a |
| + | 'abcdefg' |
| + | |
| + | 「\」を使って改行したいときには便利です。 |
| + | |
| + | >>> a = 'abc' \ |
| + | ... 'def' |
| + | >>> a |
| + | 'abcdef' |
| + | |
| + | 一方で、文字列の配列を定義しようとして、「,」を忘れるとつながったりします。 |
| + | >>> a = ['a', 'b' 'c'] |
| + | >>> a[1] |
| + | 'bc' |
| + | わかりにくいバグの原因になるので要注意です。 |
| + | |
| + | **Unicodeに関する注意 [#n26b405b] |
| + | |
| + | Unicodeを使う時にはStr型との混在に気をつける必要があります。 |
| + | 例えば |
| + | |
| + | s = u"これは%sです" % "Python" |
| + | print type(s) |
| + | |
| + | 結果 |
| + | <type 'unicode'> |
| + | |
| + | となり、Str型にStr型で扱える文字のみが含まれる場合は、問題なくUnicodeに変換してくれます。 |
| + | |
| + | 一方、 |
| + | |
| + | s = u"これは%sです" % "パイソン" |
| + | |
| + | 結果: |
| + | File "unicode_test.py", line 12, in <module> |
| + | s = u"これは%sです" % "パイソン" |
| + | UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128) |
| + | |
| + | となり、エラーとなります。 |
| + | |
| + | joinでも同じことが言えます。 |
| + | |
| + | a = [u"あ",u"い",u"う",u"え",u"お"] |
| + | |
| + | print "ん".join(a) |
| + | |
| + | これは「ん」がUnicodeでないため、エラーになります。 |
| | | |
- | %を使うと文字列を文字列の中に埋め込める。 | + | このため、テストの時はたまたま英数しかなくうまくいったのに、実際のデータで動かしてみると、中にマルチバイト文字が存在していたため、エラーになるといったことが起こります。 |
| | | |
- | >>> "%spen %s%smy %s" % b | + | Python2.7での文字列の連結では、かならずStrとUnicodeが混在していないことをチェックしてください。 |
- | 'This pen is a my pen.' | + | またテスト時に可能性があるならマルチバイト文字もテストしておきましょう。 |
| | | |
- | これらを使った方が、多くの文字列を連結するときには処理が速くなる。 | + | またはPythonのバージョン3以降を使うと自動で変換してくれるので安心です。 |
- | また、可読性も高い。 | + | |