[파이썬] 함수
함수
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()
댓글남기기