[Python]함수 및 람다식
파이썬의 함수와 람다식에 대해 알아보자
# 함수 및 람다식(lambda) # 함수정의 방법 # def function_name(parameter): # code # ex1 def first_func(param): print("Hello, %s" % param) word = "Good Boy" first_func(word) print(first_func) print(type(first_func)) print(id(first_func)) print() # ex2 def return_func(param): return f"Hello, {param}" x = return_func("Python") print(x) # ex3 (다중반환) def func_mul(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return y1, y2, y3 x, y, z = func_mul(10) print(f'x = {x}, y = {y}, z = {y}') # ex4 (튜플 반환) def func_mul2(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return (y1, y2, y3) t = func_mul(10) print(type(t), t) # ex5 (리스트 반환) def func_mul3(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return [y1, y2, y3] l = func_mul3(10) print(type(l), l, set(l)) # ex6 (dict 반환) def func_mul4(x): y1 = x * 10 y2 = x * 20 y3 = x * 30 return {"y1": y1, "y2": y2, "y3": y3} d = func_mul4(10) print(type(d), d, d.get('y2'), d.keys(), d.values()) print() # 매우중요 !!!! # *args, **kwargs # *args (위치인자, 언패킹) : 매개변수를 여러개(무한대) 전달 할 수 있음 def args_func(*args): # 매개변수명은 자유롭게 사용가능 / 튜플로 처리됨 for i, v in enumerate(args): print('Result : {}'.format(i), v) print('---------') args_func('jigi', 'nice') args_func('a', 'b', 'c') print() # **kwargs (키워드 인자, 언패킹) : key=value 형태로 매개변수 전달 def kwargs_func(**kwargs): # 매개변수명은 자유롭게 사용가능 / 딕셔너리로 처리됨 for v in kwargs.keys(): print("{}".format(v), kwargs.get(v)) print('---------') kwargs_func(name1="jigi") kwargs_func(name1="jigi", name2="good") kwargs_func(name1="jigi", name2="good", isCheck=True) print() # 전체혼합 def example(arg1, arg2, *args, **kwargs): print(arg1, arg2, args, kwargs) example(10, 20, "jigi", "good", "man", age=10, gender='man', city='seoul') print() # 중첩함수 def nested_func(num): def func_in_func(num): # 내부 함수는 외부에서 호출불가 print(num) print("In func") func_in_func(num + 100) nested_func(100) print() # 람다식 예제 # 메모리 절약, 가독성 향상, 코드 간결 # 함수는 객체 생성 -> 리소스(메모리) 할당 # 람다는 즉시 실행 함수(Heap 초기화) -> 메모리 초기화 # 남발 시 가독성 오히려 감소 def mul_func(x, y): return x * y func_var = mul_func # 일반함수를 변수에 할당 lambda_var = lambda x, y: x * y # 람다함수를 변수에 할당 print(func_var(10, 20)) print(lambda_var(10, 20)) print() def func_final(x, y, func): print(x * y * func(100, 100)) func_final(10, 20, lambda_var) func_final(10, 20, func_var) print()
결과:
Hello, Good Boy <function first_func at 0x0000029B86493F40> <class 'function'> 2866996133696 Hello, Python x = 100, y = 200, z = 200 <class 'tuple'> (100, 200, 300) <class 'list'> [100, 200, 300] {200, 100, 300} <class 'dict'> {'y1': 100, 'y2': 200, 'y3': 300} 200 dict_keys(['y1', 'y2', 'y3']) dict_values([100, 200, 300]) Result : 0 jigi Result : 1 nice --------- Result : 0 a Result : 1 b Result : 2 c --------- name1 jigi --------- name1 jigi name2 good --------- name1 jigi name2 good isCheck True --------- 10 20 ('jigi', 'good', 'man') {'age': 10, 'gender': 'man', 'city': 'seoul'} In func 200 200 200 2000000 2000000
최신 댓글