開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のIV部(関数)17章(関数に関する高度なテクニック)1を解いてみる。
その他参考書籍
1
コード(TextWrangler)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- import time n = 1000000 l = [x for x in range(n)] g = (x for x in range(n)) start = time.time() for x in l: pass print("リスト: {0}秒".format(time.time() - start)) start = time.time() for x in g: pass print("ジェネレーター: {0}秒".format(time.time() - start))
入出力結果(Terminal)
$ ./sample.py リスト: 0.05388498306274414秒 ジェネレーター: 0.14504599571228027秒 $
ちなみにJavaScriptの場合。
コード(TextWrangler)
// pythonのリスト、ジェネレータみたいなのを作ってみる function generator_sequence_res(n){ var i = 0; function res(){ if(i < n)return Math.pow(i++, 2); throw "ストップ"; } return res; } function list_sequence_res(n){ var result = []; for(var i = 0; i < n; i++){ result.push(Math.pow(i, 2)); } var i = 0; function res(){ if(i < n) return result[i++]; throw "ストップ"; } return res; } var n = parseInt($('#t0').val()); var l = list_sequence_res(n); var g = generator_sequence_res(n); var a1 = []; var start = new Date(); for(var i = 0; i < n; i++){ a1[i] = l(); } duration1 = (new Date() - start) / 1000; var a2 = []; start = new Date(); for(var i = 0; i < n; i++){ a2[i] = g(); } var duration2 = (new Date() - start) / 1000; var result = "リスト: " + duration1 + "秒\n" + "ジェネレーター: " + duration2 + "秒\n"; $('#pre0').text(result);
速度を計測したら、ちゃんとリストとジェネレータになってるっぽいけど、メモりー節約できてるかも確認したいなあ〜(やり方が分からない><)
0 コメント:
コメントを投稿