Data Engineering/python

EP05 | Python 함수와 스코프 (Global, Local, Lambda 함수)

ygtoken 2025. 3. 19. 22:36
728x90

이 글에서 다루는 개념

Python에서 **함수(Function)**는 코드의 재사용성을 높이고, 유지보수를 쉽게 해주는 중요한 개념입니다.
이번 글에서는 다음 개념을 다룹니다.

  • 함수의 정의 및 호출 방법
  • 함수의 매개변수 (인수)와 반환값
  • 변수의 유효 범위(Scope) - Local, Global, Nonlocal
  • 익명 함수(Lambda)와 활용 방법

1️⃣ 함수(Function) 기초

Python에서 함수는 def 키워드를 사용하여 정의합니다.

# 함수 정의
def greet(name):
    return f"Hello, {name}!"

# 함수 호출
print(greet("Alice"))  # Hello, Alice!

📌 함수의 기본 구조

  1. def 함수이름(매개변수): → 함수 선언
  2. return 값 → 함수 결과 반환 (없으면 None)
  3. 함수이름(인수) → 함수 호출

2️⃣ 함수의 매개변수와 반환값

🔹 위치 인수(Positional Arguments)

def add(a, b):
    return a + b

print(add(3, 5))  # 8

🔹 기본값(Default Arguments)

def power(base, exponent=2):
    return base ** exponent

print(power(3))  # 9 (3^2)
print(power(3, 3))  # 27 (3^3)

🔹 *가변 인수 (args)

def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3, 4, 5))  # 15

🔹 **키워드 인수 (kwargs)

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

print_info(name="Alice", age=25, city="Seoul")

3️⃣ 변수의 유효 범위(Scope) - Local, Global, Nonlocal

🔹 지역 변수(Local Variable)

함수 내부에서 선언된 변수는 지역 변수이며, 함수 밖에서는 접근할 수 없습니다.

def my_function():
    x = 10  # 지역 변수
    print(x)

my_function()
# print(x)  # 에러 발생 (함수 외부에서 접근 불가)

🔹 전역 변수(Global Variable)

함수 외부에서 선언된 변수는 전역 변수이며, 함수 내부에서도 접근할 수 있습니다.

x = 10  # 전역 변수

def my_function():
    print(x)  # 전역 변수 사용

my_function()  # 10

📌 전역 변수 수정하려면 global 키워드 사용

x = 10

def modify_global():
    global x
    x = 20  # 전역 변수 변경

modify_global()
print(x)  # 20

🔹 nonlocal 키워드 (중첩 함수에서 사용)

def outer():
    x = "outer"

    def inner():
        nonlocal x
        x = "inner"

    inner()
    print(x)  # inner

outer()

4️⃣ Lambda 함수 (익명 함수)

Lambda 함수는 한 줄로 간단한 함수를 만들 때 사용됩니다.

# 일반 함수
def add(a, b):
    return a + b

# Lambda 함수
add_lambda = lambda a, b: a + b

print(add_lambda(3, 5))  # 8

📌 Lambda 함수는 보통 map(), filter(), sorted() 등과 함께 사용됩니다.

nums = [1, 2, 3, 4, 5]

# map: 모든 요소에 2배 연산 적용
doubled = list(map(lambda x: x * 2, nums))
print(doubled)  # [2, 4, 6, 8, 10]

# filter: 짝수만 남기기
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [2, 4]

📌 실전 문제: 함수와 스코프 연습하기


문제 1: 두 숫자의 합을 반환하는 함수 작성

📌 두 개의 정수를 입력받아 합을 반환하는 함수를 작성하세요.

# 🔽 여기에 코드 작성
def add(a, b):
    return a + b

print(add(3, 5))  # 8

문제 2: 가변 인수를 사용해 여러 숫자의 합을 구하는 함수

📌 가변 인수 *args를 사용하여 여러 개의 숫자를 더하는 함수를 작성하세요.

# 🔽 여기에 코드 작성
def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3, 4, 5))  # 15

문제 3: 전역 변수 수정하기

📌 전역 변수 counter를 함수 내부에서 증가시키는 함수를 작성하세요.

counter = 0

def increment():
    # 🔽 여기에 코드 작성
counter = 0

def increment():
    global counter
    counter += 1

increment()
print(counter)  # 1

문제 4: Lambda 함수를 사용해 리스트 요소 변환하기

📌 리스트 [1, 2, 3, 4, 5]의 각 요소를 제곱하는 Lambda 함수를 작성하세요.

numbers = [1, 2, 3, 4, 5]
# 🔽 여기에 코드 작성
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # [1, 4, 9, 16, 25]

 

728x90