대부분의 경우 중간 딕 트는 문제가되지 않습니다. 가독성을 계산합니다. 정말이 상황에서 너무 자주 자신을 찾을 경우에, 당신은 당신의 기능 monkeypatch하기 위해 장식을 사용할 수 같은
In : from functools import wraps
In : def dictgetter(func, *keys):
.....: @wraps(func)
.....: def wrapper(*args, **kwargs):
.....: tmp = func(*args, **kwargs)
.....: return [tmp[key] for key in keys]
.....: return wrapper
In : def func():
....: return dict(one=1, two=2, three=3)
....:
In : func2 = dictgetter(func, 'one', 'three')
In : one, three = func2()
In : one
Out : 1
In : three
Out : 3
또는 무언가를.
물론, 호출 시간에 원하는 필드를 지정할 수 있도록 monkeypatch 할 수도 있지만,이 메커니즘을 감싸는 일반 함수를 원할 것입니다.
이 위 데프 래퍼의 몸에 매우 유사 구현과 같은
one, three = getfromdict(func(), 'one', 'three')
또는 무언가 같이 사용,하지만 당신은 위의 모든 장식을 다시 사용할 수있는 것 :
In : two, three = dictgetter(func, 'two', 'three')()
In : two, three
Out : (2, 3)
을
이것이 실패하면 데모 결과를보십시오 - func() [ 'one']! = 3 – ch3ka
@ ch3ka : fixed; 그것은 필요한 것이 었습니다. –
여전히 일반적인 경우에는 실패합니다. – ch3ka