核心:pip install goto-statement
网站地址:https://pypi.org/project/goto-statement/
A function decorator to use goto
in Python. Tested on Python 2.6 through 3.6 and PyPy.
Installation
pip install goto-statement
Usage
from goto import with_goto @with_goto def range(start, stop): i = start result = [] label .begin if i == stop: goto .end result.append(i) i += 1 goto .begin label .end return result
Implementation
Note that label .begin
and goto .begin
is regular Python syntax to retrieve the attribute begin
from the objects with the variable names label
and goto
. However, in the example above these variables aren't defined. So this code would usually cause a NameError
. But since it's valid syntax the function can be parsed, and results in following bytecode:
2 0 LOAD_FAST 0 (start)
3 STORE_FAST 2 (i)
3 6 BUILD_LIST 0
9 STORE_FAST 3 (result)
5 12 LOAD_GLOBAL 0 (label)
15 LOAD_ATTR 1 (begin)
18 POP_TOP
6 19 LOAD_FAST 2 (i)
22 LOAD_FAST 1 (stop)
25 COMPARE_OP 2 (==)
28 POP_JUMP_IF_FALSE 41
7 31 LOAD_GLOBAL 2 (goto)
34 LOAD_ATTR 3 (end)
37 POP_TOP
38 JUMP_FORWARD 0 (to 41)
9 >> 41 LOAD_FAST 3 (result)
44 LOAD_ATTR 4 (append)
47 LOAD_FAST 2 (i)
50 CALL_FUNCTION 1
53 POP_TOP
10 54 LOAD_FAST 2 (i)
57 LOAD_CONST 1 (1)
60 INPLACE_ADD
61 STORE_FAST 2 (i)
11 64 LOAD_GLOBAL 2 (goto)
67 LOAD_ATTR 1 (begin)
70 POP_TOP
13 71 LOAD_GLOBAL 0 (label)
74 LOAD_ATTR 3 (end)
77 POP_TOP
14 78 LOAD_FAST 3 (result)
81 RETURN_VALUE