[개념] Chapter05-1 : 파이썬 함수 사용법

Date:     Updated:

카테고리:

태그:

인프런 강의 프로그래밍 시작하기 : 파이썬 입문을 듣고 정리한 내용입니다✏️.

함수 정의 방법

예제1

def first_func(w):
    print("Hello, ", w)

word = "Goodboy"

first_func(word) # Hello,  Goodboy

예제2

def return_func(w1):
    return "Hello, " + str(w1)

x = return_func("Goodboy2") 
print(x)# Hello, Goodboy2

예제3 (다중변환)

def func_mul(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return y1, y2, y3

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

예제4 (튜플 리턴)

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]

예제5 (리스트 리턴)

def func_mul2(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return [y1, y2, y3]

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

예제6 (딕셔너리 리턴)

def func_mul3(x):
    y1 = x * 10
    y2 = x * 20
    y3 = x * 30
    return {'v1':y1, 'v2':y2, 'v3':y3}

d = func_mul3(30)
print(type(d), p, d.get('v2'), d.items(), d.keys())
#<class 'dict'> [300, 600, 900] 600 dict_items([('v1', 300), ('v2', 600), ('v3', 900)]) dict_keys(['v1', 'v2', 'v3'])

*args **kwargs

*args(언팩킹)


def args_func(*args):
    for i, v in enumerate(args):
        print('Result : {}'.format(i), v)
    print('-----')
  • 매개변수:가변 1개일 수도 10개일 수도 있다.
  • 튜플 형태가 넘어올 때 많이 사용
args_func('Lee')
args_func('Lee', 'Park')
args_func('Lee', 'Park', 'Kim')
Result : 0 Lee
-----
Result : 0 Lee
Result : 1 Park
-----
Result : 0 Lee
Result : 1 Park
Result : 2 Kim
-----

**kwargs(언팩킹)

def kwargs_func(**kwargs): # 매개변수 명 자유
    for v in kwargs.keys():
        print("{}".format(v), kwargs[v])
    print('-----')
  • 딕셔너리 형태로 키와 밸류인 것을 매개변수로 넘길 때 사용한다.
kwargs_func(name1 = 'Lee')
kwargs_func(name1 = 'Lee', name2 = 'Park')
kwargs_func(name1 = 'Lee', name2 = 'Park', name3 = 'Cho')
name1 Lee
-----
name1 Lee
name2 Park
-----
name1 Lee
name2 Park
name3 Cho
-----

전체혼합

def example(args_1, args_2, *args, **kwargs):
    print(args_1, args_2, args, kwargs)

example(10, 20, 'Lee', 'Kim', 'Park', age1 = 20, age2 = 30, age3 = 40)
# 10 20 ('Lee', 'Kim', 'Park') {'age1': 20, 'age2': 30, 'age3': 40}
  • 인수의 개수에 구애받지 않고 유연하게 사용이 가능하다.

중첩 함수

def nested_func(num):
    def func_in_func(num):
        print(num)
    print("In func")
    func_in_func(num + 100)

nested_func(100)
  • 함수의 함수(func_in_func)는 밖에서 선언이 불가

람다(Lambda) 개념

  • 함수 : 객체 생성 -> 리소스(메모리) 할당
  • 람다 : 즉시 실행 함수(Heap 초기화) -> 메모리 초기화

  • 장점 : 메모리 절약, 가독성 향상, 코드 간결
  • 단점 : 남발 시 가독성 오히려 감소

일반적함수 -> 할당

def mul_func(x, y):
    return x * y

print(mul_func(10, 50))

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

람다 함수 -> 할당

lambda_mul_func = lambda x, y : x*y

print(lambda_mul_func(50,50))

def func_final(x, y, func): # 함수를 인자로 받아
    print(x * y * func(100, 100))

func_final(10, 20, lambda x,y : x*y)

  • 함수 안에서 함수를 인자로 받을 때는
    • 람다식을 써서 바로 넘겨도 되고
    • 이미 변수에 할당해 놓은 함수를 넣어도 되고
    • 자주 쓰는 함수를 람다로 할당을 해서 넘겨도 됨

맨 위로 이동하기

Python 카테고리 내 다른 글 보러가기

댓글남기기