5. 파이썬의 각종 연산자




1 산술 연산자


연산자 우선순위 설명 결합순서
+, - 1 단항 연산자 -
** 2 지수 연산자 왼쪽 <- 오른쪽
*,/,%,// 3 곱하기,나누기,나머지,몫 왼쪽 -> 오른쪽
+, - 4 더하기,빼기 왼쪽 -> 오른쪽
In [3]:
print 2 ** 3
print 5 % 2
print -5 % 2
8
1
1
In [3]:
print 3 + 5
print 3 + 5.0   # 정수 + 실수의 결과는 실수
8
8.0
In [64]:
print 5 / 2.0   # 정수 / 실수의 결과는 실수
print 5 / 2
2.5
2
In [44]:
a = 5 / 3
b = 5 % 3

print a, b

print divmod(5,3)
1 2
(1, 2)
In [1]:
print 5 / 3
print 5 // 3
1
1
  • 단항 연산자(-)의 우선순위가 이항 연산자(/)의 우선순위보다 높다
In [2]:
print -7/4  # -7을 4로 나눈다
print -(7/4)   
-2
-1
In [51]:
print 2 + 3 * 4
print (2 + 3) * 4
14
20
In [53]:
print 4 / 2 * 2
4
  • ** 연산자의 결합순서는 오른쪽에서 왼쪽
In [4]:
print 2 ** 3 ** 2
print (2 ** 3) ** 2
512
64

2 관계 연산자


  • 관계 연산자: 객체가 지닌 값의 크기(대소)를 비교하여 True 또는 False를 반환함
In [6]:
print 6 == 9
print 6 != 9
print 1 > 3
print 4 <= 5

a = 5
b = 10
print a < b
False
True
False
True
True
In [7]:
a = 5
b = 10
print 0 < a < b
True
In [9]:
a = 5
b = 10
print 0 < a and a < b
True
  • 문자열, 튜플, 리스트의 관계 연산 비교는 일반 사전 순서
  • 사전에서 앞에 나오는 값이 작은 값으로 평가됨
In [2]:
print 'abcd' > 'abd'             
print (1, 2, 4) < (2, 1, 0)      
print [1, 3, 2] == [1, 2, 3]
False
True
False
  • 서로 다른 자료형간의 크기 관계
    • 숫자 < 사전 < 리스트 < 문자열 < 튜플
In [64]:
print 9999999999999999999999L < 'abc'
print {3:2} < [1,2,3] < (1,2,3)
True
True
In [10]:
L = [1,2,3, 'abc', 'a', 'z', (1,2,3), [1,2,3], {1:2}, ['abc']]
L.sort()
print L
[1, 2, 3, {1: 2}, [1, 2, 3], ['abc'], 'a', 'abc', 'z', (1, 2, 3)]
In [3]:
x = [1,2,3]
y = [1,2,3]
z = y

print x == y
print x == z
print x is y
print x is z
print y is z
True
True
False
False
True

image


3 논리 연산자 (or 부울 연산자)


  • 피연산자의 값으로 진리값인 True 또는 False을 취하여 논리 적인 계산을 수행하는 연산자
    • and
    • or
    • not
  • [주의] 논리 연산자 자체가 값을 반환하지는 않는다.
    • 논리 연산을 따라 최종적으로 평가(Evaluation)되어진 값이 반환된다.
In [11]:
a = 20
b = 30
print a > 10 and b < 50
True
  • 진리값에 해당하는 True와 False는 다른 사칙연산자를 만나면 다음과 같이 평가됨
    • True: 1
    • False: 0
In [77]:
print True + 1
print False + 1
print False * 75
print True * 75
2
1
0
75
  • bool() 내장 함수를 이용해서 수치 값을 진리 값으로 교환 가능
In [82]:
print bool(0) # 정수 0은 거짓
print bool(1)
print bool(100)
print bool(-100)
print
print bool(0.0) # 실수 0.0은 거짓
print bool(0.1)
False
True
True
True

False
True
  • 값이 없는 빈 객체나 None 객체는 False로 평가됨
In [81]:
print bool('abc')
print bool('')
print
print bool([]) # 공 리스트는 거짓
print bool([1,2,3])
print 
print bool(()) # 공 튜플은 거짓
print bool((1,2,3))
print 
print bool({}) # 공 사전은 거짓
print bool({1:2})
print
print bool(None) # None 객체는 거짓
True
False

False
True

False
True

False
True

False
In [85]:
print 1 and 1
print 1 and 0
print 0 or 0 
print 1 or 0
print 
print [] or 1  # [] 거짓
print [] or () # [], () 거짓
print [] and 1 # [] 거짓이므로 1은 참조할 필요 없음
1
0
0
1

1
()
[]
In [12]:
print 1 and 2 
print 1 or 2
print 
print [[]] or 1 # [[]] 참으로 간주
print [{}] or 1 # [{}] 참으로 간주
print '' or 1   # 빈 문자열('')은 거짓
2
1

[[]]
[{}]
1
In [3]:
print not(True)
print not(1 and 2)
print not('' or 1)
False
False
False

[참고] 연산자 우선 순위 표


  • 연산자 우선 순위 표: https://wikidocs.net/1165
  • 실제 코드 개발을 할 때에는 연산자 우선 순위에 많은 의존 없이 괄호(())를 적절하게 사용하여 코드의 가독성을 높이는 것이 좋다.

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일