#!/usr/bin/env python # coding: utf-8 # *** # *** # # 5. 파이썬의 각종 연산자 # *** # *** # *** # ## 1 산술 연산자 # *** # | 연산자 | 우선순위 | 설명 | 결합순서 | # |:------:|:------:|:-----------------:|:-----------:| # | +, - | 1 | 단항 연산자 | - | # | ** | 2 |지수 연산자 | 왼쪽 <- 오른쪽 | # | *,/,%,// | 3 |곱하기,나누기,나머지,몫 | 왼쪽 -> 오른쪽 | # | +, - | 4 |더하기,빼기 | 왼쪽 -> 오른쪽 | # In[3]: print 2 ** 3 print 5 % 2 print -5 % 2 # In[3]: print 3 + 5 print 3 + 5.0 # 정수 + 실수의 결과는 실수 # In[64]: print 5 / 2.0 # 정수 / 실수의 결과는 실수 print 5 / 2 # In[44]: a = 5 / 3 b = 5 % 3 print a, b print divmod(5,3) # In[1]: print 5 / 3 print 5 // 3 # - 단항 연산자(-)의 우선순위가 이항 연산자(/)의 우선순위보다 높다 # In[2]: print -7/4 # -7을 4로 나눈다 print -(7/4) # In[51]: print 2 + 3 * 4 print (2 + 3) * 4 # In[53]: print 4 / 2 * 2 # - ** 연산자의 결합순서는 오른쪽에서 왼쪽 # In[4]: print 2 ** 3 ** 2 print (2 ** 3) ** 2 # *** # ## 2 관계 연산자 # *** # - 관계 연산자: 객체가 지닌 값의 크기(대소)를 비교하여 True 또는 False를 반환함 # In[6]: print 6 == 9 print 6 != 9 print 1 > 3 print 4 <= 5 a = 5 b = 10 print a < b # In[7]: a = 5 b = 10 print 0 < a < b # In[9]: a = 5 b = 10 print 0 < a and a < b # - 문자열, 튜플, 리스트의 관계 연산 비교는 일반 사전 순서 # - 사전에서 앞에 나오는 값이 작은 값으로 평가됨 # In[2]: print 'abcd' > 'abd' print (1, 2, 4) < (2, 1, 0) print [1, 3, 2] == [1, 2, 3] # - 서로 다른 자료형간의 크기 관계 # - 숫자 < 사전 < 리스트 < 문자열 < 튜플 # In[64]: print 9999999999999999999999L < 'abc' print {3:2} < [1,2,3] < (1,2,3) # In[10]: L = [1,2,3, 'abc', 'a', 'z', (1,2,3), [1,2,3], {1:2}, ['abc']] L.sort() print L # 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 # ![image](images/objectIdentity.png) # *** # ## 3 논리 연산자 (or 부울 연산자) # *** # - 피연산자의 값으로 진리값인 True 또는 False을 취하여 논리 적인 계산을 수행하는 연산자 # - and # - or # - not # - [주의] 논리 연산자 자체가 값을 반환하지는 않는다. # - 논리 연산을 따라 최종적으로 평가(Evaluation)되어진 값이 반환된다. # In[11]: a = 20 b = 30 print a > 10 and b < 50 # - 진리값에 해당하는 True와 False는 다른 사칙연산자를 만나면 다음과 같이 평가됨 # - True: 1 # - False: 0 # In[77]: print True + 1 print False + 1 print False * 75 print True * 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) # - 값이 없는 빈 객체나 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 객체는 거짓 # 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은 참조할 필요 없음 # In[12]: print 1 and 2 print 1 or 2 print print [[]] or 1 # [[]] 참으로 간주 print [{}] or 1 # [{}] 참으로 간주 print '' or 1 # 빈 문자열('')은 거짓 # In[3]: print not(True) print not(1 and 2) print not('' or 1) # *** # ## [참고] 연산자 우선 순위 표 # *** # - 연산자 우선 순위 표: https://wikidocs.net/1165 # - 실제 코드 개발을 할 때에는 연산자 우선 순위에 많은 의존 없이 괄호(())를 적절하게 사용하여 코드의 가독성을 높이는 것이 좋다. #

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