티스토리 뷰
1. 클로저란?
- 함수 안에 있는 변수를 기억하고 계속 사용하고 싶을때 사용(상태 저장)
- 함수안에 변수와 또 다른 함수를 만들어서 사용한다
- 바깥 함수의 변수는 안쪽 함수에서만 사용할 수 있어 외부에서 함부로 변경할 수 없다
- 코드를 깔끔하게 적을 수 있고, 중요한 데이터나 계산을 숨길 수 있어 안전하다.
- 데이터를 저장하거나 버튼 클릭수를 세는데 사용
def outer(m):
def inner(n):
return m*n
return inner
outer3 = outer(3) # inner가 3을 저장함
outer3(4) # 12
outer3(5) # 15
outer3(6) # 18
- nonlocal : 바깥 변수를 수정할때 사용
def button():
i = 0
def count():
nonlocal i
i += 1
return i
return count
button_counter = button()
button_counter() # 1
button_counter() # 2
button_counter() # 3
2. 클래스를 사용하면 되지 않나?
- 클로저의 경우 더 짧고 간결하며, 캡슐화가 더 강력하다.
특징 | 클로저 | 클래스 |
코드의 간결 | 간단한 작업에 적합(짧고 간결) | 더 많은 기능을 추가하기에 적합 |
상태 저장 | 함수 안의 변수를 기억하고 저장 | 인스턴스 변수로 상태 저장 |
재사용성 | 특정한 역할에 집중(필요한 함수만 반환) | 여러 메서드와 속성을 가진 복잡한 객체 생성 가능 |
캡슐화(숨기기) | 변수는 함수 안에 숨겨져 외부에서 완전 접근 불가 | __를 사용해 이름을 변경하는 식으로 숨김 |
3. 데코레이터란?
- 함수에 다른 기능을 추가하는 것
- 기존 함수의 호출 방식을 바꾸지 않아도 기능을 확장할 수 있다.
- 함수마다 중복 코드가 발생할 필요가 없어 부가 기능과 본래 기능을 분리하고 각자의 역할이 명확해진다.
- @기호로 간단하게 추가하여 코드가 간결해지고, 가독성과 유지보수성이 좋아진다.
import time
def 실행_시간_측정(func):
def wrapper(*args, **kwargs):
시작 = time.time()
결과 = func(*args, **kwargs)
끝 = time.time()
print(f"{func.__name__} 실행 시간: {끝 - 시작:.4f}초")
return 결과
return wrapper
@실행_시간_측정
def 계산():
time.sleep(1)
print("계산 완료!")
계산()
# 계산 완료!
# 계산 실행 시간: 1.0000초
반응형
'AI > Python' 카테고리의 다른 글
[python] 해시(Hash)와 딕셔너리(dict) (0) | 2024.12.19 |
---|---|
[python] 이터레이터와 제너레이터 (1) | 2024.12.09 |
[python] pickle, with (3) | 2024.12.02 |
[python] Class, self, __init__, 오버라이딩 (2) | 2024.11.27 |
[python] 비트 NOT 연산자 ~x (0) | 2024.07.10 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Ai
- 아침
- C언어
- ChatGPT
- SQL
- 오블완
- 다이어트
- 경제
- 줄넘기
- 뉴스
- 갓생
- 오픽
- 아침운동
- 프로그래머스
- 실기
- 스크랩
- Python
- IH
- 고득점 Kit
- 30분
- llm
- 루틴
- 영어회화
- 운동
- 습관
- 빅데이터 분석기사
- opic
- 기초
- 미라클모닝
- 티스토리챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함