Python 2.x の長整数リテラルで…

What’s old てて気付いたこと。

C 言語じゃあるまいし、てわけでおのれからあえて「L を付ける」なんてことをやろうとしたこともなかったから気付かなかったのだが、Python 2.2 の What’s New で説明される「PEP 237: Unifying Long Integers and Integers」のこれ:

Using the ‘L’ suffix will be discouraged in future 2.x versions of Python, triggering a warning in Python 2.4, and probably dropped in Python 3.0.

このプランが現実とは違ってるみたいだ。

今 Python 2.7 で -Qwarnall-3 で起動しても、 L は警告を出さないみたい。python -Qwarnall -3でもこんなだ:

 1 Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
 2 Type "help", "copyright", "credits" or "license" for more information.
 3 c:\Python27\lib\site-packages\pyreadline\keysyms\common.py:42: DeprecationWarning: Overriding __eq__ blocks inheritance of __hash__ in 3.x
 4   class KeyPress(object):
 5 c:\Python27\lib\ctypes\util.py:23: DeprecationWarning: classic float division
 6   minorVersion = int(s[2:3]) / 10.0
 7 >>> 
 8 >>> 1 / 3.
 9 __main__:1: DeprecationWarning: classic float division
10 0.3333333333333333
11 >>> 5L
12 5L
13 >>> 999999999999999999999999L
14 999999999999999999999999L
15 >>> 999999999999999999999999
16 999999999999999999999999L
17 >>> 

Python 3.4.3 では当然:

1 Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
2 Type "help", "copyright", "credits" or "license" for more information.
3 >>> 5L
4   File "<stdin>", line 1
5     5L
6      ^
7 SyntaxError: invalid syntax
8 >>> 

このことが Python 3 への移植時の注意点として大きく触れられてた記憶はあんまりないが、もし心当たりがあれば、注意すべきかもしれない。特に C/C++ に慣れているユーザほど危ないかもね。

ただね…。「C 言語じゃあるめぇし、いまどきわざわざ L 付けとるけ?」とも思う。2.2 から「付けなくても良」くなって、たいがいはこれを皆享受しとるんではないかねぇと。