함수의 기본 이해와 활용

함수의 개념과 장점

함수(function)는 조직화되고 재사용 가능한 코드 블록입니다. 쉽게 말해, 독립적인 기능을 가진 코드를 캡슐화하고 이름을 부여하여 필요할 때 호출하는 것입니다.

함수란 무엇인가요?

함수를 스마트 홈의 "장면 모드"로 생각해 볼 수 있습니다. 예를 들어, "집에 도착" 모드를 설정하면 에어컨이 켜지고, 거실 불이 켜지며, 커튼이 열리는 등의 작업이 자동으로 실행됩니다. 여기서 "집에 도착" 모드는 함수에 해당하며, 각 작업은 함수 내부의 코드입니다.

함수 사용의 이점

  • 코드 재사용: 같은 코드를 반복 작성하지 않아도 되므로 코드 양을 줄이고 개발 효율을 높일 수 있습니다.
  • 구조적 명료성: 복잡한 프로그램을 작은 기능 단위로 분리하여 코드의 가독성과 유지보수성을 향상시킵니다.
  • 모듈화 개발: 팀 협업에서 각 개발자가 다른 함수를 담당하고 나중에 조합하여 완전한 프로그램을 만들 수 있습니다.

Python에서의 함수 분류

분류설명예시
내장 함수추가 작업 없이 바로 사용할 수 있는 함수print(), type(), len(), range()
모듈 제공 함수특정 모듈을 먼저 import해야 사용할 수 있는 함수math.sqrt(), random.randint()
사용자 정의 함수프로그래머가 자신의 요구에 따라 정의하는 함수본 장에서 주로 다룰 내용

사용자 정의 함수의 기본 사용

함수 정의

함수를 정의할 때는 def 키워드를 사용합니다.

def 함수명():
    함수 본문
  • def와 함수명 사이에는 공백이 있어야 하며, 함수명 뒤에는 괄호와 콜론이 필요합니다.
  • 함수명은 식별자 규칙에 맞춰야 합니다 (영문자, 숫자, 언더스코어 사용 가능).
  • 함수 본문은 반드시 들여쓰기되어야 하며, 보통 4개의 공백을 사용합니다.
예시 1: 인사말 함수 정의
def greet():
    print("안녕하세요!")
    print("Python 함수를 배우는 것을 환영합니다!")

greet()
예시 2: 현재 시간 표시 함수
def show_time():
    print("현재 시간은: 2025년 3월 4일 10:30")

show_time()

함수 호출

함수를 호출할 때는 함수명과 괄호만 작성하면 됩니다.

함수명()

함수의 매개변수

매개변수의 역할

매개변수는 함수를 더욱 유연하게 만들어줍니다. 호출 시 전달된 데이터를 통해 함수의 동작을 변경할 수 있습니다.

형식 매개변수와 실제 매개변수

  • 형식 매개변수(형식 파라미터): 함수 정의 시 괄호 안에 선언된 변수명으로, 호출 시 전달된 값을 받습니다.
  • 실제 매개변수(실제 파라미터): 함수 호출 시 실제로 전달되는 값입니다.
예시
def add(a, b):
    result = a + b
    print(f"{a} + {b} = {result}")

x = 5
y = 3
add(x, y)

위치 매개변수

가장 일반적인 매개변수 타입으로, 호출 시 실매개변수의 순서가 형식 매개변수와 일치해야 합니다.

예시: 두 수의 곱 계산
def multiply(a, b):
    print(f"{a} × {b} = {a * b}")

multiply(4, 5)
multiply(5, 4)

기본 매개변수

함수 정의 시 일부 매개변수에 기본값을 지정할 수 있습니다. 호출 시 해당 매개변수가 전달되지 않으면 기본값이 사용됩니다.

예시: 기본 매개변수를 사용한 함수
def power(base, exponent=2):
    result = base ** exponent
    print(f"{base}의 {exponent} 제곱 = {result}")

power(3)
power(3, 4)

가변 매개변수 (*args)

전달받을 매개변수의 개수가 미정일 경우 가변 매개변수를 사용할 수 있습니다. 앞에 별표(*)를 붙여 여러 위치 매개변수를 튜플로 묶습니다.

예시: 임의의 개수의 숫자 평균 계산
def average(*numbers):
    if len(numbers) == 0:
        return 0
    total = sum(numbers)
    return total / len(numbers)

print(average(10, 20, 30))
print(average(5, 15, 25, 35, 45))
print(average())

키워드 매개변수

매개변수를 호출 시 이름을 명시하여 전달할 수 있습니다. 이 방법은 매개변수의 순서에 상관없이 전달할 수 있다는 장점이 있습니다.

