python传递list,python传递参数

发布时间:2022-11-17

本文目录一览:

  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进行赋值,实际AB都是指向了同一个内存对象,所以对其中任意一个做出修改,即修改了内存中的这个对象,造成AB同时修改。解决方法,引入copy模块中的deepcopy()函数,保证AB指向长的一样但在内存中是两个对象,这样对其中一个修改时完全不影响到另一个。

python 是值传递还是引用传递 知乎

那要看数据类型了,intfloatstr这种就是传值,listdict、类的实例,自定义对象都是传引用。 下面是示例代码:

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. 有多个默认参数时,调用的时候,既可以按顺序提供默认参数。
  5. 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]