https://blog.hexabrain.net/347
일급객체란, 다른 객체들에서 일반적으로 쓰는 연산을 지원하는 객체를 말합니다.
따라서 일급객체는 다른 객체에 인자로 넘겨지거나 반환값으로 사용될 수 있으며, 파이썬의 함수는 일급객체, 즉 일급함수로 사용됩니다.
객체 안에 다른 객체가 정의될 때 지역변수가 선언되면 전역으론 쓸 수가 없습니다.
def func1(arg1):
global arg2
return arg1 + arg2
arg2 = 1
print(func1(2)) # 3
지역에서 선언된 변수를 전역에서 쓰려면 위처럼 global
을 선언해야 하는데, 당연히 어떻게 정의됐는지 불분명한 변수를 코드 스코프 전체에서 쓰면 불안정합니다.
이를 해결하기 위해 클로저를 쓸 수 있습니다. 클로저란, 반환값으로 내부함수를 반환하는 일급함수를 말합니다.
def 클로저함수(arg1):
def 내부함수(arg2):
return arg1 + arg2
return 내부함수
object1 = 클로저함수(x)
print(object1(y)) # x + y
여기서 arg2는 클로저 내부에 있지만 y값으로 지정이 가능함을 볼 수 있습니다.
여기서 각각 지정된 argument x는,
object1.__closure__[argument인덱스].cell_contents
처럼 호출할 수 있습니다.
당연히 여러 번 중첩도 가능한데, 이 경우 arguments가 __closure__
에 tuple로 추가가 됩니다.
def func1(x):
def func2(y):
def func3(z):
return x + y + z
return func3
return func2
o1 = func1(1)
o2 = o1(2)
o3 = o2(3)
print(o3) # 6 = 1 + 2 + 3
print(o2.__closure__[0].cell_contents) # 1
print(o2.__closure__[1].cell_contents) # 2
'개발 > 파이썬' 카테고리의 다른 글
NumPy & Pandas 자주 쓰는 문법 요약 (0) | 2022.09.13 |
---|---|
Python logging & logger 모듈 (0) | 2022.09.13 |
Pyreverse, Python 다이어그램 diagram 패키지 (0) | 2022.09.13 |
Radon, Python code metrics 평가 도구 (0) | 2022.09.13 |
댓글