함수 [Function]

일종의 기능의 단위로 볼수 있으며 프로그램 내에서 반복해 사용할 코드 조각을 함수로 정의한것이다.

필요할 때마다 함수 이름을 호출하는 것만으로 해당 코드를 실행할 수 있다.

코드 재사용성 증가: 동일한 기능을 하는 코드를 여러 번 작성할 필요 없이, 한 번 정의한 함수를 반복 호출 가능

코드 가독성 향상: 함수 이름에 해당 기능을 잘 나타내면, 코드 전체의 가독성이 높아짐

유지 보수성 개선: 함수로 묶인 코드는 한 곳에서만 수정하면 되므로 유지 보수가 용이


함수의 정의

def 함수이름(매개변수1, 매개변수2, ...):
    # 함수가 수행할 문장들
    # ...
    return 반환값

 


매개변수(Parameters)와 인자(Arguments)의 차이

 

매개변수(Parameter):

함수를 정의할 때 함수 내부로 전달받을 수 있는 변수를 의미한다.

즉, 함수 선언부에 이름을 붙여 놓은 것이라 할수 있다.

 

인자(Argument):

함수를 호출할 때 실제로 넘기는 값이다.

호출 시 매개변수에 대응하는 실제 데이터를 인자로 전달한다.

 

def add(a, b):  # a, b는 매개변수(parameter)
    return a + b

result = add(3, 5)  # 3과 5는 인자(argument)
print(result)  # 출력: 8

반환값(Return Value)

함수는 return 키워드를 통해 실행 결과를 호출한 곳으로 되돌려줄 수 있다.

return 키워드를 만나면 함수는 즉시 종료되고 그 뒤의 코드는 실행하지 않는다. (break)

반환값은 있을수도, 없을수도 있다.

# 반환값이 없는 경우
def greet(name):
    print("Hello,", name)
    # return 문이 없으므로 None 반환

greet("Alice")  # "Hello, Alice"를 출력하고 반환값은 None


# 반환값이 하나인 경우
def square(x):
    return x * x

result = square(4)
print(result)  # 16


# 반환값이 여러개인 경우
def divide_and_remainder(a, b):
    quotient = a // b  # 몫
    remainder = a % b  # 나머지
    return quotient, remainder

q, r = divide_and_remainder(10, 3)
print("몫:", q)   # 몫: 3
print("나머지:", r) # 나머지: 1

다양한 매개변수 전달 방식

함수에서는 매개변수를 다루는 다양한 방법이 있다.

 

1. 기본 매개변수(Default Parameter): 매개변수에 기본값을 설정할 수 있다.

def greet(name, message="Hello"):
    print(message, name)

greet("Alice")        # "Hello Alice" - message에 기본값 사용
greet("Bob", "Hi")     # "Hi Bob"

 

 

2. 키워드 인자(Keyword Arguments): 함수 호출 시 매개변수 이름을 명시하여 인자를 전달할 수 있다.

def introduce(name, age):
    print("이름:", name)
    print("나이:", age)

introduce(name="Charlie", age=25)
introduce(age=30, name="Diana")  # 순서를 바꿔도 명시적이라 오류 없음

 


