大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
给你一个例子看看,你就知道怎么做了
为清原等地区用户提供了全套网页设计制作服务,及清原网站建设行业解决方案。主营业务为网站建设、成都网站制作、清原网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
C++的接口
typedef struct
{
unsigned long DeviceType;
int Handle;
int NumberOfClients;
int SerialNumber;
int MaxAllowedClients;
}NeoDevice;
int _stdcall icsneoFindNeoDevices(unsigned long DeviceTypes, NeoDevice *pNeoDevices, int *pNumberOfDevices);
Python调用的代码:
class NeoDevice(Structure):
_fields_ = [("DeviceType",c_ulong),
("Handle",c_int),
("NumberOfClients",c_int),
("SerialNumber",c_int),
("MaxAllowedClients",c_int)]
class cNeoVICan(CCanBase):
def __init__(self):
neoVi = windll.icsneo40
self.icsneoFindNeoDevices = neoVi.icsneoFindNeoDevices
if __name__ == "__main__":
canBus = cNeoVICan()
print canBus.icsneoGetDLLVersion()
iNumberOfDevices = (NeoDevice * 10)()
num = c_int()
iResult = canBus.icsneoFindNeoDevices(c_ulong(65535), cast(iNumberOfDevices, POINT(NeoDevice)), byref(num))
题主,你基本操作没什么问题,有几个小地方要修改一下,修改如下:
你的源码:
PyObject* list = PyList_New(3);
for (size_t i = 0; i 3; i++)
PyList_Append(list, Py_BuildValue("i", i));
PyEval_CallObject(pFunc, list);
--------------------------------------------------------------------------------------
修改后,应该是这样
PyObject* pArgs = NULL;
PyObject* list = PyList_New(0); //3改成0
pArgs = PyTuple_New(1); //定义1个参数
for (size_t i = 0; i 3; i++)
PyList_Append(list, Py_BuildValue("i", i)); //这样才能用Append,
PyTuple_SetItem(pArgs, 0, list); //将列表赋给参数
PyEval_CallObject(pFunc, list); //传入参数,调用函数
注意事项:PyList_New(0) 初始化0的时候,应该用Append初始化
PyList_New(3) 初始化3个时候,应该用SetItem初始化
如果用Append的话,会出现[NULL, NULL, NULL]的情况
我在给一个完整的:
Python :(hello.py)
def TestList(nlist):
print(nlist)
return
一般参数都是已元组形式传入的
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
PyObject* pModule =NULL;
PyObject* pList = NULL;
PyObject* pFunc = NULL;
PyObject* pArgs = NULL;
pModule = PyImport_ImportModule("hello");
pFunc = PyObject_GetAttrString(pModule, "TestList");
pArgs = PyTuple_New(1);
pList = PyList_New(0);
for (int i = 0; i 3; i++)
{
PyList_Append(pList, Py_BuildValue("i", i));
}
PyTuple_SetItem(pArgs, 0, pList);
pRet = PyEval_CallObject(pFunc, pArgs);
Py_Finalize();
最后输出的:[0, 1, 2]
findAt函数可以使用可变参数*args,即findAt(*args)。同样还是将几十个坐标放到a列表中,然后直接调用findAt(*a)
1、首先我们定义一个列表输入一串大小不一的数字。
2、可以用sort()方法对定义的列表排序,注意,sort只是对列表排序,它没有返回一个值。
3、输入print列表名即可得到排序后的列表数据。
4、倒序可以用这个reverse方法,把元素位置倒转过来。
5、然后再次print列表名,这样就会得到倒转顺序之后的列表数据。
5、如图两相对比即实现了从高到低和从低到高排序。
你的意思是 函数值返回值直接放到另一个函数当参数吧
实际上可以变通一下,返回的是元组,然后怎么拿到元组中的一个
最简单的就是使用[]
如果 return a,b,c ,想拿到b
使用 fun()[1] // 下标从0开始