Các định nghĩa của continue
tuyên bố là:
Câu
continue
lệnh tiếp tục với lần lặp tiếp theo của vòng lặp.
Tôi không thể tìm thấy bất kỳ ví dụ tốt về mã.
Ai đó có thể đề nghị một số trường hợp đơn giản khi continue
cần thiết?
Các định nghĩa của continue
tuyên bố là:
Câu
continue
lệnh tiếp tục với lần lặp tiếp theo của vòng lặp.
Tôi không thể tìm thấy bất kỳ ví dụ tốt về mã.
Ai đó có thể đề nghị một số trường hợp đơn giản khi continue
cần thiết?
Câu trả lời:
Đây là một ví dụ đơn giản:
for letter in 'Django':
if letter == 'D':
continue
print("Current Letter: " + letter)
Đầu ra sẽ là:
Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o
Nó tiếp tục đến lần lặp tiếp theo của vòng lặp.
continue
không nhưng nó không quá hữu ích, khi bạn có thể làmif letter != 'D': print 'Current Letter:', letter
Tôi thích sử dụng tiếp tục trong các vòng lặp, nơi có rất nhiều bối cảnh phải được hoàn thành trước khi bạn "xuống kinh doanh". Vì vậy, thay vì mã như thế này:
for x, y in zip(a, b):
if x > y:
z = calculate_z(x, y)
if y - z < x:
y = min(y, z)
if x ** 2 - y ** 2 > 0:
lots()
of()
code()
here()
Tôi nhận được mã như thế này:
for x, y in zip(a, b):
if x <= y:
continue
z = calculate_z(x, y)
if y - z >= x:
continue
y = min(y, z)
if x ** 2 - y ** 2 <= 0:
continue
lots()
of()
code()
here()
Bằng cách này, tôi tránh được mã lồng rất sâu. Ngoài ra, thật dễ dàng để tối ưu hóa vòng lặp bằng cách loại bỏ các trường hợp xảy ra thường xuyên nhất trước tiên, do đó tôi chỉ phải xử lý các trường hợp không thường xuyên nhưng quan trọng (ví dụ: số chia là 0) khi không có showstopper khác.
continue
trong thời trang này tương tự như sử dụng GOTO
. Tuy nhiên, đây là đúng cách để sử dụng GOTO
.
Thông thường, tình huống tiếp tục là cần thiết / hữu ích, là khi bạn muốn bỏ qua mã còn lại trong vòng lặp và tiếp tục lặp lại.
Tôi thực sự không tin rằng nó cần thiết, vì bạn luôn có thể sử dụng các câu lệnh if để cung cấp cùng logic, nhưng nó có thể hữu ích để tăng khả năng đọc mã.
if <condition>: continue
thay vì if not <condition>: ...
tránh một mức độ thụt lề sẽ cần thiết nếu nó được viết mà không có nó.
continue
tuyên bố, về cơ bản chúng tôi sẽ nhảy ra khỏi phần kiểm tra có điều kiện và cho phép lặp lại vòng lặp để tiếp tục để lặp lại tiếp theo? Nó không rõ ràng với tôi làm thế nào điều này sẽ tốt hơn so với việc sử dụng else
. Có phải tất cả chỉ là về khả năng đọc và hiệu suất thời gian chạy được cải thiện?
import random
for i in range(20):
x = random.randint(-5,5)
if x == 0: continue
print 1/x
tiếp tục là một tuyên bố kiểm soát cực kỳ quan trọng. Đoạn mã trên chỉ ra một ứng dụng điển hình, trong đó kết quả của phép chia bằng 0 có thể tránh được. Tôi sử dụng nó thường xuyên khi tôi cần lưu trữ đầu ra từ các chương trình, nhưng không muốn lưu trữ đầu ra nếu chương trình bị hỏng. Lưu ý, để kiểm tra ví dụ trên, thay thế câu lệnh cuối cùng bằng bản in 1 / float (x) hoặc bạn sẽ nhận được số không mỗi khi có một phân số, vì randint trả về một số nguyên. Tôi đã bỏ qua nó cho rõ ràng.
Một số người đã bình luận về khả năng đọc, nói rằng "Ồ nó không giúp đọc được nhiều, ai quan tâm chứ?"
Giả sử bạn cần kiểm tra trước mã chính:
if precondition_fails(message): continue
''' main code here '''
Lưu ý rằng bạn có thể làm điều này sau khi mã chính được viết mà không thay đổi mã đó bằng mọi cách. Nếu bạn khác mã, chỉ dòng được thêm bằng "tiếp tục" sẽ được tô sáng vì không có thay đổi khoảng cách cho mã chính.
Hãy tưởng tượng nếu bạn phải thực hiện một mã sản xuất, điều này hóa ra chỉ đơn giản là thêm một dòng với tiếp tục. Thật dễ dàng để thấy rằng đó là thay đổi duy nhất khi bạn xem lại mã. Nếu bạn bắt đầu gói mã chính trong if / other, diff sẽ làm nổi bật mã mới được thụt vào, trừ khi bạn bỏ qua các thay đổi về khoảng cách, đặc biệt nguy hiểm trong Python. Tôi nghĩ trừ khi bạn ở trong tình huống bạn phải đưa ra mã trong thông báo ngắn, bạn có thể không hoàn toàn đánh giá cao điều này.
def filter_out_colors(elements):
colors = ['red', 'green']
result = []
for element in elements:
if element in colors:
continue # skip the element
# You can do whatever here
result.append(element)
return result
>>> filter_out_colors(['lemon', 'orange', 'red', 'pear'])
['lemon', 'orange', 'pear']
continue
tuyên bố thêm ở đây? Nó có thể được loại bỏ bằng cách sử dụng element not in colors
và mã sẽ có thể đọc được.
Giả sử chúng tôi muốn in tất cả các số không phải là bội của 3 và 5
for x in range(0, 101):
if x % 3 ==0 or x % 5 == 0:
continue
#no more code is executed, we go to the next number
print x
if x %3 == 0 or x % 5 == 0:
, pass
, else:
,print x
continue
. Kết luận của tôi là không bao giờ có nhu cầu , nhưng trong một số trường hợp (như thế này), mã dễ đọc hơn bằng cách sử dụng continue
. Đó là một ví dụ rất hay.
Nó không thực sự cần thiết vì nó có thể được thực hiện với IF nhưng nó dễ đọc hơn và cũng ít tốn kém hơn trong thời gian chạy.
Tôi sử dụng nó để bỏ qua một vòng lặp trong một vòng lặp nếu dữ liệu không đáp ứng một số yêu cầu:
# List of times at which git commits were done.
# Formatted in hour, minutes in tuples.
# Note the last one has some fantasy.
commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)]
for time in commit_times:
hour = time[0]
minutes = time[1]
# If the hour is not between 0 and 24
# and the minutes not between 0 and 59 then we know something is wrong.
# Then we don't want to use this value,
# we skip directly to the next iteration in the loop.
if not (0 <= hour <= 24 and 0 <= minutes <= 59):
continue
# From here you know the time format in the tuples is reliable.
# Apply some logic based on time.
print("Someone commited at {h}:{m}".format(h=hour, m=minutes))
Đầu ra:
Someone commited at 8:20
Someone commited at 9:30
Someone commited at 11:45
Someone commited at 15:50
Someone commited at 17:45
Như bạn có thể thấy, giá trị sai không xuất hiện sau continue
câu lệnh.
if
chỉ có thể làm những gì continue
nếu tất cả các mã được chứa trong một khối. continue
bỏ qua mã mà thậm chí bên ngoài if
khối.
Ví dụ: nếu bạn muốn làm những việc khác nhau tùy thuộc vào giá trị của một biến:
my_var = 1
for items in range(0,100):
if my_var < 10:
continue
elif my_var == 10:
print("hit")
elif my_var > 10:
print("passed")
my_var = my_var + 1
Trong ví dụ trên nếu tôi sử dụng break
trình thông dịch sẽ bỏ qua vòng lặp. Nhưng với continue
nó chỉ bỏ qua các câu lệnh if-elif và đi thẳng đến mục tiếp theo của vòng lặp.
my_var
các 0
.
continue
.
elif
nên là một if
. Mã không mang lại vẻ ngoài mà bạn biết bạn đang làm gì.
continue
chỉ cần bỏ qua phần còn lại của mã trong vòng lặp cho đến lần lặp tiếp theo