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

 
(사용자 2명의 중간 판 3개는 보이지 않습니다)
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>


==같이 보기==
==같이 보기==
* [[파이썬 자유변수]]
* [[파이썬 자유변수]]
* [[파이썬 nonlocal]]
* [[클로저]]
* [[클로저]]


[[분류: Python]]
[[분류: Python]]
[[분류: 클로저]]

2021년 10월 20일 (수) 13:20 기준 최신판

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 }}