2013-01-19 3 views
-2

아래 코드가 왜 이렇게 작동하는지 이해할 수 없습니다. (Python3x에서)'또는'and 'and'evaluation in Python3x

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

>>>f() 

Hello 

Hello again 

또한 이와 같이 이해할 수 없습니다. 나를 위해

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

>>>f() 

Hello 

가 첫 번째 람다 함수는 '안녕하세요 다시'말 '안녕하세요'또는 단어를 인쇄하지만 인쇄 보인다 모두 '안녕하세요' '안녕하세요 다시'.

두 번째 함수는 'Hello' 'Hello again'이라는 단어를 인쇄하는 것으로 보이지만 'Hello'만 인쇄합니다.

아무도이 람다 함수에서 무슨 일이 벌어지고 있는지 설명 할 수 있습니까?

친절한 도움에 감사드립니다.

답변

3

print 반환 (Falseish입니다) 없음, 그래서 파이썬은 답을 얻기 위해, or의 다른 피연산자를 평가하기 위해이 없다,하지만 and. 인쇄

  • return print('Hello') or print('Hello again')
  • Hello는, 인쇄 피연산자 중 하나라도 해당하는 경우 참 None
  • return None or print('Hello again')
  • or 수익률을 반환합니다. 첫 번째가 참이면 두 번째 것을 평가할 필요가 없습니다. 이
  • Hello again
  • return None or None
  • 지금 우리가 반환되어야 거짓 확신 인쇄되는 경우가 아니다. 두 피연산자가 모두 해당하는 경우 인쇄
    • return print('Hello') and print('Hello again')
    • Hello  

    는, 인쇄 None

  • return None and print('Hello again')
  • and 반환 True를 반환합니다. 첫 번째가 거짓이면 두 번째 것을 평가할 필요가 없습니다.
  • 이 게으른 평가라고
  • return False
+0

빠른 응답 주셔서 감사합니다! 알겠습니다. – y4suyuki

0

, 이것은 파이썬이 필요 이상으로 계산하지 의미합니다.

Expression1 or Expression2 

Expression1 and Expression2 

만일 Expression1이 거짓 인 경우

에서, or 비교 파이썬의 경우, 을 결과를 계산하기 위해 expression2의 결과가 필요하지만 and 비교하는 경우에 :에 Expression1은 False이면 비교의 두 번째 부분을 계산할 필요가 없습니다. True 또는 False and 비교의 두 번째 기능 인쇄는 평가할 필요가 없습니다. 파이썬은 이미 비교가 동일하다고 알고 있습니다. False

print 함수는 아무 것도 반환하지 않습니다. (그것이 사실이기 때문에) None

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

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

그러나이 첫 번째 안녕을 인쇄합니다 돌아가서 다시

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

결코 안녕하세요 게으른 평가를 이해하는 노력이 명령 :

>>> 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