for e in a: print e in a
인쇄
True
True
,의 우리가 인터프리터 그런
a = [1, 2]
있다고 가정 해 봅시다하지만 다음 코드는하지 않습니다 나 또는 내 파이썬 - 전문가 친구의 감각
for e in a: print e in a == True
인쇄
False
False
누군가가이 설명 할 수 있습니까? 우리가 아래로 혼란 식을 끓여 경우
for e in a: print e in a
인쇄
True
True
,의 우리가 인터프리터 그런
a = [1, 2]
있다고 가정 해 봅시다하지만 다음 코드는하지 않습니다 나 또는 내 파이썬 - 전문가 친구의 감각
for e in a: print e in a == True
인쇄
False
False
누군가가이 설명 할 수 있습니까? 우리가 아래로 혼란 식을 끓여 경우
, 그것은이다
1 in a == True
이것은 False
(우리는 True
를 예상했을 수도) 제공합니다. 그래서 그것을 검사 할 ast
모듈을 사용하자 :
>>> print ast.dump(ast.parse('(1 in a) == True'))
Module(body=[
Expr(value=Compare(
left=Compare(
left=Num(n=1),
ops=[In()],
comparators=[
Name(id='a', ctx=Load())
]),
ops=[Eq()],
comparators=[
Name(id='True', ctx=Load())
]))
])
당신이 차이를 볼 마십시오
>>> import ast
>>> print ast.dump(ast.parse('1 in a == True'))
Module(body=[
Expr(value=Compare(
left=Num(n=1),
ops=[In(), Eq()],
comparators=[
Name(id='a', ctx=Load()),
Name(id='True', ctx=Load())
]))
])
당신은 아마 기대하는 방식으로 작동 추가 괄호가있는 버전과 비교? 두 번째 것은 Eq(In(1, a), True)
과 같습니다. 하지만 첫 번째는 In(1, a) Eq(a, True)
입니다. 뭐? 이 두 가지가 어떻게 함께 움직이는가? 글쎄, 그들은 and
처럼 접속사를 형성합니다.
그래서 첫 번째 표현식은 1 in a and a == True
과 같습니다.
하지만 왜? 이 같은
파이썬이 지원 때문입니다 "체인 조건문,"
1 < 3 < 5
귀하의 예는 단지 부수적 인 피해입니다 : 분명히뿐만 아니라 체인 <
같은 조건문하지만 in
카운트도 있습니다. 이것은 나에게 직관적이지 않지만, 그것이 작동하는 방법입니다. 여기서 체인에 대해 더 자세히 읽을 수 있습니다 : https://docs.python.org/2/reference/expressions.html#not-in
'In (1, a) Eq (a, True)'를 처음으로 비교하는 것은 아닙니까? 그렇지 않으면'1 == True'가'True'이지만'a == True'가'False'이므로,'True'를 반환 할 것입니다, 맞습니까? –
@Neftas : 정확합니다. 그것은 내 대답에 단순한 오타였습니다. 이제 해결되었습니다. 고맙습니다. –