私は最近、[]
の代わりにlist()
、dict()
、tuple()
、{}
、および()
の代わりに、3つのうちの空のものを作成する必要があると考えました。その理由は、より読みやすいように見えるということです。私はそのスタイルに関する意見を聞くつもりでしたが、パフォーマンスをテストすることにしました。私はdict()
、tuple()
とlist()
を試してみましたが、それぞれの関数呼び出しのバージョンは構文バージョン({}
[]
、()
)よりも非常に悪かったlist()、dict()、tuple()が[]、{}、()よりも遅いのはなぜですか?
>>> from timeit import Timer
>>> Timer('for x in range(5): y = []').timeit()
0.59327821802969538
>>> from timeit import Timer
>>> Timer('for x in range(5): y = list()').timeit()
1.2198944904251618
だから、私は3つの質問があります:私はこれをしなかった
-
を
- なぜ関数呼び出しがより高価なのですか?
- なぜそれほど大きな違いがありますか?
- タイマーに空のリストを5つ作成するのに1.2秒かかるのはなぜですか?私は
timeit
がガベージコレクションを無効にしていることを知っていますが、それはおそらくrange(5)
を使用したと考えると効果がありませんでした。
re:スタイル意見 - 私はかなり頻繁に使います。私はそれが十分明確だと思う。パフォーマンスの問題は面白いです。 – nmichaels
あなたがそれらに慣れてしまうまで、Pythonについて奇妙に見える多くのものがあります。 'list()'は実際に '__builtins __。list'でないかもしれないので、常に' [] 'を' 'list()'にしたいと思います。バイヤーは注意してください。 – SingleNegationElimination