[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
'IT이야기' 카테고리의 다른 글
TypeScript 파일이 변경될 때 ts-node를 감시하고 다시 로드하는 방법 (0) | 2022.03.23 |
---|---|
python에서 float를 정수로 변환하는 가장 안전한 방법? (0) | 2022.03.23 |
(vue 구성 요소 대신) Javascript 파일에서 작업을 디스패치하는 방법? (0) | 2022.03.22 |
react.js 오류:불변 위반:축소 반응 오류 #37 (0) | 2022.03.22 |
reactive native app를 만들 수 없음입력이 필요하지만 엑스포가 비인터랙티브 모드에 있음 (0) | 2022.03.22 |