2013-06-21 2 views
4

나는 다음과 같은 경우 :파이썬 : 순서 및 실행

if a(my_var) and b(my_var): 
    do something 

나는 a()True 경우 b() 만 평가되어 있다고 가정 할 수 있습니까? 또는 먼저 b()을 수행 할 수 있습니까?

b()을 평가하면 a()False 일 때 예외가 발생합니다. a(my_var), 네 True 경우

답변

1

: a(my_var) false를 반환하는 경우 그래서 그래, 다음 기능 b가 호출되지 않습니다

>>> help('and') 

Boolean operations 
****************** 

    or_test ::= and_test | or_test "or" and_test 
    and_test ::= not_test | and_test "and" not_test 
    not_test ::= comparison | "not" not_test 

... 

The expression ``x and y`` first evaluates *x*; if *x* is false, its 
value is returned; otherwise, *y* is evaluated and the resulting value 
is returned. 

... 

.

7

b()에만 평가됩니다. a(my_var)이 거짓이면 and 연산자가 단락됩니다. boolean operators documentation 가입일

:

발현 x and yx를 평가하여; x이 false이면 해당 값이 반환됩니다. 그렇지 않으면 y이 평가되고 결과 값이 반환됩니다. 전화했을 때

는 는

당신은 뭔가를 인쇄하는 기능이 자신을 테스트 할 수 있습니다

>>> noisy(0) and noisy('whatever') 
Called, returning 0 
0 
>>> noisy('') and noisy('whatever') 
Called, returning '' 
'' 
>>> noisy({}) and noisy('whatever') 
Called, returning {} 
{} 

사용자 정의 클래스가 구현할 수 :

>>> def noisy(retval): 
...  print "Called, returning {!r}".format(retval) 
...  return retval 
... 
>>> noisy(True) and noisy('whatever') 
Called, returning True 
Called, returning 'whatever' 
'whatever' 
>>> noisy(False) and noisy('whatever') 
Called, returning False 
False 

파이썬은 거짓 빈 용기 및 숫자 0 값을 consideres __nonzero__ hook 같은 테스트에 대해 부울 플래그를 반환하거나 컨테이너 유형 인 경우 __len__ hook을 구현합니다. 0을 반환하면 컨테이너가 비어 있고 false로 간주됨을 의미합니다. 밀접하게 관련 주에

or 운영자는 같은 일을하지만, 반대한다. 첫 번째 표현식이 true로 평가되면 두 번째 표현식은 평가되지 않습니다.

1

그래, 그렇게하는 것이 안전합니다. 조건이 느슨하게 평가되는 경우의 비단뱀.

0

컴파일러는 항상 위 아래 왼쪽 오른쪽에 읽습니다. 그래서 If False and True 그러면 False가 컴파일러에서 먼저 발생하고 if 조건을 종료합니다. 이것은 내가 아는 모든 소프트웨어에 유효합니다. help()의 멋진 도움 (HAH)와