[파이썬] 함수

함수

1. 기본 구조

파이썬의 함수선언은 자료형에 상관 없이 def()로 선언하면 된다. 매개변수 또한 자료형을 명시하지 않아도 된다.

def 함수명(매개변수):
    코드1
    코드2
    ...

2. 가변 매개변수

매개변수의 개수가 유동적일 때 *를 사용하여 선언할 수 있다.

def 함수명(*매개변수)
	코드1
    코드2
    ...
def add(*num):
    rst=0
    for i in num:
        rst+=i
    return rst

print(add(1, 2, 3, 4, 5))	#15

3. 키워드 파라미터

매개변수가 딕셔너리 형태로 함수에 전달된다.

def kw(**kwargs):
    print(type(kwargs))
    for key, value in kwargs.items():
        print("key = {0}, value = {1}".format(key, value))

kw(월요일="Monday", 화요일="Tuesday", 수요일="Wednesday")

#<class 'dict'>
#key = 월요일, value = Monday
#key = 화요일, value = Tuesday
#key = 수요일, value = Wednesday

4. 람다(lambda)

간단한 함수는 def대신 람다함수(익명함수)로 표현하여 변수에 담아 사용할 수 있다.

lambda 매개변수1, 매개변수2, ... : 표현식

add = lambda a, b : a+b
print(add(10, 20))		#30

5. 데코레이터

데코레이터는 함수를 수정하지 않은 상태에서 추가기능을 구현할 때 사용된다.

def hello():
    print("hello")

def world():
    print("world")

예를 들어, 위와 같은 함수를 호출할 때 앞뒤로 시작과 끝을 알리는 문구를 쓰고 싶다면 다음과 같이 코드가 수정된다.

def hello():
    print("hello 함수 시작")
    print("hello")
    print("hello 함수 끝")

def world():
    print("world 함수 시작")
    print("world")
    print("world 함수 끝")

모든 함수 앞뒤에 print() 문을 추가하는 것이 매우 번거로울 수 있다. 이럴 때 데코레이션을 활용할 수 있다.

#데코레이터
def deco(func):
    def wrapper():
        print(func.__name__, "함수 시작")
        func()
        print(func.__name__, "함수 끝")
    return wrapper

def hello():
    print("hello")

def world():
    print("world")

hello_deco=deco(hello)      # 데코레이터에 함수 넣음
hello_deco()                # 반환된 함수 호출

world_deco=deco(world)      # 데코레이터에 함수 넣음
world_deco()                # 반환된 함수 호출

데코레이터가 함수를 매개변수로 받아 이를 사용하여 새로 정의한 함수를 반환하는 개념이다.

@를 사용하여 간결하게 표현할 수 있다.

#데코레이터def deco(func):    def wrapper():        print(func.__name__, "함수 시작")        func()        print(func.__name__, "함수 끝")    return wrapper@decodef hello():    print("hello")@decodef world():    print("world")hello()world()

카테고리:

업데이트:

댓글남기기