Hướng dẫn how to import goto in python - cách nhập goto trong python

Mô tả dự án

Hướng dẫn how to import goto in python - cách nhập goto trong python

Một công cụ trang trí chức năng để sử dụng goto trong Python. Được thử nghiệm trên Python 2.6 đến 3.6 và Pypy.

Cài đặt

pip install goto-statement

Cách sử dụng

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

Thực hiện

Lưu ý rằng label .begingoto .begin là cú pháp Python thường xuyên để truy xuất thuộc tính begin từ các đối tượng có tên biến labelgoto. Tuy nhiên, trong ví dụ trên các biến này không được xác định. Vì vậy, mã này thường sẽ gây ra

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
0. Nhưng vì cú pháp hợp lệ, hàm có thể được phân tích cú pháp và kết quả là sau 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

Trình trang trí

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
1 sau đó loại bỏ mã byte tương ứng đã được tạo cho các biến số thuộc tính của các biến labelgoto và đưa ra lệnh
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
4 cho mỗi goto:

  2           0 LOAD_FAST                0 (start)
              3 STORE_FAST               2 (i)

  3           6 BUILD_LIST               0
              9 STORE_FAST               3 (result)

  5          12 NOP
             13 NOP
             14 NOP
             15 NOP
             16 NOP
             17 NOP
             18 NOP

  6     >>   19 LOAD_FAST                2 (i)
             22 LOAD_FAST                1 (stop)
             25 COMPARE_OP               2 (==)
             28 POP_JUMP_IF_FALSE       41

  7          31 JUMP_ABSOLUTE           78
             34 NOP
             35 NOP
             36 NOP
             37 NOP
             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 JUMP_ABSOLUTE           19
             67 NOP
             68 NOP
             69 NOP
             70 NOP

 13          71 NOP
             72 NOP
             73 NOP
             74 NOP
             75 NOP
             76 NOP
             77 NOP

 14     >>   78 LOAD_FAST                3 (result)
             81 RETURN_VALUE

Thực hiện thay thế

Ý tưởng về goto trong Python không phải là mới. Có một mô -đun khác đã được phát hành dưới dạng trò đùa của April Cá vào năm 2004. Việc triển khai đó không chạm vào mã byte, nhưng sử dụng chức năng theo dõi, tương tự như cách viết gỡ lỗi.

Mặc dù điều này giúp loại bỏ sự cần thiết của một người trang trí, nhưng nó đi kèm với chi phí thời gian chạy đáng kể và thực hiện công phu hơn. Mặt khác, việc sửa đổi mã byte khá đơn giản và không thêm chi phí khi thực hiện chức năng.

Tải tập tin

Tải xuống tệp cho nền tảng của bạn. Nếu bạn không chắc chắn nên chọn cái nào, hãy tìm hiểu thêm về việc cài đặt các gói.

Phân phối nguồn

Phân phối xây dựng

Làm cách nào để thêm goto vào python?

Khi bạn sử dụng câu lệnh GOTO trong Python, về cơ bản, bạn đang hướng dẫn trình thông dịch trực tiếp thực hiện một dòng mã khác thay vì mã hiện tại.Dòng mã đích mà bạn muốn trình thông dịch thực thi tại thời điểm này cần được đánh dấu trong phần được gọi là nhãn hiệu.The target line of code which you want the interpreter to execute at this moment needs to be marked in the section termed “label”.

Tôi có thể sử dụng goto trong python không?

Không, Python không hỗ trợ nhãn và goto.Đó là một ngôn ngữ lập trình có cấu trúc (cao).. It's a (highly) structured programming language.

Tại sao Python không có goto?

Trong Python, không cần goto vì chúng ta có thể hoàn thành điều tương tự với các câu lệnh IF và, và, và if-else biểu thức & vòng lặp trong khi và cho các câu lệnh, chứa tiếp tục và phá vỡ.since we can accomplish the same with if statements and or, and, and if-else expressions & loop with while and for statements, containing continue and break.

Làm thế nào để bạn sử dụng goto trong rùa python?

Goto (x, y) di chuyển rùa từ vị trí hiện tại sang vị trí x, y dọc theo đường tuyến tính ngắn nhất giữa hai vị trí (nghĩa là một đường trực tiếp giữa vị trí hiện tại và (x, y)).Nó vẽ một đường phía sau con rùa dọc theo con đường đi. Moves the turtle from the current position to the location x, y along the shortest linear path between the two locations (i.e. a direct line between the current position and (x,y)). It draws a line behind the turtle along the path taken.