perl의 무한 루프에 대한이 질문에 흥미가 있습니다. while (1) Vs. for (;;) 속도 차이가 있습니까? , 나는 파이썬에서 비슷한 비교를 실행하기로 결정했습니다. 컴파일러가 while(True): pass및 while(1): pass에 대해 동일한 바이트 코드를 생성 할 것으로 예상 했지만 실제로 python2.7에서는 그렇지 않습니다.
다음 스크립트 :
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)
5 >> 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은 눈에 띄게 더 복잡합니다. 왜 이런거야?
다른 컨텍스트에서 파이썬 True은 1 과 같은 것처럼 작동합니다 .
>>> True == 1
True
>>> True + True
2
while두 가지를 구별하는 이유는 무엇 입니까?
python3이 동일한 작업을 사용하여 문을 평가한다는 것을 알았습니다.
while 1
----------------------------
4 0 SETUP_LOOP 3 (to 6)
5 >> 3 JUMP_ABSOLUTE 3
>> 6 LOAD_CONST 0 (None)
9 RETURN_VALUE
while True
----------------------------
8 0 SETUP_LOOP 3 (to 6)
9 >> 3 JUMP_ABSOLUTE 3
>> 6 LOAD_CONST 0 (None)
9 RETURN_VALUE
부울이 평가되는 방식에 python3이 변경 되었습니까?