개발을 하다보면,
if condition == '1':
a = 'abc'
elif condition == '2':
a = 'bcd'
elif condition == '3':
a = 'cde'
else:
a = 'def'
이런 전개를 자주 하는 버릇이 있다.
이때 If를 먼저 검사하고 아니면 Elif, 아니면 그다음 Elif, 다 아니면 Else 형태로 실행하게 되는데
이게 반복문 안에 있을 경우 항상 체크로직을 거치게 된다.
가독성은 논의해볼 수 있으나, 퍼포먼스를 좋게 하기 위해선, 미리 값을 할당해놓고 뽑아서 쓰는 게 좋다.
이런 경우엔 dict에 저장할 수 있다.
dict_master = {'1' : 'abc', '2' : 'bcd', '3' : 'cde'}
a = dict_master.get(condtion, 'def') # 키값이 없으면 'def'를 할당함
1000만번 기준으로 해보니
else 포함 4가지인 경우
if : 0.43928680000000003
dict lookup : 0.3785323
else 포함 6가지인 경우
if : 0.6370448
dict lookup : 0.379486
else 포함 8가지인 경우
if : 0.9782373000000001
dict lookup : 0.3811875
이런 결과가 나왔다.
[하기 이미지는 퍼온 것]
------------------------------------------------------------------------------
C# 베이스인 Uipath에서 하려면 TryGetValue로 쓰면 된다.
(Assign에서는 ref 함수가 지원이 안 돼서 invoke method로 설정해서 해야 한다. Tryparse 같은 함수도 비슷하다.)
이런 식의 패턴을 예상한다.
invoke method
if string.isNullOrWhiteSpace(sTest)
sTest = "기본값"
end if
Try~Catch를 쓸 수도 있는데 If에 비해 퍼포먼스가 항상 안 좋다는 걸 생각하면,
위의 패턴이 최선으로 보인다.
https://rito15.github.io/posts/cs-if-vs-try-performance/
'파이썬' 카테고리의 다른 글
[Python] 데이터 언패킹 (0) | 2022.10.19 |
---|---|
파이썬 프로젝트 진행 (0) | 2022.09.06 |
[Python] 유튜브 검색어에 대한 영상 리스트의 데이터 가져오기 (0) | 2022.08.22 |
[Pandas] Series에서 각 row의 value를 편집해서 필터링 해야 하는 경우 (0) | 2022.08.04 |
[Pandas] np.where 에서 함수를 태워야 될 때 (0) | 2022.07.28 |