반응형

개요

 파이썬의 Bool 타입(자료형)을 이해하기 위해서는 bool 타입의 탄생 배경을 아는 것이 중요하다. bool 타입은 현재 사용되고 있는 프로그래밍 언어 대부분이 갖고 있다. 정의는 True 와 False 두 가지 값밖만 가질 수 있다.

 bool 타입이 생기기 이전에는 int 라는 정수형 자료로 0일 경우 False 이외의 값을 갖는 경우 True와 같은 결과로 간주를 했었다. 하지만, 오랫동안 프로그래머들이 사용해본 결과 가독성이 나쁘다고 판단이 되어서 만들어지게 되었다. 예를 들어 C 에서는 함수가 제대로 동작하지 않았을 때, 음수 혹은 -1을 반환하는 등 오류 코드들은 음수를 일반적으로 사용했다. 그러나 조건문의 정의상 0 이외에는 True가 되기 때문에 분명 오류로 자주 사용하는 -1 은 True로 판단이 되는 등 논리적으로 혼란을 주기 때문에 조건문과 같은 대응 용으로 bool 을 사용하도록 한 것이다.

이 때문에 논리 연산과 비교 연산을 하게 될 경우 항상 그결과는 bool 타입으로 반환하게 된다. 이 때문에 bool 타입과 논리 연산자, 비교 연산자를 함께 공부하는 것이 좋다고 생각한다.

여담으로 필자 기억으로는 초기 C++에서 bool 타입이 추가 되었을때 이에 대해서 불만을 제기하는 몇몇 개발자의 푸념의 글도 본적이 있었다. 아직 성능이 중요한 시절이었기 때문에 자신은 익숙한데 굳이 bool 타입을 사용해야 하다보니 번거롭다는 내용이었다.

논리 연산자

논리 연산은 수학에서 정의된 논리 연산들이 있다. 오늘날 컴퓨터가 있게 되는 기본이 되는 연산이 된다. 오늘날 반도체로 컴퓨터를 만들 수 있게 된 이유가 바로 논리 연산이 가능하기 때문이다.

일반적으로 논리연산은 사칙연산보다 늦게 연산이 된다. 하지만 가독성을 위해서 복잡한 논리 연산을 하게 될 경우 괄호를 사용하여 명시하는 것을 권장한다.

and

연산 기호가 키워드 and로 좌우에 있는 값이 True 가 되어야 True를 반환한다.

True and True
# True

True and False
# False

False and True
# False

False and False
# False

or

연산기호가 키워드 or 로 좌우에 있는 값 중 하나라도 True 가 있으면 True를 반환한다.

True or True
# True

True or False
# True

False or True
# True

False or False
# False

not

연산기호가 키워드 not 으로 키워드 뒤에 있는 값을 반전을 한다. True 인 경우 False, False 인 경우 True를 반환한다.

not True
# False

not False
# True

비교 연산자

일반적으로 비교 연산자의 좌우에는 수치 연산이 가능한 숫자 형태의 값 혹은 숫자 값인 변수가 있어야 한다.

>

직관적으로 연산자의 왼쪽이 오른쪽 보다 클 경우 True를 반환한다.

2 > 1
# True

1 > 1
# False

1 > 2
# False

>=

연산자의 왼쪽이 오른쪽 값 보다 크거나 같은 경우 True를 반환한다. 그 외는 False 를 반환한다.

2 >= 1
# True

1 >= 1
# True

1 >= 2
# False

<

연산자의 왼쪽 값이 오른쪽 값보다 작을 경우 True를 반환한다. 그 외는 False 를 반환한다.

2 < 1
# True

1 < 1
# False

1 < 2
# True

<=

연산의 왼쪽 값이 오른쪽 값 보다 작거나 같을 경우 True를 반환한다. 그 외는 False 를 반환한다.

2 <= 1
# False

1 <= 1
# True

1 <= 2
# True

==

