Python Language

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
Python은 1989년 암스텔담에서 수학자 겸 프로그래머인 귀도 반 로섬(Guido van Rossum)에 의해 개발되기 시작한 언어로, 인터프리터식, 객체지향적, 플랫폼 독립적이며 동적인 대화형 스크립트 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 MontyPythonsFlyingCircus에서 따온 것이다. 정식 한글 명칭은 파이썬이다.


DaNew는 파이썬을 아주 좋아한다. 흔히 파이썬을 소개할 때 즐겨 쓰이는 표현으로 코딩이 아닌 알고리즘 자체에 노력을 쏟을 수 있게 해준다는 말이 있는데, 그 말에 백번 동의한다. 결과적으로 파이썬은 개발에 걸리는 시간이 매우 짧다. 그리고 파이썬은 접착성이 좋은 GlueLanguage이므로, 속도가 중요한 부분부터 C로 바꾸면 된다. 이것은 선출시 후개선의 요즘 추세에 딱 들어맞는 특성이며, 구글이나 ILM을 비롯 세계 유수의 기업들이 파이썬을 이용하고 있다. 국내에서도 킹덤언더파이어에 파이썬이 사용되었다. 노스모크모인모인도 파이썬으로 작성되었다.

파이썬의 There's only one way to do it. 철학은 PerlLanguageThere's more than one way to do it. 철학과 명확히 대조된다. DaNew는 이것을 구현이 아닌 목적을 중시한다고 표현한다. 떨어진 두 점을 잇는 방법은 무수히 많지만, 파이썬에서는 일직선을 긋는 최선의 방법 하나만 있으면 된다.

Freefeel:ALee의QED이야기가 생각난다. 양자역학은 한 점에서 다른 점에 이르는 길이 무한하다고 말하지만, 사실 길은 유한하고, 대부분 1에 수렴한다.

파이썬은 느릴까? 단순속도로는 파이썬이 C보다 빠를 수는 없다. 하지만 여기에는 중요한 것이 하나 있다. 우리가 프로그램을 만들 때는, 어떤 언어로 만드는지보다 어떻게 만드는지가 더 중요하다. 언어자체의 속도차이보다는 로직에 따른 영향이 훨씬 결정적이다. 여기에 알고리즘에 신경을 쏟을 수 있게 해주는 파이썬의 장점이 빛난다. 그리고 속도가 더 필요한 부분을 C로 바꿔나가면 되는 것이다.

그리고 사실, 파이썬은 그다지 느리지 않다.


Screen Shot

인덴테이션 (들여쓰기)

C언어에서는 Block을 표시할때 {..}로 실행문(Statement)을 묶는다. 그렇다면 파이썬에서 Block에 해당하는 문법적 표기법은 무엇일까? 그것은 바로 인덴테이션이다. 프로그램의 가독성과 유지보수성을 높이기 위해서 TheElementsOfProgrammingStyle과 같은 책에서는 인덴테이션과 코딩 스타일을 가이드하지만 강제 사항은 아니었다. 그러던것이 파이썬에서는 아예 인덴테이션이 문법의 일부가 된것이다. 장점으로는 코딩과 동시에 소스가 정리되는 효과가 있으며(파이썬 소스를 인쇄해보면 아주 예쁘다 :) ), 모든 소스에 대해서 동일한 스타일이 적용되므로 표준화된 스타일이 가능해진 것이다. 이것은 쓸데없는 다양성을 미연에 방지하므로써 가독성과 유지보수성을 높이는 효과가 있다. 그렇다면 단점은 무엇일까? 탭과 스페이스의 혼용에서 문제가 발생할 수 있다. 어느 하나로 통일하지 않으면 편집기에 따라서 매우 혼란한 상황이 될 수도 있다. 또한 인쇄했을 경우, 하나의 블럭이 페이지 둘 이상에 걸쳐있는 경우, 현재 스테이트먼트가 어느 Block에 속하는지 눈으로 분간하기가 좀 불편하다는 의견도 있다.
약간 긴 소스를 수정하려고 하다가 인덴테이션을 잘못 건드려 로직이 완전히 바뀌는 경우도 발생합니다. 게다가 그것이 내가 제작한 것이 아닐경우에는 울며 겨자먹기로 예전파일을 다시 불러와야 하는 경우도 있습니다. 아직 제가 파이썬에 익숙하지 않아서 그런걸지도 모릅니다만... 안지성

파이썬 IDLE에는 Tabify Region과 Untabify Region 기능이 있습니다. 들여쓰기를 탭 또는 스페이스로 통일합니다. --서상현

vim에서 :help retab 해보세요. emacs에서는 untabify. -- oedalpha

