C で作られた cStringIO は ピュア Python で作られた StringIO モジュールと違うのをみんな知っていると思いますけど、今日、私が知らなかった違いをもう一つ見つけました。 StringIO では、StringIO のコンストラクターに文字列を渡せば、その文字列に書き込みすることができる。 >>> from StringIO import StringIO >>> writer = StringIO('a') >>> writer.seek(1) >>> writer.write("b") >>> writer.getvalue() 'ab' >>> from cStringIO import StringIO >>> writer = StringIO('a') >>> writer <cStringIO.StringI object at 0xb74b3530>
Pythonの文字列は、Java等と同様にImmutableであり、頻繁に文字列を操作する場合においては、気をつけないと思わぬパフォーマンスの低下を招きます。 代表的なケースとしては、文字列に新たな文字列をどんどん連結していくケース。 s = s + "新たな文字列1" s = s + "新たな文字列2" s = s + "新たな文字列3" . . . . . . とせずに、配列を使って、 L = [] L.append("新たな文字列1") L.append("新たな文字列2") L.append("新たな文字列3") . . . . . . s = ''.join(L) とするのが定石イディオムとされています(最初の例では、毎回新たな文字列が生成されるオーバーヘッドがあるとされる。参考:「Pythonクックブック」)。 これは本当に正しいのでしょうか。また、mutable文字列っぽいア
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く