Archive for 1月 19th, 2011

インデント/スペースとタブ混ぜてみた

1月 19th, 2011 by admin

Pythonは、プログラムのブロック構造をインデント(字下げ)で表現します。字下げには、半角スペースを使っても、タブを使ってもいいけれども、混ぜてはいけない、というのが常識になっています。では、混ぜるとどうなるのか・・・・・やってみました!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> def a():
...   print("kk") #半角スペース2個
...     print("kk") #タブ1個
  File "<stdin>", line 3
    print("kk")
    ^
IndentationError: unexpected indent
>>> def a():
...     print("kk") #半角スペース4個
...     print("kk") #タブ1個
  File "<stdin>", line 4
    print("kk")
    ^
IndentationError: unexpected indent
>>> def a():
...         print("kk") #半角スペース8個
...     print("kk") #タブ1個
...

タブ1個は、半角スペース8個分として処理されるようです。つまり、スペースとタブを混用しようとすると、タブ=半角スペース8個にする必要があるのです。スペース2個分にするのか、4個分にするのかなら悩む余地があるのですが、スペース8個分は問題外ですね。。。。。もっとも、タブと半角スペースを混ぜること自体が非常識なのが・・・・・・

まとめ

  • タブ1個は、半角スペース8個分
  • 混ぜるな危険!

Windows上の64bit版Pythonの整数型が32bitの理由

1月 19th, 2011 by admin

Windows上でPythonを使っている場合、64ビット版のPythonを使っていても整数型の上限が2^31-1になっている、それっぽい説明を見つけました。

Q. Windows XP 64bit環境上でPython 2.6.1のsys.maxintを実行したら32bitの値が返ってきた。なんで?

やあ、amd64版のPython2.6.1をWindows XP 64ビット環境にいれたんだよね。sys.maxintは、9223372036854775807 (or 2 ^63-1)とおもって期待してたんだけど、なぜか、 2147483647 (i.e., 2^31-1) ってでるんだよね。これじゃ32ビットシステムと同じだよ。。これって仕様なの?それともバグとか、インストールに失敗したとかかな?
-lin

A. 仕様です。

Microsoftの天才が、C言語のLongは常に32ビットって決めたのが原因です。Unixでは、最低でも32ビット。たいていはポインターのサイズ(64ビットシステムなら64ビット)と同じなんだけどね。
-Tim Roberts

元記事
http://www.velocityreviews.com/forums/t648927-sys-maxint-in-python-2-6-1-amd64-on-windows-xp-x64.html