본문 바로가기
프로그래밍/Python

Python 문법 2 - 식별자, 데이터 타입, 형변환, 연산자

by pentode 2018. 4. 3.

파이썬(Python) 언어는 기본적으로 인터프리터(interpreter)를 통해 실행되는 스크립트 언어 입니다. (로딩 속도를 높이기 위해 바이트코드로 컴파일 해서 사용하는 것도 가능합니다.)

 

파이썬은 변수를 선언할 때 타입을 지정하지 않습니다. 값을 할당하면 그때 동적으로 타입이 정해집니다.

 

>>> a = 1
>>> a = '1234'
>>> a = True

 

일단 값이 할당되어 타입이 정해지면 연산시 타입검사가 이루어집니다.

 

>>> a = '1234'
>>> b = 4
>>> c = a + b
Traceback (most recent call last):
  File "<pyshell#56>", line 1, in <module>
    c = a + b
TypeError: must be str, not int

 

타입이 다를 경우 형변환을 해줘야 연산에 사용할 수 있습니다. 수치 타입과 boolean 타입은 서로 자동으로 형변환이 되어 집니다. boolean타입의 True와 False 는 수치타입과 연산시 각각 1, 0 으로 평가 됩니다.

 

>>> a = 1          # int
>>> b = 0.1       # float
>>> c = True      # boolean
>>> d = 1 + 2j   # 복소수
>>> a + b + c + d
(3.1+2j)

 

변수의 타입을 알아보려면 type() 함수를 사용하면 됩니다.

 

>> a = 1
>> type(a)
<class 'int'>

 

 

1. 식별자(identifier)

식별자(identifier)는 언어에서 변수명, 함수명 등을 지정하는데 사용되어지는것 입니다.

 

Python 에서는 식별자로 한글, 영문자(letter), 숫자(digit), 밑줄(_) 을 사용할 수 있습니다. 식별자의 시작은 숫자외 다른 문자로 시작합니다. 영문자는 대소문자를 구분합니다.

 

 

2. 데이터 타입 및 연산자

파이썬은 많은 내장 데이터 타입(built-in data type)들을 가지고 있습니다.

 

- boolean : 참, 거짓 두가지 값을 표현합니다.

- int(integer) : 정수입니다.

- float(floating-point number) : 실수 입니다.

- complex number : 복소수 입니다.

- str(string) : 문자열 입니다.

- list : 순서가 있는 값들의 집합 입니다.

- tuple : 리스트와 같이 순서가 있는 값들의 집합이지만 읽기전용 입니다.

- set : 순서가 없고 중복되지 않는 값들의 집합 입니다.

- dict(dictionary) : 키와 값의 쌍으로 데이터를 저장합니다.

 

 

2.1 boolean 타입

boolean 타입은 True, Flase 둘 중의 하나의 값을 가집니다. True, False 값은 대소문자를 구분합니다. boolean 타입에 사용할 수 있는 연산자는 and, or, not 이 있습니다.

 

>>> x = False
>>> y = True
>>> c = x or y
>>> c
True
>>> c = x and y
>>> c
False
>>> c = not x
True

 

and와 or 연산자는 short-circuit 연산자 입니다. or 연산자에서는 첫번째 인자가 False 일 경우만 두번째 인자가 평가됩니다. and 연산자의 경우에는 첫번째 인자가 True 인 경우에만 두 번째 인자가 평가됩니다. not 연산자는 불린 연산자가 아닌 다른 연산자보다 우선 순위가 낮습니다.

 

 

2.2 비교 연산자

파이썬에서 비교연산자는 8가지가 있습니다. 이것들은 모두 같은 우선순위를 가집니다.

 

 <  : 작다
 <= : 작거나 같다
 >  : 크다
 >= : 크거나 같다.
 == : 같다.
 != : 다르다.
 is : 동일한 객체이다.
 is not : 동일한 객체가 아니다.

 

비교 연산자는 마음대로 연결하여 사용할 수 있습니다. 예를 들어 x < y <= z 처럼 쓸 수 있습니다. 이것은 x < y and y <= z 와 동일합니다. boolean 타입과 수치형(int, float, complex) 는 서로 비교할 수 있지만, 다른 타입들을 같은 타입끼리만 비교할 수 있습니다.

 

 

2.3 수치형 및 연산자

