티스토리 뷰

python lecture/basic

[edu] variable (변수)

burningrizen 2019. 1. 30. 16:19

[type: 타입]


변수는 데이터를 담는 그릇이다.


그 내용물에 따라서 변수의 타입은 달라진다.


타입에는 크게 정수(int), 부동소수점(float), 문자열(str), 논리(bool) 가 있다.


[정수]


정수는 말 그대로 소수가 없는 0, 1, 2, 3, 4, ... 같은 수를 의미 한다.


이것은 서로 사칙연산이 가능하다.


나눗셈을 한 결과는 부동소수점(float) 이 되고 나머지 3개 연산의 결과는 정수 그래도 유지된다.


print(type(1), type(1+2), type(1-2), type(1*2), type(1/2))

출력

<class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'float'>


[부동소수점]


1.23, 423.543 같은 실수 이다.


이것도 사칙연산이 가능하고 이것들의 결과도 부동소수점 그대로이다.


print(type(1.0), type(1.0+2.0), type(1.0-2.0), type(1.0*2.0), type(1.0/2.0))

출력

<class 'float'> <class 'float'> <class 'float'> <class 'float'> <class 'float'>


[문자열]


문자열은 문자들을 따옴표로 묶은 것을 의미한다.


"hello" 도 문자열이다.


"123" 도 따옴표 안에 숫자가 있지만 따옴표로 묶였기 때문에 문자열이다.


"1.23"도 문자열이다.


print(type("hello"), type("123"), type("1.2"))

출력

<class 'str'> <class 'str'> <class 'str'>


문자열 끼리 더하면 문자열이다


문자열 곱하기 정수는 문자열이다.


print("hello"+"!", "a"*10)

출력

hello! aaaaaaaaaa


[논리]


True/False 두가지중 하나만 가질 수 있다.


True 나 False 는 첫글자는 반드시 대문자로 표기되어야 하고


이것들은 값이다 변수가 아니다.


[type()]


타입함수는 괄호 안에 매개변수를 넣어 주면 해당 변수의 타입을 리턴해준다.




[L value/R value]


n = 3


[대입연산자]


위 코드는 n 이라는 변수에 3 이라는 값을 정의 한다 라는 뜻이다


이말은 이 코드의 다음 줄 부터 n 의 값은 3이라는 뜻이다


여기서 = 는 대입 연산자 인데 


이것을 통해서 변수의 값이 정의 된다.


대입되는 값에 따라 변수의 타입이 결정된다.


정상적인 경우라면 코드 한줄에 대입연산자는 2개 이상 올 이유가 없다.


[L/R value]


대입연산자를 기준으로 왼쪽이 l value,  오른쪽이 r value 라고 한다.


양쪽은 타입이 동일해야 한다.


l value 에는 변경 가능한 속성을 가진 변수만 위치 할수 있다.

3 = n
3 = 2

이것은 성립하지 않는다.


대입연산자 자체 의미가 값을 정의한다는 뜻이라서


변경가능해야 한다. (mutable)


대입연산자 우측에 위치하는 것은 꼭 변경가능 할 필요는 없다.



[operator: 연산자]


변수는 연산자를 통해서 계산을 할 수 있다.


n = 1 + 2

n 의 값은 3이다.

a = 2
b = a + 3 * 2

b 의 값은 8 이된다.


[우선순위]


연산자들도 결합하는 우선순위가 있다.


a = 2 + 1 * 3


여기서 * 가 먼저 결합되어 1*3 이 먼저 계산되고


2+3 이 계산된다.


그리고 a=5 가 마지막으로 계산된다.


a = 2
a += 1


여기서 a 는 2로 정의되어 있다.


a += 1 에서 + 이 우선순위가 높기 때문에 


a+1 이 먼저 계산되고 그 값이 우항에 놓이게 된다


그러면 a = 3 이 남고 최종적으로 a 는 3 이 된다.


a+=b, a-=b, a*=b, a/=b 는 


자기 자신에 해당 연산자를 한다 라는 뜻으로 외워두면 좋다


자기 자신에 b 만큼 더하다, 빼다, 곱하다, 나누다


[우선순위순서]


낮은것 부터 나열 하면


=, +- , */, ()


그래서 대입 연산자는 나머지 연산이 끝나고 계산되게 된다.


[문자열 연산]


문자열 연산에는 + * 만 알아두도록 하자


다른건 지원되지 않는다.


TypeError: unsupported operand type(s) for /: 'str' and 'str'


이런 에러를 볼수 있다.



아래와 같이 덧셈과 *의 결과를 확인해 보자

print("a"+"b", "a"*10)

출력

ab aaaaaaaaaa

문자열 끼리만 더할수 있고


곱셈은 문자열 * 정수 만 가능하다.


[논리 연산]


논리식에 대해서 알아보자 


bool 타입을 논리 타입이라고 한다. 


말 그래도 논리에 대한 결과를 담을 수 있는 변수이다.


n = 10
cond = n < 20

cond 변수는 값이 True 를 가지고 있다.


10 이 20 보다 작은 논리는 참 이기 때문에 True 이다


여기서 중요한건 n < 20 이 계산이 된다는 점이다.


그리고 그 결과는 True 혹은 False 가 되어 


bool 형 변수에 저장된다.


논리 연산자에는  (<, >, <=, >=, ==) 있다.


순서대로 좌항을 기준으로 (작고, 크고, 이하, 이상, 동일) 이다



[cost]


연산자들은 각가 계산하는데 필요한 비용이 필요하다.


이것은 시간, 컴퓨팅파워, 리소스 등등으로 이해하면 좋다


간단하게 말해서 비용이 높은것은 시간이 오래 걸리고 컴퓨터가 느려지며


가능한 비용이 적은 연산자로 대체하는게 좋다.


많이 드는 순서대로 나열하면


(srqt(제곱근), /, *, -, +)



[cast]


변수 들은 다른 타입으로 변경이 가능하다.


n = 10
s = str(n)
print(type(s))


n은 10으로 타입이 int 인데 str(n) 으로 하면 문자열로 변경된다.


s = "10"
n = int(s)
print(type(n))


여기서 s 가 숫자로만 이루어 지지 않으면 에러가 발생하고


숫자로만 이루어저 있으면 n 은 int 로 변환이 된다.


[bool]


bool 타입으로 변환해 보자


n = 10
cond = bool(n)
print(cond)


숫자(int, float)를 bool 로 변경하면 0이 아닌 모든것은 True로 바뀐다.


0은 False 로 바뀐다.


s = "abc"
cond = bool(s)
print(cond)


문자열에서는 "" 로 아무것도 없을때를 제외하고는 전부 True 로 바뀐다.



bool(0)
bool(0.0)
bool("")


int, float, str 의 경우 위와 같은 값이 들어왔을때는 False 가 되고 아닐때는 모두 True 가 된다



[isinstance]


n = 10
cond = isinstance(n, int)
print(cond)


ininstance 함수로 타입을 체크할 수 있다.


n의 타입이 int 인지 체크해 보자 


isinstance 함수의 리턴은 논리로 나온다. (True, False)


cond 은 여기서 n 이 int 형이기 때문에 True 변환된다.


isinstance 함수는 다른 여러 변수 타입도 전부 가능하다.











댓글