연산자의 왼쪽 값과 오른쪽 값이 같아야 할 경우 True를 반환한다. 해당 연산자는 독특하게 python 고유 기능으로 문자열(str)에도 사용이 가능하다.

2 == 1
# False

1 == 1
# True

1 == 2
# False

"abc" == "ab"
# False

"abc" == "abc"
# True

!=

연산자의 왼쪽 값과 오른쪽 값이 다를 경우에만 True를 반환한다. 같은 경우 False를 반환한다.

is

== 연산자와 비슷하지만 다르다. is는 좌우에 오는 것이 동일한지(메모리에 할당된 주소가 같은지) 확인을 한다. 때문에 연산은 이론적으로 == 연산보다 약간 빠르다. 값의 다향성이 적어 사실상 상수에 해당되는 True, False, None과 비교 할 때 많이 사용한다. 즉 이말은 == 연산에서 True 이나 is 연산에서는 False 경우가 존재하다는 의미이다.

is 연산자는 어느 정도 파이썬으로 개발 경험이 있는 초보 개발자도 잘 모르고 지나가는 경우가 많다.

a = "hello"
# b는 a와 같은 값이 연결되어 있음
b = a
a is b
# True

# 메모리 주소 확인 해볼 것
id(a)
id(b)

b = a[:4] + "o"
# b는 a와 같은 값이지만 서로 다른 곳에 할당되어 있음
a is b
# False

# 메모리 주소 확인해 볼 것
id(a)
id(b)

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

반복문(while, for)  (0) 2024.05.11
코드 블록, 조건문(if)  (1) 2024.05.01
딕셔너리(dict)  (0) 2024.04.29
튜플(Tuple)  (1) 2024.04.27
리스트(list)  (0) 2024.04.27
반응형

개요

 자료형은 프로그램에서 값을 다루기 위해서 정의된 것이다. int와 float는 기본적으로 정의 되어 있는 기본 자료형이다. 내부에서는 숫자도 구분하고 문자열도 구분 한다. Python 에서는 대입하는 결과를 문법이 유추해서 변수의 자료형을 정의하여 값을 대입한다.

 이 때문에 코드를 작성했을 때 숫자 자료형을 명확히 구분하지 않는 것 같으나 내부적으로는 구분을 하고 있다. 정수형은 int, 실수형은 float로 구분하고 있다. 실수형이 표현 가능한 숫자의 범위가 더 크기 때문에 소수점이 포함된 수치와 정수형 수치를 연산하게 되면 python은 자동으로 실수형으로 자료형을 바꿔서 연산을 한다.

 int 형은 정수형만 표현하여 내부적으로 0과 1을 하나씩 카운트 하는 방식이라 비교적 정확한 연산이 가능하다. 반면 float  는 소수를 포함한 실수형이라 내부적으로 실수부 자리 표기를 분리해서 사용하기 땜누에 비교적 큰 범위의 숫자 표현이 가능하지만 연산 횟수가 많으면 오차가 발생한다. 이 이유는 진법에 의한 수학적인 이유 때문이다. float 형은 잦은 연산을 하지 않는 것이 좋고 유효숫자를 정해 놓는 것이 오차를 줄일 수 있다.

 float 형에서 많은 연산을 하면 왜 오차가 발생하는지는 기회가 되면 정리하도록 하자.

산수 연산자(Arithmetic Operators)

숫자형은 기본적인 사칙연산을 사용할 수 있다. 이외 기본적인 연산자에 대해서 살펴보자. 만약 C 나 다른 언어를 알고 있다면 Python 만의 독특한 연산자도 보일 것이다. 반대로 python 에서는 없어진 연산자도 있을 것이다.

+

더하기 연산자이다. 이 연산자를 기준으로 좌우의 값을 더한다. int 형 값과 float 형의 값을 연산하게 될 경우 최종적으로 float 값으로 반환이 된다.

1 + 1.1
# 2.1 (float)

1.1 + 1
# 2.1 (float)

