dict.get()
방법 은 무엇입니까 ?
이미 언급했듯이이 get
방법에는 결 측값을 나타내는 추가 매개 변수가 포함되어 있습니다. 설명서에서
get(key[, default])
키가 사전에 있으면 키의 값을 리턴하고 그렇지 않으면 기본값을 리턴하십시오. 기본값이 지정되지 않은 경우 기본값은 없음으로 설정되므로이 메소드는 절대로을 발생시키지 않습니다 KeyError
.
예를 들어
>>> d = {1:2,2:3}
>>> d[1]
2
>>> d.get(1)
2
>>> d.get(3)
>>> repr(d.get(3))
'None'
>>> d.get(3,1)
1
어디서나 속도 개선이 있습니까?
로 언급 여기 ,
세 가지 방법 모두 단어 목록의 속성과 거의 독립적으로 비슷한 성능을 나타냅니다 (약 10 % 이내).
이전 get
에는 속도가 상당히 느 렸지만 이제는 기본값을 반환하는 추가 이점과 함께 속도가 거의 비슷합니다. 그러나 모든 쿼리를 지우려면 상당히 큰 목록을 테스트 할 수 있습니다 (테스트에는 유효한 모든 키만 검색하는 것이 포함됩니다)
def getway(d):
for i in range(100):
s = d.get(i)
def lookup(d):
for i in range(100):
s = d[i]
이제이 두 기능을 사용하여 타이밍 timeit
>>> import timeit
>>> print(timeit.timeit("getway({i:i for i in range(100)})","from __main__ import getway"))
20.2124660015
>>> print(timeit.timeit("lookup({i:i for i in range(100)})","from __main__ import lookup"))
16.16223979
우리가 볼 수 있듯이 함수 조회가 없기 때문에 조회가 get보다 빠릅니다. 이것은 통해 볼 수 있습니다dis
>>> def lookup(d,val):
... return d[val]
...
>>> def getway(d,val):
... return d.get(val)
...
>>> dis.dis(getway)
2 0 LOAD_FAST 0 (d)
3 LOAD_ATTR 0 (get)
6 LOAD_FAST 1 (val)
9 CALL_FUNCTION 1
12 RETURN_VALUE
>>> dis.dis(lookup)
2 0 LOAD_FAST 0 (d)
3 LOAD_FAST 1 (val)
6 BINARY_SUBSCR
7 RETURN_VALUE
어디에서 유용할까요?
사전을 찾을 때마다 기본값을 제공 할 때마다 유용합니다. 이것은 감소
if key in dic:
val = dic[key]
else:
val = def_val
한 줄로 val = dic.get(key,def_val)
유용하지 않은 곳은 어디입니까?
KeyError
특정 키를 사용할 수 없다는 내용 을 반환 할 때마다 기본값을 반환하면 특정 기본값이 핵심 일 수도 있습니다.
에 get
같은 기능 을 가질 수 dict['key']
있습니까?
예! __missing__
dict 서브 클래스에서 를 구현해야합니다 .
샘플 프로그램은
class MyDict(dict):
def __missing__(self, key):
return None
작은 데모는
>>> my_d = MyDict({1:2,2:3})
>>> my_d[1]
2
>>> my_d[3]
>>> repr(my_d[3])
'None'
dictionary["foo"]
그리고dictionary.get("foo")
하지만, 다르게 동작합니다.