- 在使用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);
用于清空字典中的所有键值对