학습 목표
- 파이썬의 특징을 설명할 수 있음
- 파이썬 프로그램의 실행 과정을 나열할 수 있음
- 파이썬 프로그래밍 환경의 특징을 설명할 수 있음
주요 용어
- 프로그래밍 패러다임
- 프로그래밍을 생성하는 접근 방식
- 라이브러리
- 자주 사용되는 프로그래밍 구성 요소를 미리 작성하여 패키징한 프로그램 모음
- 주피터 노트북
- 오픈소스 웹 기반 대화형 개발 및 실행 환경
강의록
파이썬의 개요
파이썬의 탄생
- 히도 판 로쉼(Guido van Rossum) 1991년 개발
- 네덜란드 암스테르담 대학에서 컴퓨터 전공
- 좋아하는 코미디 ‘Monty Python’s Flying Circus’에서 이름을 따옴
- 크리스마스 주 연구실이 잠겨 할 일이 없어 만든 프로그래밍 언어
- 분산 운영 체제(아메바)의 시스템 관리를 위한 쉘 스크립팅 언어로 개발
- 스크립트
- 명령어를 순차적으로 나열
- 운영 체제가 어떤 순서로 동작해야하는지 명령어를 집합으로 만들어놓은 형태
- 스크립트
- 다중 프로그래밍 패러다임 채용
- 정의
- 프로그램을 생성하는 접근 방식
- 명령형 프로그래밍, 절차적 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍 지원
- 패러다임
- 현실 세계를 어떠한 방식으로 모델링하는 것에 대한 여러 관점들을 규칙화하여 만든 것
- 정의
- 다목적 활용
- 응용 프로그램과 웹, 백엔드, 사물 인터넷(IoT) 분야 뿐만 아니라 교육적인 목적으로 활용
파이썬의 발전 과정
- 1991년 ABC의 후속 프로그래밍 언어로 개발
- 1999년 DARPA에 ‘Computer Programming for Everybody’ 제안
- DARPA
- 미 국방성 연구 기관으로 이곳에서 최초의 인터넷이 탄생
- DARPA
- 2000년 파이썬 2.0 출시
- 커뮤니티를 통한 개발 체계 시작
- 2008년 파이썬 3.0 출시
- 비 하위 호환을 갖는 메이저 업데이트
- 정수 부분에 있는 버전 → 메이저 업데이트
- 소수점 대에 있는 버전 → 마이너 업데이트
- 비 하위 호환을 갖는 메이저 업데이트
파이썬의 인기
- 대형 개발자 커뮤니티 지원
- 직관적이고 가독성이 높은 문법
- 다양한 라이브러리와 프레임워크 제공
- 데이터 과학, 머신러닝, 웹 개발 등에서 활발히 사용됨
Pythonic (파이썬스러움)
- 독립적
- 다양한 플랫폼에서 실행 가능
- 운영 체제를 가리지 않고 모두 실행이 가능해 플랫폼 독립적임
- 오픈 소스
- PEP(파이썬 개선 제안) 기반의 개방형 개발 방식
- 인간적
- 의사 코드(Executable pseudocode) 수준의 문법
- 자연어와 유사한 문법 구조
- 신속성
- 빠른 개발 속도
- 여러 라이브러리와 프레임 워크들이 만들어져있어 빠르게 가져다 프로그래밍 할 수 있음
- 직관적
- 읽고 쓰기 쉬운 코드 스타일
- 생각을 빠르게 코드화 시킬 수 있음
오픈 소스
- 파이썬 관련 개선을 위한 제안(PEP)
- 많은 개발자의 의견을 수용하고 토론하며 발전한 언어
- 새로운 파이썬의 기능, 파이썬 프로세스, 환경에 대해 커뮤니티에 설계 문서나 정보를 제공
- 파이썬 기능의 간결한 기술적 사양과 기능을 위한 근거들을 제공
- 커뮤니티의 의견을 수집, 합의 도출, 반대 의견 청취
- PEP 8(스타일 가이드) 대표적
인간적 & 직관적
- 실행할 수 있는 의사 코드(Executable pseudocode) 수준의 문법
1 2
if 3 in [1, 3, 5, 7]: print("3이 들어있습니다")
1
리스트 [1, 3, 5, 7]에 3이 포함 되어 있으면 "3이 들어있습니다"를 출력하시오
생산성 & 신속성
- C
1 2 3 4 5 6 7 8 9 10 11 12
int i, n; int sum = 0; printf("입력:"); scanf("%d", &n); for(i = 0; i < n; i++) { sum += i; } printf("합은 %d", sum);
- Python
1 2 3 4 5 6 7
n = int(input("입력:")) sum = 0 for i in range(1, n+1): sum += i print("합은" + sum)
대형 개발자 커뮤니티
라이브러리와 프레임워크
주어진 라이브러리들을 빠르게 임포트하여 쉽고 편하게 사용 가능
- Pytorch, TensorFlow
- 딥 러닝을 위한 라이브러리
- astropy, biopython
- 각종 과학 기술 분야에서 특화되어 사용할 수 있음
- matplotlib, Bokeh, pandas
- 어떤 데이터의 결과를 만들어내고 그래프화 할 수 있게 함
- ipython, jupyter
- 편리하게 개발할 수 있는 환경 제공
- flask, django
- 대형 프로젝트 개발 시 특정 순서대로 개발하기 위한 프레임워크 제공
- numpy, Numba, SymPy
- 수치 해석 관련된 여러가지 기능을 내장하고 있는 라이브러리
- Pytorch, TensorFlow
파이썬의 단점
- C나 Java 등으로 작성된 프로그램보다 느린 속도
- 완전한 애플리케이션 단독 개발이 불가능
- 쉘 스크립트 언어 용으로 개발
- 모바일 앱 등 응용 애플리케이션 개발 불가능
- 대안으로 Rust 또는 Go 고려 가능
파이썬 프로그램의 실행
파이썬 실행 환경
- 플랫폼에 독립적이며 인터프리터 식 객체 지향적 동적 타이핑(dynamically typed) 대화형 언어
- 윈도우, 리눅스, 유닉스, 맥OS 등 다양한 운영 체제(플랫폼)에서 별도의 컴파일 없이 실행 가능
- CPython, PyPy, Cython, Jython 등 다양한 인터프리터 환경 사용 가능
- 프로그램을 객체로 모델링
- 변수의 자료형을 지정하지 않음
- 작성한 코드에 대한 수행 결과를 바로 확인하고 디버깅하면서 코드 작성 가능
CPython
- C 언어로 개발된 파이썬 인터프리터
- C 구현 라이브러리와의 연동을 통한 확장에 최적
- 컴파일러의 유형
- 소스 코드를 기계어로 바꾸어주는 컴파일러와 인터프리터
- 셀프 호스팅 컴파일러
- 부트 스트래핑 단계를 통해 자신의 언어로 작성한 컴파일러
- 소스 대 소스 컴파일러
- 타 언어로 작성한 컴파일러
- 오픈소스로 커뮤니티의 기여로 지속적 발전
파이썬 프로그램 실행 과정
파이썬 애플리케이션은 소스 코드 형태로 배포
- CPython이 컴파일 후 바이트 코드(.pyc) 파일 생성
- 파이썬 가상 머신은 바이트 코드를 한 라인씩 실행
- 변경 없이 재 실행 시 바이트 코드로 빠르게 실행
- 파이썬 애플리케이션 → 소스 코드 작성 (.py)
- CPython이 바이트코드(.pyc)로 변환
- 바이트코드를 파이썬 가상 머신(PVM)이 실행
- 실행 결과 출력
파이썬 프로그래밍 환경
IDLE
- 기본으로 포함된 파이썬 통합 개발 환경 (IDE)
- 파이썬과 Tkinter GUI 툴킷으로 개발
- 구문 강조, 코드 자동 완성, 스마트 들여쓰기 등이 포함된 단순한 IDE 지향
- stepping, breakpoint, call stack을 확인할 수 있는 통합 디버거 환경 제공
- 파이썬 공식 홈페이지에서 다운로드 가능
- http://www.python.org
Jupyter Notebook
- 오픈 소스 기반의 웹 플랫폼
- 파이썬을 비롯한 40여 개 이상의 프로그래밍 언어 지원
- 전통적인 소스코드-컴파일-실행 방식에서 벗어나 웹 기반 대화형 개발 및 실행 환경
- 문서화하여 다른 사람과 공유하기가 편리
- 마크 다운(Markdown)을 이용하여 코드 관련 타이틀, 설명 등 작성 가능
Google Colab
- 2017년 과학 연구와 교육을 목적으로 개발
클라우드 기반 주피터 노트북 개발 환경
- 주피터 노트북 + 구글 드라이브를 결합한 서비스
- 데이터 분석 및 딥러닝 연산 등 고성능 컴퓨팅 리소스 활용 가능
연습 문제
다음 중 파이썬의 장점이라고 할 수 없는 것은?
a. 빠른 실행 속도
- 파이썬의 장점
- 뛰어난 생산성
- 대형 개발자 커뮤니티
- 직관적 문법
- 파이썬의 장점
파이썬 프로그램이 플랫폼 독립적으로 실행될 수 있도록 (가)와 같이 파이썬 인터프리터가 동작하는 과정에서 중간 언어로 만드는 것은?
a. 바이트 코드
파이썬 프로그래밍 환경 중 오픈 소스이며 문서화가 쉽고 전통적인 소스코드-컴파일-실행 방식에서 벗어나 웹 기반 대화형 개발 및 실행 환경을 제공하는 것은?
a. 주피터 노트북
학습 정리
- 파이썬은 히도 판로쉼(Guido van Rossum)에 의해 1991년 분산 운영 체제(아메바)의 시스템 관리를 위한 쉘 스크립팅 언어로 개발됨
- 파이썬은 명령형 프로그래밍, 절차적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍 패러다임을 지원함
- 파이썬은 교육적인 목적뿐만 아니라 응용 프로그램과 웹, 백 엔드 개발, 사물 인터넷 등 다양한 분야에 활용됨
- 파이썬은 파이썬 확장 제안(PEP)를 통해 새로운 파이썬의 기능, 파이썬 프로세스, 환경에 대해 커뮤니티에 설계 문서나 정보를 제공하는 등 많은 개발자의 의견을 수용하고 토론하며 발전한 언어임
- 파이썬은 플랫폼에 독립적이며 인터프리터식 객체 지향적, 동적 타이핑(dynamically typed) 대화형 언어임
- 파이썬 소스 코드는 파이썬 인터프리팅 과정에서 CPython에 의해 바이트 코드로 변환되고, 파이썬 가상 머신(PVM)이 한 라인씩 기계어 코드로 변환하여 실행됨
- 파이썬 개발 환경에는 구문 강조, 자동 완성, 스마트 들여 쓰기 등의 기능을 지원하는 IDLE, 주피터 노트북, 구글 코랩 등이 있음
- 구글 코랩(Colab)은 주피터 노트북과 구글 드라이브를 결합한 서비스로 데이터 분석 및 딥러닝 연산 등 고성능 컴퓨팅 리소스 활용 가능함