Python Basic _ 5-2. 함수식 및 람다

WONY_yoon·2025년 10월 3일
post-thumbnail

Python 함수식 및 lambda 알아보기

# chapter05-1
# 파이썬 함수 및 중요성
# 파이썬 함수식 및 람다(lambda)

# 함수 정의 방법
# def function_name(parameter):
#     code

# 예제 1
def first_func(a):
    print('Hello, ', a)

word = 'Good Boy'
first_func(word)    # Hello,  Good Boy

print()

# 예제 2 / return 있음
def return_func(b):
    value = 'Hello, ' + str(b)    # return 'Hello, ' + str(b) 처럼 한줄입력 가능
    return value

x = return_func('Good Boy')
print(x)    # Hello, Good Boy

# 예제 3 / 다중 반환
def func_mul1(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return y1, y2, y3

x, y, z = func_mul1(10)
print(x, y, z)    # 100 200 300

# 튜플 리턴
def func_mul2(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return y1, y2, y3

q = func_mul2(20)
print(type(q), q, list(q))    # <class 'tuple'> (200, 400, 600) [200, 400, 600]

# 리스트 리턴
def func_mul3(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return [y1, y2, y3]

p = func_mul3(30)
print(type(p), p, set(p))    # <class 'list'> [300, 600, 900] {600, 900, 300}

# 딕셔너리 리턴
def func_mul4(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return {'v1': y1, 'v2': y2, 'v3': y3}

d = func_mul4(30)
print(type(d), d, d.get('v1'), d.items(), d.values(), d.keys())
# <class 'dict'> {'v1': 300, 'v2': 600, 'v3': 900} 300 dict_items([('v1', 300), ('v2', 600), ('v3', 900)]) dict_values([300, 600, 900]) dict_keys(['v1', 'v2', 'v3'])

# 중요
# *args

# *args(언패킹)
def args_func(*args):  # 매개변수 명은 자유
    for i, v in enumerate(args):
        print('Result : {}'.format(i), v)
    print('------')     # 구분선

args_func('Lee')    
# Result : 0 Lee
# ------
args_func('Lee', 'Park')    
# Result : 0 Lee
# Result : 1 Park
# ------
args_func('Lee', 'Park', 'Kim')    
# Result : 0 Lee
# Result : 1 Park
# Result : 2 Kim
# ------

print()

# kwargs(언패킹)
def kwargs_func(**kwargs):  # 매개변수 명은 자유
    for v in kwargs.keys():
        print('Result : {}'.format(v), kwargs[v])
    print('------')

kwargs_func(name1 = 'Lee')    
# Result : name1 Lee
# ------
kwargs_func(name1 = 'Lee', name2 = 'Park')    
# Result : name1 Lee
# Result : name2 Park
# ------
kwargs_func(name1 = 'Lee', name2 = 'Park', name3 = 'Cho')    
# Result : name1 Lee
# Result : name2 Park
# Result : name3 Cho
# ------

# 전체 혼합 예제
def example(arg_1, arg_2, *arg, **kwarg_1):
    print(arg_1, arg_2, arg, kwarg_1)
example(10, 20, 'Lee', 'Kim', 'Park', 'Cho', age1 = 20, age2 = 30, age3 = 40)
# 10 20 ('Lee', 'Kim', 'Park', 'Cho') {'age1': 20, 'age2': 30, 'age3': 40}

print()

# 중첩 함수
def nested_func(num):
    def func_in_func(num):
        print(num)
    print('In func')
    func_in_func(num + 100)

nested_func(100)
# In func
# 200

print()
print('============')    # ============
print()
# 실행 불가 -> func_in_func(1000)   안에있는 함수는 호출되지 않음

# 람다식(lambda) 예제
# 메모리 절약, 가독성 향상, 코드 간결
# 함수는 객체 생성 -> 리소스(메모리) 할당
# 람다는 즉시 실행 함수(heap 영역에 저장) -> 메모리 초기화
# 남발 시 오히려 가독성 감소
#
# def mul_func(x, y):
#     return x * y
# lambda x, y : x  * y
# 동일한 함수

def mul_func(x, y):
    return x * y
q = mul_func(10, 50 )
print(q)                 # 500
print(mul_func(10, 50 )) # 500

mul_func_var = mul_func
print(mul_func_var(20, 50))   # 1000

print()

# 람다 함수 -> 할당
lambda_mul_func = lambda x, y : x  * y
print(lambda_mul_func(50, 50))   # 2500

print()

def func_final(x, y, func):
    print('>>>>', x * y * func(100, 100))

func_final(10, 20, lambda x, y: x * y)    # >>>> 2000000
func_final(10, 20, lambda_mul_func)       # >>>> 2000000
func_final(10, 20, mul_func_var)          # >>>> 2000000
func_final(10, 20, mul_func)              # >>>> 2000000

0개의 댓글