본문 바로가기
Python

[Python]파이썬 함수와 모듈 완전 정복: 함수 정의부터 스코프까지! 🚀

by 다다면체 2025. 3. 25.
728x90
반응형

안녕하세요! 오늘은 파이썬 프로그래밍의 핵심 중의 핵심이라고 할 수 있는 함수모듈에 대해 자세히 알아보는 시간을 가져보려고 합니다. 마치 레고 블록처럼, 함수와 모듈은 여러분의 코드를 더욱 체계적이고 효율적으로 만들어주는 마법 도구랍니다! ✨

이번 시간에는 함수에 대한 기본적인 개념부터 다양한 활용법, 그리고 변수의 범위인 스코프까지 꼼꼼하게 파헤쳐 볼 예정이니, 파이썬 초보자분들도 걱정 말고 함께 출발해 볼까요? 😉

반응형

1️⃣ 함수 (1): 정의와 호출 - 코드 재사용의 마법! 🧙‍♀️

함수 개념 및 장점

함수란 특정 작업을 수행하는 코드 묶음이라고 생각하시면 돼요. 마치 요리 레시피처럼, 정해진 입력(재료)을 받아서 정해진 작업(요리 과정)을 거쳐 결과(음식)를 만들어내는 것이죠!

함수를 사용하는 가장 큰 장점은 바로 코드 재사용성입니다. 똑같은 코드를 여러 번 반복해서 작성할 필요 없이, 함수를 한 번만 만들어두면 필요할 때마다 간편하게 불러서 사용할 수 있어요. 얼마나 편리한가요? 😎

뿐만 아니라, 코드를 논리적인 단위로 묶어서 관리하기 때문에 코드의 가독성을 높이고, 오류 발생 시 디버깅을 쉽게 해주는 효과도 있답니다. 마치 잘 정리된 서랍장처럼, 코드를 깔끔하게 관리할 수 있게 되는 거죠! 🗄️

함수 정의 (def) 및 호출

파이썬에서 함수를 정의할 때는 def 키워드를 사용합니다. 기본적인 함수 정의 문법은 다음과 같아요.

def 함수이름(매개변수):
    # 함수가 수행할 코드
    return 반환값
  • def: 함수를 정의할 때 사용하는 키워드
  • 함수이름: 함수를 호출할 때 사용할 이름 (규칙에 맞춰서 자유롭게 지정 가능)
  • 매개변수: 함수를 호출할 때 전달되는 값을 받는 변수 (선택 사항)
  • # 함수가 수행할 코드: 실제 함수가 실행될 명령들
  • return: 함수의 실행 결과를 반환하는 키워드 (선택 사항)

정의된 함수를 사용하려면 함수 이름 뒤에 괄호 ()를 붙여서 호출하면 됩니다.

def greet(name):
    print(f"안녕하세요, {name}님!")

greet("철수")  # 출력: 안녕하세요, 철수님!
greet("영희")  # 출력: 안녕하세요, 영희님!

위 예시처럼 greet이라는 함수를 정의하고, 괄호 안에 "철수"와 "영희"라는 값을 넣어서 각각 호출했습니다. 함수는 전달받은 이름에 맞춰서 인사말을 출력해주죠? 참 쉽죠! 😊

매개변수 (parameter)와 인자 (argument)

함수를 정의할 때 괄호 안에 적는 변수를 매개변수 (parameter) 라고 부릅니다. 마치 함수의 입력 통로 역할을 하는 것이죠.

그리고 함수를 호출할 때 실제로 전달하는 값을 인자 (argument) 라고 합니다. 매개변수를 통해 함수 내부로 전달되는 실질적인 값이라고 생각하시면 돼요.

위 greet 함수 예시에서 name은 매개변수이고, "철수"와 "영희"는 인자에 해당합니다. 헷갈리지 않도록 주의하세요! 🧐

2️⃣ 함수 (2): 다양한 형태 - 내 입맛대로 골라 쓰는 재미! 😋

파이썬 함수는 다양한 형태로 정의하고 호출할 수 있어서 더욱 강력하고 유연하게 코드를 작성할 수 있도록 도와줍니다.

위치, 키워드, 기본 인자

  • 위치 인자 (Positional Arguments): 함수 호출 시 인자의 순서대로 매개변수에 값이 할당되는 방식입니다. 우리가 앞에서 봤던 greet("철수")처럼 순서가 중요해요!
  • 키워드 인자 (Keyword Arguments): 함수 호출 시 인자의 이름과 함께 값을 명시하는 방식입니다. 순서에 상관없이 매개변수 이름에 맞춰서 값이 전달되기 때문에 가독성이 높아집니다. 예를 들어 greet(name="영희")와 같이 사용할 수 있습니다.
  • 기본 인자 (Default Arguments): 함수 정의 시 매개변수에 기본값을 지정해두는 방식입니다. 함수를 호출할 때 해당 인자를 생략하면 자동으로 기본값이 사용됩니다.
 
