dict 사용시, default value 설정하는 방법은 2개가 있다.
1. dict의 setdefault 사용
2. collections의 defaultdict 사용
파일을 열고 열린 파일 handle을 연결시키는 dict를 사용한다고 할 때,
case 1) dict의 setdefault 사용
try:
handle = pictures.setdefault(path, open(path, 'a+b'))
except OSError:
print(f"cannot open path: {path}")
raise
else:
handle.seek(0)
image_data = handle.read()
1. open 함수가 항상 호출됨 --> open 함수의 error 처리 해줘야 함
2. setdefault의 예외 처리도 필요
case 2) collections의 defaultdict 사용
from collections import defaultdict
def open_picture(path):
try:
return open(path, 'a+b')
except OSError:
print(f"cannot open path: {path}")
raise
pictures = defaultdict(open_picture)
handle = pictures[path]
handle.seek(0)
image_data = handle.read()
>> type error 발생함
1. defaultdict의 default로 전달된 함수 open_picture는 인자를 받을 수 없음 (처리하려는 키 값을 몰라)
__mising__ method 이용
class Pictures(dict):
def __missing__(self, key):
value = open_picture(key)
self[key] = value
return value
pictures = Pictures()
handle = pictures[path]
handle.seek(0)
image_data = handle.read()
pictures에 path의 key 값이 존재하지않으면, __missing__ 함수가 호출되고 그 값이 넘어감
--> default key를 만들 때 키의 구체적인 값을 분명히 해야하는 상황이면 __missing__ method 쓰자
'Language > Python' 카테고리의 다른 글
[Python] assignment expression(walrus operator) (0) | 2021.01.24 |
---|