2: 2016-07-22 (金) 04:51:39 njf |
3: 2016-12-05 (月) 11:52:18 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.") |
| 'This is a pen.' | | 'This is a pen.' |
| | | |
- | joinは指定された文字を挟んで文字列を連結する。 | + | joinは指定された文字を挟んで文字列を連結します。 |
| | | |
| >>> "|".join(b) | | >>> "|".join(b) |
| 'This|is|a|pen.' | | 'This|is|a|pen.' |
| | | |
- | 空文字列も使える。 | + | 空文字列も使えます。 |
| | | |
| >>> "".join(b) | | >>> "".join(b) |
| 'Thisisapen.' | | 'Thisisapen.' |
| | | |
- | %を使うと文字列を文字列の中に埋め込める。 | + | %を使うと文字列を文字列の中に埋め込めます。 |
| | | |
| >>> "%s pen %s %s ballpoint %s" % b | | >>> "%s pen %s %s ballpoint %s" % b |
| 'This pen is a ballpoint pen.' | | 'This pen is a ballpoint pen.' |
| | | |
- | これらを使った方が、多くの文字列を連結するときには処理が速くなる。 | + | これらを使った方が、多くの文字列を連結するときには処理が速くなり、また可読性も高くなります。 |
- | また、可読性も高い。 | + | |
| + | **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でないため、エラーになります。 |
| + | |
| + | |
| + | このため、テストの時はたまたま英数しかなくうまくいったのに、実際のデータで動かしてみると、中にマルチバイト文字が存在していたため、エラーになるといったことが起こります。 |
| + | |
| + | Python2.7での文字列の連結では、かならずStrとUnicodeが混在していないことをチェックしてください。 |
| + | またテスト時に可能性があるならマルチバイト文字もテストしておきましょう。 |
| + | |
| + | またはPythonのバージョン3以降を使うと自動で変換してくれるので安心です。 |