Difference between revisions of "파이썬"

Jump to navigation Jump to search
2,883 bytes added ,  08:20, 18 April 2020
no edit summary
 
(11 intermediate revisions by 8 users not shown)
Line 1: Line 1:
{{Template:바로가기}}
{{Template:바로 가기}}
<div style="float: right; margin-left: 12px">__TOC__</div>
<div style="float: right; margin-left: 12px">__TOC__</div>
= 개요 =
= 개요 =
[[파이썬]]은 [[프로그래밍 언어]]의 일종이다.
[[파이썬]]([[Python]])은 [[프로그래밍 언어]]의 일종이다.




[[자바]], [[C 언어]], [[C++]], [[Python]], [[C#]]이 전세계에서 가장 많이 쓰이는 다섯 개의 [[프로그래밍 언어]]이다.
[[자바]]([[Java]]), [[C 언어]]([[C language]]), [[C플플]]([[C++]]), [[Python]], [[C#]]이 전세계에서 가장 많이 쓰이는 다섯 개의 [[프로그래밍 언어]]이다.


[[C샾]]은 대부분 [[마이크로소프트]]용으로만 쓰이고, [[오브젝티브-C]]([[Objective-C]])는 거의 [[애플]]용으로만 쓰인다.
[[C샾]]은 대부분 [[마이크로소프트]]용으로만 쓰이고, [[오브젝티브-C]]([[Objective-C]])는 거의 [[애플]]용으로만 쓰인다.


[[안드로이드]] [[스마트폰]] 사용자의 경우 [[플레이 스토어]]([[Play Store]])에서 SoloLearn에서 만든 Learn Python같은 [[앱]]([[app]])을 설치하여 파이썬 프로그래밍을 배워도 좋다. 지금은 여러 잡다한 프로그래밍 학습 앱이 "SoloLearn: Learn to Code for Free" 하나로 합쳐져서 Learn Python 대신에 새로 나온 앱을 깔아야 한다.




Line 19: Line 18:


* 찰스 펫졸드의 코드:CODE
* 찰스 펫졸드의 코드:CODE
http://freesearch.pe.kr/archives/2406
https://freesearch.pe.kr/archives/2406




Line 25: Line 24:




[[디렉터리]] 구분은 [[리눅스]]에서는 [[슬래시]] 기호 /로 하고, [[윈도우즈]]에서는 [[백슬래시]] 기호 \나 [[원화]] 기호 ₩로 한다.
[[디렉터리]]([[directory]]) 구분은 [[리눅스]]([[Linux]]), [[비에스디]]([[BSD]]), [[맥OS]]([[macOS]]) 등 [[유닉스]]([[Unix]]) 계열에서는 [[슬래시]]([[slash]]) 기호 /로 하고, 한글 [[윈도우즈]]([[Windows]])에서는 [[백슬래시]]([[backslash]]) 기호 \나 [[원화]] 기호 ₩로 한다. [[폴더]]([[folder]])는 [[그래픽 사용자 인터페이스]]([[GUI]])를 가진 [[운영 체제]]([[OS]])에서 디렉터리 대신에 부르는 말이다.
 
 
 
[[프로그래밍]], [[트킨터]] ([[Tkinter]]), [[팬더즈]] ([[pandas]]), [[뷰티펄 숲]] ([[Beautiful Soup]]), [[파이게임]] ([[Pygame]]) 문서 참조.
 
 
= SoloLearn =
[[안드로이드]] [[스마트폰]] 사용자의 경우 [[플레이 스토어]]([[Play Store]])에서 SoloLearn에서 만든 [[Learn Python]]같은 [[앺]]([[app]])을 설치하여 파이썬 프로그래밍을 배워도 좋다. 지금은 여러 잡다한 프로그래밍 학습 앱이 "SoloLearn: Learn to Code for Free" 앺 하나로 합쳐져서 Learn Python [[앺]] 대신에 새로 나온 [[SoloLearn]] [[앱]]을 깔아야 한다. 사실 아직도 LearnPython을 설치해서 사용할 수는 있다. 하지만 나중에 추가된 깊이 있는 내용은 SoloLearn에만 추가되므로 그냥 SoloLearn [[app]]을 까는 게 낫다.
 
 
 
* #11316 2019-5-6 오후 9:28 [삭제]
폰겜할 시간에 solelearn깔아서 파이썬 배워보고 있는데 이거 끝내면 그냥 딱 입문 수준인거지? 지금 계산기까지 했음
 
   
1: sole->solo    [삭제] 2019-5-6 오후 9:29
 
   
2: [[SoloLearn]] 끝까지 다 끝내면 파이썬 기본 [[프로그래밍]] 방법은 다 배운 거임. 그 다음에는 [[Django for Beginners]]같은 걸로 [[웹 프로그래밍]] 배우면 됨.    [삭제] 2019-5-6 오후 10:20
 
   
3: >2 그리고 [[마약]] 거래 [[싸이트]]든, [[페도]] 싸이트든 만들어서 [[돈]] 벌면 됨. 그 전에 [[코챈]]같은 거 만들어서 연습도 좀 하고.    [삭제] 2019-5-6 오후 10:21
 
   
4: >3 [[웹싸이트]] [[보안]]은 [[리눅스 마스터]]나 [[정보 보안 기사]] 공부 좀 해보든가    [삭제] 2019-5-6 오후 10:23
 
   
5: >4 [[사이버 수사대]]한테 털리면 [[좆]]되니까    [삭제] 2019-5-6 오후 10:34
 
   
9: >2 [[Django Girls]]도 [[웹 프로그래밍]] 입문자용으로 볼만함    [삭제] 2019-5-6 오후 11:33
 
 
16: >7 파이썬 [[프로그래밍]]의 응용을 배우려면 [[트킨터]], [[팬더즈]], [[뷰티펄 숲]], [[파이게임]] 문서 읽고 따라해봐라.    [삭제] 2019-5-7 오전 2:59
 
   
8: 폰겜은 해도 남는 게 없지만, [[프로그래밍]]은 배워놓으면 두고두고 써먹지 ㅋㅋㅋ    [삭제] 2019-5-6 오후 11:28
 
   
10: [[댓글]] 달아준 [[게이]]들 전부 고맙다    [삭제] 2019-5-6 오후 11:50
 
   
11: >10 [[일베충]]은 나가 죽어라. [[김대중]] 만세! [[노무현]] 만세!! [[문재인]] 만만세!!!    [삭제] 2019-5-7 오전 0:10
 
   
12: >11 [[이승만]] [[전쟁]] 나자 [[서울]] 사수한다고 방송 틀어놓고 한강철교 끊고 도망간 새끼. [[박정희]] 위계를 이용한 [[여대생]], [[여가수]], [[여자 탤런트]] [[강간마]] 새끼. [[전두환]] [[부산 형제복지원]] 대량 [[납치]] 및 [[살인]] 지시한 새끼.    [삭제] 2019-5-7 오전 0:45
 
   
13: >12 [[박정희]], [[전두환]] 때는 대통령 아니라 고위 공직자 중에 [[여자 연예인]] 따먹은 사람들 많은데. [[계엄령]]이니 뭐니 해서 공포 정치 [[독재]] 정치 시기라 잡아온 다음에 [[강간]]하고 돌려보냄. [[처녀]] [[연예인]]이든, [[유부녀]] 연예인이든. 그래도 어디 가서 [[말]]도 못함.    [삭제] 2019-5-7 오전 0:51


   
14: >13 그래도 [[이승만]] 시절보다 좋아진건데. 이승만 때는 아예 [[살해]]되는 경우도 많았음. [[나라]]가 혼란하던 시기라 [[공산당]] 협력자로 몰아서 [[마을]] 하나 통째로 [[총살]]시키는 경우도 많았음. [[조사]] 과정이든 [[학살]] 과정이든, 그 과정에서 [[강간]]이야 수없이 일어났고.      [삭제] 2019-5-7 오전 0:53


http://55adq4ncecjgxfymv4tdl54g4t2dayqju65wgqpik67suvtiz67kpzad.onion/p?id=11316


= 특징 =
= 특징 =
[[파이썬]]은 [[객체 지향 프로그래밍]]([[object-oriented programming]]) 언어에 속한다. 객체 지향 프로그래밍 전에 [[절차적 프로그래밍]]([[procedural programming]]) 언어가 먼저 개발되었다. 절차적 프로그래밍 언어에서 [[구조적 프로그래밍]]이 나왔다. 현재는 [[절차적 프로그래밍]] 언어에도 [[객체 지향 프로그래밍]] 개념이 포함되어있다.
[[파이썬]]은 [[객체 지향 프로그래밍]]([[object-oriented programming]]) 언어에 속한다. 객체 지향 프로그래밍 전에 [[절차적 프로그래밍]]([[procedural programming]]) 언어가 먼저 개발되었다. 절차적 프로그래밍 언어에서 [[구조적 프로그래밍]]([[structured programming]])이 나왔다. 구조적 프로그래밍은 [[구조화 프로그래밍]]으로도 불리며 [[프로그래밍 패러다임]](programming paradigm)의 일종인 절차적 프로그래밍의 하위 개념으로 볼 수 있다.
 


객체 지향을 배울때 추천할만한 언어이다. 많은 대학들이 C++ 환경에서 가르치지만, 이경우 필요한 객체를 만들어서 쓰는 실습이 많은데 대부분 이미 존재하는 객체를 가져다 쓴다는 개념을 이해하지 못하는 경우가 많다. STL을 쓰면 달라지지만 실습에서 STL을 요구하는 문제가 나오는 경우도 드믈고 주로 사용되는 문자열 변환, 배열 관련 연산 등은 파이썬에서 따로 임포트할 필요없이 자료형 자체가 이미 클래스로서 편리하게 클래스 함수를 던져주기 때문에, 클래스의 재활용이라는 측면을 훨씬 이해하기 쉽다. 무엇보다 하루면 다 배울 수 있는 언어이기도 하고. 예전에는 한국을 포함하여 대부분의 대학들이 C++이나 Java 같은 실제 회사에서 많이 쓰는 언어 위주로 수업을 개설했으나, 미국대학들은 개론 수업 언어를 Python으로 옮겨가는 추세이다. [[UC 버클리]] 컴퓨터과학 개론수업인 CS 61A 를 인터넷 강의로 들어보자!
[[객체 지향]]을 배울때 추천할만한 언어이다. 많은 대학들이 C++ 환경에서 가르치지만, 이경우 필요한 객체를 만들어서 쓰는 실습이 많은데 대부분 이미 존재하는 객체를 가져다 쓴다는 개념을 이해하지 못하는 경우가 많다. STL을 쓰면 달라지지만 실습에서 STL을 요구하는 문제가 나오는 경우도 드믈고 주로 사용되는 문자열 변환, 배열 관련 연산 등은 파이썬에서 따로 임포트할 필요없이 자료형 자체가 이미 클래스로서 편리하게 클래스 함수를 던져주기 때문에, 클래스의 재활용이라는 측면을 훨씬 이해하기 쉽다. 무엇보다 하루면 다 배울 수 있는 언어이기도 하고. 예전에는 한국을 포함하여 대부분의 대학들이 C++이나 Java 같은 실제 회사에서 많이 쓰는 언어 위주로 수업을 개설했으나, 미국대학들은 개론 수업 언어를 Python으로 옮겨가는 추세이다. [[UC 버클리]] 컴퓨터과학 개론수업인 CS 61A 를 인터넷 강의로 들어보자!




Line 49: Line 101:


=== JIT 컴파일 ===
=== JIT 컴파일 ===
JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 [[기계어]]로 번역하는 [[컴파일]] 기법이다. 이 기법은 프로그램의 실행 속도를 빠르게 하기 위해 사용된다.
[[JIT 컴파일]]([[just-in-time compilation]]) 또는 [[동적 번역]]([[dynamic translation]])은 [[프로그램]]([[program]])을 실제 실행하는 시점에 [[기계어]]([[machine code]] 또는 [[machine language]])로 번역하는 [[컴파일]]([[compile]]) 기법이다. 이 기법은 프로그램의 실행 속도를 빠르게 하기 위해 사용된다.


전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두가지가 있는데, 인터프리트 방식과 정적 [[컴파일]] 방식으로 나눌 수 있다. 이 중 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하며, 반면 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역한다.
전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두가지가 있는데, 인터프리트 방식과 정적 [[컴파일]] 방식으로 나눌 수 있다. 이 중 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하며, 반면 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역한다.
Line 60: Line 112:


== 동적 타입 언어 ==
== 동적 타입 언어 ==
[[정적 타입 언어]]: 자료형(Type)이 고정돼 있는 언어. 설명이 어려운데 간단히 얘기하자면 정수형으로 정의한 1은 계속 정수형 1로 남아있다. 이걸 실수형 1.0으로 바꾸려면 명시적인 형변환(Type casting)을 해줘야 한다. 묵시적 형변환이 이루어지는 경우도 있지만 제한적이다.
[[정적 타입 언어]]([[statically typed language]]): [[자료형]]([[type]])이 고정돼 있는 [[프로그래밍 언어]]([[programming language]]). 설명이 어려운데 간단히 얘기하자면 정수형으로 정의한 1은 계속 정수형 1로 남아있다. 이걸 실수형 1.0으로 바꾸려면 명시적인 형변환(Type casting)을 해줘야 한다. 묵시적 형변환이 이루어지는 경우도 있지만 제한적이다.


[[동적 타입 언어]]: 자료형이 그것을 처리할 함수(또는 메서드)에 따라 그때그때 바뀌는 언어. 예를 들어 정수형 1을 정의했어도 그걸 처리할 함수가 문자열을 받아들이게 설계돼있다면 자동으로 정수형 1을 문자 1로 바꿔준다.  
[[동적 타입 언어]]([[dynamically typed language]]): 자료형이 그것을 처리할 [[함수]]([[function]]) 또는 [[메서드]]([[method]])에 따라 그때 그때 바뀌는 [[언어]]([[language]]). 예를 들어 정수형 1을 정의했어도 그걸 처리할 함수가 문자열을 받아들이게 설계돼있다면 자동으로 정수형 1을 문자 1로 바꿔준다.  




정적 타입 언어가 별 거 아닌 것처럼 느껴질 수도 있지만 실은 프로그래머들을 짜증나게 하는 주범이 바로 형변환(Type casting)이기 때문에 동적 타입 언어는 이런 점에서 매우 강점을 가진다. 특히 객체 지향 언어에서는 동적 타입 및 그것의 일반화버전이라 할 수 있는 덕 타이핑(Duck typing)이 프로그래머에게 수많은 혜택을 준다. 예를 들어 오리라는 타입과 닭이라는 타입이 있고 둘 다 날아오르는 기능이 있다면 정적 타입 언어에서는 상위 인터페이스를 추출하는 등의 부가 작업이 쩌는데 덕 타이핑을 지원하는 언어에서는 그냥 넣어버리면 알아서 난다. 물론 단점도 있는데 고래 같이 못 나는 타입을 집어넣으면 실행시간 오류(런타임 에러)를 뱉어버린다는거. 정적 타입 언어는 이런 문제가 없다...고 알려져있지만 거짓말이고 정적 타입 언어도 닭은 닭인데 통닭 같이 못 나는 타입을 집어넣는 바람에(기술적으로는 해당 메서드가 구현이 안된 객체) 런타임 에러가 나올 수 있다.
[[정적 타입 언어]]가 별 거 아닌 것처럼 느껴질 수도 있지만 실은 프로그래머들을 짜증나게 하는 주범이 바로 형변환(type casting)이기 때문에 동적 타입 언어는 이런 점에서 매우 강점을 가진다. 특히 객체 지향 언어에서는 동적 타입 및 그것의 일반화버전이라 할 수 있는 덕 타이핑(duck typing)이 프로그래머에게 수많은 혜택을 준다. 예를 들어 오리라는 타입과 닭이라는 타입이 있고 둘 다 날아오르는 기능이 있다면 정적 타입 언어에서는 상위 인터페이스를 추출하는 등의 부가 작업이 쩌는데 덕 타이핑을 지원하는 언어에서는 그냥 넣어버리면 알아서 난다. 물론 단점도 있는데 고래 같이 못 나는 타입을 집어넣으면 실행시간 오류(런타임 에러)를 뱉어버린다는거. 정적 타입 언어는 이런 문제가 없다...고 알려져있지만 거짓말이고 정적 타입 언어도 닭은 닭인데 통닭 같이 못 나는 타입을 집어넣는 바람에(기술적으로는 해당 메서드가 구현이 안된 객체) 런타임 에러가 나올 수 있다.


그런데 [[하스켈]]([[Haskell]])은 정적 타입 언어다. 그런데도 하스켈 코드에는 형 변환 연산자가 없다. 이게 어찌된 일이냐 하면 하스켈 언어는 정적 타입 언어이지만 강력한 타입 추론 기능을 내장하고 있어 형변환을 언어 차원에서 자동으로 해 준다. 동적 타입 언어 역시 자동 형변환을 제공하는데 무슨 차이가 있냐면 그 형변환을 런타임에 하느냐 컴파일 타임에 하느냐의 차이다. 즉 버그가 발생하는 시점을 런타임에서 컴파일 타임으로 끌어당긴다. 타입 추론 엔진은 딱히 하스켈 같은 선언형, 함수형 언어에만 도입할 수 있는 건 아니므로 신형 설계가 적용된 언어라면 명령형, 객체 지향 언어라도 타입 추론을 할 수 있다. 단지 정적 타입 언어로 유명한 C나 자바에 타입 추론 엔진이 없을 뿐이지. 여기서 타입 추론은 묵시적 형변환과 동의어가 아니다. 겉으로 보이는 건 묵시적 형변환하고 똑같지만.
그런데 [[하스켈]]([[Haskell]])은 [[정적 타입 언어]]다. 그런데도 하스켈 코드에는 형 변환 연산자가 없다. 이게 어찌된 일이냐 하면 하스켈 언어는 정적 타입 언어이지만 강력한 타입 추론 기능을 내장하고 있어 형변환을 언어 차원에서 자동으로 해 준다. 동적 타입 언어 역시 자동 형변환을 제공하는데 무슨 차이가 있냐면 그 형변환을 런타임에 하느냐 컴파일 타임에 하느냐의 차이다. 즉 버그가 발생하는 시점을 런타임에서 컴파일 타임으로 끌어당긴다. 타입 추론 엔진은 딱히 하스켈 같은 선언형, 함수형 언어에만 도입할 수 있는 건 아니므로 신형 설계가 적용된 언어라면 명령형, 객체 지향 언어라도 타입 추론을 할 수 있다. 단지 정적 타입 언어로 유명한 C나 자바에 타입 추론 엔진이 없을 뿐이지. 여기서 타입 추론은 묵시적 형변환과 동의어가 아니다. 겉으로 보이는 건 묵시적 형변환하고 똑같지만.
 
파이썬이 동적 타입 언어(dynamically typed language)라는 점이 큰 프로젝트에서는 단점으로 작용하여 자료구조 설계나 디버깅이 어렵다는 지적도 있다. 다만 "정적 타입 언어 vs. 동적 타입 언어" 논쟁은 서로의 장단점이 있으며 일종의 종교논쟁 취급 받는다. 일례로 OCaml같은 강력한 타입 인터페이스(Hindly-Milner)를 가진 경우라 할지라도 타입 에러 정도는 거의 모두 컴파일 타임에 잡아내는 있는 반면에, 모든 버그가 타입 에러는 아니기 때문에 여전히 테스트 및 디버깅 과정은 필요하며, 타입 시스템으로 인한 부담 때문에 빠른 구현에는 부담이 갈 수 있다. 반면에 동적 언어는 빠른 구현의 이점이 있지만 타입 에러가 많이 나는 특징이 있다. 그러나 커버리지가 높은 테스트 세트로 어느정도 커버할 수 있으며 최근의 추세와 부합하는 방식이기도 하다.


[[Python]]이 [[동적 타입 언어]]([[dynamically typed language]])라는 점이 큰 프로젝트에서는 단점으로 작용하여 자료 구조 설계나 디버깅이 어렵다는 지적도 있다. 다만 "정적 타입 언어 vs. 동적 타입 언어" 논쟁은 서로의 장단점이 있으며 일종의 종교논쟁 취급 받는다. 일례로 OCaml같은 강력한 타입 인터페이스(Hindly-Milner)를 가진 경우라 할지라도 타입 에러 정도는 거의 모두 컴파일 타임에 잡아내는 있는 반면에, 모든 버그가 타입 에러는 아니기 때문에 여전히 테스트 및 디버깅 과정은 필요하며, 타입 시스템으로 인한 부담 때문에 빠른 구현에는 부담이 갈 수 있다. 반면에 동적 언어는 빠른 구현의 이점이 있지만 타입 에러가 많이 나는 특징이 있다. 그러나 커버리지가 높은 테스트 세트로 어느정도 커버할 수 있으며 최근의 추세와 부합하는 방식이기도 하다.


== Python 3 ==
== Python 3 ==
파이썬 2.5 이하 버전에서는 문법이 좀 다르다.
파이썬 2.5.6 이하 버전에서는 [[문법]]이 좀 다르다.
  print "Hello, world!"
  print "Hello, world!"
와 같이 입력해야 한다. 파이썬 3 이상에서는 print가 함수가 되어
와 같이 입력해야 한다. 파이썬 3.0.0 이상에서는 print가 [[함수]]([[function]])가 되어
  print("Hello, world!")
  print("Hello, world!")
와 같은 문법을 쓴다. https://docs.python.org/2/whatsnew/2.6.html#pep-3105-print-as-a-function 버전 2.6 ~ 2.7에선 둘 다 사용 가능하다.
와 같은 문법을 쓴다. https://docs.python.org/2/whatsnew/2.6.html#pep-3105-print-as-a-function 버전 2.6 ~ 2.7에선 둘 다 사용 가능하다.
Line 98: Line 149:


이런 문제를 해결하기 위해, Python 3.3 버전 이후부터는 문자열 객체에서 가장 많은 공간(바이트)을 차지하는 문자를 기준으로 각 문자가 차지할 공간을 정하도록 변경되었다. https://www.python.org/dev/peps/pep-0393/ 따라서 문자열에 아스키 문자만 포함된다면 각 문자가 1바이트씩만 차지하므로 더 이상 이런 문제가 생기지 않는다. 이런 경우는 심지어 유니코드임에도 Python 2.x의 유니코드 문자열보다 적은 메모리 공간을 차지할 수도 있다! 또한 UCS-4를 모두 지원하는 "wide" 빌드와 UCS-2만 지원하는 "narrow" 빌드의 구분도 사라졌다. 하지만 크기가 변경될 때 그 만큼 속도가 느려지니 장단점이 있다.
이런 문제를 해결하기 위해, Python 3.3 버전 이후부터는 문자열 객체에서 가장 많은 공간(바이트)을 차지하는 문자를 기준으로 각 문자가 차지할 공간을 정하도록 변경되었다. https://www.python.org/dev/peps/pep-0393/ 따라서 문자열에 아스키 문자만 포함된다면 각 문자가 1바이트씩만 차지하므로 더 이상 이런 문제가 생기지 않는다. 이런 경우는 심지어 유니코드임에도 Python 2.x의 유니코드 문자열보다 적은 메모리 공간을 차지할 수도 있다! 또한 UCS-4를 모두 지원하는 "wide" 빌드와 UCS-2만 지원하는 "narrow" 빌드의 구분도 사라졌다. 하지만 크기가 변경될 때 그 만큼 속도가 느려지니 장단점이 있다.
=== syntax, semantics, grammar ===
[[언어학]] 또는 [[컴퓨터 과학]]([[컴퓨터 공학]])에서 syntax는 [[구문론]], [[통사론]], [[문법]]이라는 의미로 쓰이고, semantics는 [[의미론]]이라는 의미로 쓰이며, grammar는 [[문법]]이라는 의미로 쓰인다.
[[프로그래밍 언어]]에서의 [[syntax]], [[semantics]], [[grammar]]의 차이에 대해서는 https://stackoverflow.com/questions/17930267/what-is-the-difference-between-syntax-and-semantics-of-programming-languages 나 https://softwareengineering.stackexchange.com/questions/116982/what-is-the-difference-between-syntax-and-grammar 를 참조하기 바란다.


== C/C++와의 결합 ==
== C/C++와의 결합 ==
Line 133: Line 190:
사실 파이썬은 수치 연산 프로그래밍에 적합한 언어는 아니다. 수치가 복잡하고 연산이 많다면 C같은 언어로 하는 것이 더 빠르기 때문이다. 하지만 파이썬에는 Numeric Python이라는 수치 연산 모듈이 제공된다. 이 모듈은 C로 작성되었기 때문에 파이썬에서도 수치 연산을 빠르게 할 수 있다.
사실 파이썬은 수치 연산 프로그래밍에 적합한 언어는 아니다. 수치가 복잡하고 연산이 많다면 C같은 언어로 하는 것이 더 빠르기 때문이다. 하지만 파이썬에는 Numeric Python이라는 수치 연산 모듈이 제공된다. 이 모듈은 C로 작성되었기 때문에 파이썬에서도 수치 연산을 빠르게 할 수 있다.


"[[NumPy]] + [[SciPy]] + [[matplotlib]]" 조합이 과학 공학 계산용으로 써볼만하다는 의견도 있다. ~~조금있으면 독점할 기세이다.~~ http://www.numpy.org/ http://www.scipy.org/ http://matplotlib.org/
"[[NumPy]] + [[SciPy]] + [[matplotlib]]" 조합이 과학 공학 계산용으로 써볼만하다는 의견도 있다. ~~조금있으면 독점할 기세이다.~~ https://www.numpy.org/ https://www.scipy.org/ https://matplotlib.org/


=== 데이터 분석 ===
=== 데이터 분석 ===
Line 376: Line 433:


* [Python] 윈도우에서 파이썬을 설치하고 실행해보자.
* [Python] 윈도우에서 파이썬을 설치하고 실행해보자.
http://selfc.tistory.com/27
https://selfc.tistory.com/27




Line 546: Line 603:


== 함수 ==
== 함수 ==
함수를 사용하는 이유는 무엇일까?
[[함수]]([[function]])를 사용하는 이유는 무엇일까?


프로그래밍을 하다 보면 똑같은 내용을 반복해서 작성하고 있는 자신을 발견할 때가 종종 있다. 이때가 바로 함수가 필요한 때이다. 즉, 반복되는 부분이 있을 경우 "반복적으로 사용되는 가치 있는 부분"을 한 뭉치로 묶어서 "어떤 입력값을 주었을 때 어떤 결과값을 돌려준다"라는식의 함수로 작성하는 것이 현명하다.
프로그래밍을 하다 보면 똑같은 내용을 반복해서 작성하고 있는 자신을 발견할 때가 종종 있다. 이때가 바로 함수가 필요한 때이다. 즉, 반복되는 부분이 있을 경우 "반복적으로 사용되는 가치 있는 부분"을 한 뭉치로 묶어서 "어떤 입력값을 주었을 때 어떤 결과값을 돌려준다"라는식의 함수로 작성하는 것이 현명하다.
Line 558: Line 615:


=== 함수의 구조 ===
=== 함수의 구조 ===
이번 강의에선 함수의 기본구조(문법)에 대해 알아보고
이번 강의에선 함수의 기본 구조([[문법]])에 대해 알아보고


입력값과 결과값에 따라 그 구조가 어떻게 달라지는지 알아보는 시간을 갖도록 해요.
입력값과 결과값에 따라 그 구조가 어떻게 달라지는지 알아보는 시간을 갖도록 해요.
Line 836: Line 893:


input을 그냥 사용하면 문자열로 입력을 받으니 [[정수]](integer)로 입력을 받으라는 의미이다. factorial이라는 함수를 정의한다(define). 만약 x가 0이면 1을 돌려준다(return). 그게 아니면 x와 factorial 함수에 x-1을 대입한 것을 곱한다. x가 만약 3이라면 0이 아니니 3과 factorial(2)를 곱할테고, factorial(2)는 2와 factorial(1)을 곱한 것이고, factorial(1)은 1과 factorial(0)을 곱한 것이고, factorial(0)은 1을 돌려주라고 했으므로 뒤에서부터 하나씩 계산해 나가면 1을 돌려주고, 1과 1을 곱하고, 2와 1*1을 곱하고, 3과 2*1을 곱하여 3*2*1=6이 나온다.
input을 그냥 사용하면 문자열로 입력을 받으니 [[정수]](integer)로 입력을 받으라는 의미이다. factorial이라는 함수를 정의한다(define). 만약 x가 0이면 1을 돌려준다(return). 그게 아니면 x와 factorial 함수에 x-1을 대입한 것을 곱한다. x가 만약 3이라면 0이 아니니 3과 factorial(2)를 곱할테고, factorial(2)는 2와 factorial(1)을 곱한 것이고, factorial(1)은 1과 factorial(0)을 곱한 것이고, factorial(0)은 1을 돌려주라고 했으므로 뒤에서부터 하나씩 계산해 나가면 1을 돌려주고, 1과 1을 곱하고, 2와 1*1을 곱하고, 3과 2*1을 곱하여 3*2*1=6이 나온다.


== 클래스 ==
== 클래스 ==
Line 1,162: Line 1,218:
즉, if __name__ == ""__main__""을 안 써주면 py 파일을 단독으로 실행할 때 뿐만 아니라 import로 불러왔을 때도 py 파일이 실행된다. 하지만 우리가 import를 쓰는 건 해당 py 파일을 실행하려는 게 아니라 그 파일에 있는 파일, 함수, 변수 등만 불러와서 사용하려는 것이므로 if __name__ == ""__main__""라는 코드를 써서 import를 사용하여 모듈로서 불려왔을 때는 해당 py 파일이 실행되지 않도록 하는 것이다.
즉, if __name__ == ""__main__""을 안 써주면 py 파일을 단독으로 실행할 때 뿐만 아니라 import로 불러왔을 때도 py 파일이 실행된다. 하지만 우리가 import를 쓰는 건 해당 py 파일을 실행하려는 게 아니라 그 파일에 있는 파일, 함수, 변수 등만 불러와서 사용하려는 것이므로 if __name__ == ""__main__""라는 코드를 써서 import를 사용하여 모듈로서 불려왔을 때는 해당 py 파일이 실행되지 않도록 하는 것이다.


http://hashcode.co.kr/questions/3/if-__name__-__main__%EC%9D%80-%EC%99%9C%EC%93%B0%EB%82%98%EC%9A%94
https://hashcode.co.kr/questions/3/if-__name__-__main__%EC%9D%80-%EC%99%9C%EC%93%B0%EB%82%98%EC%9A%94


==== _가 2개 있는 경우 ====
==== _가 2개 있는 경우 ====
Line 1,477: Line 1,533:


==== 팬더즈(pandas) ====
==== 팬더즈(pandas) ====
[[팬더즈]]([[pandas]], http://pandas.pydata.org/ )는 데이터 처리와 분석을 위한 파이썬 라이브러리입니다. R의 data.frame을 본떠서 설계한 DataFrame이라는 데이터 구조를 기반으로 만들어졌습니다. 간단하게 말하면 pandas의 DataFrame은 엑셀의 스프레드시트와 비슷한 테이블 형태라고 할 수 있습니다. pandas는 이 테이블을 수정하고 조작하는 다양한 기능을 제공합니다. 특히, SQL처럼 테이블에 쿼리나 조인을 수행할 수 있습니다. 전체 배열의 원소가 동일한 타입이어야 하는 NumPy와는 달리 pandas는 각 열의 타입이 달라도 됩니다(예를 들면 정수, 날짜, 부동소숫점, 문자열). SQL, 엑셀 파일, CSV 파일 같은 다양한 파일과 데이터베이스에서 데이터를 읽어 들일 수 있는 것이 pandas가 제공하는 또 하나의 유용한 기능입니다. 이 책은 pandas의 기능을 자세히 설명하지는 않습니다. 대신 pandas에 대한 훌륭한 안내서로 웨스 맥키니Wes Makinney가 쓴 『파이썬 라이브러리를 활용한 데이터 분석』(한빛미디어, 2013)을 추천합니다.
[[팬더즈]]([[pandas]], https://pandas.pydata.org/ )는 데이터 처리와 분석을 위한 파이썬 라이브러리입니다. R의 data.frame을 본떠서 설계한 DataFrame이라는 데이터 구조를 기반으로 만들어졌습니다. 간단하게 말하면 pandas의 DataFrame은 엑셀의 스프레드시트와 비슷한 테이블 형태라고 할 수 있습니다. pandas는 이 테이블을 수정하고 조작하는 다양한 기능을 제공합니다. 특히, SQL처럼 테이블에 쿼리나 조인을 수행할 수 있습니다. 전체 배열의 원소가 동일한 타입이어야 하는 NumPy와는 달리 pandas는 각 열의 타입이 달라도 됩니다(예를 들면 정수, 날짜, 부동소숫점, 문자열). SQL, 엑셀 파일, CSV 파일 같은 다양한 파일과 데이터베이스에서 데이터를 읽어 들일 수 있는 것이 pandas가 제공하는 또 하나의 유용한 기능입니다. 이 책은 pandas의 기능을 자세히 설명하지는 않습니다. 대신 pandas에 대한 훌륭한 안내서로 웨스 맥키니Wes Makinney가 쓴 『파이썬 라이브러리를 활용한 데이터 분석』(한빛미디어, 2013)을 추천합니다.




팬더즈를 사용하여 [[수학]], [[통계학]], [[빅 데이터]], [[과학]], [[공학]] 계산 등에 쓰는 방법은 [[팬더즈]] 문서 참조.
팬더즈를 [[수학]], [[통계학]], [[빅 데이터]], [[과학]], [[공학]] 계산 등에 쓰는 방법은 [[팬더즈]] 문서 참조.




Line 1,488: Line 1,544:
금융 시장 분석가나 회계 담당자는 넘파이(NumPy)에 익숙하며, 이를 즐겨 사용한다. 그러나 넘파이의 응용 범위는 수학과 통계를 제외하고도 생각 외로 넓다. 예를 들어 넘파이는 다른 언어를 사용하다 파이썬을 처음 접한 개발자들이 자주 불평하는 파이썬에 다차원 배열 지원을 추가하는 작업을 가장 쉽게, 가장 유연하게 할 수 있는 방법 중 하나다. 다만 모든 요소를 갖춘 완벽한 파이썬 ‘과학-수학’ 기능을 원한다면 넘파이를 표준 항목으로 포함하는 사이파이(SciPy) 라이브러리 및 환경을 사용하는 편이 좋다. 넘파이를 기반으로 하는 정교한 데이터 분석에는 판다스(Pandas)가 있다.
금융 시장 분석가나 회계 담당자는 넘파이(NumPy)에 익숙하며, 이를 즐겨 사용한다. 그러나 넘파이의 응용 범위는 수학과 통계를 제외하고도 생각 외로 넓다. 예를 들어 넘파이는 다른 언어를 사용하다 파이썬을 처음 접한 개발자들이 자주 불평하는 파이썬에 다차원 배열 지원을 추가하는 작업을 가장 쉽게, 가장 유연하게 할 수 있는 방법 중 하나다. 다만 모든 요소를 갖춘 완벽한 파이썬 ‘과학-수학’ 기능을 원한다면 넘파이를 표준 항목으로 포함하는 사이파이(SciPy) 라이브러리 및 환경을 사용하는 편이 좋다. 넘파이를 기반으로 하는 정교한 데이터 분석에는 판다스(Pandas)가 있다.


NumPy( http://www.numpy.org/ )는 파이썬으로 과학 계산을 하려면 꼭 필요한 패키지입니다. 다차원 배열을 위한 기능과 선형대수 연산과 푸리에 변환 같은 고수준 수학 함수와 유사(pseudo) 난수 생성기를 포함합니다.
NumPy( https://www.numpy.org/ )는 파이썬으로 과학 계산을 하려면 꼭 필요한 패키지입니다. 다차원 배열을 위한 기능과 선형대수 연산과 푸리에 변환 같은 고수준 수학 함수와 유사(pseudo) 난수 생성기를 포함합니다.




Line 1,500: Line 1,556:
=== 기계 학습 ===
=== 기계 학습 ===
==== 싸이킽-런(scikit-learn) ====
==== 싸이킽-런(scikit-learn) ====
[[오픈 소스]]인 [[싸이킽-런]]([[scikit-learn]])은 자유롭게 사용하거나 배포할 수 있고, 누구나 소스 코드를 보고 실제로 어떻게 동작하는지 쉽게 확인할 수 있습니다. scikit-learn 프로젝트는 꾸준히 개발, 향상되고 있고 커뮤니티도 매우 활발합니다. 잘 알려진 [[머신 러닝]]([[machine learning]]) [[알고리듬]]들은 물론 [[알고리즘]]을 설명한 풍부한 문서( http://scikit-learn.org/stable/documentation )도 제공합니다. scikit-learn은 매우 인기가 높고 독보적인 파이썬 [[기계 학습]] 라이브러리입니다. 그래서 산업 현장이나 학계에도 널리 사용되고 많은 튜토리얼과 예제 코드를 온라인에서 쉽게 찾을 수 있습니다. 앞으로 보게 되겠지만 scikit-learn은 다른 파이썬의 과학 패키지들과도 잘 연동됩니다.
[[오픈 소스]]인 [[싸이킽-런]]([[scikit-learn]])은 자유롭게 사용하거나 배포할 수 있고, 누구나 소스 코드를 보고 실제로 어떻게 동작하는지 쉽게 확인할 수 있습니다. scikit-learn 프로젝트는 꾸준히 개발, 향상되고 있고 커뮤니티도 매우 활발합니다. 잘 알려진 [[머신 러닝]]([[machine learning]]) [[알고리듬]]들은 물론 [[알고리즘]]을 설명한 풍부한 문서( https://scikit-learn.org/stable/documentation )도 제공합니다. scikit-learn은 매우 인기가 높고 독보적인 파이썬 [[기계 학습]] 라이브러리입니다. 그래서 산업 현장이나 학계에도 널리 사용되고 많은 튜토리얼과 예제 코드를 온라인에서 쉽게 찾을 수 있습니다. 앞으로 보게 되겠지만 scikit-learn은 다른 파이썬의 과학 패키지들과도 잘 연동됩니다.


scikit-learn은 두 개의 다른 파이썬 패키지인 NumPy(넘파이)와 SciPy(싸이파이)를 사용합니다. 그래프를 그리려면 matplotlib(맷플롯립)을, 대화식으로 개발하려면 IPython(아이파이썬)과 Jupyter Notebook(주피터 노트북)도 설치해야 합니다.
scikit-learn은 두 개의 다른 파이썬 패키지인 NumPy(넘파이)와 SciPy(싸이파이)를 사용합니다. 그래프를 그리려면 matplotlib(맷플롯립)을, 대화식으로 개발하려면 IPython(아이파이썬)과 Jupyter Notebook(주피터 노트북)도 설치해야 합니다.
Line 1,517: Line 1,573:


아래 링크 참조
아래 링크 참조
* tensorflow 4 : linear regression http://studioplug.tistory.com/251
* tensorflow 4 : linear regression https://studioplug.tistory.com/251




Line 1,580: Line 1,636:


=== 파이게임(Pygame) ===
=== 파이게임(Pygame) ===
용도: 파이썬으로 비디오 게임을 제작하기 위한 프레임워크
[[Pygame]]으로 [[게임]]([[game]])을 만드는 방법은 [[파이게임]] 문서 참조.
장점: 게임 개발 분야에서 일하지 않는 사람이 이러한 프레임워크를 다룰 일이 있을까 라고 생각한다면 오산이다. 파이게임(Pygame)은 캔버스와 그래픽 그리기, 다채널 사운드 처리, 창과 클릭 이벤트 처리, 충돌 감지 등의 복잡한 작업 없이도 여러 가지 GUI 지향 동작을 편리하게 다룰 수 있는 방편을 제공한다. GUI 앱이라고 할지라도, 모든 앱에 파이게임이 제공하는 기능을 적용하지 못할 수도 있다는 사실을 감안하면서, 파이게임의 기능을 한차례 훑어보는 것도 좋다.


==== 토끼와 오소리 게임 ====
참고로 아래 예제는 파이썬 2.7.3으로 작성되어서 파이썬 3와는 조금 안 맞을 수 있다.


=== Cocos2d ===
Cocos2d란 2D 게임, 데모, 기타 시각적인/인터랙티브한 애플리케이션을 제작할 때 쓰이는 [[프레임워크]]입니다. Cocos2d 관련 추가 정보는 아래 링크에서 확인하실 수 있습니다.


* 10대들을 위한 파이선 게임 프로그램 시작하기
https://python.cocos2d.org/doc.html
2014.05.22


밑의 글에도 잠시 적기는 했지만 파이선으로 만든 프로그램이 인터랙티브하게 돌아야 할 이유는 많다,


파이선은 빠른 프로토타입이나 리버스 엔지니어링에 좋다고 한다. 쉽게 말하면 나같이 게으른 사람을 위해 만든 언어라고 보아도 좋다.  
간단하게 말하자면, Tkinter보다는 게임 만드는게 더 편하다는 것이죠. 일단 설치부터 해봅시다.


문제는 이제 이걸로 무엇인가를 해야 하는데 몇가지의 장벽이 있다.


하나는 기계와 다이렉트 io 하는 부분이 약하다는 것이다. c 나 다른 언어로 무엇인가를 해주어야 한다.
[[리눅스]]의 경우 [[터미널]]에서


펑셔널 어프로치가 아쉽다는 점... 이부분은 람다로 어느 정도 극복 가능하고 정 안되면 리스프나 스킴 인터프리터를 내재해도 된다.
sudo pip3 install cocos2d


그래픽이나 사운드같은 것이 잘 안된다는 점 .. 이부분을 pygame 같은 것으로 만들어서 놀면 된다는..
를 입력한다.


오늘은 그래서 파이선 게임을 만드는 예제를 한번 차분하게 번역을 해보기로 했다.


Beginning Game Programming for Teens with Python
[[윈도우즈]]의 경우 cmd를 실행시킨 뒤 다음을 입력합니다.


글의 제목은 10대들을 위한 파이선 게임 프로그램 시작하기 정도로 번역할 수 있겠다. 더 좋은 이름이 있으면 제게 알려주면 이름을 고치겠다.
pip install cocos2d


원문은 https://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-python 에서 볼수 있다.


그럼 조금씩 시작해 보자.
* [파이썬 게임 프로그래밍 공부] 6. Cocos2d 입문
2017-09-22


이 글은 튜토리얼 팀 멤버인  줄리안 메이어 , 13 세 파이썬 개발자가 적었다.   Google+ 와 Twitter 에서 찾을수 있다.
https://alegruz.imweb.me/blog/?idx=243177&bmode=view


비디오 게임을 만드는 방법이 대다한 것이라고 생각할지도 모르지만 그다지  복잡하지 않다!
이 튜토리얼에서  토끼와 오소리라는 간단한 게임을 만들 것이다. 여기서 히어로인 토끼는 오소리떼의 공격에서 성을 방어할 것이다.
http://toyfab.tistory.com/entry/10%EB%8C%80%EB%93%A4%EC%9D%84-%EC%9C%84%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%84%A0-%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0


= 멀티쓰레딩 문제 =
파이썬은 [[멀티스레딩]]을 지원하기 위하여 [[GIL]]([[Global Interpreter Lock]]), 즉 [[전역 인터프리터 락]]을 도입하여 사용하게 되었다. 따라서, python 스레드 10개를 만들어도 실제 Pthread/윈도우 쓰레드가 10개가 만들어지긴 하는데, GIL때문에 개중 동시에 하나밖에 안돌아가는 기이한 구조를 갖고 있다. 물론, 내부적으로 IO작업이 있을시 바로 다른 쓰레드로 문맥 교환을 해주고, 바이트 코트를 100번 실행한 다음에는 인터프리터 차원에서 다른 쓰레드로 교체 해주므로 동시 작업 비슷한 효과가 난다. 이것은 구현이 매우 쉬워지고 빠른 개발을 할 수 있다는 장점이 있으나 다중 코어 CPU가 보편화된 2006년 이후에는 다중 코어를 제대로 활용하지 못하는 구조적인 문제 때문에 성능에서 밀린다는 평가를 받게 되었다. 만일 특정 프로그램에 순진하게 CPU 코어를 2개 이상 동원하려고 할 경우, [[뮤텍스]]([[MutEx]]), 즉 한 쓰레드에 여러개의 CPU가 연산을 행하여 내부 정보를 오염시키는 것을 방지하는 역할을 맡는 GIL이 병목 현상을 일으켜 코어 하나를 쓸 때보다 오히려 성능이 크게 저하된다는 것.


= 멀티쓰레딩 문제 =
파이썬은 멀티스레딩을 지원하기 위하여 GIL(Global Interpreter Lock), 즉 전역 인터프리터 락을 도입하여 사용하게 되었다. 따라서, python 스레드 10개를 만들어도 실제 Pthread/윈도우 쓰레드가 10개가 만들어지긴 하는데, GIL때문에 개중 동시에 하나밖에 안돌아가는 기이한 구조를 갖고 있다. 물론, 내부적으로 IO작업이 있을시 바로 다른 쓰레드로 문맥 교환을 해주고, 바이트 코트를 100번 실행한 다음에는 인터프리터 차원에서 다른 쓰레드로 교체 해주므로 동시 작업 비슷한 효과가 난다. 이것은 구현이 매우 쉬워지고 빠른 개발을 할 수 있다는 장점이 있으나 다중 코어 CPU가 보편화된 2006년 이후에는 다중 코어를 제대로 활용하지 못하는 구조적인 문제 때문에 성능에서 밀린다는 평가를 받게 되었다. 만일 특정 프로그램에 순진하게 CPU 코어를 2개 이상 동원하려고 할 경우, [[뮤텍스]]([[MutEx]]), 즉 한 쓰레드에 여러개의 CPU가 연산을 행하여 내부 정보를 오염시키는 것을 방지하는 역할을 맡는 GIL이 병목 현상을 일으켜 코어 하나를 쓸 때보다 오히려 성능이 크게 저하된다는 것. 구글 내부에서 이미 [http://blip.tv/carlfk/mindblowing-python-gil-2243379 가루가 되도록 까인 부분]이다.


이런 문제점 때문에 파이썬에서 병렬 처리가 필요할때는 다중 [[쓰레드]]가 아닌 다중 [[프로세스]]로 GIL을 우회하는 방식을 사용한다. 2008년 이후에 Multiprocessing이라는 모듈을 제공하는데 이 모듈은 자식 프로세스를 만드는 방향으로 다중 코어 사용시 성능의 향상을 꾀하고 있다.
이런 문제점 때문에 파이썬에서 병렬 처리가 필요할때는 다중 [[쓰레드]]가 아닌 다중 [[프로세스]]로 GIL을 우회하는 방식을 사용한다. 2008년 이후에 Multiprocessing이라는 모듈을 제공하는데 이 모듈은 자식 프로세스를 만드는 방향으로 다중 코어 사용시 성능의 향상을 꾀하고 있다.


단, CPU 부하가 큰 작업을 돌리는 것이 아니면 GIL을 체감하기는 생각보다 쉽지 않다. 다중 쓰레딩으로 CPU의 여러 코어를 최대한 이용하고 싶은 경우에는 GIL가 굉장히 아쉬운 이슈지만, CPU를 별로 쓰지않거나 I/O가 주가 되는 작업은 유의미한 성능 차이가 없다. 게다가 어설프게 코어 몇개 깔짝깔짝 이용해서 계산하는 것보다는 그냥 C언어로 모듈을 짜서 붙이는게 더 빠르다. 즉, python에서 CPU를 많이 먹는 부분은 C 모듈을 짜서 붙이고 필요하다면 multiprocessing 모듈을 이용하여 멀티코어를 활용하는 편. ~~그 이상의 CPU-heavy한 작업은 동적 인터프리팅 언어 쓰지 말고 처음부터 [[C]], [[C++]]로 짜는게 맞다.~~
단, CPU 부하가 큰 작업을 돌리는 것이 아니면 GIL을 체감하기는 생각보다 쉽지 않다. 다중 쓰레딩으로 CPU의 여러 코어를 최대한 이용하고 싶은 경우에는 GIL가 굉장히 아쉬운 이슈지만, CPU를 별로 쓰지않거나 I/O가 주가 되는 작업은 유의미한 성능 차이가 없다. 게다가 어설프게 코어 몇개 깔짝깔짝 이용해서 계산하는 것보다는 그냥 C언어로 모듈을 짜서 붙이는게 더 빠르다. 즉, python에서 CPU를 많이 먹는 부분은 C 모듈을 짜서 붙이고 필요하다면 multiprocessing 모듈을 이용하여 멀티코어를 활용하는 편. 그 이상의 CPU-heavy한 작업은 동적 인터프리팅 언어 쓰지 말고 처음부터 [[C]], [[C++]]로 짜는게 맞다.
 
자세히 알고싶다면 다음 링크들을 참조.
 
* [http://www.youtube.com/watch?v=Obt-vMVdM8s Understanding the Python GIL (유튜브)]
* [http://openlook.org/blog/2006/11/12/cb-1136/ 파이썬 GIL 깊숙히! (上)]
* [http://openlook.org/blog/2007/02/27/cb-1146/ 파이썬 GIL 깊숙히! (상) 에 대한 몇 가지 변명]




== 파이썬으로 멀티코어 프로그램 만들기 ==
== 파이썬으로 멀티코어 프로그램 만들기 ==
파이썬으로 시도해보는 멀티 코어 프로세싱, 자고 있는 코어들을 깨우기
서버로 프로그래밍을 하다보면 sun grid engine을 사용하여 [[코어]]가 4개 이상인 pc cluster를 활용하곤 한다. 20개의 노드에 코어가 24개씩 있으면 job을 480개로 분할해서 하나씩 일을 주는 것이다. 개인용 pc에서는 이런 방법이 통하지 않으니 python의 multiprocessing을 사용해야한다.
 
서버로 프로그래밍을 하다보면 sun grid engine을 사용하여 코어가 4개 이상인 pc cluster를 활용하곤 한다. 20개의 노드에 코어가 24개씩 있으면 job을 480개로 분할해서 하나씩 일을 주는 것이다. 개인용 pc에서는 이런 방법이 통하지 않으니 python의 multiprocessing을 사용해야한다.


파이썬에서는 thread와 multiprocessing이라는 두 가지 내부 모듈이 있는데, 처음에는 이 둘이 어떤 이유로 성능차이를 보이는지 알 수 없었지만 관련 책자들을 찾아보다 보니 그 차이와 활용시점에 대해서 기술되어 있었다.
파이썬에서는 thread와 multiprocessing이라는 두 가지 내부 모듈이 있는데, 처음에는 이 둘이 어떤 이유로 성능차이를 보이는지 알 수 없었지만 관련 책자들을 찾아보다 보니 그 차이와 활용시점에 대해서 기술되어 있었다.
Line 1,672: Line 1,710:
아무래도 multiprocessing 하나만 사용했을 때는 속도상의 이점이 크게 느껴지지 않을 수도 있다. numba, cython과 같은 라이브러리를 사용하면 속도가 약 20배 정도 빨라지므로 이 둘을 조합하면 파이썬으로도 만족할만한 성능이 나올 것이다.
아무래도 multiprocessing 하나만 사용했을 때는 속도상의 이점이 크게 느껴지지 않을 수도 있다. numba, cython과 같은 라이브러리를 사용하면 속도가 약 20배 정도 빨라지므로 이 둘을 조합하면 파이썬으로도 만족할만한 성능이 나올 것이다.


* 파이썬으로 시도해보는 멀티 코어 프로세싱, 자고 있는 코어들을 깨우기
https://blog.naver.com/ossiriand/220548193193
https://blog.naver.com/ossiriand/220548193193


Line 1,724: Line 1,764:




make와 Makefile - 멍멍멍
* make와 Makefile - 멍멍멍
http://bowbowbow.tistory.com/12
https://bowbowbow.tistory.com/12




Line 1,731: Line 1,771:




OpenSSL 컴파일(compile) & 빌드(build)
* OpenSSL 컴파일(compile) & 빌드(build)
https://www.lesstif.com/pages/viewpage.action?pageId=6291508
https://www.lesstif.com/pages/viewpage.action?pageId=6291508


Line 1,804: Line 1,844:


* 파이썬 실행파일 만들기(cx_Freeze활용)
* 파이썬 실행파일 만들기(cx_Freeze활용)
July 25, 2017
https://koonhous.blogspot.kr/2017/07/create-executable-file-in-python-by-cxfreeze.html
https://koonhous.blogspot.kr/2017/07/create-executable-file-in-python-by-cxfreeze.html
* pygame 을 exe로 변환하기... 너무 힘들다!
2017-11-11
https://stackoverflow.com/questions/47223944/cx-freeze-no-module-named-codecs-windows-10
https://github.com/anthony-tuininga/cx_Freeze/issues/311
원작자가 알아본다니까 기대 중이다.. ㅎㅎ....
https://alegruz.imweb.me/blog/?idx=304335&bmode=view
= 함께 보기 =
* [[프로그래밍]]
* [[트킨터]] ([[Tkinter]])
* [[팬더즈]] ([[pandas]])
* [[뷰티펄 숲]] ([[Beautiful Soup]])
* [[파이게임]] ([[Pygame]])
* [[쟁고우]] ([[Django]])
* [[청부 살인]]


[[Category:프로그래밍]]
[[Category:프로그래밍]]
7

edits

Navigation menu