以前のエントリ『http://d.hatena.ne.jp/CortYuming/20080603/p1』をやり直してみた
befor
前回のコードの引数を文字列から数値に変更。なぜ引数を文字列にしたのだろ?
def bintodecnum(n, num = 2): s = str(n) slen = len(s) - 1 result = 0 for i in s: result += int(i) * (num ** slen) slen -= 1 return result bintodecnum(1100)
after
今回、やり直したコード
def bin_to_decnum(num, b = 2): return sum([int(n) * (b ** i) for i, n in enumerate(reversed(str(num)))]) print bin_to_decnum(1100) #12
行数が減りスマートになった?
最近恒例の速度テスト
import timeit t= timeit.Timer(stmt=""" def bintodecnum(n, num = 2): s = str(n) slen = len(s) - 1 result = 0 for i in s: result += int(i) * (num ** slen) slen -= 1 return result bintodecnum(1100) """) print "before:", t.timeit(number = 100000) t= timeit.Timer(stmt=""" def bin_to_decnum(num, b = 2): return sum([int(n) * (b ** i) for i, n in enumerate(reversed(str(num)))]) bin_to_decnum(1100) #12 """) print "after: ", t.timeit(number = 100000)
結果
before: 1.21758294106 after: 1.53807091713
速くなった(・∀・)b
少し進歩した?
あれ?遅くなってる!だめじゃん(||゚Д゚)