dictionary의 값을 한번 조회하고 그 이후에 필요없다면 pop method를 사용하자.
(자꾸 get이나 dict[key]만 사용하려고함)
element가 sequence에 존재하는지를 자주 체크한다면
list보다는 set을 사용하자.
list는 O(n), set은 O(1)(open hashing 방식이므로)
메모리에 크게 들고 있지 않아도 된다면, generator를 쓸 생각을 하자.
이는 단순히 메모리 절약차원 뿐 아니라, 실제 속도도 더 높을 수가 있다.
순차적으로 sequence내 원소를 합하는 경우,
단순 큰 list였다면 메모리에 builing하느라 시간을 잡아먹기때문
Global variable을 Local ones로 바꿀 수 있다면 바꿔라
이는 variable search 순서에서 오는 속도높이는 방법인데
local에서 variable을 search할 때,
local->global->built-in namespace 순서로 찾기 때문이다.
Class property(예를 들면 self._value)를 자주 access한다면
마찬가지로 local variable(class내의 function에서 자주 접근한다면)로 바꿔라.
.function을 자주 쓸 것이면, function을 assign해서 쓰자.
즉, list.append()을 자주 쓸 것이면
appender = list.append라 두고 appender를 쓰자.
이는, function call할 때면 __getattribute__()나 __getattr__()을 호출하게되는데 이 time cost를 줄일 수 있다.
많은 string을 여러번 +연산을 할 때에는 join을 사용하자.
'a' + 'b'을 한다고하면 memory space 요청을 1번 하게 되고 그 때 a와 b를 copy하여 박는다.
'a' + 'b' + 'c'는 memory space요청을 2번하게 된다.
따라서 n개의 string을 +하면 n-1개의 요청을 하게된다.
이 때, join을 쓰면, 전체 필요 memory space를 계산하여 1번만 메모리 요청을 한다.
Multiple conditions에서 condition의 위치는
-if Condition1 and Condition2 에는 1과 2중 False가 자주 뜰 것을 Condition1에 할당
-if Condition1 or Condition2에는 1과 2중 True가 자주 뜰 것을 Condition1에 할당
(short-circuit evaluation, AND 혹은 OR 연산에 있어서 First condition에 의하여 return이 확정되면, 이후 condition은 연산을 실행조차 하지 않는 것을 가리킴)
While문보다는 Foor문을 쓰자.
이는 While문에서 i
참고자료:
towardsdatascience.com/10-techniques-to-speed-up-python-runtime-95e213e925dc
'CS' 카테고리의 다른 글
[Python]Iterable VS Iterator (feat Generator) 정의에서 대조까지 (0) | 2020.11.02 |
---|---|
(미완)소프트웨어 성능 측정 metric의 종류 (0) | 2020.11.01 |
[Python]List comprehension에서 if else 쓰기 (0) | 2020.10.30 |
(미완)Faiss, Facebook AI Similarity Search (0) | 2020.10.29 |
파이썬에서 원소 체크를 자주한다면 list말고 set이나 dictionary를 쓰자. (0) | 2020.10.29 |