Mam zdemontowany następujący kod PythonaSens „>>” w Pythonie kodu bajtowego
def factorial(n):
if n <= 1:
return 1
elif n == 2:
return 2
elif n ==4:
print('hi')
return n * 2
i wynikającą z kodu bajtowego
2 0 LOAD_FAST 0 (n)
3 LOAD_CONST 1 (1)
6 COMPARE_OP 1 (<=)
9 POP_JUMP_IF_FALSE 16
3 12 LOAD_CONST 1 (1)
15 RETURN_VALUE
4 >> 16 LOAD_FAST 0 (n)
19 LOAD_CONST 2 (2)
22 COMPARE_OP 2 (==)
25 POP_JUMP_IF_FALSE 32
5 28 LOAD_CONST 2 (2)
31 RETURN_VALUE
6 >> 32 LOAD_FAST 0 (n)
35 LOAD_CONST 3 (4)
38 COMPARE_OP 2 (==)
41 POP_JUMP_IF_FALSE 52
7 44 LOAD_CONST 4 ('hi')
47 PRINT_ITEM
48 PRINT_NEWLINE
49 JUMP_FORWARD 0 (to 52)
8 >> 52 LOAD_FAST 0 (n)
55 LOAD_CONST 2 (2)
58 BINARY_MULTIPLY
59 RETURN_VALUE
Co robić „>>” symboli w powyższym kodu bajtowego oznaczać?
Wygląda jak cele dla 'POP_JUMP_IF_FALSE'. Zobacz ten artykuł: [Understanding Python Bytecode] (http://security.coverity.com/blog/2014/Nov/understanding-python-bytecode.html) –
@self: Nie, prawą zmianą jest 'BINARY_RSHIFT' lub' INPLACE_RSHIFT '. –