python怎样接收参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python怎样接收参数相关的知识,希望对你有一定的参考价值。

  Python中函数参数的传递是通过“赋值”来传递的,函数参数的接收传递有四种形式:

  1. F(arg1,arg2,...)

  2. F(arg2=,arg3=...)

  3. F(*arg1)

  4. F(**arg1)

  第1
种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少,而且顺序还必须相同。也就是说形参和实参的个数必须一致,而且想给形参1的值必须是实参中的第一位,形参与实参之间是一一对应的关系,即“形参1=实参1
形参2=实参2...”。很明显这是一种非常不灵活的形式。比如:"def addOn(x,y): return x +
y",这里定义的函数addOn,可以用addOn(1,2)的形式调用,意味着形参x将取值1,主将取值2。addOn(1,2,3)和addOn
(1)都是错误的形式。

  第2种方式比第1种方式好一点,在定义的时候已经给各个形参定义了默认值。因此,在调用这种函数时,如果没有给对应的形式参数传递实参,那么这个形参就将使用默认值。比如:“def
addOn(x=3,y=5): return x +
y”,那么addOn(6,5)的调用形式表示形参x取值6,y取值5。此外,addOn(7)这个形式也是可以的,表示形参x取值7,y取默认值5。这时候会出现一个问题,如果想让x取默认值,用实参给y赋值怎么办?前面两种调用形式明显就不行了,这时就要用到Python中函数调用方法的另一大绝招
──关健字赋值法。可以用addOn(y=6),这时表示x取默认值3,而y取值6。这种方式通过指定形式参数可以实现可以对形式参数进行“精确攻击”,一个副带的功能是可以不必遵守形式参数的前后顺序,比如:addOn(y=4,x=6),这也是可以的。这种通过形式参数进行定点赋值的方式对于用第1种方式定义的函数也是适用的。

  上面两种方式定义的形式参数的个数都是固定的,比如定义函数的时候如果定义了5个形参,那么在调用的时候最多也只能给它传递5个实参。但是在实际编程中并不能总是确定一个函数会有多少个参数。第3种方式就是用来应对这种情况的。它以一个*加上形参名的方式表示,这个函数实际参数是不一定的,可以是零个,也可以是N个。不管是多少个,在函数内部都被存放在以形参名为标识符的tuple中。比如:

  对这个函数的调用addOn() addOn(2) addOn(3,4,5,6)等等都是可以的。

  与第3种方式类似,形参名前面加了两个*表示,参数在函数内部将被存放在以形式名为标识符的dictionary中。这时候调用函数必须采用key1=value1、key2=value2...的形式。比如:

  1. def addOn(**arg):

  2. sum = 0

  3. if len(arg) == 0: return 0

  4. else:

  5. for x in arg.itervalues():

  6. sum += x

  7. return sum

  那么对这个函数的调用可以用addOn()或诸如addOn(x=4,y=5,k=6)等的方式调用。

  上面说了四种函数形式定义的方式以及他们的调用方式,是分开说的,其实这四种方式可以组合在一起形成复杂多样的形参定义形式。在定义或调用这种函数时,要遵循以下规则:

  1. arg=必须在arg后

  2. *arg必须在arg=后

  3. **arg必须在*arg后

  在函数调用过程中,形参赋值的过程是这样的:

  首先按顺序把“arg”这种形式的实参给对应的形参

  第二,把“arg=”这种形式的实参赋值给形式

  第三,把多出来的“arg”这种形式的实参组成一个tuple给带一个星号的形参

  第四,把多出来的“key=value”这种形式的实参转为一个dictionary给带两个星号的形参。

  听起来好复杂,实际是是很简单的。很直观,来看例子:

  1. def test(x,y=5,*a,**b):

  2. print x,y,a,b

  就这么一个简单函数,来看看下面对这个函数调用会产生什么结果:

  test(1) ===> 1 5 ()

  test(1,2) ===> 1 2 ()

  test(1,2,3) ===> 1 2 (3,)

  test(1,2,3,4) ===> 1 2 (3,4)

  test(x=1) ===> 1 5 ()

  test(x=1,y=1) ===> 1 1 ()

  test(x=1,y=1,a=1) ===> 1 1 () 'a':1

  test(x=1,y=1,a=1,b=1) ===> 1 1 () 'a':1,'b':1

  test(1,y=1) ===> 1 1 ()

  test(1,2,y=1) ===> 出错,说y给赋了多个值

  test(1,2,3,4,a=1) ===> 1 2 (3,4) 'a':1

  test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) 'k':1,'t':2,'o':3
参考技术A listinput = args[]

args[0] 是python 文件
args[1:] 是参数。

Struts2框架怎样在Ajax请求中接收数组或List集合参数

具体实现方式应该是:

// 假设有参数数组
var userIds = [100 ,101 ,102 ,103 ,104] ;
// 将其转换为Object类型
var params = ;
var index = 0 ;
for(var n in userIds)
params[index ++] = n ;


// Action接收代码
private List<Long> userIds ;

public void setUserIds(List<Long> userIds)
this.userIds = userIds ;
参考技术A js里面用post方法传递参数,定义js数组,传参数是就直接传就可以了
例,我用的jquery
var str='aaa';
var exp = new Array();
exp.push(val1);
exp.push(val2);

$post('getpostdata.php',
expdata: exp, strdata:str,
function successget(data)
//call back
,
"json");

然后后台如果是php里就是 $data = $_REQUEST["expdata"];
$val1 = $data[0];
$val2 = $data[1];
$str = $_REQUEST["strdata"];

以上是关于python怎样接收参数的主要内容,如果未能解决你的问题,请参考以下文章

ASP中怎样传递参数

winform客户端向web地址传参,怎样去接收参数。

调用spring restful接口怎样传递字符数组参数

webservice怎样接收json类型的参数

webservice怎样接收json类型的参数

Struts2框架怎样在Ajax请求中接收数组或List集合参数