"파이썬 클로저"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
4번째 줄: 4번째 줄:
*[[일급 객체 함수]] 개념을 이용하여 스코프에 묶인 변수를 바인딩 하기 위한 기술을 파이썬에 적용
*[[일급 객체 함수]] 개념을 이용하여 스코프에 묶인 변수를 바인딩 하기 위한 기술을 파이썬에 적용


<source lang='python'>
<syntaxhighlight lang='python'>
def count():
def count():
     cnt = 0
     cnt = 0
23번째 줄: 23번째 줄:
print(count.__closure__[0]) # count 객체 클로저의 첫번째 속성
print(count.__closure__[0]) # count 객체 클로저의 첫번째 속성
print(count.__closure__[0].cell_contents) # count 객체 클로저의 첫번째 속성의 콘텐츠
print(count.__closure__[0].cell_contents) # count 객체 클로저의 첫번째 속성의 콘텐츠
</source>
</syntaxhighlight>
<source lang='console'>
<syntaxhighlight lang='console'>
<function count.<locals>.add_count at 0x7f24a31b56a8>
<function count.<locals>.add_count at 0x7f24a31b56a8>
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
<class 'tuple'>
<class 'tuple'>
<cell at 0x7f24a31f4e88: int object at 0xa69e40>
<cell at 0x7f24a31f4e88: int object at 0xa69e40>
</source>
</syntaxhighlight>


==같이 보기==
==같이 보기==

2020년 11월 2일 (월) 02:32 판

1 개요

Python Closure
파이썬 클로져
  • 일급 객체 함수 개념을 이용하여 스코프에 묶인 변수를 바인딩 하기 위한 기술을 파이썬에 적용
def count():
    cnt = 0
    def add_count():
        nonlocal cnt
        cnt += 1
        return cnt
    return add_count

count = count()
count() # 1
count() # 2
count() # 3

print(count) # count 객체 출력
print(dir(count)) # count 객체가 가지고 있는 변수, 함수를 보여줌
print(type(count.__closure__)) # 클로저 타입 확인
print(count.__closure__[0]) # count 객체 클로저의 첫번째 속성
print(count.__closure__[0].cell_contents) # count 객체 클로저의 첫번째 속성의 콘텐츠
<function count.<locals>.add_count at 0x7f24a31b56a8>
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
<class 'tuple'>
<cell at 0x7f24a31f4e88: int object at 0xa69e40>

2 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}