예시: 키워드 매개변수 사용
def introduce(name, age, city):
    print(f"저는 {name}입니다, 나이는 {age}세이고, {city} 출신입니다.")

introduce("홍길동", 25, "서울")
introduce(city="부산", name="김철수", age=30)

가변 키워드 매개변수 (**kwargs)

여러 개의 키워드 매개변수를 딕셔너리로 수집할 수 있습니다. 앞에 두 개의 별표(**)를 붙여 사용합니다.

예시: 사용자 정보 수집
def build_profile(**info):
    return info

profile = build_profile(name="박영희", age=28, job="엔지니어", city="대전")
print(profile)

위치 매개변수와 키워드 매개변수의 혼합 사용

함수 호출 시 위치 매개변수와 키워드 매개변수를 함께 사용할 수 있지만, 몇 가지 규칙을 지켜야 합니다.

예시: 혼합 사용
def describe_pet(animal, name, age):
    print(f"저는 {animal}을 가지고 있고, 이름은 {name}이며, {age}살입니다.")

describe_pet("강아지", age=3, name="멍멍이")
# describe_pet(animal="고양이", "냥냥이", 2) # SyntaxError

특수 리터럴 None

Python에서 None은 특수 리터럴로, 비어 있거나 무의미한 값을 나타냅니다.

None의 기본 특성

  • 타입: None의 타입은 NoneType입니다.
  • 불리언 값: if 조건이나 while 조건에서는 False로 취급됩니다.
  • 연산 불가: None은 수학 연산이나 문자열 연결에 사용될 수 없습니다.

None의 사용 사례

  • 미정의 변수 초기화: 변수의 타입이 아직 결정되지 않았을 때 초기화할 수 있습니다.
  • 함수의 기본 반환 값: 함수에 return 문이 없거나 값이 없으면 None을 반환합니다.
  • 플레이스홀더: 실제 데이터가 없을 때 플레이스홀더로 사용됩니다.

함수의 반환 값

반환 값이란?

함수는 return 문을 통해 실행 결과를 호출자에게 반환할 수 있습니다.

return을 사용하여 반환 값 설정

import math

def circle_area(radius):
    area = math.pi * radius ** 2
    return area

area1 = circle_area(5)
area2 = circle_area(10)
print(f"반지름이 5인 원의 면적: {area1:.2f}")
print(f"반지름이 10인 원의 면적: {area2:.2f}")

변수의 유효 범위

유효 범위란?

변수의 유효 범위는 프로그램 내에서 변수가 접근 가능한 영역입니다. Python에서는 전역 범위와 지역 범위가 주로 사용됩니다.

전역 변수

name = "전역 변수"

def test():
    print(name)

test()
print(name)

지역 변수

def test():
    age = 20
    print(age)

test()
# print(age) # NameError

함수 내에서 전역 변수 수정

함수 내에서 전역 변수를 수정하려면 global 키워드를 사용해야 합니다.

count = 10

def change():
    global count
    count = 20

change()
print(count)

함수의 중첩 호출

중첩 호출이란?

함수 내에서 다른 함수를 호출하는 것을 중첩 호출이라고 합니다. 복잡한 작업을 작은 함수로 분리하여 구조화된 프로그램을 작성할 수 있습니다.

중첩 호출의 실행 흐름

함수 호출이 발생하면 현재 함수의 실행이 일시 중단되고 호출된 함수가 실행됩니다. 호출된 함수가 종료되면 다시 원래 함수로 돌아갑니다.

재귀 호출

재귀란?

재귀는 함수가 직접 또는 간접적으로 자신을 호출하는 것을 의미합니다. 재귀는 문제를 더 작은 하위 문제로 분해하여 해결하는 데 유용합니다.

재귀의 실행 과정

재귀 호출 시마다 메모리에 새로운 스택 프레임이 생성되며, 이 스택 프레임들은 호출 순서대로 스택에 쌓입니다. 종료 조건에 도달하면 스택 프레임들이 차례대로 해제됩니다.

클래식 재귀 예제

예시 1: 팩토리얼 계산
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))

함수 설명 문서(docstring)

함수의 첫 번째 줄에 설명 문서를 추가하여 함수의 목적, 매개변수 및 반환 값을 설명할 수 있습니다.

예시: 설명 문서가 포함된 함수

def average(numbers):
    """
    숫자 리스트의 평균을 계산합니다.
    :param numbers: 숫자 리스트
    :return: 평균값, 리스트가 비어있으면 0을 반환합니다.
    """
    if not numbers:
        return 0
    return sum(numbers) / len(numbers)

help(average)

태그: python 함수 파이썬 프로그래밍 코드리뷰

5월 24일 20:28에 게시됨