Dọn dẹp chủ đề daemon python

Khi thực hiện "Goto", trước tiên người ta phải hỏi Goto là gì. Mặc dù có vẻ rõ ràng, hầu hết mọi người không nghĩ về cách Goto liên quan đến các ngăn xếp chức năng

Nội dung chính Hiển thị

  • Chúng ta có thể sử dụng goto trong python không?
  • Làm cách nào để cài đặt mô-đun Goto trong Python?
  • In sao Goto bị cấm?
  • Những ngôn ngữ nào sử dụng goto?

Nếu bạn thực hiện "goto" bên trong một chức năng, thực tế, bạn sẽ từ bỏ chức năng ngăn xếp. Đây được coi là một hành động xấu, bởi vì các Ngăn xếp có chức năng được thiết kế với kỳ vọng rằng bạn sẽ tiếp tục ở nơi bạn rời đi, sau khi ủy thác một nhiệm vụ trung gian. Đây là lý do tại sao GOTOS được sử dụng cho các trường hợp ngoại lệ và các trường hợp ngoại lệ có thể được sử dụng để mô phỏng Goto, mà tôi sẽ giải thích

Các trạng thái máy hữu hạn có thể là trường hợp sử dụng tốt nhất cho goto, mà hầu hết thời gian được thực hiện theo cách loại bỏ các vòng lặp và chuyển đổi, nhưng tôi tin rằng máy móc "cấp cao nhất". Trong trường hợp này, bạn muốn chắc chắn, nếu bạn có nhiều biến hơn, chúng là toàn cầu và không yêu cầu đóng gói. Hãy chắc chắn rằng bạn lần đầu tiên mô hình hóa không gian biến trạng thái của bạn [có thể khác với trạng thái thực thi, tức là máy trạng thái hữu hạn]

Tôi tin rằng có những lý do thiết kế hợp pháp để sử dụng goto, ngoại lệ lý do là trường hợp đặc biệt trong đó hợp nhất goto với các chức năng xử lý có ý nghĩa. Tuy nhiên, trong hầu hết các trường hợp, bạn muốn giới hạn bản thân ở "cấp cao nhất", vì vậy bạn không bao giờ gọi goto trong một chức năng, mà chỉ trong một phạm vi toàn cầu

Cách dễ nhất để mô phỏng goto cao cấp nhất trong các ngôn ngữ hiện đại, là nhận ra rằng các gotos cao nhất, chỉ cần yêu cầu các biến toàn cầu và một ngăn xếp cuộc gọi trống. Vì vậy, để ngăn chặn cuộc gọi trống, bạn quay lại bất kỳ khi nào bạn gọi một chức năng mới. Dưới đây là một ví dụ về số N Fibonacci đầu tiên

a = 0
b = 1
n = 100
def A[]:
    global a, b
    a = a + b
    n -= 1
    print[a]
    return B[] if n > 0 else 0
def B[]:
    global a, b
    b = a + b
    n -= 1
    print[b]
    return A[] if n > 0 else 0
A[]

Mặc dù ví dụ này có thể nhiều hơn so với phát triển vòng lặp, nhưng nó cũng mạnh mẽ và linh hoạt hơn nhiều, và không yêu cầu trường hợp đặc biệt. Nó cho phép bạn có một máy trạng thái hữu hạn đầy đủ. Bạn cũng có thể sửa đổi điều này với một nhân viên vận động Goto

def goto[target]:
    while[target] target = target[]
def A[]:
    global a, b
    a = a + b
    print[a]
    return B
def B[]:
    global a, b
    b = a + b
    print[b]
    return A
goto[A]

Để thực hiện phần "trả lại", bạn có thể viết một hàm goto chỉ đơn giản là ném một ngoại lệ khi hoàn thành

def goto[target]:
    target[]
    throw ArgumentError["goto finished."]
def A[]:
    global a, b
    a = a + b
    print[a]
    goto[B]
def B[]
    global a, b
    b = a + b
    print[b]
    goto[A]
goto[A]

Vì vậy, bạn thấy, rất nhiều điều này là quá suy nghĩ và một chức năng hỗ trợ gọi một hàm và sau đó ném một lỗi là tất cả những gì bạn cần. Bạn có thể bọc nó thêm trong một chức năng "bắt đầu", bởi vì như vậy lỗi bị bắt, nhưng tôi không nghĩ rằng điều đó thực sự cần thiết. Mặc dù một số triển khai này có thể sử dụng hết ngăn xếp cuộc gọi của bạn, ví dụ về người chạy đầu tiên giữ cho nó trống và nếu các trình biên dịch có thể thực hiện tối ưu hóa cuộc gọi đuôi, điều đó cũng


Mô-đun "Goto" là một trò đùa của Cá tháng Tư, được xuất bản vào ngày 1 tháng 4 năm 2004. Vâng, nó hoạt động, nhưng đó chỉ là một trò đùa. Vui lòng không sử dụng nó trong mã thực thi

Add the words 'goto' and 'to' from 'vào Python

Các từ khóa 'goto' và 'đến từ' từ các dòng điều khiển cơ chế của Python và cho phép các thành viên lập trình Python sử dụng nhiều dòng điều khiển thành ngữ phổ biến trước đây đã bị từ chối đối với họ. Một số ví dụ được đưa ra dưới đây

Để bật các từ khóa mới, hãy thêm dòng sau vào mã đầu của bạn

from goto import goto, comefrom, label

đi đến