처음엔 인덴테이션을 문법으로 생각했는데, 곰곰히 생각해봤더니 한가지 이상한점은 그래머(문법,Sytax)로 그것을 표기하기가 난감할것 같다는 점이지요. 거참..이걸 문법이라고 해야하는지...암튼 C언어의 문법 표기 {...} 에 해당하는 기능(Semantic)을 하는것은 맞는데...^^, 참..위의 1번글은 러프하게 쓴글이라서 정확하지 못한 표현은 지적또는 고쳐주세요~
Indentation can be included in a language(as in logic). It is represented as a token. For example, they define compound statements such as if/while statements in EBNF grammar notation using INDENT and DEDENT tokens in Python.


그리고 인덴테이션으로 Block 구분을 하는 것은 "인간중심적"이기 때문입니다. 사실 아무리 {..}로 Block 구분을 하게 되어 있다고 해도, 사람들은 인덴테이션을 적용해서 "읽기 좋게" 만듭니다. 왜냐하면 우리가 고차원 프로그래밍 언어를 사용하는 가장 큰 이유가 "인간"이 다루기 좋게 하려는 것이기 때문이죠.

예컨대 다음과 같은 코드는 문법적으로 의미론적으로 문제가 없으나 그렇게 포맷팅하지 않죠.
for (i.First(); !i.IsDone(); i.Next()) {
i.CurrentItem()->Accept(v);
     if hadEnough()
         doSomethingPlease();
         orImayGoMad();}
     ThereFore();
Finally();
--------------------------------------------
for (i.First(); !i.IsDone(); i.Next()) {i.CurrentItem()->Accept(v);if hadEnough()
doSomethingPlease();orImayGoMad();}ThereFore();Finally();


그런데, 어차피 인덴테이션을 할 것이라면 중복되게 {..}를 치는 노력을 하지 말고 그냥 인덴테이션 그것으로 Block 구분을 하자는 것이 파이썬의 철학입니다. 이것은 단순히 글자 몇개를 덜치자는 것이 아닙니다. {..}에 의한 Block 구분을 컴퓨터를 위한 것이고, 인덴테이션은 사람을 위한 것인데, 만약 우리는 인덴테이션으로 의미구분을 하면서 컴퓨터는 {..}로 의미구분을 하게되면 양자간에 오해가 생길 수 있습니다. 예컨대, C언어에서 같은 Block 내에 속하면서 자신이 인덴테이션을 틀리게 한 경우를 생각해 보죠. 잦은 실수입니다만, 쉽게 찾아내기 어렵습니다. 사람은 우선 인덴테이션에 의거해서 코드를 읽으려는 경향이 높기 때문입니다.

AnswerMe 파이썬은 GlueLanguage라고 하고, 구글, KUF등 많은 reference가 있는 것으로 알고 있습니다. 여기서 궁금한것은 과연 파이썬이 그 중심에 있느냐 하는 것이죠. 붙고 붙이는 것이 한쪽방향으로 이루어진다고 할 수도 없고, 코드의 길이로 중심여부를 판단할 수도 없겠지만, 논리적으로 어느쪽이 중심에 있어서 나머지를 수족으로 부리느냐는 생각할 수 있을 것입니다. 윈도우 어플리케이션으로서의 파이썬도 아직 본적이 없습니다. 과연 파이썬이 중심적인 역할을 했느냐와 윈도우 어플에서의 파이썬에 관해서 알고 싶습니다. -

프로그램이 언어를 쓰기 위해 있는 것이 아니라, 언어가 프로그램을 만들기 위해 존재합니다. 중심적인 역할이란 것은 큰 의미가 없지 않나 싶습니다. 사실 파이썬으로만 만들 수 있는 코드란 존재하지 않습니다. 모든 언어가 그렇지요. 특정한 부분의 개발에 유리한 언어가 있을 뿐입니다. 파이썬(뿐만 아니라 다른 모든 언어)이 코드 내에서 어떤 위치를 차지하고 있는지가 중요합니까? 제게는 님의 질문이 사실은 '파이썬으로 장난감이나 간단한 파트에 쓰인 것이 아닌, 본격적으로 소프트웨어개발에 사용된 예가 있는지'를 의도하셨던 것으로 생각됩니다. 그에 대한 답은 yes입니다. 굳이 원래의 질문에 액면 그대로 답하자면, 그것도 yes입니다. The Theoretical Physics Division at Los Alamos National Laboratory is using Python to control large-scale physics codes on massively parallel supercomputers, high-end servers, and clusters. --DaNew

질문이 바보 같았군요 -_-;; -

접착언어(GlueLanguage)란 표현을 Python 문서에서 처음 발견하고, 그냥 그런가보다 했는데, Perl, Tcl/Tk, 그리고 기억 안나는 몇몇 언어에 대한 소개에서 이런 표현들을 볼 수 있더군요. Perl, Tcl/Tk 등에 비해 유난히 Python이 GlueLanguage적 성격이 강하다고 볼 수는 없을 것 같습니다. 가시적 성과라는 측면에서, 다른 언어에 대한 비교우위를 증명하기는 힘들 것 같습니다. --nohmad

