[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

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다