정수(int), 실수(float), 복소수(complex)가 있습니다. 사용할 수 있는 연산자는 다음과 같습니다.

 

 x + y  : 두 값을 더합니다.
 x - y  : x에서 y를 뺍니다.
 x * y  : 두 값을 곱합니다.
 x / y  : x에서 y를 나눕니다.
 x // y : x에서 y를 나눈 몫을 반환합니다.
 x % y  : x에서 y를 나눈 나머지를 반환합니다.
 -x     : 부호를 바꿉니다.
 +x     : 변화가 없습니다.
 abs(x) : 절대값을 반환합니다.
 int(x) : 숫자 문자열이나 실수를 정수로 변환합니다.
 float(x) : 숫자 문자열이나 정수를 실수로 변환합니다.
 complex(re, im) : 실수부분이 re이고 허수부부이 im 인 복소수를 반환합니다.
 c.conjugate()   : 켤레복소수(허수부 부호가 바뀐 값)를 반환합니다.
 divmod(x, y)    : (x // y, x % y) 를 반환합니다.(tuple)
 pow(x, y) : x의 y승 값을 반환합니다.
 x ** y    : x의 y승 값을 반환합니다.

 

 

2.4 정수형에 대한 비트 연산자

비트 연산자는 정수값에 대해서만 사용됩니다. 음수일 경우 2의 보수가 사용됩니다.

 

 x | y  : or 연산입니다.
 x ^ y  : xor 연산입니다.
 x & y  : and 연산입니다.
 x << n : 왼쪽으로 n번 쉬프트 합니다.
 x >> n : 오른쪽으로 n번 쉬프트 합니다.
 ~x     : 비트를 반전시킵니다.

 

 

2.5 문자열

문자열 literal 은 작은따옴표(') 또는 큰따옴표(")로 문자를 둘러싸서 만들 수 있습니다. 여러줄의 데이터를 작은따옴표 또는 큰따옴표 세 개를 사용해서 둘러쌉니다.

 

>>> a = 'test'
>>> b = "test"
>>> c = """This
is
test.
"""
>>> c
'This\nis\ntet.\n'

 

 

2.6 시퀀스 타입

list 는 순서가 있는 데이터의 집합으로 대괄호([])와 콤마(,)를 사용하여 값을 정의합니다.

 

>>> a = [1, 'a', 3]  # 서로 다른 타입을 값으로 가질 수 있습니다.

 

tuple 은 list 와 같지만, 읽기전용입니다. 소괄호를 사용하거나 아무것도 없이 정의합니다.

 

>>> a = (1, 2, 3)
>>> b = 4, 5, 6

 

공통적으로 사용되는 연산자를 다음과 같습니다.

 

 x in s     : s에 x 값을 포함하고 있으면 True, 아니면 False
 x not in s : s에 x 값을 포함하지 않으면 True, 아니면 False
 s + t      : s와 t 를 연결합니다.
 s * n or n * s : s 를 n 번 추가 합니다.
 s[i]       : s내의 i 번째 아이템을 반환합니다.(i 는 0부터 시작)
 s[i:j]     : s에서 i부터 j 까지 잘라서 반환합니다.
 s[i:j:k]   : s에서 i부터 j 까지 k씩 건넌 값을 잘라서 반환 합니다.
 len(s)     : s의 길이를 반환합니다.
 min(s)     : s에서 가장 작은 값을 반환합니다.
 max(s)     : s에서 가장 큰 값을 반환합니다.
 s.index(x[, i[, j]]) : s에서 x 를 처음 찾은 위치를 반환합니다. 추가 인자가 주어지면 그 범위에서 찾습니다.
 s.count(x) : s에 x 를 몇번 나오는지 반환합니다.

 

다음은 변경가능한 시퀀스 타입에 사용할 수 있는 연산 입니다.

 

 s[i] = x     : s의 i 번째 값을 x 로 바꿉니다.
 s[i:j] = t   : s의 i부터 j 까지의 내용을 반복자 t의 내용으로 바꿉니다.
 del s[i:j]   : s의 i부터 j 까지를 지웁니다. s[i:j] = []와 같습니다.
 s[i:j:k] = t : s[i:j:k]의 아이템을 반복자 t의 내용으로 바꿉니다. t의 길이는 s[i:j:k] 의 길이와 같아야 합니다.
 del s[i:j:k] : list 로부터 s[i:j:k] 를 지웁니다.
 s.append(x)  : list의 끝에 x 를 추가합니다.(s[len(s):len(s)] = [x] 와 같음)
 s.clear()    : s로 부터 모든 아이템을 지웁니다. (del s[:] 와 같음)
 s.copy()     : s로부터 얕은 복사를 합니다. (s[:] 와 같음)
 s.extend(t) or s += t : s뒤에 t 를 붙입니다.(대부분의 경우 s[len(s):len(s)] = t와 같음)
 s *= n         : s의 내용을 n 번 반복합니다.
 s.insert(i, x) : s의 i번째에 x 를 삽입합니다. (s[i:i] = [x] 와 같음)
 s.pop([i])     : s에서 i번째 아이템을 반한하고, s에서는 삭제합니다.
 s.remove(x)    : s에서 값이 x 인 첫번째 아이템을 삭제합니다.
 s.reverse()    : s의 내용을 역순으로 만듭니다.

 

※ 얕은 복사(shallow copy) 는 실제 값을 복사하는 것이 아니라 위치(주소)만 복사하는 것입니다.

 

 

2.7 Set 타입

set 객체는 순서가 없고 중복되지 않는 값들의 집합입니다. set은 중괄호를 사용하여 만들 수 있습니다.

 

>>> a = {1, 2, 3}

 

순서가 없으므로 a[1] 형태로 사용할 수 없습니다.

 

set은 일반적으로 소속 검사(membership testing), 시퀀스에서 중복 제거를 하거나  교집합, 합집합, 차집합, 대칭차집합(symmetric difference)을 구하는데 사용됩니다.

 

 

2.8 Mapping 타입

dict 객체는 키와 값의 쌍으로 된 값들을 가지는 객체입니다. 중괄호 내에 콜론(:)으로 키와 값의 쌍을 지정하여 만들 수 있습니다.

 

>>> a = {'a':1, 'b':2, 'c':3}
>>> a['a']
1

 

 

3. 형변환(Type conversion)

boolean 타입과 수치 타입(int, float, complex)는 서로 명시적인 형변환 없이 연산이 가능합니다. 다른 타입은 명시적으로 변환하여야 합니다.

 

int()   : 문자열, 실수를 정수로 변환합니다.
float() : 문자열, 정수를 실수로 변환합니다.
str()   : 정수, 실수, list, tuple, dictionary 를 문자열로 변환합니다.
list()  : 문자열, tuple, dictionary 를 list 로 변환합니다.
tuple() : 문자열, list 를 tuple 로 변환합니다.

 

반응형