def power(base, exponent=2):  # exponent의 기본값은 2
    return base ** exponent

print(power(3))        # 출력: 9 (exponent는 기본값 2 사용)
print(power(3, 3))     # 출력: 27 (exponent에 3 전달)
print(power(base=5))  # 출력: 25 (키워드 인자 사용)

가변 인자 (*args, **kwargs)

때로는 함수에 전달될 인자의 개수가 정해져 있지 않을 수도 있습니다. 이럴 때 유용하게 사용할 수 있는 것이 바로 가변 인자입니다.

  • *args: 여러 개의 위치 인자를 튜플 형태로 받습니다. 함수 정의 시 매개변수 앞에 *를 붙여서 사용합니다.
  • **kwargs: 여러 개의 키워드 인자를 딕셔너리 형태로 받습니다. 함수 정의 시 매개변수 앞에 **를 붙여서 사용합니다.
 
def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2, 3))       # 출력: 6
print(sum_all(10, 20, 30, 40)) # 출력: 100

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, city="Seoul")
# 출력:
# name: Alice
# age: 30
# city: Seoul

반환 값 (return)

함수가 작업을 완료하고 결과를 외부로 전달하고 싶을 때 return 키워드를 사용합니다. return 문을 만나면 함수의 실행이 즉시 종료되고, 지정된 값이 함수의 결과로 반환됩니다. 만약 return 문이 없거나 return 뒤에 아무 값도 지정하지 않으면 None이 반환됩니다.

def multiply(a, b):
    return a * b

result = multiply(5, 4)
print(result)  # 출력: 20

3️⃣ 함수 (3): 스코프 (Scope) - 변수의 활동 영역! 🗺️

**스코프 (Scope)**는 변수가 유효한 범위, 즉 해당 변수에 접근할 수 있는 영역을 의미합니다. 파이썬에서는 변수가 어디에서 정의되었는지에 따라 스코프가 결정됩니다.

지역 및 전역 변수

  • 지역 변수 (Local Variable): 함수 내부에서 정의된 변수는 그 함수 내부에서만 접근할 수 있습니다. 함수가 종료되면 지역 변수는 사라집니다. 마치 방 안에서만 사용할 수 있는 물건과 같아요. 🚪
  • 전역 변수 (Global Variable): 함수 외부, 즉 프로그램의 최상위 레벨에서 정의된 변수는 프로그램 전체에서 접근할 수 있습니다. 마치 집 전체에서 사용할 수 있는 물건과 같죠. 🏠
 
global_var = 10  # 전역 변수

def my_function():
    local_var = 5  # 지역 변수
    print(f"함수 내부: global_var = {global_var}, local_var = {local_var}")

my_function()
print(f"함수 외부: global_var = {global_var}")
# print(f"함수 외부: local_var = {local_var}")  # 오류 발생!

스코프 규칙 (LEGB)

파이썬에서 변수를 찾을 때 다음과 같은 순서로 검색합니다. 이를 LEGB 규칙이라고 합니다.

  • L (Local): 현재 함수 내부
  • E (Enclosing function locals): 둘러싸고 있는 함수의 내부 (중첩 함수에서)
  • G (Global): 함수 외부, 전역 스코프
  • B (Built-in): 파이썬 내장 함수 및 상수

global, nonlocal 키워드

함수 내부에서 전역 변수의 값을 수정하고 싶을 때는 global 키워드를 사용합니다.

 
count = 0

def increment():
    global count
    count += 1

increment()
print(count)  # 출력: 1

중첩 함수 내부에서 외부 함수의 지역 변수를 수정하고 싶을 때는 nonlocal 키워드를 사용합니다.

def outer():
    x = 10

    def inner():
        nonlocal x
        x += 5
        print(f"inner 함수 내부: x = {x}")

    inner()
    print(f"outer 함수 내부: x = {x}")

outer()
# 출력:
# inner 함수 내부: x = 15
# outer 함수 내부: x = 15

🎉 마무리하며

오늘은 파이썬 함수의 기본적인 정의와 호출 방법부터 시작해서 다양한 형태의 인자, 반환 값, 그리고 변수의 스코프까지 아주 자세하게 알아보았습니다. 어떠셨나요? 이제 함수에 대한 자신감이 조금 더 생기셨나요? 💪

728x90
반응형