'Goto' jump trực tiếp thực hiện chương trình sang một dòng mã khác. Dòng đích phải được xác định bằng cách sử dụng câu lệnh 'Nhãn'. Các nhãn được xác định bằng cách sử dụng từ khóa 'nhãn' và có tên là số nhận dạng Python tùy chọn được đặt trước dấu chấm, như thế này

Để nhảy vào nhãn, hãy sử dụng từ khóa 'goto' như thế này

Tính toán goto

Bạn có thể sử dụng goto đã được tính toán bằng cách gán tên của nhãn cho một biến trong thời gian chạy và tham chiếu nó bằng dấu hoa thị như thế này

x = calculateLabelName[]
goto *x

Giá trị của 'X' không nên bao gồm dấu chấm hàng đầu. Xem ví dụ 5 dưới đây để biết đầy đủ ví dụ

to from

'COMEFROM' left back with 'Goto'. Nó cho phép một đoạn mã để nói "Bất cứ khi nào nhãn X đạt được, thay vào đó hãy nhảy đến đây. " Ví dụ

# ...code 1...
label .somewhere
# ...code 2...
comefrom .somewhere

Ở đây, "mã 2" sẽ không chạy - thực thi sẽ nhảy trực tiếp từ dòng "nhãn". where" into line "đến từ đâu". 'Commom' thường được sử dụng để làm viện trợ giải quyết lỗi - việc sử dụng mã sản xuất của nó không được khuyến khích vì nó có thể dẫn đến hành động đáng ngạc nhiên

Những hạn chế

Có một số lớp Goto và đến từ không còn nữa, và do đó có một số hạn chế về nơi nhảy có thể đi

  • Không thể nhảy giữa các mô-đun hoặc chức năng
  • Không nhảy vào giữa một vòng lặp hoặc mệnh đề 'cuối cùng'
  • Không thể nhảy lên một dòng 'ngoại trừ' [vì không có ngoại lệ]

Ví dụ

Dưới đây là một số ví dụ về cách sử dụng Goto và Creomfrom

# Example 1: Breaking out from a deeply nested loop:
from goto import goto, label
for i in range[1, 10]:
    for j in range[1, 20]:
        for k in range[1, 30]:
            print i, j, k
            if k == 3:
                goto .end
label .end
print "Finished\n"


# Example 2: Restarting a loop:
from goto import goto, label
label .start
for i in range[1, 4]:
    print i
    if i == 2:
        try:
            output = message
        except NameError:
            print "Oops - forgot to define 'message'!  Start again."
            message = "Hello world"
            goto .start
print output, "\n"


# Example 3: Cleaning up after something fails:
from goto import goto, label

# Imagine that these are real worker functions.
def setUp[]: print "setUp"
def doFirstTask[]: print 1; return True
def doSecondTask[]: print 2; return True
def doThirdTask[]: print 3; return False  # This one pretends to fail.
def doFourthTask[]: print 4; return True
def cleanUp[]: print "cleanUp"

# This prints "setUp, 1, 2, 3, cleanUp" - no "4" because doThirdTask fails.
def bigFunction1[]:
    setUp[]
    if not doFirstTask[]:
        goto .cleanup
    if not doSecondTask[]:
        goto .cleanup
    if not doThirdTask[]:
        goto .cleanup
    if not doFourthTask[]:
        goto .cleanup

    label .cleanup
    cleanUp[]

bigFunction1[]
print "bigFunction1 done\n"


# Example 4: Using comefrom to let the cleanup code take control itself.
from goto import comefrom, label
def bigFunction2[]:
    setUp[]
    if not doFirstTask[]:
        label .failed
    if not doSecondTask[]:
        label .failed
    if not doThirdTask[]:
        label .failed
    if not doFourthTask[]:
        label .failed

    comefrom .failed
    cleanUp[]

bigFunction2[]
print "bigFunction2 done\n"


# Example 5: Using a computed goto:
from goto import goto, label

label .getinput
i = raw_input["Enter either 'a', 'b' or 'c', or any other letter to quit: "]
if i in ['a', 'b', 'c']:
    goto *i
else:
    goto .quit

label .a
print "You typed 'a'"
goto .getinput

label .b
print "You typed 'b'"
goto .getinput

label .c
print "You typed 'c'"
goto .getinput

label .quit
print "Finished\n"


# Example 6: What happens when a label is missing:
from goto import goto, label
label .real
goto .unreal      # Raises a MissingLabelError exception.

Mô-đun này được phát hành theo giấy phép nền tảng phần mềm Python, có thể được tìm thấy tại http. //www. con trăn. org/ Nó yêu cầu Python 2. 3 trở lên

Richie Hindle,

Version 1. 0, phát hành ngày 1 tháng 4 năm 2004. Tải xuống tại đây

Chúng ta 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]. . Đó là một ngôn ngữ lập trình có cấu trúc [cao].

Làm cách nào để cài đặt mô-đun Goto trong Python?

Cài đặt. Hãy chắc chắn rằng bạn đang sử dụng Python 3. Cài đặt 9 Pip -u Goto -Label

Cách sử dụng. Một ví dụ đơn giản. Từ Nhập Goto với_goto từ Goto Nhập Goto, Nhãn # Tùy chọn, cho mục đích linter @With_Goto def X []. Đi đến

hạ giới[email protected]_goto def x []. Please try. Vượt qua Cuối cùng. Nhãn

Cảm ơn

In sao Goto bị cấm?

"Tuyên bố GOTO thường được coi là một thực tiễn thiết lập chương trình kém dẫn đến các chương trình khó sử dụng. Nên tránh sử dụng nó. " Câu lệnh GOTO thường được coi là một cách lập trình kém dẫn đến các chương trình khó sử dụng

Chủ Đề