Python의 가장 큰 장점을 말하라면, 새로운 방법론, 또는 언어확장의 신속한 도입이 아닐까요? UnitTest, 수형언어 등을 깊지는 않지만 맛볼 수 있고, OOP는 매우 잘 구현이 되어 있습니다. 강력한 Inspection이 지원되는 인터랙티브 환경에서 프로그래밍하는 동안 객체, 함수, 타입 등에 대해 매우 구체적으로 배울 수 있다는 점도 큰 장점이 될 것 같습니다. 단점 으로는 자꾸 눈에 거슬리는 그 동어반복적이고, 조금은 난잡한 - C와 Java를 섞어놓은 듯한 - NamingRule이네요. Java나 C#처럼 비슷한 범주의 모듈들은 묶어서 좀더 깔끔한 NamingRule을 유지할 수도 있을텐데. 언젠가 호환성은 내팽 개치고, 확 물갈이했으면 하는 소박한 바램이 있습니다. :) --nohmad

Python의 가장 큰 단점이라고 하면 많은 사람이 Performance를 꼽지만 사실 Performance는 별 문제가 되지 않는다. 더욱더 큰 문제는 지나치게 빠른 랭귀지 측면의 발전 속도가 문제가 된다. 2.0 과 2.1과 2.2에서 모두 동작하는 어플리케이션을 만들기가 어렵다는 것이다. 2.0에서 돌아가는 프로그램을 만들고 나서 2.1이 나온후 돌려 보면 에러나는 경우가 대단히 많다. 어플리케이션을 만들때 항상 버전간의 차이를 이해하고 만들어야 한다. BackwardCompatibility를 지원하지 못하고 있는 것이다. 몰룬 타 언어들이 완전한 BackwardCompatibility를 제공하는 것은 아니지만, JDK 1.1.8에서 제작된 어플리케이션은 거의 대부분(99% 이상) JDK1.4에서도 변경없이 동작한다. Python에서는 장난감 수준의 프로그램을 제외하고 상위버전에서 제대로 동작하는 어플 리케이션을 본적이 없다. (이부분은 안지성의 경험 부족일 확률이 높다.)

빠른 발전 속도에서 나오는 많은 랭귀지 측면의 변화 및 변경은 접착제 또는 스크립 트 언어로서는 별로 나쁜 점이 아니지만(빠른 요구 반영은 오히려 장점이겠지만) 업계, 학계의 표준화를 통한 메이저 랭귀지로써의 진 입을 가로 막는 큰 장해물로 작용한다.

최근의 업계 트렌드라고 하면 FrameworkProgramming 을 들수 있다. 하지만 Python은 현재까지는 Backward, Forward Compatibility를 보장하지 못하는 언어이기 때문에 Framework는 존재해도 FrameworkStandard가 나오기는 매우 어렵게 된다. Standard가 나오기 어렵다는 것 은 일정 규모 이상의 프로젝트를 수행하기 어렵다는 것을 의미한다. 욕을 많이 먹기는 하지만 J2EE의 경우 Standard가 시장 을 창출하고 거대 프로젝트에 적용된다. Python은 Hacker에 의해 만들어져 Hacker에 의해 발전된다. 이것은 분명 장점 이지만 동시에 단점으로도 작용한다.동일한 요인이 초기의 Linux에게도 적용되었고 Linux는 그것을 극복했다. (최근에 SCO에 의해 다시 도전 받고 있다.) 그러나 Linux는 직접적으로 돈을 지불해야 하는 OS를 대체 한다라는 점에서 장점을 가져 극복 했지만 Python은 그렇지 못하다. C#도 Java도 무료로 제공된다.

이러한 것들이 OS의 독점력에서 힘을 얻는 C#이나, 반MS에서 탄력을 얻고 JCP를 통해 표준화를 거치고 BackwardCompatibility를 보장하는 Java등에 비해 Python의 미래를 불투명하게 하는 요인이 된다.

Python이 진짜 발전하고 싶다면 아마추어(해커)의 방법을 어느정도 벗어나야 할 필요가 있다.


근데 파이썬과 위키위키와의 관계를 설명하려면 어떻게 해야하나요?? 도대체가 감을 못 잡겠어요. 이거 조사해서 제출해야는데 말이에요. -- rushiankalts

Python은 쏠로의 언어입니다-_-; 개발자님께서 크리스마스날 할 일이 없어서 이 언어를 만들었다고-_-나와있더라고요.(파이썬 입문서에..) 그래서 웬지 정감이 가는 언어-_-; 아직 제대로 배워본적은 없지만, 곧 접할 기회가 있을것 같네요^^; --mynameisdj

see also:


"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>