파이썬/개념

[알기 쉽게 해결된 파이썬 with 컴퓨팅 사고력] CH09. 함수와 모듈

2024. 12. 8. 12:50
728x90

Section 01. 프로그램과 함수

 

1. 프로그램과 함수의 관계

 

 프로그램(program)은 일상생활의 문제를 컴퓨터로 해결하는 과정을 기술한 절차이다. 다양한 형태의 규모와 복잡성을 가지고 있다.

 프로그램이 비교적 단순하고 간단하다면, 하나의 프로그램 내에서 작성하는 것이 가능하다. 하지만 프로그램의 논리가 복잡하고 대규모로 확장된 프로그램인 경우에 프로그램을 하나로 작성한다는 것은 매우 어려우며 이해하기 쉽지 않고 유지 보수도 매우 어렵다.

 이와 같이 프로그램의 규모가 커질 경우, 경우 프로그램을 작은 단위로 나누어 여러 개의 프로그램으로 작성하는 것이 원칙이다. 이러한 작은 단위의 프로그램을 함수(function)나 서브 프로그램(sub program), 또는 프로시저(procedure)라고 부른다.

 

 

 

2. 함수의 개념

 

 함수는 서브 루틴(subroutine), 프로시저(procedure), 서브 프로세스(sub process) 등으로 부르기도 한다. 함수는 특정 처리를 실행하여 결과를 반환하는 프로그램이다. 이를 위해 함수에 입력 값, 처리 절차, 결과 반환 부분으로 구성할 수 있다. 이러한 함수는 일종의 부품(part)이라고 볼 수 있다.

 최종적으로 정리하면, 함수란 하나의 함수를 만들어 놓고 서로 다른 프로그램에서 부품처럼 가져다 사용할 수 있는 형태를 의미한다.

 

 함수를 사용하면 얻는 장점은 다음과 같다.

  • 하나의 프로그램에서 반복 사용되는 부분을 함수로 작성함으로써 코드의 크기를 줄이고 재사용할 수 있다.
  • 프로그램을 기능 중심으로 부품화하여 이해하기 쉽고 유지 보수도 용이하다.
  • 핵심 기능을 부품으로 제공하여 다른 프로그램에서도 재사용할 수 있다.

 

파이썬에서의 함수는 내장 함수와 사용자 정의 함수로 구분할 수 있다.

  • 내장 함수(built-in function) : 파이썬에서 많이 사용하는 기능을 함수로 미리 만들어 놓은 함수를 의미한다. 자료형 변환이나 수학 관련 기능들을 함수로 정의한 것이다.
  • 사용자 정의 함수(user-defined function) : 사용자가 프로그램을 작성하면서 필요로 하는 특정 기능을 함수로 작성하여 사용하는 것을 의미한다. 주로 반복 사용되거나 많은 사용자들이 공통적으로 사용하는 기능들을 사용자 정의 함수로 작성한다.

 

 

 

 

 


 

 

 

 

 

Section 02. 함수의 사용

 

1. 함수의 정의와 함수 호출

 

 함수는 다음과 같이 정의하여 사용한다.

def 함수이름(매개변수)

 

 def는 예약어이다. 매개변수는 없을 수도 있지만, 없는 경우에 반드시 괄호는 있어야 한다. 함수의 기능은 몸체 블록에 지정해야 한다. 함수가 반환 값이 있을 경우, return문을 사용하여 값을 반환한다.

def 함수이름(매개변수들):
    함수 문장들
    함수 문장들
    return 반환될값들

 

 파이썬에서는 어떠한 프로그램에서든지 함수를 호출할 수 있으며, 함수 내에서도 다른 함수를 호출할 수 있다.

 

 

 

2. 함수의 매개변수

 

 함수를 호출할 때 값을 넘겨주는 방법으로 매개변수를 사용한다. 일반적으로 함수는 0개 이상의 매개변수를 가진다. 함수를 호출할 때 사용하는 변수를 '실제 매개변수9actual parameter)'라 하고, 호출을 당하는 함수의 매개변수르를 '형식 매개변수(formal parameter)'라 한다.

 

위치에 의한 값 전달

 가장 일반적인 방법으로 함수에 값을 전달을 할 때, 값의 매칭이 위치에 따라 진행되는 방법이다.

def volumeBox(width, height, depth):
    # ……………
    # ……………
    # ……………

w = int(input("가로를 입력 : "))
h = int(input("세로를 입력 : "))
d = int(input("높이를 입력 : "))

volume = volumeBox(w, h, d) # 함수 호출

 

묵시적 값을 가진 매개변수

 함수의 형식 매개변수에 묵시적(default)인 값을 지정하여 다양한 형태로 사용이 가능하다.

def volumeBox(width=1, height=1, depth=1):
    # ……………
    # ……………
    # ……………

w = int(input("가로를 입력 : "))
h = int(input("세로를 입력 : "))
d = int(input("높이를 입력 : "))

volume1 = volumeBox()
volume2 = volumeBox(w)
volume3 = volumeBox(w, h)
volume4 = volumeBox(w, h, d)

 

가변 개수의 매개변수

 매개변수의 개수가 확정되지 않은 함수를 구현할 때 사용하는 방법이다. 이 경우 함수에서는 전달 받은 값을 튜플(tuple)로 처리한다. 즉 함수에서 형식 매개변수로 받은 튜플을 가지고 처리하면 된다.

