본문 바로가기

반응형

Python

(20)
[Python] C/C++ 연동 'extension' 모듈 들어가며 지난 포스트에서는 C로 만들어진 공용 라이브러리를 파이썬의 ctypes 모듈을 통해 호출하는 방법에 대해 알아 보았다. 이번 포스트에서는 C로 만들어진 공용 라이브러리를 일반 파이썬 모듈 처럼 사용 할 수 있는 방법에 대해 살펴 보겠다. C언어로 파이썬 확장 모듈을 만드는 과정을 요약하면 아래와 같다. 파이썬으로 부터 인자를 넘겨 받아 처리 할 수 있는 C 함수를 작성한다. 모듈의 메소드 정보를 저장하는 PyMethodDef 배열을 생성한다. 모듈 자체의 정보를 저장하는 PyModuleDef 구조체를 생성한다. PyInit_을 가지는 초기화 함수를 정의한다. setup.py 파일을 생성하여 모듈을 빌드한다. 위 과정을 완료하게 되면 C로 작성된 파이썬 모듈이 생성되고, 아래와 같이 일반 파이썬 ..
[Python] C/C++ 연동 'extension' 들어가며 기본적으로 스크립트 프로그래밍 언어인 파이썬은 사용하기 편리한 대신 컴파일 프로그래밍 언어에 비해 성능이 떨어진다. 이 문제에 대한 해결 방법으로 파이썬에서는 C/C++로 작성된 모듈을 파이썬에서 호출 할 수 있도록 하는 'extension'이라는 기능을 제공한다. 이번 시간에는 파이썬에서 C/C++의 함수를 호출하는 방법에 대해 살펴 보겠다. 본 포스트에 대한 다뤄진 프로젝트의 전체 소스 코드는 [여기]에서 확인 할 수 있다. 동적 라이브러리 만들기 파이썬에서 C/C++로 작성된 코드를 모듈로써 사용하기 위해서는 C/C++로 작성된 동적 라이브러리(윈도우의 경우 dll, 리눅스의 경우 so)가 필요하다. 이번 챕터에서는 각 윈도우와 리눅스에서 동적 라이브러를 만드는 방법에 대해 살펴 보도록 하..
[Python] 파이썬 3의 Modern 함수들 본 포스트의 원문은 Bartek Ciszkowski의 Modern Functions in Python 3이다. annotation을 이용해 함수 인자에 타입을 지정하고 mypy를 이용해 타입 검사를 하는 것에 대한 내용이지만 정작 mypy에 대한 설치나 사용 방법들에 대해서는 설명이 빠져 있다. mypy 관련 내용은 포스트 아래에 링크해 두었으니 참고 바란다. 파이썬은 빠르고 효과적으로 작업할 수 있는 언어로 지난 수십 년 동안 번창했습니다. 많은 현대 회사와 마찬가지로 우리 회사도 시스템 스택의 대부분에서 파이썬을 상당히 광범위하게 사용하지만 많은 경우 아직 파이썬 2.7을 계속 유지하고 있습니다. 가혹한 현실이지만 파이썬 2.7은 이미 한물 갔습니다. 솔직히 말해서 - 때가 되었습니다! - 우리는 P..
[Python] 유용하지만 잘 알려지지 않은 고급 트릭 5가지 본 포스트는 Charudatta Manwatkar의 Hidden Gems of Python을 한글로 번역한 내용이다. 요즘 저에게는 재미로 파이썬 문서를 읽는 취미가 생겼습니다. 재미로 무엇인가를 읽을 때에 비로소 우리가 지금까지 놓치고 있었던 "오! 파이썬으로 이런 것도 할 수 있어요?"라고 할만한 흥미로운 것들을 찾는 경향이 있습니다. 1. Function 속성(attribute) 클래스 및 개체의 속성을 설정하는 방법과 유사하게 함수에도 속성을 설정할 수도 있습니다. def func(x): intermediate_var = x**2 + x + 1 if intermediate_var % 2: y = intermediate_var ** 3 else: y = intermediate_var **3 + 1 ..
[Python] 당신이 모를 수도 있는 함수에 대한 4가지 고급 트릭 본 포스트는 Python Land’s deep dive on functions의 내용을 한글로 번역한 내용이다. 기본 파이썬 문법을 이해하고 있는 사람을 대상으로 하지만 각 섹션들마다 자세한 이해에 도움이 될만한 글들을 링크 걸어 두었으니 조금만 노력을 들이면 초보자들도 이해 할 수 있을것이라 생각한다. 하지만 아직 시작 단계이신 분들께는 여전히 어려운 주제일 수 있다. 그런 분들은 이 글과 함께 '파이썬 기초부터 시작하기'를 읽어 볼 것을 권해드린다. 당신은 함수의 키워드 아규먼트를 강제하거나, 함수 데코레이터를 생성하거나, 익명(람다) 함수를 생성하거나, 배열 또는 딕셔너리를 함수의 인수로 언팩(unpack)하는 방법을 알고 있습니까? 본 포스트는 파이썬 함수에 관한 4가지 고급 트릭을 다루고 있습니..
[Python] functools.partial() 이번 포스트에서는 functools 모듈의 partial 함수에 대해 짧고 굵게 집고 넘어 가도록 한다. 날씨가 많이 더워졌다. 다들 건강 관리 잘 하도록하자. 프로그래머는 지식 노동자가 아니다. 오래동안 고도의 집중력을 유지 할 수 있는 체력이 중요한 육체 노동자다. partial 함수란? functools.partial(func, /, *args, **keywords) partial 함수는 호출 될 때 positional argument(위치 기반 인자) args와 keyword argument(키워드 인자) keywords로 호출 된 함수 func처럼 동작하는 새 partial 객체를 반환한다. ※ positional argument, keyword argument, 함수 인자 리스트 사이에 있는 ..
[Python] 변수 #3 변수의 다양한 정보 확인 이번 포스트는 [Python] 파이썬 기초부터 시작하기 - 변수에서 연장 되는 잠시 쉬어가는 페이지 정도로 생각하면 된다. 알면 좋지만 모른다고해서 당장 문제 될것은 없으니 이런 것들이 있구나하는 마음으로 가볍에 읽고 나중에 필요 할 때 다시 와서 찾아 보면 된다. 목차 파이썬 변수의 소개 변수의 타입 >> 변수의 다양한 정보 확인 ctype 모듈을 활용한 변수의 정보 확인 == 와 is 연산자 mutable 변수와 immutable 변수 변수의 삭제 파이썬 정수는 Overflow가 없다? 들어가기 전에 이전 [Python] 파이썬 기초부터 시작하기 - 변수에서 파이썬 변수는 값 자체를 가지고 있는 것이 아니라, 메모리 어딘가에 생성 되어 있는 값을 가진 객체를 참조하는 참조자라고 이야기 했다. 여기서 ..
[Python] 변수 #1 소개 이번 포스트에서는 파이썬 언어의 변수에 대해 살펴 보도록 한다. 간단하게 변수의 선언과 사용에서 시작하여 변수의 메모리 구조와 형태에 대해 좀더 깊게 알아 보도록 할 것이다. 목차 >> 파이썬 변수의 소개 변수의 타입 변수의 다양한 정보 확인 ctype 모듈을 활용한 변수의 정보 확인 == 와 is 연산자 mutable 변수와 immutable 변수 변수의 삭제 파이썬 정수는 Overflow가 없다? 파이썬 변수의 선언과 사용 프로그래밍 언어에서 "변수"란 정보를 저장할 수 있는 공간(메모리)에 이름을 붙인 것이다. 메모리에 우리가 프로그래밍에서 사용하는 값을 저장하고 변수의 선언 시 붙여준 이름을 통해 그 값에 접근하여 읽고 쓸 수 있도록 해준다. C/C++, C#, Java와 같은 언어와는 다르게 파..
[Python] 파이썬 기초부터 시작하기 - Overview 이번 포스트는 파이썬 프로그래밍 언어를 배우는데 있어 기본중의 기본을 다룬다. 완벽하게 이해하려는 자세보다는 파이썬에는 이런 것들이 있구나 하는 정도의 가벼운 마음으로 읽고 넘어가면 된다. 두번 볼것도 없다. 한번 봤는데 이해가 안된다고해도 그냥 넘어가도록 한다. 자세한 사항은 이어지는 포스트들을 통해 자세히 알려드릴 것이며 중요하게 이해해야 하는 부분들은 중요하다고 따로 언급을 할 것이다. 본 포스트의 제일 마지막 [부록1. 같이 보면 좋은 글]에서 각 항목들을 자세히 다룬 포스트들의 링크를 준비 했으니 잘 활용하도록 하자. 파이썬 설치 본 튜토리얼을 수행하기 전 가장 먼저 해야 할 일은 파이썬을 설치하는 것이다. 파이썬은 파이썬 공식 홈페이지[여기]의 Download 페이지에서 각자의 OS에 맞는 파..
[idlc] 객체 직렬화(Object Serialize) 컴파일러 idlc란? IDLC란 인터페이스 정의 언어(Interface Definition Language) Compiler의 약자로써, 구글의 프로토콜버퍼, 플랫버퍼, 아파치의 스리프트, 넷플릭스에서 사용 되는 gRPC 처럼 IDL로 정의된 구조화된 데이터를 직렬화(serialize) 하는 코드를 다양한 프로그래밍 언어로 생성하는 컴파일러 입니다. 지원 언어 : C++ : #멀티플랫폼 지원, #std 11 버전 이상 필요, #header only 라이브러리 C# Python : Python 2.x 버전 까지 지원(3.x 이상 버전 미지원) idlc의 장점 1. 분산 컴퓨팅 환경에서 구조화된 객체를 전달하기에 좋습니다. 서버는 C++로 개발 되고, 클라이언트는 C#으로 개발 되었을 때, idlc를 사용하면 각각의..

반응형