250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- API Gateway
- Counterfactual Explanations
- 공분산
- airflow subdag
- TensorFlow
- Retry
- API
- youtube data
- hadoop
- spark udf
- UDF
- BigQuery
- Airflow
- tensorflow text
- XAI
- GenericGBQException
- gather_nd
- GCP
- grad-cam
- requests
- correlation
- chatGPT
- 유튜브 API
- 상관관계
- subdag
- flask
- session 유지
- top_k
- login crawling
- integrated gradient
Archives
- Today
- Total
데이터과학 삼학년
Closer (클로저) 본문
반응형
파이썬에는 클로저라는 기법(?)이 있다. 얼핏보면 함수안에 함수를 넣는 것이 아니냐? 라는 생각이 들 수 있지만 closer는 조금 다르다.
클로저는 함수 본체에서 정의하지 않고 그저 참조만 하는 비전역 변수를 포함한 확장범위를 가진 함수다.
이를 좀 더 이해하기 위해 평균을 구하는 함수를 만든다고 하자 맨처음 값이 들어가면 그 값이 나오고 그 다음 값부터는 이전에 들어갔던 값들과 집어넣은 값의 평균을 배출하게 하는 함수를 만든다면???
예를 들면
avg(10) --> 10
avg(11) --> 10.5
avg(12) --> 11
이런 식이다.
이를 일반적으로 class를 이용하여 코드를 작성하면
class Averager:
def __init__(self):
self.series =[]
def __call__(self,new_value):
self.series.append(new_value)
return sum(self.series)/len(self.series)
이렇겠지만...
closer를 이용하면 굳이 class를 작성할 필요가 없다.
def make_avg():
series = []
def cal_avg(new_value):
series.append(new_value)
return sum(series)/len(series)
return cal_avg
aa = make_avg()
aa(10)
10
aa(11)
10.5
aa(12)
11
이런 식으로 작성이 가능하다.
함수의 본체 안에서 series는 자유변수가 된다. 즉 지역범위에 바인딩되어있지 않은 변수가 된다는 것이다.
aa라는 객체를 큰 함수로 받게 되면 그 안에 있는 series는 aa라는 객체안에서 그저 공유되는 변수가 되어진다.!
조금 신기한 개념이긴 하다~
클로저를 이용하면 매번 class를 만들 필요없이 간단하게 구현할 함수 정도는 효과적으로 코딩할 수 있을 것이다.
이 글은 전문가를 위한 파이썬 책을 참고하여 쓴 것임을 밝힙니다.
728x90
반응형
LIST
'Python' 카테고리의 다른 글
모듈, 패키지 개념 정리 (if __name__=='__main__': 쓰는 이유) (4) | 2020.03.23 |
---|---|
OS 모듈 정리 (0) | 2020.03.02 |
Decorator (데커레이터) (0) | 2020.01.26 |
Abstract method (추상 메서드) (0) | 2020.01.10 |
파이썬 Multiprocessing (4) | 2020.01.09 |
Comments