首页 > 编程知识 正文

python传递list,python传递参数

时间:2023-12-25 12:47:13 阅读:322312 作者:PEAC

本文目录一览:

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]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。