2013-01-19 85 views
-2

我不明白爲什麼下面的代碼是這樣工作的。 (在Python3x中)'或'和'和'Python3x評估

>>>f = lambda: print('Hello') or print('Hello again') 

>>>f() 

Hello 

Hello again 

也不能這樣理解。

>>>f = lambda: print('Hello') and print('Hello again') 

>>>f() 

Hello 

對於我來說,第一拉姆達功能似乎「又見面了」打印單詞「你好」 這個詞,但它打印「你好」 「大家好」。

第二個函數似乎打印單詞'你好''再次問候',但它只打印'你好'。

任何人都可以解釋這個lambda函數是怎麼回事?

謝謝你的幫助!

回答

3

print返回無(這是Falseish),所以Python必須評估另一個操作數or,但不是and,以獲得答案。

  • return print('Hello') or print('Hello again')
  • Hello被打印,打印返回None
  • return None or print('Hello again')
  • or返回true如果任何操作數爲True。如果第一個是True,則不需要評估第二個。這不是
  • Hello again打印
  • return None or None
  • 現在我們有一定的假應當歸還的情況。

 

  • return print('Hello') and print('Hello again')
  • Hello被打印出來,如果兩個操作數都是真打印返回None
  • return None and print('Hello again')
  • and返回true。如果第一個是False,則不需要評估第二個。
  • return False
+0

感謝您的快速響應! 我明白了。 – y4suyuki

0

這就是所謂的懶惰評估,這意味着Python將不計算超過必要的。在:

Expression1 or Expression2 

Expression1 and Expression2 

如果表達式1爲假,在or比較蟒蛇的情況下,將需要表達式2的結果來計算結果, 但對於and比較,如果表達式1是假的,則不需要計算比較的第二部分作爲0 and x == False無論x是否爲TrueFalseand比較中打印的2sd函數不需要被評估爲蟒蛇已經知道,比較將等於False

print函數不會返回任何東西I.e.返回None

>>> def print2(string): 
    print(string) 
    return True 

>>> r=(lambda: print2('Hello') or print2('Hello again'))() 
Hello 

然而,這將只打印了第一個Hello(因爲它是真實的),從此再也

>>> r=(lambda: print2('Hello') and print2('Hello again'))() 
Hello 
Hello again 

的Hello瞭解懶惰的評價,請嘗試以下命令:

>>> def p(): 
    print("foo") 
    return True 



>>> False and p() and p() 

False 

>>> True and p() and p() 

foo 
foo 
True 

>>> True and (not p()) and p() 

foo 
False