
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