Pythonにおける while Truewhile 1 の違いについて解説します。

Python 2.x と Python 3.x の違い

Python 2.x では、True はキーワードではなく、組み込みのグローバル定数であり、bool 型で 1 に定義されています。そのため、インタプリタは True の内容をロードする必要があります。他の言葉で言えば、True は再割り当て可能です。

# Python 2.7
>>> True = 4
>>> True
4

一方、Python 3.x では、True は実際にキーワードとなり、実際の定数となります。

# Python 3.1.2
>>> True = 4
File "<stdin>", line 1

バイトコードの違い

Python 2.7 では、while (True): passwhile (1): pass のバイトコードは異なります。以下にそのスクリプトを示します。

import dis

def while_one():
    while 1: pass

def while_true():
    while True: pass

print("while 1")
print("----------------------------")
dis.dis(while_one)

print("while True")
print("----------------------------")
dis.dis(while_true)

このスクリプトは以下の結果を生成します。

while 1
----------------------------
  4           0 SETUP_LOOP               3 (to 6)
        >>    3 JUMP_ABSOLUTE            3
        >>    6 LOAD_CONST               0 (None)
              9 RETURN_VALUE

while True
----------------------------
  8           0 SETUP_LOOP              12 (to 15)
        >>    3 LOAD_GLOBAL              0 (True)
              6 JUMP_IF_FALSE            4 (to 13)
              9 POP_TOP
              9          10 JUMP_ABSOLUTE            3
        >>   13 POP_TOP
             14 POP_BLOCK
        >>   15 LOAD_CONST               0 (None)
             18 RETURN_VALUE

while True を使用すると、明らかに複雑になります。

まとめ

Python 2.x と Python 3.x では、while Truewhile 1 の挙動が異なります。Python 2.x では True は再割り当て可能なグローバル定数であり、Python 3.x では True は実際の定数となります。また、Python 2.7 では while Truewhile 1 のバイトコードが異なり、while True の方がより複雑になります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です