Python C AP????????????????????????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python C AP????????????????????????相关的知识,希望对你有一定的参考价值。
??????????????? signed ?????? ?????? ?????? main?????? init ?????? char
??????????????????Python?????????????????????????????????Python???????????????????????????????????????C???Python????????????????????????????????????
Python??????????????????????????????
?????????Python?????????????????????Py_Initialize()
????????????
Py_IsInitialized()
????????????Python?????????????????????????????????True????????????False????????????
C/C++?????????Python????????????????????????????????????
??????????????????????????????Py_Finalize()
???
????????????????????????Python????????????
?????????
#include <stdio.h>
#include <Python.h>
using namespace std;
int main() {
// ?????????Python?????????
Py_Initialize();
// ??????Python?????????????????????
if (Py_IsInitialized() == 0){
printf("fal to initialize Python
");
return -1;
}
printf("server start
");
// ??????Python?????????
Py_Finalize();
return 0;
}
?????????????????????:
?????????Python2??????????????????Python3?????????????????????Python??????????????????Python3?????????
g++ -I/usr/include/python2.7 -c main.cpp
g++ -o main main.o -L/usr/local/lib -lpython2.7 -lrt -lpthread -lutil -ldl
PyObject
Python???????????????????????????????????????????????? ??????????????????????????????Python???????????????????????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????????????????? ???????????????????????????????????????PyObject?????????????????????Python?????????????????????????????????PyObject *??? ???????????????Py_REFCNT???Py_TYPE??????????????????
???????????????????????????
Py_TYPE: ??????Python?????????????????????
Py_REFCNT??? Python??????????????????
Py_SIZE: ??????Python????????????
????????????...
Py_BuildValue
??????????????????C????????????????????????????????????Python???????????????????????????
??????????????????
s(str???None)[char *]
?????????utf-8???????????????null?????????C??????????????????Python str???????????????C??????????????????NULL????????????None???
s???(str???None)[char *???int]
?????????utf-8????????????C??????????????????????????????Python str???????????????C??????????????????NULL????????????????????????None???
y(??????)[char *]
?????????C??????????????????Python?????????????????????C??????????????????NULL????????????None???
y???(??????)[char *???int]
?????????C??????????????????????????????Python???????????????C??????????????????NULL????????????None???
z(str???None)[char *]
???s?????????
z???(str???None)[char *???int]
???s????????????
u(str)[Py_UNICODE *]
???Unicode(UCS-2???UCS-4)????????????null???????????????????????????Python Unicode???????????????Unicode??????????????????NULL????????????None???
u???(str)[Py_UNICODE *???int]
???Unicode(UCS-2???UCS-4)????????????????????????????????????Python Unicode???????????????Unicode??????????????????NULL???????????????????????????None???
U(str???None)[char *]
???s?????????
U???(str???None)[char *???int]
???s????????????
i(int)[int]
????????????C int?????????Python???????????????
b(int)[char]
??????C char?????????Python???????????????
h(int)[short int]
????????????C short int?????????Python???????????????
l(int)[long int]
???C long int?????????Python???????????????
B(int)[unsigned char]
???C unsigned char?????????Python???????????????
H(int)[unsigned short int]
???C unsigned short int?????????Python???????????????
I(int)[unsigned int]
???C unsigned int?????????Python???????????????
k(int)[unsigned long]
???C unsigned long?????????Python???????????????
L(int)[long long]
???C long long?????????Python???????????????
K(int)[unsigned long long]
???C unsigned long long?????????Python???????????????
n(int)[Py_ssize_t]
???C Py_ssize_t?????????Python?????????
c(?????????1?????????)[char]
??????????????????C int??????????????????1???Python???????????????
C(?????????1???str)[int]
??????????????????C int??????????????????1???Python str?????????
d(float) [double]
???C double?????????Python????????????
f(float) [float]
???C float?????????Python????????????
D(complex) [Py_complex *]
???C Py_complex???????????????Python?????????
O(object) [PyObject *]
?????????Python???????????????(??????????????????????????????1)???????????????????????????NULL?????????????????????????????????????????????????????????????????????????????????????????????Py_BuildValue()?????????NULL????????????????????????????????????????????????????????????SystemError???
S(object) [PyObject *]
???O??????
N((object) [PyObject *]
???O???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
O???(object) [converter, anything]
?????????????????????????????????????????????Python???????????????????????????????????????(??????void *??????)???????????????????????????????????????Python????????????????????????????????????NULL???
(items) (tuple) [matching-items]
????????????C????????????????????????????????????Python?????????
[items](list) [matching-items]
????????????C????????????????????????????????????Python?????????
{items}(dict) [matching-items]
????????????C????????????Python????????????????????????C????????????????????????????????????????????????????????????
????????????????????????????????????????????????SystemError???????????????NULL???
???????????????Python??????
??????Py_BuildValue
?????????????????????
void int_object(){
// ???????????????
PyObject *py_ival = Py_BuildValue("i", -5987); // Python???????????????
PyObject *py_ival2 = PyLong_FromLong(-8979);
int ival = PyLong_AsLong(py_ival); // ???Python????????????????????????C??????????????????
int ival2 = PyLong_AsLong(py_ival2); // ???Python????????????????????????C??????????????????
printf("ival = %d, ival2 = %d
", ival, ival2);
// ???????????????
PyObject *py_uval = Py_BuildValue("I", 465486); // Python???????????????
PyObject *py_uval2 = PyLong_FromUnsignedLong(1654864);
unsigned int uval = PyLong_AsUnsignedLong(py_uval); // ???Python????????????????????????C??????????????????
unsigned int uval2 = PyLong_AsUnsignedLong(py_uval2); // ???Python????????????????????????C??????????????????
printf("uval = %u, uval2 = %u
", uval, uval2);
}
??????????????????Python??????
void long_object(){
// ???????????????
PyObject *py_lval = Py_BuildValue("L", 45648946484984); // Python ?????????
long long c_lval = PyLong_AsLongLong(py_lval); // ?????????C????????????
printf("clval = %lld
", c_lval);
// ???????????????
PyObject *py_lval2 = PyLong_FromLongLong(234234623454525); // PyLong_FromLongLong ????????????????????????Python?????????
long long c_lval2 = PyLong_AsLongLong(py_lval2); // ?????????C????????????
printf("clval2 = %lld
", c_lval2);
}
?????????????????????Python??????
void double_object(){
// ???????????????
float fval = 632.045;
PyObject *py_fval = Py_BuildValue("d", fval); // Python ????????????
float c_fval = PyFloat_AsDouble(py_fval); // C???????????????
printf("fval = %f
", c_fval);
// ???????????????
double dval = 48941546.578;
PyObject *py_dval = PyFloat_FromDouble(dval); // Python ????????????
double c_dval = PyFloat_AsDouble(py_dval); // C???????????????
printf("c_dval = %lf
", c_dval);
}
????????????????????????
void boolean_object(){
// ???????????????
bool bval = true; // false ??????
PyObject *py_bval = Py_BuildValue("b", bval); // Python ????????????
int c_bval = PyInt_AsLong(py_bval);
printf("c_bval = %d
", c_bval);
// ???????????????
bool bval2 = false;
PyObject *py_bval2 = PyBool_FromLong(bval2); // Python ????????????
int c_bval2 = PyInt_AsLong(py_bval2);
printf("c_bval2 = %d
", c_bval2);
}
??????Python string??????
void string_object(){
// ???????????????
const char *pstr = "this is a test";
PyObject *py_str = Py_BuildValue("s", pstr); // Python ???????????????
char *c_pstr = PyString_AsString(py_str); // ??????C???????????????
printf("c_pstr = %s
", c_pstr);
// ???????????????
const char *pstr2 = "this is a test1";
PyObject *py_str2 = PyString_FromString(pstr2); // Python ???????????????
char *c_pstr2 = PyString_AsString(py_str2); // ??????C???????????????
printf("c_pstr2 = %s
", c_pstr2);
// ???????????????????????????????????????
// ???????????????
const int mem_len = 1024;
char *mem = new char[mem_len];
PyObject *py_mem = Py_BuildValue("s#", mem, mem_len); // 1. ??????????????? 2. ????????????????????? 3. ???????????????
int c_data_len = PyString_Size(py_mem);
printf("c_data_len = %d
", c_data_len);
// ???????????????
PyObject *py_mem2 = PyString_FromStringAndSize(mem, mem_len);
int c_data_len2 = PyString_Size(py_mem2);
printf("c_data_len2 = %d
", c_data_len2);
}
??????unicode???????????????
void unicode_object(){
const char *p_ustr = "?????????";
PyObject *py_unicode = PyUnicode_FromString(p_ustr); // ???C??????????????????Python???unicode
// ???unicode??????C????????????
PyObject *py_utf8 = PyUnicode_AsUTF8String(py_unicode); // ???unicode??????utf-8
const char *c_string = PyString_AsString(py_utf8); // ???utf-8??????c????????????
printf("c_utf8 = %s
", c_string);
// ?????????unicode?????????
// ????????????unicode?????????
PyObject *py_unicode_fmt = PyUnicode_FromFormat("%s%d%s", "?????????", 18, "???");
// ???unicode???C?????????
PyObject *py_utf8_fmt = PyUnicode_AsUTF8String(py_unicode_fmt);
const char *utf8_fmt = PyString_AsString(py_utf8_fmt);
printf("utf8_fmt = %s
", utf8_fmt);
}
??????Py_None
Py_None
????????????????????????
PyObject* none_object(){
Py_RETURN_NONE; // ???????????????return
}
main??????
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Python.h>
int main() {
// ?????????Python?????????
Py_Initialize();
// ??????Python?????????????????????
if (Py_IsInitialized() == 0){
printf("fal to initialize Python
");
return -1;
}
printf("server start
");
int_object();
long_object();
double_object();
boolean_object();
string_object();
unicode_object();
PyObject *py_ret = none_object();
if (py_ret == Py_None){
printf("is none object
");
}else{
printf("is not none object
");
}
// ??????Python?????????
Py_Finalize();
return 0;
}
以上是关于Python C AP????????????????????????的主要内容,如果未能解决你的问题,请参考以下文章