Java的不定长参数和Python的不定长参数对比

一:起因

(0)不定长参数,也叫可变的参数,就是再调用函数之前,并不确定到底需要传递多少个参数

(1)Java中的不定长参数用String... args / int... args等三个点来表示;Python中用*args元组来表示 / **args字典(map)来表示 

(2)不定参数有两个规定:第一,方法的参数列表中最多只有一个不定长度的参数;第二,就是不定长度的数组的位置必须是最后一个参数。不然不能通过编译。

二:实例对比

(1)Python的不定长参数

第一种方法——以一个*开始的参数,代表一个任意长的元组:

>>> def mul(*arg):
...     print arg
...
>>> mul(1,2,3,4,5,6,7,'hello','panfei')
(1, 2, 3, 4, 5, 6, 7, 'hello', 'panfei') #一个元组
>>>
*********************************

第二种方法——一个以**开始的参数,代表一个字典:

>>> def mul2(**arg):
...     print arg
...
>>> mul2(a=11,b=444,c=888)
{'a': 11, 'c': 888, 'b': 444} 一个字典
>>>
*********************************

注释:两种参数前者可以直接写实参,后者写成名=值的形式!

(2)Java中的不定长参数

package cs.tju.test;

public class Test {

	public static void main(String[] args) {
		changeArgs("aaa");
		changeArgs("aaa", "bbb");
		changeArgs("aaa", "bbb", "ccc");
	}
    /*@function  不定长参数的用法测试
     *@data 2015.05.19
     *String... 和 String[]意义应该差不多,但是不如String...灵活,他会生成一个动态的数组类似于vector或者list,能够用for访问
     *不定参数有两个规定:第一,方法的参数列表中最多只有一个不定长度的参数;
     *第二,就是不定长度的数组的位置必须是最后一个参数。不然不能通过编译。
     */
	public static void changeArgs(String arg, String... zyp) {
		System.out.println(arg);
		System.out.println("----------------");
		for (String s : zyp) {
			System.out.println(s);
		}
		System.out.println("*************-");
	}

}
时间: 2024-10-29 12:43:14

Java的不定长参数和Python的不定长参数对比的相关文章

理解 Python 中的可变参数 *args 和 **kwargs:

默认参数:  Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:", y print "x+y :", x + y getSum(1) # result: # x: 1 # y: 5 # x+y : 6 getSum(1,7) # result: # x: 1 # y: 7 # x+y : 8 可变参数: 另外一种达到可变参数 (Variabl

[转]Python函数的各种参数用法(含星号参数)

Python中函数的参数有4种形式,分别是: 位置或关键字参数(Positional-or-keyword parameter) 仅位置的参数(Positional-only parameter) 任意数量的位置参数(var-positional parameter) 任意数量的关键字参数(var-keyword parameter) 第一种:位置或关键字参数 这种参数是Python中默认的参数类型,定义这种参数后,可以通过位置参数,或者关键字参数的形式传递参数: ## 位置或者关键字参数 ##

Python的不定长参数研究

 通过观察程序和运行结果我们发现,传参时将1传给了a,将2传给了b,将3,4,5传给了*args,将m=6,n=7,p=8传给了**kwargs.为什么是这样传参呢?*args和**kwargs又是什么呢? *args表示任何多个无名参数,它是一个tuple,所以将3,4,5传给了*args: **kwargs表示关键字参数,它是一个dict,所以将m=6,n=7,p=8传给了**kwargs. 并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前. 下面用代码

Python的变长参数

Python的变长参数 def foo1(*args): for arg in args: print arg def foo2(**kargs): for key in kargs: print key, kargs[key] def foo3(*args, **kargs): print "args:" for arg in args: print arg print "kargs": for key in kargs: print key, kargs[key

python可变长参数(非关键字及关键字参数)

可变长参数存在的意义是:每次调用一个函数处理不同量的参数输入.即,参数在调用之前输入的参数数量是未知的,或者多次调用该函数,每次的参数输入的量是不一致的: 可变长参数分为非关键字和关键字类型,分别对应元组和字典,如下定义一个类,功能是打印出输入的函数: 1 >>> class Test: 2 def keyword(self,a,b,*non_keyword,**keyword): 3 print('a is ',a) 4 print('b is ',b) 5 print('non_ke

python基础教程函数参数

python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些关于函数的基础知识和函数传参的知识. 一.函数的相关介绍 1.函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 函数特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 2.函数的定义示例 定义一个函数要使用def语句,依次写出函数名.括

python函数 - 函数的参数

http://blog.csdn.net/pipisorry/article/details/39123103 self参数 self在定义时需要定义,但是在调用时会自动传入. self的名字并不是规定死的,但是最好还是按照约定是用self.self不必非写成self,可以是任意字符. self总是指调用时的类的实例.self代表类的实例,而非类. 在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例. 在描述符类中,self指的是描述符类的实例. [一篇文章让你彻底

Python 获得命令行参数的方法

本篇将介绍python中sys, getopt模块处理命令行参数 如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?需要模块:sys参数个数:len(sys.argv)脚本名: sys.argv[0]参数1: sys.argv[1]参数2: sys.argv[2] test.py 1 import sys 2 print "脚本名:", sys.argv[0] 3 for i in range(1, len(sys.argv)):

python中命令行参数

python中的命令行参数 python中有一个模块sys,sys.argv这个属性提供了对命令行参数的访问.命令行参数是调用某个程序时除程序名外的其他参数. sys.argv是命令行参数的列表 len(sys.argv)是命令行参数的个数 下面我们用一个简单的例子来说明一下. #!/usr/bin/python #coding:utf-8 import sys ##加载sys这个模块. for i in range(len(sys.argv)): print "第%d个参数是:%s"