2010-07-18 14 views
10

Tôi có vòng lặp for để kiểm tra một loạt các điều kiện. Trên mỗi lần lặp lại, nó sẽ mang lại đầu ra chỉ cho một trong các điều kiện. Lợi nhuận cuối cùng là mặc định, trong trường hợp không có điều kiện nào là đúng. Tôi có phải đặt tiếp tục sau mỗi khối sản lượng không?Sản lượng python có hàm ý tiếp tục không?

def function(): 
    for ii in aa: 
     if condition1(ii): 
      yield something1 
      yield something2 
      yield something3 
      continue 

     if condition2(ii): 
      yield something4 
      continue 

     #default 
     yield something5 
     continue 

Trả lời

14

Thay vì sử dụng continue tuyên bố tôi sẽ đề nghị sử dụng elifelse statments:

def function(): 
    for ii in aa: 
     if condition1(ii): 
      yield something1 
      yield something2 
      yield something3 

     elif condition2(ii): 
      yield something4 

     else: #default 
      yield something5 

Điều này có vẻ nhiều hơn nữa có thể đọc được với tôi

13

NO, năng suất không bao hàm sự tiếp tục, nó chỉ bắt đầu ở dòng tiếp theo, lần sau. Một ví dụ đơn giản cho thấy rằng

def f(): 
    for i in range(3): 
     yield i 
     print i, 

list(f()) 

này in 0,1,2 nhưng nếu năng suất vẫn tiếp tục, nó sẽ không

1

continue bỏ qua khối mã còn lại, nhưng khối mã sau yield được thực hiện khi next() là được gọi lại trên máy phát điện. yield hoạt động như tạm dừng thực thi tại điểm nhất định.

8

yield bằng Python ngừng thực thi và trả về giá trị. Khi trình lặp được gọi lại, nó sẽ tiếp tục thực hiện ngay sau câu lệnh yield. Ví dụ, một máy phát điện định nghĩa là:

def function(): 
    yield 1 
    yield 2 

sẽ trở 1 sau đó 2 tuần tự. Nói cách khác, yêu cầu continue. Tuy nhiên, trong trường hợp này, elifelse như flashk được mô tả chắc chắn là công cụ phù hợp.

0

Nếu một cái gì đó là giá trị đơn giản và điều kiện kiểm tra cho bình đẳng, tôi muốn thực hiện điều này "cấu trúc trường hợp" tra cứu từ điển:

ii_dict={'a':('somethinga1','somethinga2','somethinga3'),'b':('somethingb1',)} 
ii_default = ('somethingdefault',) 
aa='abeabbacd' 

def function(): 
    return (value 
      for ii in aa 
      for value in (ii_dict[ii] if ii in ii_dict else ii_default)) 

for something in function(): print something