私は読んでいますPython ヒッチハイクガイド短いコードスニペットがあります
foo = 'foo'
bar = 'bar'
foobar = foo + bar # This is good
foo += 'ooo' # This is bad, instead you should do:
foo = ''.join([foo, 'ooo'])
著者は、 が''.join()
よりも常に高速であるとは限らないことを指摘しており、文字列連結に を+
使用することに反対しているわけではありません。+
しかし、なぜ はfoo += 'ooo'
悪い習慣であるのに、foobar=foo+bar
は良い習慣だと考えられるのでしょうか?
- いい
foo += bar
ね? - いい
foo = foo + 'ooo'
ね?
このコード スニペットの前に、著者は次のように書いています。
文字列について最後に言及しておくべきことは、join() を使用することが常に最善であるとは限らないということです。事前に決められた数の文字列から新しい文字列を作成する場合、実際には加算演算子を使用する方が高速ですが、上記のような場合や既存の文字列に追加する場合は、join() を使用することをお勧めします。
ベストアンサー1
それは悪い習慣ですか?
この例では、次の理由から、これは悪い習慣ではないと想定するのが妥当です。
- 作者は理由を述べていません。単に嫌いなだけなのかもしれません。
- Python のドキュメントでは、それが悪い習慣であるとは言及されていません (私が見た限りでは)。
foo += 'ooo'
は(私としては)同じように読みやすく、 よりも約 100 倍高速ですfoo = ''.join([foo, 'ooo'])
。
どちらを優先して使用すべきでしょうか?
文字列の連結には、新しい文字列を作成し、新しいメモリを割り当てる必要があるという欠点がある。すべての連結に対して! これは時間がかかりますが、文字列の数が少なく小さい場合はそれほど問題にはなりません。連結する文字列の数がわかっていて、連結が 2 ~ 4 回以上必要ない場合は、この方法をお勧めします。
文字列を結合する場合、Python は最終的な文字列に新しいメモリを割り当てるだけで済みます。これははるかに効率的ですが、計算に時間がかかる可能性があります。また、文字列は不変であるため、文字列のリストを使用して動的に変更し、必要な場合にのみ文字列に変換する方が実用的であることがよくあります。
str.join() は反復可能オブジェクトを受け取るため、これを使用して文字列を作成すると便利な場合がよくあります。例:
letters = ", ".join("abcdefghij")
結論として
ほとんどの場合、 を使用する方が理にかなっていますstr.join()
。しかし、連結が同様に実行可能な場合もあります。str.join()
私の意見では、非常に多くの文字列に対して文字列連結の形式を使用することは、短くて少ない文字列に対して を使用することが悪い習慣であるのと同じように、悪い習慣です。
著者は、あまり詳細に説明したり複雑にしたりせずに、何をいつ使用するかを簡単に識別するための経験則を作成しようとしただけだと思います。