2013-03-14 33 views
5
>>> def foo(a): 
     print "called the function" 
     if(a==1): 
      return 1 
     else: 
      return None 
>>> a=1 

>>> if(foo(a) != None and foo(a) ==1): 
    print "asdf" 

called the function 
called the function 
asdf 

Xin chào. làm cách nào tôi có thể tránh gọi hàm hai lần mà không cần sử dụng thêm biến.trăn nếu điều kiện và "và"

+1

bạn có thể lưu kết quả của 'foo (a) 'vào một biến. Sau đó kiểm tra giá trị biến trong mệnh đề 'if()'. – Raptor

+5

nếu (foo (a) == 1): – jimifiki

+1

Chính xác, đối với điều kiện thứ hai là 'True', thì điều kiện đầu tiên phải là. Cũng lưu ý rằng các dấu ngoặc xung quanh điều kiện được coi là biểu mẫu không đúng trong Python. 'if (a == 1):' chỉ nên là 'if a == 1:'. –

Trả lời

12

Bạn có thể chuỗi sự so sánh như thế này

if None != foo(a) == 1: 

này hoạt động giống như

if (None != foo(a)) and (foo(a) == 1): 

ngoại trừ việc nó chỉ đánh giá foo (a) một lần.

+0

Bạn có thể chuỗi ** so sánh ** so sánh? À, nhìn kìa! – slezica

+0

@ uʍop ǝpısdn, yep nó hoạt động tương tự (với một ẩn 'và') như các so sánh khác trong câu trả lời của bạn –

+2

Trong khi đây là một câu trả lời _general_ tốt, kiểm tra đầu tiên vẫn còn dư thừa trong trường hợp đã cho. –

7

làm cách nào tôi có thể tránh gọi hàm hai lần mà không cần sử dụng thêm biến.

Ở đây, bạn chỉ có thể thay thế

if(foo(a) != None and foo(a) ==1): 

với

if foo(a) == 1: 

Các foo(a) != None là không cần thiết: nếu foo(a) == 1, nó được đảm bảo để không None.

+0

Có lẽ mã được đăng không phải là mã thực nhưng chỉ là một ví dụ. nếu (foo (a)! = Không có và foo (a) == 1): nghe như một giải pháp tốt hơn – jimifiki

+1

@jimifiki Nếu chức năng có tác dụng phụ, có thể gây ra vấn đề. Bên cạnh đó, đây là câu trả lời hay nhất cho câu hỏi được hỏi. Nếu OP đã đơn giản hóa nó, thì anh ta cần đặt một câu hỏi mới. –

+0

Điều này không trả lời được câu hỏi. Tôi đồng ý với @jimifiki. Và nó không phải là tốt nhất, xem dưới đây – slezica

1

Tuyên bố sau

if foo(a) == 1: 

sẽ đối phó với cả hai điều kiện.

+0

Tại sao lại là downvote? Vui lòng giải thích. –

1

nếu foo (a) == 1, sau đó foo (a) sẽ không được Không,

để đơn giản hóa mã của bạn để:

if foo(a): 
    print('asdf') 
+0

Giả sử rằng anh ta có nghĩa là "Bất kỳ giá trị nào đánh giá đúng" là một chút tinh ranh, tôi nghĩ vậy. –

+0

Tôi không nghĩ rằng có sự khác biệt giữa nếu foo (a) và nếu foo (a) == 1, tại đây. –