2017-09-27 15 views
0

필자의 스크립트를 파이썬으로 작성하는 중에 직관적이지 않은 문제가 있습니다.가하는 당신이 foo는 볼 수 있듯이왜이 피연산자가 False를 반환합니까?

>>> def foo(): 
...  return False 
... 
>>> foo() 
False 
>>> foo()==False 
True 
>>> i=1 
>>> i!=0 
True 
>>> foo()==False & i!=0 
False 
>>> (foo()==False) & i!=0 
True 
>>> 

() == 거짓 반환 진정한나는! = 0, 그래서 직관적으로 나는 그러나 때, 진정한 & 진정한진정한를 반환하는 기대 나는 foo() == False & i! = 0 나는 거짓말을 받았다. (foo() == False) & i! = 0 처음에 예상했던대로 True를 얻는다. 여기서 무슨 일이 일어나고있는거야?

답변

2

간단한 비단뱀 순서입니다.

foo()==False & i!=0 

비트 단위 및 &에서 ==보다 높은 우선 순위를 가지고있다.

>>> foo()==False and i!=0 
True 

가 더 읽기 예상대로 논리적이고 and와 비트 및 &를 교체하는 경우 따라서, 당신이 정말로

foo()==(False & i)!=0 

을 평가하고, 당신의 대답이 나오면 그것에 대해 here

1

&은 그래서 피연산자 우선 순위 충돌이 발생하지 있는지 확인 (foo()==False) & (i!=0)을 사용하여 파이썬에서 ==!=보다 더 높은 우선 순위를 가지고있다.

foo()==False & i!=0 ==>foo()==(False & i)!=0

:

1

이유 (&) 비트 단위보다 낮은 우선 순위를 가지며 doc:

비교에 (==,!=)를 참조 파이썬 운영자 우선이 있다는 (foo()==False) & i!=0 ==>((foo()==False) & i)!=0

0

& Bitwise 연산자 인 경우 숫자를 짝수 또는 홀수로 사용할 수 있습니다. foo()은 0으로 간주되고 0은 홀수라고 간주되지 않으므로 을 반환하므로 &은 홀수가 아니기 때문에 False을 반환합니다.

0

파이썬 문서 당 6.16. 연산자 우선 순위 &는 나! = 따라서 당신이 foo는() ==를 실행할 때 ==보다 높은 우선 순위를 가지고 거짓 & 내가! 거짓

foo()==False & i!=0 
foo() == (False & True)!= 0 #since 1 is nothing but True 
Foo() == False != False 

을 다음과 같이 = 0 평가된다.

https://docs.python.org/3/reference/expressions.html#summary

나는 처음에 테이블을 포함하지만 유래에 그렇게하는 방법을 잘 모릅니다하려고 노력했다. 죄송합니다.

관련 문제