• 在使用python文件中无论是命名还是什么,除了注释以外,尽量不要使用中文,使用中文时,编码格式要是UTF-8(Python)

# 接口函数

# ### Py_SetPythonHome

用处:设置python解释器的路径 注意:在一些高版本的python中,不需要添加这个函数,这个函数也被移除了

# ### Py_Initialize(void)

用处:初始化python解释器的环境等等

# Py_Finalize

用处:释放python解释器环境

# bool Py_IsInitialized()

用处:检查python解释器的环境是否完成初始化

# PyObject * Py_BuildValue

用处:创建变量,就像在python中创建一样 注意:Py_BuildValue("[ssi]","one", "two", 3)有[]时是列表,其他的和python一样

PyObject * pylist = Py_BulidValue("[ssi]","one","two");
//在Python中创建一个List变量并返回PyObject*对象

# PyObject * PyImport_ImportModule(const char *)

用处:导入.py文件作为一个模块 注意:导入的.py文件默认是从python的home路径开始找。

PyObject * pyModule = PyImport_ImportModule("all");
// 导入all.py文件作为一个模块

# PyObject_GetAttrString(PyObject*,const char*)

用处:模块中的函数,类等等

PyObject * pyCM_AutoPrint = PyObject_GetAttrString(pyModule,"AutoPrint");
//从模块pyModule中导入AutoPrint
//AutoPrint可能是一个class 也可能是 function

# Py_DECREF(PyObject *)

用处:删除python对象的引用计数

// 假如我不会再使用AutoPrint模块,要销毁时
Py_DECREF(pyCM_AutoPrint);
// 因为前面我只生成一次AutoPrint模块所以引用计数为1,减少1后,为0,模块销毁

!PyObject_CallXXX 一般为使用PyObject中的函数,类等等

# PyObject_CallFunction(PyObject*, const char* arg)

# PyObject_CallMethod(PyObject*, const char* methodName, const char* arg)

# PyObject_CallObject(PyObject* PyObject * arg)

// 如果 AutoPrint是一个类,且构造函数不需要参数
// 调用AutoPrint的构造函数
PyObject * pyCO_AutoPrint = PyObject_CallObject(pyCM_AutoPrint,NULL);
// 调用AutoPrint的print(s:str)方法
PyObject * pyCO_AutoPrint = PyObject_CallMethod(pyCM_AutoPrint,"print","s","Hello");
// 如果 AutoPrint是一个函数,不接受参数
PyObject * CallFunction(pyCM_Auto,NULL);

# PyErr_Print

用处:打印错误信息

# PyErr_SetString

用处:设置错误信息 备注:异常设置的类别有很多,具体的到python官网看

# 接口宏

# PyRun_SimpleString(const char *)

用处:将参数作为python语句,让python解释器解释

PyRun_SimpleString("print('Hello')");
// 执行print("Hello")语句

# bool PyList_Check(PyObject*)

用处:检查python参数是否是列表List 返回值:是列表返回true,不是列表返回false

# 变量转化

变量转化通用规则:(可以在Python的Doc文件夹中找到到,官网中也可以) char类型在python中是不同的类型,如UTF-8,Unicode等 检查某一个类型时 可以用这个规则 -> PyType_Check

# PyType_FromType

将C变量转化为Python对象

# PyLong_FromLong

用处:将C语言中的Long转化为Python的long

# PyFloat_FromDouble

用处:将C语言中的Float转化为Python的Double

# PyUnicode_FromString

用处:将C语言中的字符串转化为Python的str

# PyType_AsType

将Python对象转化为C对象

# PyUnicode_AsUTF8

用处:将python中的str转化为c语言中的char*

# PyFloatAsDouble

用处:将Python中的Float转化为C语言中的Double

# PyLong_AsLong

用处:将python中的Long,转化为c语言中的Long

# 操作列表

# PyObject* PyList_New(Py_ssize_t size)

用处: 创建一个新的空列表大小为size

# Py_ssize_t PyList_Size(PyObject *)

用处:获取列表大小 返回值:Py_ssize_t

# PyObject * PyList_GetItem(PyObect *,int index)

用处:获取列表中的元素

# int PyList_SetItem(PyObject* list, Py_ssize_t index, PyObject* item)

用处:将list中索引为index的元素设置为item 返回值:0成功 -1失败`

# int PyList_Append(PyObject* list, PyObject* item)

用处:向list末尾添加一个元素 返回值:0成功,-1失败

# int PyList_Insert(PyObject* list, Py_ssize_t index, PyObject* item)

用处:向list中索引为index的位置插入元素item 返回值:0成功,-1失败

# int PyList_Remove(PyObject* list, PyObject* item)

用处:删除元素 返回值:0成功,-1失败

# int PyList_Sort(PyObject* list)

用处:排序列表 返回值:0成功,-1失败

# 操作字典

# PyObject* PyDict_New();

用于创建一个新的空字典对象

# int PyDict_SetItem(PyObject* dict, PyObject* key, PyObject* value);

用于将键值对添加到字典中 返回值:0成功,-1错误

# PyObject* PyDict_GetItem(PyObject* dict, PyObject* key);

用于根据键获取字典中的值。

# int PyDict_Contains(PyObject* dict, PyObject* key);

用于检查字典中是否包含指定的键 返回值:1包含,0不包含,-1错误

# PyObject* PyDict_Items(PyObject* dict);

用于返回字典中所有键值对的列表

# PyObject* PyDict_Keys(PyObject* dict);

用于返回字典中所有键的列表 返回值:Python列表

# PyObject* PyDict_Values(PyObject* dict);

用于返回字典中所有值的列表 返回值:Python列表

# Py_ssize_t PyDict_Size(PyObject* dict);

用于获取字典中键值对的数量

# void PyDict_Clear(PyObject* dict);

用于清空字典中的所有键值对