python 3 호출 c 언어 코드 의 전 과정 기록
linux: python3.5.2 + ubuntu-gnome-16.04-desktop-amd64
windows:cygwin + powershell + python3.6
풀 언어 python 은 왜 c 코드 를 호출 합 니까?
c.python 과 비교 하면 python 은'대량 연산'작업 을 잘 하지 못 합 니 다.python 프로그램의 장점 은 간단 하고'IO 밀집 형 작업'(예 를 들 어 파일 을 열 고 그림 을 다운로드 하 며 스 크 립 트 를 실행 하 는 것)에 적합 합 니 다.python 은 유명한'풀 언어'로 서'밀집 형 작업 계산'을 신속하게 실현 하 는 방법 은 바로'c 의 코드 를 가 져 와 서 직접 사용 하 는 것'이다.
Python 의 ctypes 모듈 은 Python 호출 C 방법 중 가장 간단 한 것 일 수 있 습 니 다.ctypes 모듈 은 C 언어 와 호 환 되 는 데이터 형식 과 함 수 를 제공 하여 dll 파일 을 불 러 옵 니 다.따라서 호출 할 때 원본 파일 을 수정 하지 않 아 도 됩 니 다.바로 이러한 방법의 단순 성 을 다 졌 습 니 다.
linux
1.C 언어 프로그램 을 준비 하여 add.c 로 저장
#include <stdio.h>
int add_int(int, int);
float add_float(float, float);
int add_int(int num1, int num2)
{
return num1 + num2;
}
float add_float(float num1, float num2)
{
return num1 + num2;
}
2.so 라 이브 러 리 로 컴 파일Ubuntu 에서 실행:gcc-shared-wl,-soname,adder-o adder.so-fpIC add.c
3.python 코드 를 준비 하여 python-c.py 로 저장 합 니 다.
import ctypes
#load the shared object file
adder = ctypes.cdll.LoadLibrary('./adder.so')
#Find sum of integers
res_int = adder.add_int(4,5)
print("4 + 5 = " + str(res_int))
#Find sum of floats
a = ctypes.c_float(5.5)
b = ctypes.c_float(4.1)
add_float = adder.add_float
add_float.restype = ctypes.c_float
print("5.5 + 4.1 = " + str(add_float(a, b)))
4.테스트실행:python 3 python-c.py
결 과 는 다음 과 같다.
4 + 5 = 9
5.5 + 4.1 = 9.600000381469727
5.설명
Python 파일 에서 처음에는 ctypes 모듈 을 가 져 온 다음 cdll.LoadLibrary 를 사용 합 니 다.
함수 가 우리 가 만 든 라 이브 러 리 파일 을 불 러 옵 니 다.이렇게 하면 우 리 는 변수 adder 를 통 해 C 라 이브 러 리 의 함 수 를 사용 할 수 있다.adder.addint()호출 시 내부 에서 C 함수 addint 호출.ctypes 인 터 페 이 스 는 C 함 수 를 호출 할 때 원생 Python 의 기본 문자열 형 과 정형 을 사용 할 수 있 도록 합 니 다.
다른 불 형 과 부동 소수점 형 같은 유형 에 대해 서 는 정확 한 ctype 형식 을 사용 해 야 합 니 다.adder.addfloat()함수 가 전 삼 될 때,우 리 는 먼저 Python 의 10 진법 값 을 c 로 바 꿔 야 합 니 다.float 형식,그리고 나 서 야 C 함수 에 전송 할 수 있 습 니 다.이런 방법 은 간단 하고 뚜렷 하지만 제한 을 받는다.예 를 들 어 C 에서 대상 을 조작 할 수 없다.
윈도 우즈
1.C 언어 프로그램 을 준비 하여 add.c 로 저장
위 와 같다
2.dll 라 이브 러 리 로 컴 파일
cygwin 에서 실행:gcc-shared-wl,-soname,adder-o adder.dll-fpIC add.c
3.python 코드 를 준비 하여 python-c.py 로 저장 합 니 다.
import ctypes
#load the shared object file
adder = ctypes.cdll.LoadLibrary('.\\adder.dll')
#Find sum of integers
res_int = adder.add_int(4,5)
print("4 + 5 = " + str(res_int))
#Find sum of floats
a = ctypes.c_float(5.5)
b = ctypes.c_float(4.1)
add_float = adder.add_float
add_float.restype = ctypes.c_float
print("5.5 + 4.1 = " + str(add_float(a, b)))
4.테스트powershell 에서 실행:
.\python-c.py
다음 오류 가 발생 합 니 다:OSError: [WinError 126]
원인:adder.dll 자 체 는 다른 라 이브 러 리 에 의존 합 니 다.이 라 이브 러 리 를 현재 디 렉 터 리 로 복사 해 야 합 니 다.
cygwin 에서 실행:ldd adder.dll
알림 의존 라 이브 러 리
이 라 이브 러 리 를 현재 디 렉 터 리 로 복사 하여 실행:cp xxx.dll.
powershell 에서 다시 실행:.\python-c.py
결 과 는 다음 과 같다.
총결산
python 3 호출 c 언어 코드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python 3 호출 c 언어 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Jupyter 공식 DockerHub에 대한 메모에 기재되어 있다. base-notebook minimal-notebook scipy-notebook tensorflow-notebook datascience-notebook pyspark-notebook all-s...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.