유니코드란?
전 세계의 문자와 기호를 고유한 코드 포인트로 표현한 것
UTF-8, UTF-16, UTF-32 등 다양한 인코딩 방식으로 표현되며, encode(), decode() 메서드를 사용하여 다른 인코딩으로 변환할 수 있음
문자열이 기본적으로 유니코드로 처리되며, str 타입을 사용함 (바이너리 데이터를 다루고 싶을 경우 bytes 타입의 바이트 문자열을 사용해야함)
인코딩과 디코딩
인코딩은 문자열을 바이트열로 변환하는 과정이다.
파일 입출력 시, open 함수에 encoding 값을 넘겨 문자열 데이터를 해당 파일에 맞게 읽어들일 수 있다.
소스코드의 인코딩 방식을 지정하고 싶다면 상단에 아래와 같은 주석을 작성해야한다.
# -*- coding: utf-8 -*-
or
# coding: utf-8
중첩된 함수에서 외부 함수의 변수를 참조하고 저장하는 기능
함수의 동작을 매개변수화하고, 상태를 캡슐화할 수 있음
def make_multiplier(factor):
def multiplier(n):
return factor * n
return multiplier
# 이제 클로저를 생성합니다.
times_two = make_multiplier(2)
times_three = make_multiplier(3)
# 각 클로저를 사용해 결과를 출력합니다.
print(times_two(4)) # 결과: 8 (2 * 4)
print(times_three(4)) # 결과: 12 (3 * 4)
make_multiplier 함수를 사용하여 특정값을 곱하는 multiplier 함수를 동적으로 생성할 수 있음
생성된 multiplier 함수를 변수에 저장하여 필요에 따라 나중에 사용할 수 있음
함수를 인자로 받아 새로운 함수를 반환하는 함수
기존 함수의 기능을 확장하거나 수정할 수 있음
def logger_decorator(func):
def wrapper(*args, **kwargs):
print(f"{func.__name__} 함수가 호출되었습니다.")
result = func(*args, **kwargs)
print(f"{func.__name__} 함수가 종료되었습니다.")
return result
return wrapper
# 데코레이터를 사용하는 방법 1: 직접 호출
def greet(name):
return f"안녕하세요, {name}님!"
logged_greet = logger_decorator(greet)
print(logged_greet("홍길동"))
# 데코레이터를 사용하는 방법 2: @ 문법
@logger_decorator
def say_hello(name):
return f"Hello, {name}!"
print(say_hello("John"))
logger_decorator 은 인자로 받은 함수에 더해 해당 함수의 정보를 출력하는 기능을 추가한 데코레이터 함수이다.
wrapper 함수에서는 func.__name__ 을 클로저 기능을 사용하여 사용하고 있다.
@ 문법을 사용하면 데코레이터를 편리하고 가독성 높게 적용할 수 있다.