본문 바로가기
Algorithm/자료구조, 알고리즘

[코딩 + 알고리즘 완주반] 6일차. 함수, Lambda

by newnu 2021. 3. 20.
반응형

# 함수 정의 및 람다 사용

함수 선언 - 반복적인 기능 구현

함수의 다양한 사용

다양한 반환 값

*args, **kwargs

람다 함수

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

# 함수 호출 - 호출하기 전에 먼저 선언해야 함
# 함수명(parameter)

# 예제1
def hello(world):
    print("Hello ",world)

hello("Python!")
hello(7777)


# 예제2
def hello_return(world):
    val = "Hello "+str(world)
    return val

str  = hello_return("Python!!!!!")
print(str)

# 예제3(다중리턴)
def func_mul(x):
    y1 = x*100
    y2 = x*200
    y3 = x*300
    return y1,y2,y3

val1,val2,val3 = func_mul(100)
print(type(val1),val1,val2,val3) # <class 'int'> 10000 20000 30000

# 예제4(데이터 타입 반환)
def func_mul2(x):
    y1 = x*100
    y2 = x*200
    y3 = x*300
    return [y1,y2,y3]

lt = func_mul2(100)
print(lt,type(lt))

# 예제5
#*args, *kwargs
# 매개변수 몇 개 넘어오는지 모를 때

def args_func(*args):
    # for t in args:
    #     print(t)
    for i,v in enumerate(args):
        print(i,v)

args_func('kim')
args_func('kim','park')
args_func('kim','park','lee')

#kwargs
# * 튜플  ** 딕셔너리
def kwargs_func(**kwargs):
    for k,v in kwargs.items():
        print(k,v)

kwargs_func(name1 = 'Kim')
kwargs_func(name1 = 'Kim', name2 = 'Park',name3 = 'Lee') 

# 전체 혼합
def example_mul(arg1,arg2,*args,**kwargs): # arg1,arg2 필수 뒤는 가변
    print(arg1,arg2,args,kwargs)


example_mul(10,20) # 10 20 () {}
example_mul(10,20,'park','kim',age1 = 24, age2 = 35) # 10 20 ('park', 'kim') {'age1': 24, 'age2': 35}

# 예제 6
# 중첩함수(클로저)
def nested_func(num):
    def func_in_func(num):
        print(num)
    print("in func")
    func_in_func(num+10000)

nested_func(10000)

# 예제7 (hint) - 입력, 출력값
def func_mul3(x:int) -> list :
    y1 = x*100
    y2 = x*200
    y3 = x*300
    return [y1,y2,y3]    

print(func_mul3(5))

# 람다식 예제
# 람다식 : 메모리 절약, 가독성 향상, 코드 간결
# 함수는 객체 생성 -> 리소스(메모리) 할당
# 람다는 즉시 실행(Heap 초기화) -> 메모리 초기화

# 일반적 함수 -> 변수 할당
def mul_10(num : int) -> int:
    return num * 10

var_func = mul_10
print(var_func)
print(type(var_func))

print(var_func(10))

#lambda
lambda_mul_10 = lambda num : num*10

print('>>>',lambda_mul_10(10))

def func_final(x,y,func):
    print(x*y*func(10))

func_final(10,10,lambda_mul_10)

func_final(10,10,lambda x:x*100)
반응형