def volumeBox(*args):
    if len(args) == 3: # 매개변수 3개일 때 수행
        return args[0] * args[1] * args[2]
    if len(args) == 2:
        return args[0] * args[1] * args[2]
    # ……………
    # ……………
    # ……………

# ……………
volume1 = volumeBox()
volume2 = volumeBox(w)
volume3 = volumeBox(w, h)
volume4 = volumeBox(w, h, d)

print(volume1, volume2, volume3, volume4)
# ……………

 

이름에 의한 값 전달

 함수에 값을 전달할 때 이름 정보를 지정하여 전달할 수 있다. 이 경우 위치와 상관없이 이름으로 전달된 값이 형식 매개변수에 전달된다.

def volumeBox(width=1, height=1, depth=1):
    # ……………
    # ……………
    # ……………

volume1 = volumeBox(depth=20, height=10, width=30)
volume1 = volumeBox(height=10, width=30, depth=20)

 

 

 

3. 함수의 반환 값

 

 파이썬에서는 return 문을 사용하여 함수를 종료하고 값을 반환할 수 있다. 함수에 return 문이 없거나 단순히 return 문만 사용되는 경우에는 반환 값이 없는 함수이다. 함수에서 하나 이상의반환 값이 있는 겨웅에는 return 문 다음에 변수명을 지정하여 사용한다.

 

 

 

4. 함수의 매개변수 자료형

 

 함수를 호출할 때 매개변수의 자료형에 따라 결과가 다르게 된다. 파이썬에서 변경 가능한(mutable) 자료는 리스트, 세트, 딕셔너리 자료형이다. 이러한 자료형을 함수의 매개변수로 사용할 경우, 함수에서 그 값을 변경하는 경우 호출한 프로그램에서도 해당되는 매개변수의 값이 변경되는 부작용(side effect)이 발생한다.

 

 

 

5. 함수에서의 지역변수와 전역변수

 

 지역변수(Local variable)는 함수에서 사용하는 변수(매개변수 포함)라고 한다. 함수에서 선언된 지역변수는 함수 내에서만 유효한다.

 전역변수(Global variable)는 메인 프로그램에서 선언되거나 함수에서 global로 선언된 변수를 의미하며, 메인이나 함수에서 자유롭게 사용이 가능하다.

 같은 이름의 변수를 메인 프로그램과 함수에서 같이 사용하는 경우에는 동일 프로그램(함수)에서 선언된 변수가 사용된다.

 

 

 

 

 


 

 

 

 

 

Section 03. 모듈

 

 모듈(module)이란 서로 관련 있는 프로그램들을 모아놓은 것으로, 함수, 클래스, 데이터들이 포함될 수 있다. 이러한 파이썬의 모듈은 사용자가 직접 생성하여 사용하는 사용자 생성 모듈, 파이썬 패키지 안에 포함된 표준 모듈, 회사 등에서 특정 기능을 제공하는 서드파티(Third Party) 모듈로 구분될 수 있다.

 

 

 

1. 사용자 생성 모듈

 

모듈의 생성

 사용자는 필요로 되는 함수와 클래스, 데이터들을 하나의 모듈로 작성할 수 있다. 다양한 함수, 클래스, 데이터들을 한 모듈로 생성한다.

 

모듈 사용을 위한 선언과 패스 설정

 모듈을 사용하기 위해서는 import 문으로 모듈의 사용을 정의해야 한다. 모듈을 정의하기 위해 사용하려는 모듈이 있는 곳의 경로를 패스로 지정해야 한다.

 

모듈의 사용

  모듈에서 선언된 함수를 사용하기 위해서는 모듈의 이름과 함수의 이름을 같이 사용해야 한다.

 

 

 

2. 표준 모듈

 

random 모듈

 random 모듈은 주로 난수와 연관된 기능들을 모아 놓은 모듈이다.

import random
# 정수
print(random.randint(1, 100)) # 1~100 사이의 정수 중에서 임의의 수 반환
print(random.randrange(10)) # 0~9 사이의 정수 중에서 임의의 수 반환
print(random.randrange(1, 100)) # 1~100 사이의 정수 중에서 임의의 수 반환
print(random.randrange(1, 100, 2)) # 1~100 사이의 홀수 중에서 임의의 수 반환
# 실수
print(random.randdom()) # 0.0 이상 1.0 미만의 실수 반환
print(random.uniform(100.1, 100.2)) # 100.1 이상 100.2 미만의 실수 반환
# 자료 구조

s = 'Python'
print(random.choice(s)) # 문자열에서 임의의 문자 반환

color = ['red', 'green', 'blue']
print(random.choice(color)) # 리스트에서 임의의 항목 반환

num = (1,2,3,4,5)
print(random.choice(num)) # 튜플에서 임의의 항목 반환

list1 = [1,2,3,4,5]
random.shuffle(list1) # 리스트의 요소를 섞어 list1에 저장

 

itertools 모듈

 itertools 모듈은 반복적인 처리를 하는 데 유용한 함수들을 가지고 있는 모듈이다.

import itertools

list1 = [1,2,3]
list2 = [4,5,6]

for i in itertools.chain(list1, list2): # list1, list2를 연결해서 처리
    print(i, end=' ')

for i in itertools.count(100): # 숫자를 반복해서 출력
    print(i, end=' ')

 

copy 모듈

 copy 모듈은 파이썬에서 사용하는 다양한 객체들을 복사하는 데 많이 사용된다.

import copy

list1 = [1, 2, 3]

list2 = copy.copy(list1) # 1차원 데이터만 복사
list3 = copy.deepcopy(list1) # 다차원 데이터를 모두 복사