python의 특징 - first class object, inner function, closure, 데코레이터(decorator)
1. first-class object
변수나 데이터 구조에 객체를 할당할 수 있다
parameter 값으로 전달할 수도 있고 return 값으로도 사용할 수 있다
파이썬의 모든 함수
square라는 함수를 f라는 변수로 사용
2. inner function
함수 내에 또 다른 함수를 넣을 수 있음
print_msg 안에 printer()라는 함수가 존재함
3. closure
inner function을 return 함
another라고 하지 않고 왜 another()라고 할까?
another에는 printer라는 함수가 return되어 있음
그래서 함수 사용하듯이 사용해야함
h1_func라고 하면 메모리 주소가 출력되는데
h1_func에 함수 inner_func가 리턴되어 있으니까 함수 사용하듯이 h1_func()라 해야함
4. decorator
복잡한 closure을 간단하게 표현해줌
@(외부함수)형태로 나타냄
printer(‘hello’,’*’)이면 msg, mark에 hello, *들어감
@star로 되어있어서 star함수 호출하면서 func인자에 printer가 들어감 그러면서 inner를 return한거임
inner를 return하는데 *args에 (‘hello’,’*’)이 들어가는거임
그러면서 1번줄에 arg[1]인 *이 30개 찍히고
2번줄에는 func(‘hello’,’*’)수행되는데 func는 printer(‘hello’,’*’)라서 print(‘hello’)가 수행되는거
그리고 다음줄에 *30개
printer(‘hello’)하면서 msg에 ‘hello’들어감
@star하면서 star에 먼저 printer가 들어감
#그러면서 star의 inner를 먼저 return한거임
*args에 ‘hello’가 들어가는거임
1번줄에 *30개 출력
2번줄에 printer(‘hello’)를 다시 호출
그런데 printer(‘hello’)가 다시 percent에 들어가는거임
그러면서 percent의 inner를 return한거임
그러면서 2번째줄에 %가 30개 출력되고
가운데에 hello가 출력되는거임
데코레이터 순서를 바꾸니까 이렇게 나옴
generate_power(2)하면서 exponent에 2가 들어감
데코레이터에 인자 넣으면, 데코레이터가 먼저 실행되나보네
그러면서 wrapper를 먼저 return한거임
그래서 wrapper의 f에 raise_two(n)이 들어감
그러면서 wrapper는 inner를 return한거임
raise_two(7)의 결과값은 7^2으로 49인데 print()문에 의해 알 수 있음
그러면서 마지막으로 inner의 exponent ** result 즉 2^49가 return
'프로그래밍 > Python' 카테고리의 다른 글
파이썬 파일 사용할 때 볼 수도 있는 configparser와 argparser (0) | 2024.04.29 |
---|---|
if __name__ == ‘__main__’: 의 __name__변수 (0) | 2024.04.29 |
python 반복문 중급 기술 - range, break, continue, for ~ else, string iteration (0) | 2024.04.26 |
python 문자열 간단하게 정리 (0) | 2024.04.26 |
파이썬의 참조방식 call by object reference (0) | 2024.04.25 |