本文目录一览:
- 1、python中怎么利用max函数处理list?
- 2、python中使用socket编程,如何能够通过UDP传递一个列表类型的数据?
- 3、python函数中传入list为啥会这样?,这破问题卡了一整天
- 4、python 是值传递还是引用传递 知乎
- 5、在python的函数中,如何将列表list的一部分作为函数的参数?
- 6、C++调用时python时,如何传入数组做为参数
python中怎么利用max函数处理list?
max可以这样用的,你拼错变量名了。
a = [2,3,4,5,6,7]
max(a)
7
python中使用socket编程,如何能够通过UDP传递一个列表类型的数据?
Python中的 list 或者 dict 都可以转成JSON字符串来发送,接收后再转回来。
首先
import json
然后,把 list 或 dict 转成 JSON
json_string = json.dumps(list_or_dict)
如果你用的是Python3,这里的 json_string 会是 str 类型(即Python2的unicode类型),可能需要编码一下:
if type(json_string) == six.text_type:
json_string = json_string.encode('UTF-8')
用socket发送过去,例如
s.sendto(json_string, address)
对方用socket接收,例如
json_string, addr = s.recvfrom(2048)
把JSON转成 list 或 dict
list_or_dict = json.loads(json_string)
下面是个完整的例子:
client.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import socket
import json
import six
address = ('127.0.0.1', 31500)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
json_string = json.dumps(mylist)
if type(json_string) == six.text_type:
json_string = json_string.encode('UTF-8')
s.sendto(json_string, address)
s.close()
server.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import socket
import json
address = ('127.0.0.1', 31500)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(address)
json_string, addr = s.recvfrom(2048)
mylist = json.loads(json_string)
print(mylist)
s.close()
请先运行server.py,再运行client.py
python函数中传入list为啥会这样?,这破问题卡了一整天
代码及运行结果如图:
从你的问题来看是一个新手,建议直接放弃2.x版本学习3.x版本。对现在的你来说用到的2与3版本之间的差异可能也就是print(如图中所示与你代码的差异),影响很小。
代码解释:
你的代码中用A,B = inputlist,inputlist进行赋值,实际A与B都是指向了同一个内存对象,所以对其中任意一个做出修改,即修改了内存中的这个对象,造成A与B同时修改。解决方法,引入copy模块中的deepcopy()函数,保证A与B指向长的一样但在内存中是两个对象,这样对其中一个修改时完全不影响到另一个。
python 是值传递还是引用传递 知乎
那要看数据类型了,int,float,str这种就是传值,list,dict,类的实例,自定义对象都是穿引用。
下面是示例代码:
def change(int1,float1,str1,dict1,obj1,list1):
int1+=1
float1+=1
str1+='changed'
dict1['none_exist_key']='none_exist_value'
obj1=None
list1.append('change')
class obj:
pass
int1=0
float1=0.0
str1='origin'
dict1={'key':'value'}
obj1=obj()
list1=['only_element']
print(int1)
print(float1)
print(str1)
print(dict1)
print(obj1)
print(list1)
change(int1,float1,str1,dict1,obj1,list1)
print('after change')
print(int1)
print(float1)
print(str1)
print(dict1)
print(obj1)
print(list1)
不明白可追问。
在python的函数中,如何将列表list的一部分作为函数的参数?
后面paraTestList(a[2:])中,括号里面的a[2:]命令是指创建了一个包含列表a的一部分的一个副本列表。具体做法是:
def
paraTestList(L):
L[0]='z'
a=['a','b','c','d']
b=a[2:]
paraTestList(b)
print(b)
具体情况如下:
1.Python的函数定义简单但灵活度大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,也可以简化调用者的代码。
2.默认参数可以简化函数的调用,设置默认参数时要注意:一是必选参数在前,默认参数在后,否则Python的解释器会报错;二是如何设置默认参数。当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
3.默认参数降低了函数调用的难度,而一旦需要更复杂的调用时,又可以传递更多的参数来实现。无论是简单调用还是复杂调用,函数只需要定义一个。
4.有多个默认参数时,调用的时候,既可以按顺序提供默认参数。
4.Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。
C++调用时python时,如何传入数组做为参数
题主,你基本操作没什么问题,有几个小地方要修改一下,修改如下:
你的源码:
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]