2012年12月2日日曜日

開発環境

『初めての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 コメント:

コメントを投稿