-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
50 lines (38 loc) · 1.02 KB
/
Copy pathmain.py
File metadata and controls
50 lines (38 loc) · 1.02 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 클로저 기초
# 외부에서 호출 된 함수의 변수값, 상태를 복사 후 저장 -> 이후에 접근 가능
# 클래스로 구현
class Average:
def __init__(self):
self.series = []
def __call__(self, v):
self.series.append(v)
print(f"inner >> {self.series} / {len(self.series)}")
return sum(self.series) / len(self.series)
avg_class = Average()
# 누적
print(avg_class(10))
print(avg_class(30))
print(avg_class(50))
# 함수로 구현
def closure():
# 클로저 영억
series = [] # free variables
def average(v):
series.append(v)
print(f"inner >> {series} / {len(series)}")
return sum(series) / len(series)
return average
avg_closure = closure()
print(avg_closure)
print(avg_closure(10))
print(avg_closure(30))
print(avg_closure(50))
# 함수 내부 조사
print()
print(dir(avg_closure))
print()
print(dir(avg_closure.__code__))
print()
print(avg_closure.__code__.co_freevars)
print()
print(avg_closure.__closure__[0].cell_contents)