赞
踩
假如我们想编写一个可以接受任意数量参数的函数
解决思路:
我们可以编写一个可接受任意数量的位置参数的函数,它是以*开头的参数。
下面是示例:
def avg(first,*rest):
return (first+sum(rest))/(1+len(rest))
print(avg(2,5)) -->3.5
print(avg(3,5,6,7,8)) -->5.8
在上面的代码中,rest是一个元组,这个元组包含了其他传递过来的位置参数,在计算过程中会被当做一个序列来处理,而*则是起解参的作用。
下面再举一个简单的例子:
def fun(*args):
sum=0
for i in args:
sum+=i
print(sum)
fun(3,4,5) #--> 12
fun(5,8,9,6,7) #--> 35
如果想要编写一个接受任意数量的关键字参数的函数呢?可以用以****开头**的参数。
下面是示例:
def fun(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
fun(1,2,a=20,b=50,c=80)
输出结果:
1
(2,)
{'a': 20, 'b': 50, 'c': 80}
上面的示例中,涉及到参数的混合使用,*args是位置参数,**kwargs是关键字参数,是以字典的形式传递的。
为了帮助理解,我们再举一个例子:
import html #导入html模块
def make_elements(name,value,**attrs):
keyvals=['%s="%s"'% item for item in attrs.items()] #列表推导式
# join() 用于将序列中的元素以指定的字符连接生成一个新的字符串
attr_str=' '.join(keyvals)
element='<{name} {attrs}>{value}</{name}>'.format(
name=name,
attrs=attr_str,
value=html.escape(value) )
return element
print(make_elements('item','Alia',size='large',quantity=6))
print(make_elements('p','<span>'))
运行结果:
<item size="large"quantity="6">Alia</item>
<p ><span></p>
在函数定义中,以 * 开头的参数只能作为最后一个位置参数出现,而以 ** 开头的参数只能作为最后一个参数的出现。在函数定义中存在一个很微妙的特性,那就是在 * 开头的参数后面仍然可以有其他的参数出现。
def a(x,*args,y)
pass
def b(x,*args,y,**kwargs)
pass
我们把这样的参数称之为 keyword-only参数(就是出现在*args之后的参数只能作为关键字参数使用)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。