About Python
From Biocourse
What's Python?
1. Python (파이썬)이란?
1990년 Amsterdam의 Guido van Rossum에 의해 개발된 인터프리터 언어이다. 이 생소한 이름은 Guido가 좋아한 'Monty Python's Flying Circus'라는 영국 BBC의 어린이들을 위한 TV 코메디 쇼에서 인용되었다. Python 언어의 저자 Guido는 이 쇼의 팬이다.
Python은 범용 프로그래밍 언어이다. Python은 많은 분리된 소프트웨어 콤포넌트들을 아주 쉽고 유연한 방법으로 연결하는 접착제 언어라고도 할 수 있다. 또는, 고수준의 Python 제어 모듈들이 다른 언어에 영향을 준 서브루틴 라이브러리에 의해 구현된 저수준의 연산들을 인도해가는 길잡이 언어라고도 이야기 할 수 있다.
Python은 대화적이고(interactive), 인터프리팅(interpreted)되는 객체 지향(object-oriented) 프로그래밍 언어이다. 때때로, Tcl, Perl, Schema 또는 Java와 비교된다.
Python은 매운 간단한 문법을 가지면서도 강력하다. Python은 모듈, 클래스, 예외 그리고 매우 고수준의 동적인 데이터 형과 동적 형변환을 지원하다. 다양한 윈도우 시스템들(X11, Motif, Tk, Mac, MFC:MS-Windows)을 비롯한 많은 시스템콜과 라이브러리를 위한 인터페이스가 있다. C나 C++를 이용하여 쉽게 새로운 모듈을 작성할 수 있다. Python은 프로그램 가능한 인터페이스를 사용하는 응용을 위한 확장 언어로서도 사용가능하다.
Python은 많은 플렛폼에서 동작한다: 많은 버전의 UNIX, Windows, DOS, OS/2, Mac, Amiga... 여기 사용하는 시스템이 기술되지 않아도 C 컴파일러만 있으면 동작될 것이다.
Python은 배우기 쉽고 사용하기 쉽다. (정말 그렇다. 다른 언어와 같이 사용하기 쉽다고 처음에 유인하고는, 나중에 혼란스럽고 배우기 까다로운 부분을 드러내지 않는다.) 그래서 발전된 어플리케이션의 순진한 사용자들에게 인터페이스를 제공할 수 있고, 첫 프로그래밍 언어로서 기여할 수도 있다.
프로그래머가 Python을 사랑하는 이유는 많은 경우, 그 증가되는 생산성에 있다. 컴파일하지 않으므로 편집-테스트-디버깅 사이클이 믿을 수 없을 만큼 빠르다. 한번 작성한 모듈은 다음 코드의 작성을 위해 생산적으로 사용된다.
Python은 (정규식 매칭을 포함한) 완벽한 문자열 연산 집합을 가지고 있고, 끔찍한 메모리 관리로부터 사용자를 해방시킨다. 이러 저러한 특징들이 Python을 프로토타입 개발과 다른 특별한 프로그래밍 과제에 이상적인 언어로 만든다.
Python은 또한 컴파일시의 오류검사 기능이 없어도 (왜나햐면 컴파일러 언어가 아니므로) 큰 프로그램을 쓸 수 있도록 해준다: 프로그램은 다수의 모듈로부터 만들어 질 수 있고, 각 모듈은 독립된 변수 영역(name space)를 가지며, 켑슐화를 지원하도록 클래스를 사용할 수 있다. 예외처리는 에러 체킹으로 코드를 혼란스럽게 만들지 않고도 필요한 부분의 에러를 감지하도록 한다.
많은 수의 확장 모듈이 Python을 위해 개발되었다. 어떤 Python 프로그램에서도 사용가능하도록 표준 라이브러리 툴로서 개발된 것도 있으며 (예: 수학 라이브러리, 정규식 표현등), 특별한 플랫폼이나 환경(예:UNIX, IP 네트워킹, X11등)에 사용하도록 혹은 응용에 맞도록 (예:이미지, 사운드 처리) 개발된 모듈도 있다.
Python은 또한 자기 자신의 코드를 볼 수 있다. 따라서, 디버거나 프로화일러(profiler)를 Python 자신으로 기술된다. 또한, 목적 코드를 바이트의 열로 변환하거나 그 반대의 변환을 하여, 다양한 분산 목적 모델 뿐 아니라 목적 코드 일관성을 유지하는데 사용된다.
2. Python의 특징
Python의 특성(qualitative properties)을 다음에 보인다.
쉽다(Easy) :
- Python의 간단한 문법과 명료하고 깔끔한 구문은 프로그래머나 비-프로그래머나 배우기 쉽고, 읽기 쉽고 사용하기 쉽다. 경험있는 프로그래머들은 하루만에 Python을 활용할 수 있을 것이다. 초보자들은 하루하고도 반만 더 투자하라(^^;). Python의 기본적인 문법은 algol/C/Pascal 프로그래밍 언어를 극적으로 단순화 한 것 같이 보인다. 따라서 일반적인 수학적인 기호나 다른 프로그래밍 언어에 약간의 경험이 있으면 쉽게 배울 수 있다. </dd>
강력하다(Powerful) :
- 거의 대부분의 계산 수식은 간략하고 직접적으로 표현된다. '쉬운' 장점에도 불구하고 Python은 초보자만을 위한 장난감 언어가 아니다. Python은 다음과 같은 강력한 특징을 갖는다. </dd>
- 함수는 일급이며 기타 다른 것도 일급이다: 함수, 메쏘드(method), 모듈, 클래스 그리고 다른 요소들이 함수의 인수로 전달될 수 있고 자료구조에 저장될 수 있다.
- 다중 상속과 지연 바인딩(late binding) 기능을 갖는 객체 지향성: Python은 객체 지향 클래스 겨층구조를 생성하며, name.attribute 형식으로 참조되는 객체는 동적 이름 영역(name space)를 통하여 런타임시에 결정된다.
- 객체 지향과 명명된 예외처리(named exception handling): 에러나 다른 예외조건은 try..except 문으로 잡을 수 있고 try..finally를 이용하여 최종 행동을 기술할 수 있다. 이 기능은 정상적인 프로그램의 흐름을 중단시키는 예외조건을 기술하는 코드를 최대로 단순화한다. 예외처리는 상속될 수 있다.
- 동적 호출 열(dynamic calling sequence): Python의 호출 가능한 객체들은 선택적인 인수(optional argument), 키워드 인수나 무제한 적인 수의 인수를 받아들일 수 있다. 이 특징들은 간단한 선언으로 매우 포괄적(very generic)이고 설정이 매우 유연한(highly configurable) 연산을 사용할 수 있게 한다. 유능한 프로그래머들은 미묘한 아이디어가 일반적으로 짧고 깔끔한 코드로 표현됨을 알게될 것이다. Python으로 크고 복잡한 프로그램들을 구현해보면 기대했던 것 보다 훨씬 빨리 작고 간결한 구조를 갖고 작업을 마치게 될 것이다.
확장가능성과 유영성(Extensible and Filexible) :
- Python은 다른 소프트웨어 시스템과 인터페이스 되도록 쉽게 확장된다. 또한 Python이 다른 프로그램의 부분으로 동작할 수도 있다. 더욱이 Python은 언어 처리 영역에서는 극히 유연하다. </dd>
- </dd>
Python의 기술적인 특징은 다음과 같다.
인터프리터 언어(Interpreted) :
- Python은 바이트 컴파일을 지원하는 동적으로 이터프리팅되는 언어이다. Python 프로그램은 Python 대화모드에서 시험되면서 작성될 수 있다. Python 바이트 코드는 기계에 독립적이어서 다른 하드웨어나 소프트웨어 플랫폼에서 재 컴파일없이 수행된다. (Java와 같이) 예를 들면, 발전된 네트워크 응용 프로그램이 있다면 원격 컴퓨터에서 바이트코드를 가져다가 동적을 실행할 수 있다. </dd>
객체 지향(Object Oriented) :
- Python은 객체 지향 클래스 구조를 다중 상속과 지연 결합(late binding) 기능으로 지원한다. Python은 진정한 의미의 핵(core)을 향한 객체 지향이다. numerical Python 확장 모듈은 숫자형으로 임의의 차원의 매열을 지원한다. MESS 확장 모듈은 Python의 대체 객체 모델을 정의한다. ni.py는 계층적인 모듈 구조를 정의한다. 이들 선택적인 모듈들은 Python 핵의 기본 연산에 대응되는 연산도 함께 제공한다. </dd>
동적(Dynamic) :
- Python은 동적인 형과(dynamic typing) 이름의 동적인 해결(dynamic resolution of names)을 사용한다. 예를 들면, output.write(data)는 data 문자열 객체를 output 파일 객체로 출력할 수도, 임의의 data객체를 Python으로 구현된 output 객체에 넣을 수도, 또는 data와 output의 연결에 따라서는 다른 실행 시간에 둘 다를 수행할 수도 있다. 따라서, input에서 읽어서 읽은 데이터(data)를 변환(transform)해서 output에 쓰는 Python 함수는 </dd>
- </dd>
- def send_transformed(input, transform, output): </dd>
- while 1: </dd>
- data = input.read() </dd>
- if not data: return </dd>
- output.write( transform(data) ) </dd>
- </dd>
- input이나 ouput 객체가 파일인지 다른 자료구조인지 또한 read, write, transform 연산이 무엇인지 알 필요가 없다. 이러한 유연성은 send_transformed() 와 같은 함수가 여러 가지 다양한 상황에서 이용될 수 있게 해준다. 이러한 동적 형과 동적 이름 해결은 프로그램의 크기를 크게 줄여주며 테스트를 쉽게한다. </dd>
- </dd>
직교적인 구조(Orthogonally structured) :
- Python은 작은 수의 강력한 구성으로 이루어졌다. 언어의 단순성이 다른 프로그래머의 코드를 쉽게 이해하도록 해준다. Python의 단순성은 새로운 Python 프로그래머가 이 언어를 빠르게 이해해서 생산적인 코드를 작성할 수 있게 해준다. 이러한 단순성이 표현의 능력을 제한하는 것은 아니다. 다른 언어에서는 직접적으로 표현하기 힘드나 Python으로는 쉽게 되는 몇 가지 특징을 가지고 있다. </dd>
확장가능하다(Extendible) :
- Python은 외부의 프로그래밍 라이브러리로 쉽게 확장된다. 컴파인된 확장 모듈을 이용하면 새로운 데이터 타잎으로도 확장한다. 새로운 컴파일된 요소를 추가하는 것인 쉬운 일이다. 대부분의 플렛폼에서 새 컴파일된 요소가 인터프리터 안으로 동적으로 (요구에 의해서) 적재될 수 있다. </dd>
숨길수 있다(Embeddable) :
- 다른 프로그램에게 Python은 매운 단순한 응용 프로그램 인터페이스(API)처럼 보인다. Python은 응용 프로그램에 숨어서 수행될 수 있다. </dd>
안정적이고, 시험되었고, 상위 호환적이다(Stable, tested, and upwardly compatible):
- Python은 언제나 상위 호환적이다. 새 버전의 인터프리터는 이전 버전의 프로그램을 잘 수행한다. </dd>
- </dd>
이식성이 좋고 외부 소프트웨어에 친근하다(Portable and friendly to external software):
- Python은 Posix 인터페이스를 사용하는 표준 C로 기술되었으므로 Posix를 지원하는 플렛폼은 무리없이 지원한다. </dd>
소스 형태로 무료이고 자유스럽게 재 분배할 수 있다(Freely available with unrestricted redistribution in source form):
- Python 판권은 그본적으로 법적인 위험으로부터 저자들을 보호하며 나쁜 사용자가 판권을 가져가려는 것을 방지한다. 그 외에도, Python 프로그래머와 사용자들은 소스형태나 바이너리 형태로 그들이 원하는 거의 모든 방법으로도 사용하는 것을 허용한다. 특별히 프로그래머는 Python모듈을 이용하여 제품을 만들 수도 있으며 판매할 수도 있다. </dd>
%% 참고 : http://python.kw.ac.kr:8080/python/Introduction/whatspython
Category:Python
