퍼포먼스(성능) : 코드를 짜서 실행을 시켰을 때 얼마나 빨리 처리가 되는가
생산성: 똑같은 기능을 하는 프로그램을 얼마나 빨리 작성할 수 있는가
생산성이 좋은 언어들은 퍼포먼스가 떨어지고 퍼포먼스가 좋은 언어는 생산성이 떨어진다.
목적에 맞게, 상황에 맞게 언어를 선택하고 사용하는 방법을 배워야 함
개발하고자 하는 프로젝트의 성능과 개발 기간을 고려해서 언어를 설정
높은 생산성
pip
를 통해 얼마든지 쉽게 설치할 수 있는 써드파티 라이브러리: 개발기간 단축코드의 간결함
빠른 개발 속도
스크립트 언어
스크립트 언어로 실시간으로 코드가 실행
스크립트 언어
: 기존에 이미 존재하는 소프트웨어(애플리케이션)를 제어하기 위한 용도로 쓰이는 언어
import time
start = time.time() # 시작 시간 저장
a = 1
for i in range(100):
a += 1
# 작업 코드
print("time :", time.time() - start) # 결과는 '초' 단위 입니다.
리스트, 문자열, 튜플 등이 있는 경우 순서와 리스트의 값을 함께 반환해주는 기능
my_list = ['a','b','c','d']
for i, value in enumerate(my_list):
print("순번 : ", i, " , 값 : ", value)
for 안에 또 for를 쓰는 것
my_list = ['a','b','c','d']
result_list = []
for i in range(2):
for j in my_list:
result_list.append((i, j))
print(result_list)
리스트 등 순회형 컨테이너 객체로부터 이를 가공한 새로운 리스트를 생성하는 방법
my_list = ['a','b','c','d']
result_list = [(i, j) for i in range(2) for j in my_list]
print(result_list)
이터레이터를 생성해주는 함수.
yield라는 키워드 사용
파이썬에서는 이터레이터만 생성하고 값이 필요한 시점이 되었을 때 값을 만드는 방식을 사용(지연평가: 데이터 생성을 뒤로 미루는 것)
리스트의 이터레이터를 변수에 저장한 뒤 next
메서드를 호출해보면 요소를 차례대로 꺼낼 수 있다.
반복 가능한 객체는 요소를 한 번에 하나씩 가져올 수 있는 객체이고, 이터레이터는 next
메서드를 사용해서 차례대로 값을 꺼낼 수 있는 객체
제너레이터는 yield에 지정한 값이 next
메서드(next 함수)의 반환값으로 나옴
제너레이터는 함수의 끝까지 도달하면 StopIteration 예외가 자동으로 발생
yield: 값을 함수 바깥으로 전달하면서 코드 실행을 함수 바깥에 양보
예외 처리를 위한 방법
예외(exception): 코드를 실행하는 중에 발생한 에러를 뜻
출처: AIFFEL FUNDAMENTAL_ 6. 파이썬 잘하는 척 해보자
Try - Statements(코드) - 에러발생 - except
a = 10
b = 0
try:
#실행 코드
print(a/b)
except:
print('에러가 발생했습니다.')
#에러가 발생했을 때 처리하는 코드
b = b+1
print("값 수정 : ", a/b)
컴퓨터가 작업을 처리하는 속도를 높여주는 방법 중 하나
parallel processing
: 병렬 처리
serial processing
: 순차 처리로 번역
pool = multiprocessing.Pool(processes = n)
: 병렬 처리 시, n개의 프로세스를 사용
pool.map(a, b)
: 병렬화를 시키는 함수로, a 함수에 b의 원소들을 하나씩 넣음
pool.close()
: 일반적으로 병렬화 부분이 끝나면 나옴.
더 이상 pool을 통해서 새로운 작업을 추가하지 않을 때 사용
pool.join()
: 프로세스가 종료될 때까지 대기하도록 지시하는 구문.
병렬처리 작업이 끝날 때까지 기다리도록 함.
import multiprocessing
def count(name):
for i in range(0, 100000000):
a = 1 + 2
print("finish : ",name)
num_list = ['p1','p2', 'p3', 'p4']
if __name__ == '__main__':
pool = multiprocessing.Pool(processes = 4)
pool.map(count, num_list)
pool.close()
pool.join()