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
- SQL
- 통계
- 멀티프로세싱
- javascript
- Thread
- CRUD 게시판
- 리스트컴프리헨션
- Python
- CSS
- 클래스
- Process
- 간단한채팅프로그램
- 폴더구조변경
- get/post
- pandas
- 귀무/대립가설
- GAC 자격증
- XML읽기
- 투표알고리즘
- python 모듈 설치
- 웹스크래핑
- DB연동
- 클로저(closure)
- 서류합격팁
- AJAX
- HTML
- CSS적용방식
- VSCode
- eclipse #python
- 나이브베이지안분류
Archives
- Today
- Total
EASY PEASY CODING
[파이썬] 클로저(Closure) 본문
클로저(Closure)
클로저는 scope에 제약을 받지 않는 변수들을 포함하고 있는 코드 블럭입니다.
클로저를 사용해서 함수 내에서 선언한 지역변수를 함수 밖에서 사용할 수 있습니다.
def outer():
count=0
def inner():
nonlocal count #수준이 out 함수의 수준이 되므로 밑에서 out을 했을때 잘 실행이 된다.
count+=1
return count
return inner #내부 함수의 주소를 반환-클로저 <function outer.<locals>.inner at 0x000001EDA120DBC0>
var1=outer()
print(var1)
print(var1())
print(var1())
print(var1())
print(var1())
print()
var2=outer()
print(var2())
print(var2())
print(id(var1),' ',id(var2))
->두 변수의 주소가 다르기에 값은 새로 생성이 된다.
<function outer.<locals>.inner at 0x00000215892CE020>
1
2
3
4
1
2
2291518988320 2291518988480
코드의 실행결과
만약 코드에서
클로저를 사용하지 않은 경우에는,
out() 함수 내부의 count 변수를 함수 외부에서 사용하려고 하면 에러가 발생합니다.
클로저를 사용한 경우는,
outer() 함수가 내부 함수 inner()의 주소를 반환합니다. 이때 inner() 함수는 count 변수를 참조할 수 있습니다.
반환된 주소를 변수에 할당하고 호출하면, count가 계속해서 증가됩니다.