2012-06-11 27 views
8

tôi nghĩ elif rằng: là viết tắt chocho - khác vs cho elif

else: 
    if: 

nhưng nó không thể sử dụng

cho - elif:

chỉ

cho - else: if:

trong mã này:

for line in source: 
    change_next = False 
    for dataset,artnr,revision in datasets: 
     if dataset in line: 
      change_next = True 
      print " ** " + dataset + " found" 
      datasets.remove((dataset,artnr,revision)) 
      break 
    else: 
     if line.startswith("DstID:"): 
      print line.replace("DstID:","").rstrip() 

    if change_next and "Partno:" in line: 
     destination.write("Partno: " + artnr + "\n") 
     print "Partno: " + artnr 
    elif change_next and "Revno:" in line: 
     destination.write("Revno:" + revision + "\n") 
     print "Revno:" + revision 
    else: 
     destination.write(line) 

Cảm ơn bạn đã trả lời cho đến giờ, câu hỏi của tôi bây giờ là đúng hơn: đây có phải là cách để làm điều đó không? nếu một dòng không có bất kỳ bộ dữ liệu (đã biết) trong đó, sau đó tôi muốn in nó nếu nó là một tập dữ liệu?

+3

Tôi đã lập trình Python khoảng 7 năm và tôi chưa bao giờ biết về mệnh đề 'else' trong câu lệnh' for' ... –

+3

@AndrewJaffe: Điều đó dễ hiểu. Nó không đặc biệt hữu ích. Tôi nghĩ rằng chỉ có một số lần tôi đã sử dụng nó. –

+0

@ JoelCornett Tôi sử dụng nó mọi lúc. – becko

Trả lời

11

elif: không phải là macro mở rộng thành else: if, nó là phần tử cú pháp chỉ hợp lệ trong ngữ cảnh if: statement. Thông thường, else: if sẽ mở một khối if mới; tuy nhiên, elif: không làm điều đó.

+2

Đó là điều may mắn, bởi vì nếu không chúng ta không thể có nhiều mệnh đề 'elif' trong một câu lệnh' if', điều đó sẽ rất khủng khiếp! (... Tôi cho là trừ khi những người tiếp theo mở rộng sang * ngày càng thụt vào * 'khác: nếu 'khối, mà chỉ là kỳ cục ... Chà, giờ tôi cần tẩy não của mình.) – weronika

+1

Nhưng sẽ có ý nghĩa để có' elif' sau một 'for', đúng không? Với tôi thực tế là chúng ta có thể làm 'cho ... else', nhưng không có 'cho ... elif ... elif ........... else' có vẻ không phù hợp. – becko

+0

Sẽ có ý nghĩa gì nếu có 'elif' sau một' for'? Các 'else' sau một vòng lặp không làm điều tương tự nó với' if' (và đó là khó hiểu). – kindall

8

đúng. Điều tương tự cũng xảy ra với else trong try .. except .. else.

9

forelse là trường hợp sử dụng đặc biệt, không giống với cấu trúc ifelif. elif không thực sự có ý nghĩa trong ngữ cảnh của for anyway, như ý nghĩa của forelse là "nếu chúng tôi đã hoàn thành vòng lặp mà không vi phạm, làm điều này". Đó là logic nhị phân. elif không có ý nghĩa trong ngữ cảnh của quyết định nhị phân này.

+0

Ngoài ra còn có 'while'' else', nhưng nó được sử dụng thậm chí ít thường xuyên hơn 'for'' else'. – MRAB

+0

@MRAB 'elif' không có ý nghĩa theo ngữ cảnh trong' while' 'else'. Hoặc trong 'try'' ngoại trừ 'else' cho vấn đề đó. Điểm là 'elif' không tồn tại trong các ngữ cảnh đó bởi vì nó không có ý nghĩa logic cho nó. –

+0

Với tôi 'elif' có ý nghĩa trong ngữ cảnh' cho ... elif ... else'. Hãy nghĩ về nó tương đương với 'for ... else if ... else'. Điều gì không có ý nghĩa về nó? Tôi biết cú pháp python không cho phép nó. Tôi nói rằng * ngữ nghĩa * nó * có thể * có ý nghĩa. – becko

4

'Khác' mà bạn tham chiếu được gắn với lệnh 'for', không phải lệnh 'if'. 'elif' chỉ có ý nghĩa khi được sử dụng với lệnh 'if'.

Với lệnh 'for', khối 'else' chỉ được thực hiện nếu khối 'for' không được kết thúc sớm bằng lệnh 'break', xem paragraph 4.4.