Yoichi's diary


2015-08-26

_ [python] range, xrange

% python2.7 --version
Python 2.7.6
% python2.7
Python 2.7.6 (default, Sep  9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> len(range(0,10000000000000000000))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: range() result has too many items
→rangeの制限にかかったみたい。(実装は Python/bltinmodule.c の builtin_range() なので後で読む)
>>> len(range(0,1000000000000000000))
Python(51611,0x7fff7dc65300) malloc: *** mach_vm_map(size=8000000000000000000) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
→rangeの制限にはかからないがmallocがこける
>>> len(range(0,10000000000000))
^C^C^C
→計算してくれているが時間かかる

>>> len(xrange(0,10000000000000000000))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long
→xrange でもやっぱりエラー
>>> len(xrange(0,1000000000000000000))
1000000000000000000
→これは一瞬で終わる。

_ みさき公園

お休み取ったのでプールへ。起きたら雨が降ってたので諦めかけていたが、だんだん天気が回復してきた。 平日のためかあまり混んでなくてたっぷり楽しめた。