Python Language
비교
수색…
통사론
! = - 같지 않음
== - 같음
>
-보다 큼<
-보다 작음>=
-보다 크거나 같음<=
-보다 작거나 같음is
- 객체가 정확히 같은 객체인지 테스트합니다.객체가 정확히 같은 객체가 아닌지 테스트하지 않습니다.
매개 변수
매개 변수 | 세부 |
---|---|
엑스 | 비교할 첫 번째 항목 |
와이 | 비교할 두 번째 항목 |
보다 크거나 작음
x > y
x < y
이 연산자는 두 가지 유형의 값을 비교합니다.이 값은 연산자보다 작거나 큽니다. 숫자의 경우 단순히 수치 값을 비교하여 어느 것이 더 큰지를 비교합니다.
12 > 4
# True
12 < 4
# False
1 < 4
# True
문자열의 경우 알파벳순으로 비교하지만 알파벳 순서와 유사하지만 완전히 동일하지는 않습니다.
"alpha" < "beta"
# True
"gamma" > "beta"
# True
"gamma" < "OMEGA"
# False
이러한 비교에서 소문자는 대문자보다 큰 것으로 간주되므로 "gamma" < "OMEGA"
가 거짓입니다. 모두 대문자 일 경우 예상되는 알파벳순 정렬 결과를 반환합니다.
"GAMMA" < "OMEGA"
# True
각 유형은 <
및 >
연산자를 다르게 계산하므로 연산자를 사용하기 전에 주어진 유형에 대해 연산자가 의미하는 바를 조사해야합니다.
같지 않음
x != y
x
와 y
가 같지 않으면 True
반환하고 그렇지 않으면 False
반환합니다.
12 != 1
# True
12 != '12'
# True
'12' != '12'
# False
동일
x == y
이 표현식은 x
와 y
가 같은 값인지 판단하고 결과를 부울 값으로 반환합니다. 일반적으로 타입과 값이 모두 일치해야하므로 int 12
는 문자열 '12'
와 동일하지 않습니다.
12 == 12
# True
12 == 1
# False
'12' == '12'
# True
'spam' == 'spam'
# True
'spam' == 'spam '
# False
'12' == 12
# False
각 유형은 두 값이 같은지 평가하는 데 사용될 함수를 정의해야합니다. 내장 함수의 경우이 함수는 예상대로 동작하고 동일한 값을 기준으로 평가합니다. 그러나 사용자 정의 유형은 평등 테스트를 항상 원하는 값으로 정의 할 수 있습니다. 항상 True
반환하거나 항상 False
반환합니다.
체인 비교
체인 비교를 통해 여러 항목을 여러 비교 연산자와 비교할 수 있습니다. 예를 들어
x > y > z
단지 짧은 형식 일뿐입니다.
x > y and y > z
이것은로 평가됩니다 True
모두 비교가있는 경우에만 True
.
일반적인 형식은 다음과 같습니다.
a OP b OP c OP d ...
여기서 OP
는 사용할 수있는 다중 비교 연산 중 하나를 나타내며 문자는 임의의 유효한 표현식을 나타냅니다.
0 != 1 != 0
은0 != 0
이False
임에도 불구하고True
평가됩니다.x != y != z
라는 일반적인 수학 표기법과는 달리x
,y
및z
는 다른 값을 갖습니다. Chaining==
연산은 대부분 평등이 일반적으로 전이 적이기 때문에 자연스러운 의미를 지닙니다.
스타일
적절한 구문을 사용하는 동안 얼마나 많은 항목과 비교 연산을 사용하는지 이론적으로 제한하지 않습니다.
1 > -1 < 2 > 0.5 < 100 != 24
각 비교 결과가 True
이면 위의 값은 True
반환합니다. 그러나 복잡한 체인을 사용하는 것은 좋은 스타일이 아닙니다. 좋은 연결 고리는 "지향성"이 될 것이고,
1 > x > -4 > y != 8
부작용
즉시 하나 개의 비교가 반환로 False
, 표현은 즉시 평가 False
남아있는 모든 비교를 건너 뜁니다.
a > exp > b
의 표현식 exp
는 한 번만 평가되는 반면,
a > exp and exp > b
exp
가 a > exp
경우 a > exp
가 두 번 계산됩니다.
`is 'vs`==`에 의한 비교
일반적인 함정은 동등 비교 연산자를 혼란 is
및 ==
.
a == b
는 a
와 b
의 값을 비교합니다.
a is b
의 신원 비교합니다 와 a
b
.
설명하기 :
a = 'Python is fun!'
b = 'Python is fun!'
a == b # returns True
a is b # returns False
a = [1, 2, 3, 4, 5]
b = a # b references a
a == b # True
a is b # True
b = a[:] # b now references a copy of a
a == b # True
a is b # False [!!]
기본적 is
뿐만 속기 생각할 수 id(a) == id(b)
.
이 외에도 런타임 환경의 단점이있어 상황을 더욱 복잡하게 만듭니다. 짧은 문자열과 작은 정수는 Python 컴퓨터가 동일한 개체에 대해 더 적은 메모리를 사용하려고하기 때문에 is
와 비교할 때 True
를 반환합니다.
a = 'short'
b = 'short'
c = 5
d = 5
a is b # True
c is d # True
그러나 긴 문자열과 큰 정수는 별도로 저장됩니다.
a = 'not so short'
b = 'not so short'
c = 1000
d = 1000
a is b # False
c is d # False
당신 사용해야은 is
를 테스트 None
:
if myvar is not None:
# not None
pass
if myvar is None:
# None
pass
의 사용 is
에 "감시"(즉, 고유의 오브젝트)를 테스트하는 것입니다.
sentinel = object()
def myfunc(var=sentinel):
if var is sentinel:
# value wasn’t provided
pass
else:
# value was provided
pass
객체 비교하기
사용자 정의 클래스의 평등을 비교하려면 __eq__
및 __ne__
메소드를 정의하여 ==
및 !=
을 겹쳐 쓸 수 있습니다. __lt__
( <
), __le__
( <=
), __gt__
( >
) 및 __ge__
( >
)를 재정의 할 수도 있습니다. 두 가지 비교 메소드 만 재정의하면되고 나머지는 Python이 처리 할 수 있습니다 ( ==
는 not <
와 not >
not <
것과 같습니다).
class Foo(object):
def __init__(self, item):
self.my_item = item
def __eq__(self, other):
return self.my_item == other.my_item
a = Foo(5)
b = Foo(5)
a == b # True
a != b # False
a is b # False
이 간단한 비교는 other
(비교 대상 객체)가 동일한 객체 유형이라고 가정합니다. 다른 유형과 비교하면 오류가 발생합니다.
class Bar(object):
def __init__(self, item):
self.other_item = item
def __eq__(self, other):
return self.other_item == other.other_item
def __ne__(self, other):
return self.other_item != other.other_item
c = Bar(5)
a == c # throws AttributeError: 'Foo' object has no attribute 'other_item'
isinstance()
또는 이와 유사한 것을 확인하면이 문제를 방지하는 데 도움이됩니다 (원하는 경우).
Common Gotcha : 파이썬은 타이핑을 강제하지 않습니다.
다른 많은 언어에서 다음을 실행하면 (Java 예제)
if("asgdsrf" == 0) {
//do stuff
}
... 오류가 발생합니다. 당신은 문자열을 그것과 같은 정수와 비교할 수 없습니다. 파이썬에서 이것은 완벽하게 합법적 인 성명서입니다. 단지 False
됩니다.
일반적인 잡았다는 다음과 같습니다
myVariable = "1"
if 1 == myVariable:
#do stuff
이 비교는 매번 오류없이 False
평가되어 잠재적으로 버그를 숨기거나 조건을 위반합니다.