1 + 1
# 2 (int)

*

 곱 연산자이다. 연산자의 좌우의 값을 곱한다. 왼쪽이나 오른쪽 값 중에 float 형이 있는 경우 결과는 float 형이 된다.

1 * 1
# 1

2 * 2
# 4

2 * 1.1
# 2.2

-

빼기 연산자이다. 연산자의 오른쪽에 있는 값을 왼쪽에 있는 값에서 뺀다. 마찬가지로 int와 float 값을 연산할 경우 최종 결과는 float 형이 된다.

3 - 1
# 2

1 - 3
# -2

1.1 - 2
# -0.9

/

나누기 연산자읻다. 일반적으로 타 프로그래밍 언어에서는 연산자의 좌우가 int 형일 경우 몫만 반환한다. 그러나 파이썬에서는 몫으로 딱 나눠떨어지지 않으면 float 형으로 변화해서 소수점으로 결과를 반환한다.

3 / 2
# 1.5

10 / 2
# 5

//

몫 연산, 일반적인 타 프로그래밍 언어에서 나누기 연산자를 사용한 결과와 같다. 나누었을 때 나머지가 있어도 무시하고 몫만 반환한다.

3 // 2
# 1

10 // 2
# 5

%

나머지 연산. 연산자의 오른쪽 값으로 나누었을 때 나머지만 반환한다. 이때 나머지는 int 형으로 반환한다. 프로그래밍에서 은근히 많이 쓰이는 연산이다.

3 % 2
# 1

10 % 2
# 0

**

제곱 연산자이다. 파이썬의 독특한 문법이다. 실제로는 여러번 곱하는 걸 코드상 간당하게 작성한 것이기 때문에 여러번 곱연산 한것과 성능차이는 크지 않다.

2 ** 3
# 8

할당 연산자(Assignment Operators)

축약된 형태의 연산자로 연산자의 왼쪽 값과 오른쪽 값을 연산한 결과를 다시 왼쪽 변수에 대입하라는 의미이다. 대입 연산자처럼 왼쪽은 변수가 되어야 한다.

+=

 왼쪽의 값에 오른쪽에 있는 값을 더한 뒤에 다시 왼쪽 변수에 대입을 한다. 만약 왼쪽이 int 형이고 오른쪽이 float 형인 경우 왼쪽도 float 형이 된다.

a = 1
a += 1
a
# a 는 2

a += 1.1
a
# a 는 3.1

*=

 연산자의 왼쪽 변수값에 오른쪽 값을 곱 연산한 결과를 왼쪽 변수에 대입을 한다.

a = 1
a *= 3
a
# a 는 3

a *= 3
a
# a 는 9

-=

연산자의 왼쪽 변수 값에 오른쪽 값을 빼기 연산한 결과를 왼쪽 변수에 대입을 한다.

a = 10
a -= 2
a
# 8

/=

연산자의 왼쪽 변수 값에서 오른쪽 값을 나누기 연산한 결과를 왼쪽 변수에 대입을 한다.

a = 10
a /= 2
a
# 5

a /= 2
a
# 2.5

//=

 연산자 왼쪽 변수 값에 오른쪽 값으로 나누기 연산한 몫을 왼쪽의 변수에 대입한다.

a = 5
a //= 2
a
# 2

%=

연산자의 왼쪽 변수 값에 오른쪽 값으로 나눈 나머지를 왼쪽 변수에 대입한다.

a = 5
a %= 2
a
# 1

**=

연산자의 왼쪽 변수값에 대한 오른쪽 값 만큼 제곱하여 왼쪽 변수에 대입한다.

a = 2
a **= 3
a
# 8

a **= 2
a
# 64

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

문자열(str)  (1) 2024.04.27
문자 code  (0) 2024.04.24
변수(variable)와 상수(constant)  (0) 2024.04.23
개발 환경 만들기  (0) 2024.04.22
파이썬 3 설치  (0) 2024.04.22

+ Recent posts