학습목표
-
파이썬에 대해서 알아보자.
-
코드 재사용에 대해서 알아보자.
-
프로그래밍 패러다임에 대해서 알아보자.
-
파이썬 코드를 이쁘게 해보자.
후기
학습내용
Fundamental 8. 파이썬 잘 하는척 해보자
1. 성능 및 한계
- 퍼포먼스

- 생산성
- 똑같은 기능을 하는 프로그램을 얼마나 빨리 작성할 수 있는가?
- 퍼포먼스 vs 생산성
- 높은 생산성
- 코드의 간결함
- 빠른 개발 속도

- 스크립트 언어(인터프리터 언어)
- 컴파일 언어
-> 실행 전 소스 코드를 컴파일하여 기계어로 변환 후 해당 파일을 실행
->이미 기계어로 변환된 것을 실행하므로 비교적 빠름
컴파일 시점에 소스 코드의 오류를 잡기 쉬움
->같은 소스 코드도 다른 환경(PC, mobile 등)에서 실행하려면 다시 컴파일(기계어로 변환) 해야함
- 스크립트 언어(인터프리터 언어)
-> 코드를 작성함과 동시에 인터프리터가 기계어로 번역하고 실행함
-> 코드 번역 과정이 있어 비교적 느림
-> 주 사용 목적이 뚜렷하게 개발되어 사용하기 쉬운 편
-> 명령줄로 코드를 즉시 실행할 수 있음
3. For문
- enumerate()
- 리스트, 문자열 튜플 등의 순서와 값을 함께 반환
my_list = ['a','b','c','d']
for i, value in enumerate(my_list):
print("순번 : ", i, " , 값 : ", value)
>>> 순번 : 0 , 값 : a
순번 : 1 , 값 : b
순번 : 2 , 값 : c
순번 : 3 , 값 : d
- 리스트 컴프리헨션(list comprehension)
<이중포문>
my_list = ['a','b','c','d']
result_list = []
for i in range(2):
for j in my_list:
result_list.append((i, j))
<리스트 컴프리헨션>
my_list = ['a','b','c','d']
result_list = [(i, j) for i in range(2) for j in my_list]
- 제너레이터(Generator) 이해 안됩니다...ㅠㅠ
4. Try- Except 예외 처리하기

