Python 中的参数收集

柔情只为你懂 2022-05-31 10:12 255阅读 0赞

Python 解决函数参数个数的不确定性:

一、*arg(*必须有,arg 是名称可以变)
用来收集位置参数

def func(x,*arg):
print x #输出参数 x 的值
result = x
print arg #输出通过 *arg 方式得到的值
for i in arg:
result +=i
return result
print func(1,2,3,4,5,6,7,8,9) #赋给函数的参数个数不仅仅是 2个

程序的运行结果:
1 #函数体内的第一个 print,参数 x 得到的值是 1
(2, 3, 4, 5, 6, 7, 8, 9) #这是函数内的第二个 print,参数 arg 得到的是一个元组
45 #最后的计算结果

如果输入的参数个数不确定,其它参数全部通过 *arg,以元组的形式由 arg 收集起来。
• 值 1 传给了参数 x
• 值 2,3,4,5,6.7.8.9 被塞入一个 tuple 里面,传给了 arg

def foo(*args):
… print args #打印通过这个参数得到的对象

foo(1,2,3)
(1, 2, 3)
foo(“qiwsir”,”qiwsir.github.io”,”python”)
(‘qiwsir’, ‘qiwsir.github.io’, ‘python’)
foo(“qiwsir”,307,[“qiwsir”,2],{“name”:”qiwsir”,”lang”:”python”})
(‘qiwsir’, 307, [‘qiwsir’, 2], {‘lang’: ‘python’, ‘name’: ‘qiwsir’})
foo(“python”)
(‘python’,)
即使只有一个值,也是用 tuple 收集它。注意,在 tuple 中,如果只有一个元素,后面要有一个逗号。

也可以不给 *args 传值:

def foo(x, *args):
… print “x:”,x
… print “tuple:”,args

foo(7)
x: 7
tuple: ()
这时 *args 收集到的是一个空的 tuple。

二、**kargs
用来收集关键字参数

def foo(**kargs):
… print kargs

foo(a=1,b=2,c=3) #注意观察这次赋值的方式和打印的结果
{‘a’: 1, ‘c’: 3, ‘b’: 2}

foo(1,2,3)
Traceback (most recent call last):
File ““, line 1, in
TypeError: foo() takes exactly 0 arguments (3 given)

如果用 **kargs 的形式收集值,会得到 dict 类型的数据,但是,需要在传值的时候说明 “键” 和 “值”,因为在字典中是以键值对形式出现的。

三、综合 *arg 和 **kargs

def foo(x,y,z,*args,**kargs):
… print x
… print y
… print z
… print args
… print kargs

foo(‘qiwsir’,2,”python”)
qiwsir
2
python
()
{}
foo(1,2,3,4,5)
1
2
3
(4, 5)
{}
foo(1,2,3,4,5,name=”qiwsir”)
1
2
3
(4, 5)
{‘name’: ‘qiwsir’}

发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python参数传递

    函数在传递参数时,经常会用到位置传递与关键字传递。 位置传递:按照形参位置,相对应传入实参。 关键字传递:使用定义时的形参关键字并赋予其相应的实参,此时形参位置不一定是顺

    相关 1.3.1 Python名词和参数收集

    1,参数和变量 在定义函数的时候(def来定义函数,称为def语句),函数名后面的括号里如果有变量,它们通常被称为“ 形参”。调用函数的时候,给函数提供的值叫作“ 实参”,或