강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

남기정님의 프로필 이미지
남기정

작성한 질문수

실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지

Higher order function(고위 함수)에 대해 알아보기

higher order function 에서

작성

·

336

1

bandicam 2023-07-17 22-03-04-334.jpg

128줄에 return inside에서 inside()를 안하는 이유가 궁금합니다

@higher_order_example 자체가 inside 리턴받은 함수를 자동으로 ()붙여서 실행해주는 것인가요?

136줄에 sample_example()을 안쓰면 121줄에 있는 func 매개변수로 못넣는것인가요???

답변 2

1

Decorator는 외부 함수를 받아 기능을 추가한 새로운 내부 함수를 리턴하는 구조(디자인 패턴)이고,

@higher_order_example 문법은

sample_example = higher_order_example(sample_example)

를 간략히 대체하는 것으로 보면 될까요?

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

네 맞습니다.
@decorator 는 문법 설탕(syntax sugar) 이고 "기존 함수를 데코레이터 함수로 한 번 감싸서 다시 할당한다" 라고 이해하면 됩니다.

1

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 남기정님

128줄에 return inside에서 inside()를 안하는 이유가 궁금합니다@higher_order_example 자체가 inside 리턴받은 함수를 자동으로 ()붙여서 실행해주는 것인가요?

=> 간단한 대답은 네 그렇습니다. () 표시가 함수를 실행시킨다고 생각하시면 될 듯합니다.

 

136줄에 sample_example()을 안쓰면 121줄에 있는 func 매개변수로 못넣는것인가요???

=> 121줄에 있는 func는, 131줄에 있는 decorator가 자동으로 132 ~ 133를 데리고 간것으로 치환한다고 생각하시면 될 듯합니다.

=> 136줄은 sample_example 함수를 실행시키는 겁니다.

남기정님의 프로필 이미지
남기정
질문자

근데 131줄 데코레이터 자체가 higher_order_example()을 하는것인데 왜 136줄에 sample_example()을 실행시키지 않으면 higher_order_example()이 실행 안되나요?

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 남기정님,

131줄은 () 가 없습니다. 제가 말씀드린대로 함수를 실행하기위해서는 ()를 넣으셔야 실행이 됩니다. 즉, 자체적으로 실행을 하지 않기 때문에, Decorator(장식어)라고 불립니다.

남기정님의 프로필 이미지
남기정

작성한 질문수

질문하기