728x90
반응형
- 데코레이터
- 함수를 매개변수로 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환함으로써 기존의 코드에 수정 없이 여러가지 기능을 추가하는 파이썬 구문
- 데코레이터 만들기 (출처 - 코딩도장)
def trace(func): # 호출할 함수를 매개변수로 받음 def wrapper(): # 호출할 함수를 감싸는 함수 print(func.__name__, '함수 시작') # __name__으로 함수 이름 출력 func() # 매개변수로 받은 함수를 호출 print(func.__name__, '함수 끝') return wrapper # wrapper 함수 반환 def hello(): print('hello') def world(): print('world') trace_hello = trace(hello) # 데코레이터에 호출할 함수를 넣음 trace_hello() # 반환된 함수를 호출 trace_world = trace(world) # 데코레이터에 호출할 함수를 넣음 trace_world() # 반환된 함수를 호출- 호출할 함수 위에 @데코레이터 형식으로 지정할 수 있다. (출처 - 코딩도장)
@trace # @데코레이터 def hello(): print('hello') @trace # @데코레이터 def world(): print('world') hello() # 함수를 그대로 호출 world() # 함수를 그대로 호출 ''''''''' hello 함수 시작 hello hello 함수 끝 world 함수 시작 world world 함수 끝 '''''''''- 데코레이터는 여러 개 지정할 수 있다. 이때 데코레이터의 실행 순서는 위에서 아래
- @를 사용하지 않았을 때 : decorated_hello = decorator1(decorator2(hello)) // decorated_hello()
- 클래스로 만드는 데코레이터 구조
class Decorator: def __init__(self, function): self.function = function def __call__(self, *args, **kwargs): return self.function(*args, **kwargs)class Decorator: def __init__(self, function): self.function = function def __call__(self, *args, **kwargs): print('전처리') print(self.function(*args, **kwargs)) print('후처리') @Decorator def example(): return '클래스' example() ''''''''' 전처리 클래스 후처리 ''''''''' - 가변 객체와 불변 객체
- 객체의 정의 : 어떠한 속성값과 행동을 가지고 있는 데이터
- 객체는 3가지 특징을 가진다.
- 값(value) : 메모리에 기록된 내용. 가변 객체는 값이 변할 수 있지만 불변 객체는 변하지 않는다.
- 유형(type) : type() 함수를 통해 객체의 유형을 알 수 있으며 데이터의 종류를 보여준다.
- 정체성(identity) : id() 함수를 통해 알 수 있으며 각각의 객체를 식별하기 위한 고유번호(메모리 상에 위치한 주소 값)
- 가변 객체 : 객체에 할당된 값을 수정할 수 있다. → list, set, dict
- 불변 객체 : 객체에 할당된 값을 수정할 수 없다. → int, float, bool, tuple, string, unicode
- 예시 : tuple의 요솟값을 변경할 수 없기 때문에 새로운 tuple 인스턴스를 같은 이름의 변수에 할당하는 방법으로 변수가 가리키는 대상을 바꿔야 한다.
- set 자료형과 dict 자료형의 차이
- 공통점
- 중복값을 없애준다
- {} 사용
- 파이썬에서 dict 자료형의 키값은 해시가 가능토록 설계돼야 하므로 해시 키의 유일성을 해치지 않도록 가변 객체를 dict의 키값이나 set의 원소로 사용할 수 없다.
- 차이점
- dict는 Set 과 달리 키-밸류 쌍으로 데이터를 표현한다.
- set은 보통 list의 중복값 삭제를 위해 사용한다.
- dict는 사전처럼 키로 밸류값을 찾기 위해 사용한다.
- 공통점
- list 자료형과 tuple 자료형의 차이
- 공통점
- 어떠한 자료형이든 안에 값으로 저장할 수 있다.
- 안에 리스트나 튜플을 추가해 다차원 리스트를 만들 수 있다.
- 중복된 값도 넣을 수 있다.
- 둘 다 순차자료형이다.
- 차이점
- list는 [], tuple은 ()
- list는 비교적 리소스를 많이 사용하는 대신 추가 및 수정이 가능하다. → 가변객체다.
- tuple은 생성 후 추가 및 수정이 불가한 대신 리소스를 비교적 적게 사용한다. → 불변객체다.
- 공통점
- assert
- 뒤에 오는 조건이 False면 AssertionError를 발생시킨다.
- assert 조건, “에러문”의 형식으로 사용할 수도 있다.
- 따라서 assert는 조건을 만족하지 않을 경우 강제종료 시킴으로써 조건을 보장한다.
def test(t):
assert type(t) is int, '정수 아님'
for i in lists:
test(i)
#결과
AssertionError: 정수 아님
- raise
- 강제로 예외를 발생시켜 별도로 처리한다
if not re.search(password_reg, str(password)):
raise serializers.ValidationError(detail={"password":"최소 한 개의 영문자와 숫자를 포함해 5글자 이상으로 만들어 주세요."})
elif password != password_check:
raise serializers.ValidationError(detail={"password":"동일한 비밀번호를 입력해 주세요."})
- try except문과 함께 쓰이는 경우가 잦다.
- TypeError나 NameError처럼 deserved된 에러가 아니라 자신이 만든 특정 상황의 에러가 발생한 경우 별도 처리를 할 수도 있다.
반응형
'Programming > TIL and WIL' 카테고리의 다른 글
| 프록시 - 포워드 프록시, 리버스 프록시 (0) | 2023.02.09 |
|---|---|
| 스키마, 인덱스, 수직적 확장과 수평적 확장 (0) | 2023.02.08 |
| TIL - 기술 면접 준비1: TCP, UDP, 3-way handshake / 알고리즘 - 큐 : 프린터 (0) | 2023.02.05 |
| TIL - 기술 면접 준비1: IP Protocol, HTTP Protocol / 알고리즘 - 큐: 기능 개발 (1) | 2023.02.04 |
| TIL: pathlib, with~as, swagger, re_path (0) | 2023.02.02 |