Docstring (문서 문자열)

 파이썬 함수에서 삼중 따옴표(""")로 작성하고, 함수 사용법과 의도를 기록할 수 있다.

def add(a, b):
    """두 수를 더한 값을 반환하는 함수"""
    return a + b
    
help(add)

 

 

주석과의 차이점?

# 주석은 사람만 보는 메모고,
docstring은 “파이썬도 이해하는 공식 설명서”라 할수있다.

 

Docstring(문서 문자열)은 주석과 달리 파이썬 객체의 속성으로 저장되며 help()로 출력이 가능하다.


지역 변수 vs 전역 변수(어려움)

 

지역 변수(Local Variable)

 

  • 함수 안에서 선언된 변수
  • 해당 함수 내부에서만 사용 가능
  • 함수 실행이 끝나면 사라짐
def my_func():
    x = 5  # 지역 변수
    print(x)

 

 

전역 변수(Global Variable)

  • 함수 밖에서 선언된 변수
  • 프로그램 전체에서 접근 가능
  • 모든 함수에서 읽을 수 있음
x = 10  # 전역 변수

def my_func():
    print(x)

 

만약 지역변수와 전역변수의 이름이 같으면 어떻게 될까?

x = 10  # 전역 변수

def my_func():
    x = 5  # 지역 변수
    print("함수 내부:", x)

my_func()
print("함수 외부:", x)

지역 변수가 전역 변수보다 우선순위가 높다

 

global 키워드

x = 10

def my_func():
    global x
    x = x + 1

my_func()
print(x)

함수 안에서 전역 변수를 수정할 수 없지만
global 키워드를 사용해 전역 변수를 함수 안에서 수정 할 수 있다.


함수의 예제

학생들의 점수를 처리하는 프로그램을 작성해보자

  • 학생들의 점수 리스트가 있을 때, 이 점수들의 평균을 구하는 함수 calculate_average를 정의
  • 평균 점수를 기준으로 등급을 매기는 함수 get_grade를 정의
  • 이를 통해 학생에게 맞는 평가를 출력
def calculate_average(scores):
    """점수 리스트를 받아 평균을 반환하는 함수"""
    if not scores:  # 만약 리스트가 비어있다면 처리
        return 0
    return sum(scores) / len(scores)

def get_grade(score):
    """점수를 받아 A, B, C, D, F 등급을 반환하는 함수"""
    if score >= 90:
        return "A"
    elif score >= 80:
        return "B"
    elif score >= 70:
        return "C"
    elif score >= 60:
        return "D"
    else:
        return "F"

# 테스트 코드
student_scores = [88, 92, 79, 65, 100]
avg_score = calculate_average(student_scores)
student_grade = get_grade(avg_score)

print("평균 점수:", avg_score)       # 예: 평균 점수: 84.8
print("학생 등급:", student_grade)  # 예: 학생 등급: B

내용정리

  • 함수는 특정 기능을 수행하는 코드 블록이며 def 키워드를 사용해 정의함다.
  • 매개변수는 함수 정의 시 이름을 정하며, 인자는 함수 호출 시 실제 전달하는 값이다.
  • return 문을 통해 함수를 호출한 곳으로 값을 돌려줄 수 있으며, 반환값의 존재 여부는 선택적이다.
  • 기본 매개변수, 키워드 인자, 가변 인자를 통해 유연한 함수 호출 패턴을 활용할 수 있다.
  • 람다 함수를 사용하면 짧고 간결한 익명 함수를 만들 수 있으나, 복잡한 로직에는 주의해야 한다.
  • 잘 구조화된 함수를 통해 코드 재사용성, 가독성, 유지 보수성을 모두 높일 수 있다.

모듈

함수, 변수, 클래스 등을 하나의 파이썬 파일(.py)에 정리해 놓은 코드 묶음을 의미한다.
이렇게 만들어진 모듈은 import 문을 사용하여 다른 파이썬 파일에서 재사용할 수 있다.

즉, 모듈은 코드를 기능별로 분리하여 관리하고, 여러 프로그램에서 공통으로 사용하기 위한 단위이다.

 

사용예시

# mymodule.py (모듈 예시)
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

PI = 3.14159

add, subtract 함수, PI 변수를 포함한 mymodule이라는 하나의 모듈이 된다.


 

모듈 호출

모듈을 사용하기 위해서는 import 키워드를 사용한다.

예를 들어, mymodule.py를 같은 디렉토리에 두고 다음과 같이 사용할 수 있다.

모듈 내부의 모든 구성요소를 사용할 수 있음

모듈명.이름 형태로 접근

 이름 충돌 위험이 적음

 

 

# main.py (모듈 사용 예시)
import mymodule

result = mymodule.add(3, 5)
print(result)           # 출력: 8

print(mymodule.PI)      # 출력: 3.14159

이 경우 mymodule 아래에 정의된 함수와 변수를 mymodule.함수명 혹은 mymodule.변수명 형태로 접근할 수 있다

 

특정 함수나 변수만 가져오기

모듈 전체가 아닌 특정 함수나 변수만 가져오고 싶다면 from 구문을 사용할 수 있다.

모듈명을 쓰지 않아도 됨

코드가 간결해짐

 이름 충돌 가능성 있음

 

 

from mymodule import add, PI

print(add(10, 20))  # mymodule.add가 아닌 add로 바로 사용 가능
print(PI)

 

모듈 이름에 별칭(alias) 사용하기

모듈 이름이 길거나 더 짧은 이름으로 사용하고 싶다면 import 모듈명 as 별칭 문법을 사용한다.

또한, from mymodule import add as plus 와 같이 특정 함수에 별칭을 붙일 수도 있다.

import mymodule as mm
print(mm.add(2, 2))  # 별칭 mm로 접근


from mymodule import add as plus
print(plus(3, 4))

 


 

파이썬 표준 라이브러리(내장 모듈) 사용하기

파이썬은 사용자를 위한 풍부한 표준 라이브러리를 제공한다.

별도의 설치 없이도 기본적으로 제공하며, 다양한 기능을 수행하는 모듈들이 포함되어 있다.

# math 모듈은 수학 관련 함수와 상수를 제공
import math

print(math.sqrt(16))  # 제곱근, 출력: 4.0
print(math.sin(math.pi/2))  # sin(90°) = 1.0

# random 모듈은 난수를 생성하는 기능 제공
import random
print(random.randint(1, 10)) # 1부터 10 사이의 정수 난수

# datetime 모듈은 날짜와 시간을 다루는 기능 제공
from datetime import datetime
now = datetime.now()
print(now) # 현재 날짜와 시간 출력

 

외부 모듈(서드파티 라이브러리) 설치 및 사용하는 법

표준 라이브러리 외에도, 다른 개발자들이 만든 모듈을 설치하여 사용할 수 있다.
이를 서드파티 라이브러리라고 한다.

예시로, pandas 라는 데이터 전처리 라이브러리를 설치하고 사용해보자

# 터미널(명령 프롬프트)에서 다음 명령어를 실행:
pip install pandas
# 파이썬 코드에서 사용
import pandas as pd

# 딕셔너리 형태로 데이터 생성
data = {
    "name": ["Alice", "Bob", "Charlie", "David", "Eva"],
    "age": [25, 32, 18, 47, 29],
    "city": ["Seoul", "Busan", "Incheon", "Daegu", "Seoul"],
    "score": [85, 92, 78, 64, 90]
}

# DataFrame 만들기
df = pd.DataFrame(data)

print(df)       # 페이지 소스 출력

이처럼 외부 모듈을 사용하면 파이썬 표준 라이브러리보다 훨씬 폭넓은 기능을 활용할 수 있다.


 

파이썬의 모듈 검색 경로

파이썬은 모듈을 다음 순서로 탐색한다.

  1. 현재 실행 중인 스크립트가 있는 디렉토리
  2. PYTHONPATH 환경 변수에 설정된 경로
  3. site-packages 디렉토리 (외부 라이브러리)
  4. 파이썬 표준 라이브러리 디렉토리

해당 경로에 모듈이 없으면 ModuleNotFoundError가 발생한다.


 

패키지(Package)와 모듈

모듈: 하나의 .py 파일
패키지: 모듈들을 모아둔 디렉토리

패키지는 규모가 커진 프로젝트를 구조적으로 관리하기 위한 수단이다.

 

패키지는 모듈들을 계층적으로 관리하기 위해 사용되며, __init__.py 파일을 포함한 디렉토리를 하나의 패키지로 인식한다.

mypackage/
    __init__.py
    mymodule.py
    utils.py

이제 mypackage가 하나의 패키지가 되고, mypackage.mymodule, mypackage.utils처럼 모듈을 참조할 수 있다.

 

import mypackage.mymodule
from mypackage import utils

패키지를 사용하면 규모가 커진 프로젝트를 논리적 단위로 더 체계적으로 관리할 수 있다.

 

주의사항

  • 의미 있는 이름 사용
    모듈 이름을 의미 있게 짓습니다. 기능을 쉽게 유추할 수 있는 이름이 좋습니다.
  • 최소한의 기능 단위로 분리
    모듈 하나에 너무 많은 기능을 넣지 않고, 관련된 기능끼리 묶어서 관리하는 것이 좋습니다.

내용정리

 

  • 파이썬에서 파일 하나(.py)가 곧 하나의 모듈이다
  • 모듈은 코드 재사용과 구조화를 위한 기본 단위이다
  • import, from import, as를 통해 모듈을 불러올 수 있다
  • 파이썬은 표준 라이브러리와 외부 라이브러리를 제공한다
  • 모듈은 검색 경로를 따라 탐색된다
  • 여러 모듈을 모아 관리하는 것이 패키지이다
  • 잘 설계된 모듈은 유지보수와 확장성을 높인다

 

'A.Today I Learne > 파이썬' 카테고리의 다른 글

[TIL] 파이썬 5일차  (0) 2026.01.14
[TIL] 파이썬 3일차  (1) 2026.01.09
[TIL] 파이썬 2일차  (0) 2026.01.07
[TIL] 파이썬 1일차  (0) 2026.01.05

+ Recent posts