Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 코드에 대한 최적화 팁?

<시간/>

우리 모두는 파이썬이 다른 호환 언어만큼 빠르거나 효율적이지 않다는 것을 알고 있습니다. 그러나 파이썬 코드가 훨씬 더 큰 작업 부하를 처리할 수 있다는 것을 보여주는 많은 대기업이 있으며 이는 그렇게 느리지 않다는 것을 보여줍니다. 이 섹션에서는 올바른 파이썬 프로그램이 훨씬 더 빠르고 효율적으로 실행되도록 염두에 두어야 할 몇 가지 팁을 볼 것입니다.

팁 1:내장 기능 사용

파이썬으로 효율적인 코드를 작성할 수 있지만 내장 함수(C로 작성된)를 이기는 것은 매우 어렵습니다. 아래 이미지는 파이썬 내장 함수 목록을 보여줍니다.

Python 코드에 대한 최적화 팁?

팁 2:파이썬 다중 할당을 사용하여 변수 교환

>>> #대신>>> x, y =y, x>>> # 이것을 사용하세요 - 훨씬 빠릅니다.>>> temp =x>>> x =y>>> y =temp 

팁 3:전역 변수를 피하고 가능하면 지역 변수를 사용하세요

Python은 전역 변수를 검색하는 것보다 지역 변수를 검색할 때 더 빠릅니다. 즉, 가능하면 전역 변수를 피하십시오.

팁 4:가능하면 "in"을 사용하세요

일반적으로 멤버십을 확인하려면 "in" 키워드를 사용합니다. 깨끗하고 빠릅니다.

for key in sequence:print ("Hello ", key)

팁 5:무한 루프에 "while 1" 사용

프로그램에서 무한 루프를 실행해야 하는 경우가 있습니다(예:수신 소켓). "while True"는 동일한 작업을 수행하지만 "while 1"은 단일 점프 작업입니다.

>>> while 1:# 무언가를 하고, while 1로 더 빠르게>>> while True:#무엇을 하고, 동일한 작업을 수행하지만 이전 작업보다 느림

팁 6:목록 이해력 사용

파이썬 2.0의 목록 이해를 사용하여 많은 "for" 및 "while" 블록을 대체할 수 있습니다. 목록 이해는 파이썬 인터프리터가 루핑 중에 예측 가능한 패턴을 발견하도록 최적화되어 있기 때문에 훨씬 빠릅니다. 더 읽기 쉽고 대부분의 경우 계산을 위해 하나의 추가 변수를 저장합니다.

예를 들어 한 줄에서 1에서 25 사이의 짝수를 찾으려면:

>>> #목록 이해력 사용 - 좋은 방법>>> print([i for i in range (25) if i%2 ==0])[0, 2, 4, 6, 8, 10, 12 , 14, 16, 18, 20, 22, 24]>>> # 다른 방법 - 그다지 효율적이지 않음 wayi =0evens =[]while i<25:if i%2 ==0:evens.append(i) i + =1인쇄(짝수)[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24]

팁 7:요청 시 가치를 얻기 위해 파이썬 생성기를 사용

파이썬 생성기를 사용하면 메모리를 절약하고 성능을 향상시킬 수 있습니다. 비디오를 스트리밍하는 경우 전체 스트림이 아닌 바이트 청크를 보낼 수 있습니다.

>>> chunkBytes =(1000 * i for i in range(1000))>>> next(chunkBytes)0>>> next(chunkBytes)1000>>> next(chunkBytes)2000>>> next(chunkBytes )3000>>>

팁 8:itertools 모듈 사용

itertools 모듈은 반복 및 조합에 매우 유용하고 효율적입니다.

몇 줄의 파이썬 코드로 목록 [1, 2, 3, 4, 5]에 대한 모든 순열을 생성하려면

>>> itertools 가져오기>>> iter1 =itertools.permutations([1, 2, 3,4])>>> list(iter1)[(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2), (2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1), (3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1), (4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)]

팁 9:목록을 정렬된 순서로 유지하기 위한 bisect 모듈 사용

무료 바이너리 검색 구현이며 정렬된 시퀀스를 위한 빠른 삽입 도구입니다.

>>> bisect 가져오기>>> bisect.insort(목록, 요소)

목록에 요소를 삽입했으며 이제 컨테이너를 정렬된 상태로 유지하기 위해 sort()를 다시 호출할 필요가 없습니다. 이는 긴 시퀀스에서 매우 비용이 많이 들 수 있습니다.

팁 10:사전 사용 및 회원 자격 테스트 설정

사전과 집합은 해시 테이블을 사용하여 구현되기 때문에 요소가 사전 또는 집합에 있는지 확인하는 것은 파이썬에서 매우 빠릅니다. 때때로 조회는 O(1)만큼 빠릅니다.

>>> lst =['a', 'ab', 'abc'] #Slow - list로 멤버십 확인>>> 'abc' in lstTrue>>> mySet =set(['a', 'ab ', 'abc'])# 빠른 - mySetTrue에서 집합 또는 사전>>> 'abc'로 멤버십 확인

팁 11:python 데코레이터로 결과 캐시

파이썬 데코레이터 기호는 "@"입니다. python 데코레이터는 추적, 잠금 또는 로깅에 사용할 수 있을 뿐만 아니라 나중에 필요한 결과(암기)를 기억할 수 있도록 python 함수를 장식하는 데 사용할 수 있습니다.

>>> from functools import wraps>>> def memo(f):cache ={} @wraps(f) def wrap(*arg):arg가 캐시에 없는 경우:cache['arg'] =f( *arg) 캐시 반환['arg'] 반환 랩

그리고 이 데코레이터를 피보나치 함수에 사용할 수 있습니다.

>>> @memodef fib(i):i<2:1 반환 fib(i-1) + fib(i-2)

기본 아이디어는 계산한 각 피보나치 항을 기억하도록 함수를 향상(장식)하는 것입니다. 캐시에 있으면 다시 계산할 필요가 없습니다.