IT이야기

[False, True]에서 "not(참)"이 False를 반환하는 이유는?

cyworld 2022. 3. 23. 00:35
반응형

[False, True]에서 "not(참)"이 False를 반환하는 이유는?

이렇게 하면:

>>> False in [False, True]
True

그것이 돌아온다.True. 단지 이유 때문에.False리스트에 있다.

하지만 내가 그렇게 한다면:

>>> not(True) in [False, True]
False

그것이 돌아온다.False에 . 려면not(True)와 같다False:

>>> not(True)
False

왜?

연산자 우선2.x, 3.x 순위.의 우선 순위not의 그것보다 낮다in은 다음과 따라서 다음과 같다.

>>> not ((True) in [False, True])
False

원하는 것은 다음과 같다.

>>> (not True) in [False, True]
True

@Ben이 지적한 바와 같이:절대 쓰지 않는 것이 좋다.not(True), 선호하다.not True전자는 기능 호출처럼 보이게 하는 반면not연산자지 함수가 아니야

not x in y 로 평가되다

코드를 분해하면 정확히 무슨 일이 일어나고 있는지 알 수 있다.첫 번째 사례는 예상대로 작동한다.

>>> x = lambda: False in [False, True]
>>> dis.dis(x)
  1           0 LOAD_GLOBAL              0 (False)
              3 LOAD_GLOBAL              0 (False)
              6 LOAD_GLOBAL              1 (True)
              9 BUILD_LIST               2
             12 COMPARE_OP               6 (in)
             15 RETURN_VALUE

두 번째 사례, 평가 대상:True not in [False, True]어느 것이False분명히:

>>> x = lambda: not(True) in [False, True]
>>> dis.dis(x)
  1           0 LOAD_GLOBAL              0 (True)
              3 LOAD_GLOBAL              1 (False)
              6 LOAD_GLOBAL              0 (True)
              9 BUILD_LIST               2
             12 COMPARE_OP               7 (not in)
             15 RETURN_VALUE        
>>> 

당신이 대신 표현하고 싶었던 것은(not(True)) in [False, True] ,,, . . .True다음과 같은 이유를 알 수 있다.

>>> x = lambda: (not(True)) in [False, True]
>>> dis.dis(x)
  1           0 LOAD_GLOBAL              0 (True)
              3 UNARY_NOT           
              4 LOAD_GLOBAL              1 (False)
              7 LOAD_GLOBAL              0 (True)
             10 BUILD_LIST               2
             13 COMPARE_OP               6 (in)
             16 RETURN_VALUE        

연산자 우선 순위. in보다 더 단단하게 묶다not, 그래서 당신의 표현은 에 해당된다.not((True) in [False, True]).

오퍼레이터 우선(Operater priority)에 관한 것이다.in보다 강하다not그러나 적당한 위치에 괄호를 추가하면 쉽게 고칠 수 있다.

(not(True)) in [False, True]  # prints true

쓰기:

not(True) in [False, True]

다음과 같다:

not((True) in [False, True])

어느 쪽이 좋을까?True목록에 있고 결과의 "not"을 반환한다.

라고 평가하고 있다.not True in [False, True], 그것이 돌아온다.False때문에True에 있다[False, True]

노력하면

>>>(not(True)) in [False, True]
True

기대한 결과를 얻는다.

에 alongside그한한의 한 다른 도 있다.not보다 낮다in, 실제로 당신의 진술은 다음과 같다.

not (True in [False, True])

그러나 상태를 다른 것과 구분하지 않으면 python은 2개의 역할을 사용한다는 점에 유의하십시오.precedence또는,chaining 그리고 이 는 그것을 분리하기 위해, 그리고 이 경우 python은 우선권을 사용했다.또한 조건을 분리하려면 객체나 값뿐만 아니라 괄호 안에 모든 조건을 넣어야 한다는 점에 유의하십시오.

(not True) in [False, True]

그러나 언급했듯이, 체인을 만드는 연산자에 대한 python에 의한 또 다른 수정이 있다.

Python 문서 기반:

비교, 멤버십 테스트 및 ID 테스트는 모두 비교 섹션에 설명된 것과 같은 우선 순위를 가지며 왼쪽에서 오른쪽으로 체인하는 기능을 가지고 있다는 점에 유의하십시오.

예를 들어 다음과 같은 진술의 결과는 다음과 같다.False:

>>> True == False in [False, True]
False

왜냐하면 python은 다음과 같은 진술을 사슬로 묶을 것이기 때문이다.

(True == False) and (False in [False, True])

정확히 말하자면False and True그것은False.

중앙 객체가 2개의 연산 및 다른 객체(이 경우 False) 간에 공유된다고 가정할 수).

또한 다음의 피연산자를 따르는 멤버십 테스트 및 ID 테스트 작업을 포함한 모든 비교에도 해당된다는 점에 유의하십시오.

in, not in, is, is not, <, <=, >, >=, !=, ==

예:

>>> 1 in [1,2] == True
False

또 다른 유명한 예는 숫자 범위:

7<x<20

이 값은 다음과 같다.

7<x and x<20   

수집 격납건물 점검 작업으로 보자.[False, True]몇 가지 요소가 들어 있는 목록이다.

그 표현True in [False, True]돌아온다True, 로서True리스트에 포함된 요소야

그러므로not True in [False, True]"반대편 부울"을 지정한다.not(우선 순위를 보존할 괄호 없이, 다음과 같이) 위 식의 결과in보다 우선권이 있다not운영자(operator.그러므로not True결과가 있을 것이다False.

다른 한편으로는(not True) in [False, True]와 같다False in [False, True]어느 것이True(False리스트에 포함되어 있다).

다른 일부 답변에 대해 명확히 하기 위해, 단항 연산자 에 괄호를 추가하는 것은 그 우선순위를 변경하지 않는다. not(True)성공하지 못하다not에 더 단단히 묶다True. 주위에 있는 괄호들의 중복된 집합일 뿐이다.True. 와 많이 비슷하다.(True) in [True, False]. 괄호는 아무 것도 하지 않는다.바인딩이 더 빡빡해지도록 하려면 전체 식 주위에 괄호를 붙여야 하는데, 이는 연산자와 연산자 둘 다라는 뜻이다.(not True) in [True, False].

이것을 다른 방식으로 보려면

>>> -2**2
-4

**보다 더 단단하게 묶다-즉, 음의 2의 제곱이 아니라 두 제곱의 음의 제곱이 되는 것이다(양수 4가 될 것이다).

만약 네가 부정적인 두 개의 사각형을 원한다면?괄호를 추가하십시오.

>>> (-2)**2
4

그러나 다음과 같은 것을 기대하는 것은 타당하지 않다.4

>>> -(2)**2
-4

때문에-(2) -2 않는다 괄호는 절대 아무 것도 하지 않는다. not(True)정확히 똑같아

참조URL: https://stackoverflow.com/questions/31421379/why-does-nottrue-in-false-true-return-false

반응형