함수 파라미터 앞에 아스테리스크(*)를 붙이면,
함수를 호출할 때 몇 개의 인수라도 허용한다는 뜻이다.
아래의 코드에서 사용자 정의 함수를 만들었는데, 파라미터로 *number를 적어서
여러 개의 파라미터를 가지도록 했다.
def calculate(*number):
print(f"결과값은 {number[0] + number[1] + number[2]}")
calculate를 호출해보자.
calculate(1,2,3)
>>결과값은 6
이번에는 calculate 함수에 새로운 기능을 더해주는 decorator 함수를 만들 것이다.
아래의 조건을 충족시켜서 데코레이터 함수를 만들어보자.
1. 이름은 decorated라고 한다.
2. 함수의 이름을 호출한다.
3. 첫 번째, 두 번째, 세 번째 인수를 호출한다.
4. 마지막으로 원래 함수(calculated)의 결괏값을 반환한다.
여기서 중요한 것은 func = calculated 함수가 파라미터를 여러개 갖기 때문에
wrappered 함수에서도 파라미터로 *args가 와야한다는 점이다.
4번에서도 마지막으로 원래 함수의 결괏값을 반환하기 위해
함수를 실행할 때도, 파라미터에 주의해야 한다.
def decorated(func):
def wrappered(*args):
print(f"{func.__name__}의 첫 번째 인수는 {args[0]}, 두 번째 인수는 {args[1]}, 세 번째 인수는 {args[2]}")
return func(*args)
return wrappered
<최종코드>
def decorated(func):
def wrappered(*args):
print(f"{func.__name__}의 첫 번째 인수는 {args[0]}, 두 번째 인수는 {args[1]}, 세 번째 인수는 {args[2]}")
return func(*args)
return wrappered
@decorated
def calculate(*number):
print(f"결과값은 {number[0] + number[1] + number[2]}")
calculate(1,2,3)
'파이썬 > 파이썬(python) 중급' 카테고리의 다른 글
map, pandas, pyplot, matplotlib, code (0) | 2023.05.05 |
---|---|
pycharm에 tensorflow, keras 설치하기, msvcp140.dll or msvcp140_1.dll 에러, 시스템 운영체제 확인 (0) | 2023.03.11 |
클래스, 데코레이터 함수, *args, **kwargs (0) | 2022.11.10 |
데코레이터, 일급 객체, 중첩함수, 데코레이터 함수 만드는 방법 (0) | 2022.11.02 |
[39-5 파이썬] sheety API +tequila API (0) | 2022.10.04 |