開発環境
- 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 コメント:
コメントを投稿