본문 바로가기

프로그래밍 강좌/파이썬 - OpenCV

[OpenCV][Python]기본 자료형 자료구조 슬라이스 함수 모듈 패키지 임포트 slice function method module package import

지난 시간에는 Python을 사용하기 위한 개발 환경, 즉 파이참을 설치하고 프로젝트를 만들어보는 방법에 대해 알아봤습니다.

저희 학교 실습실에 PyCharm 이 설치가 되어 있어서 저도 파이썬 강의를 파이참을 기준으로 진행해보려고 합니다.

이번 글은 파이썬 기초 문법부터 반복문까지 어느정도 안다는 가정으로 빠르게 진행하겠습니다.

일단 이전에 기본 자료형에 대한 이론에 대해 알아봤었습니다.

https://blog.naver.com/dorergiverny/223133319038

 

[데이터 분석][Python] 파이썬 기초 문법 (1) - 숫자 자료형 연산자 bool 논리형 문자열 인덱싱 슬라이

파이썬 기초 문법을 시작하기에 앞서, 어떤 식으로 강의를 시작해야 할지 막막했습니다. 강의 앞부분에 학...

blog.naver.com

 

(1) 기본 자료형

이번에는 자료형 총정리를 하는 차원에서 한번 더 코딩을 해보겠습니다. 여기에서 set 은 원소를 모아 담는 것 같지만 중복되는 원소들을 하나만 저장해서 원소들의 중복을 없앱니다.

var1 = 100                      # 정수 변수 선언
var2 = 3.2                      # 실수 변수 선언
var3 = float(var1)              # 정수 → 실수 변환
var4 = int(var2)                # 실수 → 정수 변환
list1 = [1,2,3,4]               # 리스트 선언
list2 = [1, 1.5, 'a', "문자열"]  # 리스트 선언
tuple1=(1,2)                    # 튜플 선언
tuple2= (1, 1.5, '1', "abc")    # 튜플 선언
dict1 = {'name': '이재광', 'email': "ljk3815@naver.com"} # 딕셔너리 선언
set1, set2 = set(list2), set(tuple2)    # 한 행에 두 개 변수 선언
list1[0] = 5                    # 리스트 0번 원소 값 변경
list2.insert(3, 'b')    # 3번(네번째) 원소에 'b' 삽입, 이후 원소는 뒤로 밀림
dict1['email'] = 'dummy@naver.com' # 딕셔너리 값 변경
print("var1 =", var1, type(var1))
print("var2 =", var2, type(var2))
print("var3 =", var3, type(var3))
print("var4 =", var4, type(var4))
print('list1 →', list1, type(list1))
print('list2 →', list2, type(list2))
print('tuple1 →', tuple1, type(tuple1))
print("tuple2 →", tuple2, type(tuple2))
print('dict1 =', dict1, type(dict1))
print('set1=', set1, type(set1))
print('set2=', set2, type(set2))
print('intersection=', set1 & set2)  # set1과 set2 집합의 교집합을 구함
 

결과는 아래와 같습니다.

(2) 명령행

이번에는 명령행에 대해 알아보겠습니다.

명령행에는 물리적 명령행 논리적 명령행이 있는데, 물리적 명령행은 소스 코드에서 눈으로 보이는 한 행을 뜻하며, 논리적 명령행은 파이썬 인터프리터 관점에서 한 행의 명령 단위를 의미합니다. 한 줄이 길어질 경우 한 화면에 나오지 않게 되면 가독성이 떨어지므로 때로는 하나의 논리적 명령행인데 두줄에 걸쳐 쓸때가 있습니다. 이 때 우리는 '\'을 사용합니다. 그리고 두개의 논리적 명령행을 한줄에 쓸 경우에는 ';' 으로 구분해 줍니다.

title = '서기 1년 1월 1일부터' \
        ' 오늘까지'  \
        ' 일수 구하기'   # 물리적 명령행 = 3행, 논리적 명령행 = 1행
months = [31, 28, 31, 30, 31, 30,
         31, 31, 30, 31, 30, 31]
year, month = 2023, 9           # 여러개 변수 한 행에 선언
day = 7; ratio = 365.2425       # 물리적 명령행 = 1행, 논리적 명령행 = 2행
days = (year - 1) * ratio + \
    sum(months[:month-1]) + day

print(title), print(' - 년:', year), print(' - 월:', month)
print(' - 일', day); print(' * 일수 총합:', int(days))
 

결과는 아래와 같습니다.

(3) 슬라이스 연산자

이제는 파이썬에서 중요한 슬라이스 연산자에 대해 알아보겠습니다. 인덱싱은 아래와 같이 사용합니다.

열거형 객체[시작인덱스:종료인덱스:인덱스증가폭]

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  # 리스트 정의
print('a =', a)
print('a[:2] →', a[:2])         # 종료 인덱스 포함 안됨.
print('a[4:-1] →', a[4:-1])     # 4~8 범위, -1은 마지막 인덱스를 뜻함
print('a[2::2] →', a[2::2])     # 2~9 범위, 2씩 증가
print('a[::-1] →', a[::-1])     # 전체 범위, 역순, 자주 사용됨
print('a[1::-1] →', a[1::-1])   # 첫 2개, 역순, 자주 사용됨
print('a[7:1:-2] →', a[7:1:-2]) # 7~2범위, 2씩 감소, 역순
print('a[:-4:-1] →', a[:4:-1])  # 9~7범위, 1씩 감소, 역순
 

결과는 아래와 같습니다.

슬라이스 연산자는 파이썬 코딩 과정 중에서 많이 사용되므로 정확히 익히시기를 바랍니다.

 

(4) 함수 (method)

이번에는 함수에 대해 알아보겠습니다.

def calc_area(type, a, b, c=None):  # 인수 입력
    if type == 1:
        result = a * b
        msg = '사각형'
    elif type == 2:
        result = a * b / 2
        msg = '삼각형'
    else :
        result = (a + b) * c / 2
        msg = '평행사변형'
    return result, msg          # 반환값-2개 반환 시 튜플 반환
def say():
    print('넓이를 구해요')        # 인수와 반환값 없는 함수

def write(result, msg):         # 반환 없는 함수
    print(msg, ' 넓이는', result, '㎡ 입니다')
say()
ret = calc_area(type=1, a = 5, b = 5)
area, msg = calc_area(2,5,5)
area2, _= calc_area(3, 10, 7, 5)

print(ret, type(ret))
print(area, msg, type(area), type(msg))
write(ret[0], ret[1])
write(area, msg)
write(area2, '평행사변형')
 

결과는 아래와 같습니다.

 

(5) 모듈 (module)

이제는 Module 에 대해 알아보겠습니다.

파이썬에서는 모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일입니다. 혹은 모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게 만든 파일입니다. 필요한 함수, 클래스들을 미리 만들어 놓고 다른 파일에서 매번 함수를 구현하지 않고 불러와 사용하면 소스 코드도 간결해지고 이해도 쉬우며 편리합니다.

일단 위에서 작성한 면적 구하는 함수들을 별도의 파일로 저장을 합니다. 저는 header_area.py로 저장하였습니다.

이 모듈을 다른 파일에서 import 하여 사용해보겠습니다.

아래는 다른 파일에서 작성한 코드 입니다.

import header_area as mod       # header_area 파일을 임포트
from header_area import write   # header_area.py 파일 내 write 함수만 임포트

mod.say()                                       # 함수 호출
area, msg = mod.calc_area(1, 5, 5)   # 함수 호출
write(area, msg)                                # 임포트한 함수 직접 사용
 

잘 동작되는지 실행을 시켜보면 아래와 같습니다.