try:
except:
5. Multiprocessing
-
실행 시간 측정
- time 모듈을 import 해야함
- time.time() 함수는 현재 시간을 반환
- 측정하고자 하는 부분의 시작 부분에 현재 시간을 저장하는 변수를 선언하고, 마지막 부분에 현재 시간을 다시 측정하여 시작 시간이 저장된 변수의 값을 빼주면 실행 시간이 측정됨
-
Multiprocessing(멀티프로세싱)
-
컴퓨터가 작업을 처리하는 속도를 높여주는 방법 중 하나
-
기존의 순차 처리 방식이 아닌, 다중 cpu를 이용한 병렬 처리 방식
-
multiprocessing 모듈을 import해야함
-
pool = multiprocessing.Pool(processes = 4) : 병렬 처리 시, 4개의 프로세스를 사용하도록 합니다. CPU 코어의 개수만큼 입력해 주면 최대의 효과를 볼 수 있습니다.
-
pool.map(count, num_list) : 병렬화를 시키는 함수로, count 함수에 num_list의 원소들을 하나씩 넣어 놓습니다. 여기서 num_list의 원소는 4개이므로 4개의 count 함수에 각각 하나씩 원소가 들어가게 됩니다.
즉, count('p1'), count('p2'), count('p3'), count('p4')가 만들어집니다.
-
pool.close() : 일반적으로 병렬화 부분이 끝나면 나옵니다. 더 이상 pool을 통해서 새로운 작업을 추가하지 않을 때 사용합니다.
-
pool.join() : 프로세스가 종료될 때까지 대기하도록 지시하는 구문으로써 병렬처리 작업이 끝날 때까지 기다리도록 합니다.
- 작업 완료 후 메모리가 계속 쓰이는 것을 막기 위함
-
왜 프로세스를 4개 쓸 때보다 2개 쓸 때가 더 빠르지...???
6. 함수 사용하기
- 반복되는 작업을 효율적으로 하기위해 하나의 함수로 정의해두고 호출하여 사용
- 코드의 효율성과 재사용성을 높여줌
- 코드의 가독성 또한 좋아짐
- 'def 함수이름(입력인자):' 형태로 이루어지며, 이 다음줄 부터 들여쓰기를 통해 구분됨
7. 함수 사용 팁
- 이름만 작성 후 나중에 내부를 구현하기 위한 빈 함수를 생성할 때는 내부에 pass를 입력한다
-> pass: 아무것도 하지않는 명령어
- 함수에 함수 사용
- 반환 값이 있는 함수(a)를 다른 함수(b)의 입력 인자로 사용
- 실행 시, 인자에 있는 함수의 반환 값을 먼저 확인하기 위해 a함수가 실행되고, 반환된 값이 b함수의 인자로 입력된다.
- 함수 안의 함수 & 2개 이상의 return
- 리스트로 반환
-> 울타리 함수 안에 각각 반환 값을 가지는 내부 함수들을 구현한 후, 각 내부 함수들의 반환 값들을 리스트로 저장하여 울타리 함수의 반환 값으로 지정해주면 반환 값이 여러개인 효과를 줌
- 여러 변수로 반환
-> 반환 값을 하나가 아닌 두 개 이상으로 지정해도 된다.
8. 람다 표현식
-
런타임에 생성해서 사용할 수 있는 익명 함수
(예시)
print((lambda x, y: x + y)(10, 20))
>>> 30
- x, y는 입력값을 의미
- x + y 부분은 return 부분과 같음(: 이후에 작성)
- (10, 20)은 실제로 x와 y에 값을 넣어준다는 의미
- 보통 함수 안의 함수를 간다히 만들 때 사용
-
map()
- 입력받은 자료형의 각 요소가 함수에 의해 수행된 결과를 묶어서 map iterator 객체로 출력하는 역할
- 형태: map(함수, 반복 가능한 객체)
(ex)
result = list(map(lambda i: i * 2, [1, 2, 3]))
print(result)
>>> [2, 4, 6]
9. 클래스, 모듈, 패키지
- 클래스: 비슷한 역할을 하는 함수들의 집합
- 모듈: 함수, 변수, 클래스를 모아 놓은 파일
- import하여 사용가능
- 모듈 이름을 입력하고 .를 입력한 후 원하는 함수 호출
- 'import 모듈이름 as 단축이름'의 형태를 통해 긴 모듈이름을 짧게 줄여서 사용할 수 있음
- 패키지: 라이브러리라고도 부름
- 파이썬에서 패키지는 여러 모듈을 하나로 모아둔 폴더
- 패키지 설치
10. 패러다임과 함수형 프로그래밍
11. 파이써닉하게 코드를 짜보자
- 파이썬의 장점은 뛰어난 가독성
- pep8 이라는 코드 스타일 가이드를 따름
- Whitespace
- 한 줄의 코드 길이가 79자 이하여야 한다.
- 함수와 클래스는 다른 코드와 빈 줄 두 개로 구분
- 클래스에서 함수는 빈 줄 하나로 구분
- 변수 할당 앞뒤에 스페이스를 하나만 사용
- 리스트 인덱스, 함수 호출에는 스페이스를 사용하지 않음
- 쉼표(,), 쌍점(:), 쌍반점(;) 앞에서는 스페이스를 사용하지 않음
- 주석
- 코드의 내용과 일치하지 않거나 불필요한 주석은 피해야 함
- 이름 규칙
- 변수명 앞에 _(밑줄)이 붙으면 함수 등의 내부에서만 사용되는 변수를 일컫는다.
- 변수명 뒤에 _(밑줄)이 붙으면 라이브러리 혹은 파이썬 기본 키워드와의 충돌을 피하고 싶을 때 사용
- 소문자 L, 대문자 O, 대문자 I를 가급적 사용하지 않는다
-> 특정 폰트에서 가독성이 매우 안좋음
- 모듈(Module) 명은 짧은 소문자로 구성되며, 필요하다면 밑줄로 나눔
- 클래스 명은 파스칼 케이스(PascalCase) 컨벤션으로 작성
- 함수명은 소문자로 구성하되 필요하면 밑줄로 나눔
- 상수(Constant)는 모듈 단위에서만 정의하고 모든 단어는 대문자이며, 필요하다면 밑줄로 나눔
- 네이밍 컨벤션(Naming convention)
- snake_case
- 모든 공백을 "_"로 바꾸고 모든 단어는 소문자입니다.
- 파이썬에서는 함수, 변수 등을 명명할 때 사용합니다.
- ex) this_snake_case
- PascalCase
- 모든 단어가 대문자로 시작합니다.
- UpperCamelCase, CapWords라고 불리기도 합니다.
- 파이썬에서는 클래스를 명명할 때 사용합니다.
- ex) ThisPascalCase
- camelCase
- 처음은 소문자로 시작하고 이후의 모든 단어의 첫 글자는 대문자로 합니다.
- lowerCamelCase라고 불리기도 합니다.
- 파이썬에서는 거의 사용하지 않습니다 (Java 등에서 사용)
- ex) thisCamelCase