숫자자료형을 배우면서 간단하게 산술연산자(+, -, /, *, %, //, **)에 대해서 배웠습니다.
[파이썬/문법] - 자료형 - 1. 숫자자료형, 산술연산자
그외에도 파이썬에서는 기본적인 연산자가 여러가지 있는데요.
이번엔, 대입연산자, 비교연산자, 비트연산자, 논리연산자, 맴버연산자, 식별연산자, 삼항연산자등.. 기초적인 모든 연산자들에 대해 알아보도록 합시다.
대입연산자(Assignment Operators),
대입연산자는 할당연산자라고도 부릅니다. 기본적인 단순대입연산자(=)에서 산술연산자를 덧붙인 복합대입연산자(+=, -=)까지 존재하는데요. 복합대입 연산자는 다름아니라 (a+=b == a=a+b)와 같이 원래 값에 새로운 값을 산술연산해서 대입하는 것과 같은 연산을 수행합니다.
연산자 | 설명 | 다르게 쓰면(결과는 같음) |
= | 단순대입 연산자 입니다. 오른쪽 값(상수, 변수)를 왼쪽 값(변수)에 대입(copy)해주는 연산자입니다. | |
+= | +(더하기)연산과 =연산이 붙은 연산자로, 오른쪽 값(상수, 변수)을 왼쪽 값(변수)과 더한(+)후 대입(copy)해주는 연산자입니다. |
a += b 와 a = a + b 둘다 같습니다. |
-= | +(빼기)연산과 =연산이 붙은 연산자로, 오른쪽 값(상수, 변수)을 왼쪽 값(변수)과 뺀(+)후 대입(copy)해주는 연산자입니다. | a -= b 와 a = a - b 둘다 같습니다. |
*= | *(곱하기)연산과 =연산이 붙은 연산자로, 오른쪽 값(상수, 변수)을 왼쪽 값(변수)과 곱한(*)후 대입(copy)해주는 연산자입니다. | a *= b 와 a = a * b 둘다 같습니다. |
/= | /(나누기)연산과 =연산이 붙은 연산자로, 오른쪽 값(상수, 변수)을 왼쪽 값(변수)으로 나눈(/)후 대입(copy)해주는 연산자입니다. | a /= b 와 a = a / b 둘다 같습니다. |
%= | %(나머지)연산과 =연산이 붙은 연산자로, 오른쪽 값(상수, 변수)을 왼쪽 값(변수)에대한 나머지(%)를 대입(copy)해주는 연산자입니다. | a %= b 와 a = a % b 둘다 같습니다. |
**= | **(제곱)연산과 =연산이 붙은 연산자로, 오른쪽 값(상수, 변수)을 왼쪽 값(변수)과 제곱한(**)후 대입(copy)해주는 연산자입니다. | a **= b 와 a = a ** b 둘다 같습니다. |
//= | //(몫)연산과 =연산이 붙은 연산자로, 오른쪽 값(상수, 변수)을 왼쪽 값(변수)과 나눈 몫(//)을 대입(copy)해주는 연산자입니다. | a //= b 와 a = a // b 둘다 같습니다. |
비교연산자(Comparison Operators),
관계연산자라고도 하며, 둘이 같은지 아닌지를 구분하는 등치연산자(==, !=)와 둘중에서 크고 작음을 구분하는 >, >=, <=, <가 있습니다. 참인지 거짓인지를 불자료형으로 반환하며,
신기한점은 a > b > c 와 같이 비교연산자를 여러개 쓰는 것도 가능합니다.
연산자 | 설명 |
== | 둘이 같은지 참(True)아니면 거짓(False)으로 반환합니다. |
!= | 둘이 같은지 참(True)아니면 거짓(False)으로 반환합니다. (=! 는 잘못된 연산자입니다. 가끔헷갈리는 경우가 있는데, =뒤에 기호가 붙는 연산자는 없습니다) |
> | 왼쪽값이 오른쪽값보다 큰지(초과) 참(True)아니면 거짓(False)으로 반환합니다. |
< | 왼쪽값이 오른쪽값보다 작은지(미만) 참(True)아니면 거짓(False)으로 반환합니다. |
>= | 왼쪽값이 오른쪽값 이상인지 참(True)아니면 거짓(False)으로 반환합니다. |
<= | 왼쪽값이 오른쪽값 이하인지 참(True)아니면 거짓(False)으로 반환합니다. |
비트연산자(Bitwise Operators),
불대수의 논리연산인 논리곱(and), 논리합(or), 부정(not), 베타적 논리합(xor)등을 비트단위로 계산하는 연산자입니다.
추가로 쉬프트연산(<<, >>)도 있습니다. 불로 반환하지 않고, 숫자자료형으로 연산했으니 반환도 숫자자료형으로 합니다.
연산자 | 설명 |
& | 논리곱(and)을 비트단위로 수행합니다. |
^ | 베타적 논리합(xor)을 비트단위로 수행합니다. |
| | 논리합(or)을 비트단위로 수행합니다. |
~ | 부정(not)을 비트단위로 수행합니다. |
<< | 왼쪽값을 오른쪽값만큼 왼쪽쉬프트한 값을 반환합니다. (a << b 와 a * (2 ** b)가 동일합니다.) |
>> | 왼쪽값을 오른쪽값만큼 오른쪽쉬프트한 값을 반환합니다. (a >> b 와 a / (2 ** b)가 동일합니다.) |
논리연산자(Logical Operators),
불대수의 논리연산인 논리곱(and), 논리합(or), 부정(not)을 불자료형끼리로 계산해서, 반환도 불자료형으로 반환합니다.
c언어같으면 &&, || 같이 했겠지만, 여기서는 독특하게 영어 단어를 그대로 씁니다.
연산자 | 설명 |
and | 논리곱(and)를 수행해, 불자료형으로 반환합니다. |
or | 논리합(or)를 수행해, 불자료형으로 반환합니다. |
not | 기존값의 부정(not)을 불자료형으로 반환합니다. |
맴버연산자(Membership Operators),
맴버연산자는 요소가 군집된 요소들(리스트, 문자열)에 속해있는지를 참이나 거짓으로 반환합니다.
왼쪽값으로 요소가 들어가며, 오른쪽 값으로 요소들(리스트, 문자열)이 들어갑니다. (마치 수학의 부분집합 연산같은데, 실제로 리스트 in 리스트 같이 하면 거짓(False)으로 반환됩니다)
연산자 | 역할 |
in | 왼쪽값이 오른쪽에 속해있으면 참(True), 아니면 거짓(False)을 반환합니다. |
not in | 왼쪽값이 오른쪽에 속해있지 않으면 참(True), 아니면 거짓(False)을 반환합니다. |
식별연산자(Identity Operators),
식별연산자는 아이디 연산자라고도 합니다. 비교하는 두 값이 같은지 아닌지를 넘어서, 두 값이 같은 주소인지(동일한 객체인지)를 확인해서 반환합니다.
연산자 | 역할 |
is | 두 값이 같은 주소이면(같은 값이면) 참, 아니면 거짓을 반환합니다. |
is not | 두 값이 다른 주소이면(다른 값이면) 참, 아니면 거짓을 반환합니다. |
추가로 어떤 변수나 값의 주소를 구하고 싶으면, id() 함수를 이용하면됩니다. 인자로 받은 값(id()함수 괄호안의 값)의 주소를 반환합니다.
삼항연산자(Ternary operators),
삼항연산자는 if문과 같은 분기문(조건식에 따라 실행여부가 갈라지는 구문)을 한줄로 구현할 수 있는 연산자입니다.
참인 경우 값 if 조건식 else 거짓인 경우 값
과같은 형식으로 쓰이며, 지금까지 연산자들은 단항연산자(하나의 값에 쓰이는 연산자)거나, 이항연산자(두 값을 연산하는 연산자)였지만, 항이 세개인 삼항연산자는 위의 형태 1가지 밖에 없습니다.
조건문이 참인지 거짓인지에 따라서 반환하는 값이 다르게 정해줄 수 있으며, if else문을 한줄로 구현할 수 있는 장점이 있지만, 실행문이아니라 값을 반환하는 점에서 if문과 차이가 있습니다.
위에서 나온 연산자들을 실제 코드로도 사용해보았습니다. 모두다 담다보니 코드가 길어져서 접은글로 첨부합니다.
연산자들을 모두 사용해본 코드입니다.
a = 10
b = 6
print(a + b, a - b, a * b, a / b, a ** b, a // b, a % b)
"""산술연산자
사칙연산(+,-,/,*)말고도 제곱(**), 몫(//), 나머지(%)연산자도 있다.
"""
a += 10
print(a)
a -= 10
print(a)
a *= 2
print(a)
a /= 2
print(a)
a **= 2
print(a)
a //= 10
print(a)
a %= 2
print(a)
"""대입연산자
익히 쓰는 단순대입(=) 오른쪽피연산자를 왼쪽 피연산자에 대입(copy)
산술연산자가 붙어 두 피연산자를 산술연산한 후의 값을 대입하는 연산자다.
"""
print(a > b, a < b, a >= b, a <= b, a == b, a != b, a > b > 1)
"""비교연산자
둘의 관계를 부등호나 등호로 확인해서 참인지 거짓인지를 반환하는 연산자다. (한번에 두 비교연산자도 사용가능하다)
"""
b1 = 0b1010 # 2진수 1010
b2 = 0b0101 # 2진수 0101
print(b1 & b2)
print(b1 ^ b2)
print(b1 | b2)
print(~b1)
print(b1 << 1)
print(b1 >> 1)
"""비트연산자
게이트회로에서 봤던 불대수 논리함수(and, or, not, xor)를 비트단위로 수행하는 연산자다.
"""
bo1 = True
bo2 = False
print(bo1 and bo2)
print(bo1 or bo2)
print(not bo1)
"""논리연산자
논리함수(and. or, xor)를 비트단위가 아닌, 값과 값 단위로 수행하는 연산자다.
&&, ||, ^^같은 형식과 다르게 영어로 and, or, not을 사용한다.
"""
yo = 1
print(yo in [1, 2, 3])
print(yo not in [1, 2, 3])
print([1, 2] in [1, 2, 3])
"""맴버연산자
in 으로 왼쪽 값(요소)이 오른쪽 값(요소들)중에 있는지 참거짓으로 반환한다.
"""
n1 = 256
n2 = 256
print(id(n1), id(n2))
print(n1 is n2)
print(n1 is not n2)
"""식별연산자
is, is not 으로 둘이 같은지 아닌지를 구분한다. 정확히는 둘의 메모리 위치를 비교한다.
"""
t1 = 4
t2 = 5
print("짝수" if t1 % 2 == 0 else "홀수")
print("짝수" if t2 % 2 == 0 else "홀수")
"""삼항연산자
[참일때값] if [조건문] else [거짓일때값] 으로 if else 문과 같은 분기문을 구현할 수 있다.
차이점은 if else 에 따른 실행문이 아니라, 지정해준 값이 반환된다.
"""
아래는 출력결과 입니다.
정말로 파이썬에서 볼수 있는 기본연산자들을 이번 포스팅으로 모두 정리해본 것 같습니다! 전에는 애매하게 알았던 여기서 나온 자잘하고 유용한 연산자들의 기능을 100% 활용함으로 더 파이썬다운 코드를 구현해보도록 해야겠습니다!
'파이썬(Python) > 문법' 카테고리의 다른 글
자료형 - 3-2. 인덱싱과 슬라이싱 (0) | 2020.02.22 |
---|---|
자료형 - 3-1. 문자열자료형 str (0) | 2020.02.22 |
자료형 - 2. 논리자료형 bool (0) | 2020.02.20 |
자료형 - 1. 숫자자료형, 산술연산자 (0) | 2020.02.09 |
파이썬의 자료형 종류 (0) | 2020.02.08 |