可接受任意数量参数的函数

问题1:

假如我们想编写一个可以接受任意数量参数的函数

解决思路:

我们可以编写一个可接受任意数量的位置参数的函数,它是以*开头的参数。

下面是示例:

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

问题2:

如果想要编写一个接受任意数量的关键字参数的函数呢?可以用以****开头**的参数。

下面是示例:

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 >&lt;span&gt;</p>

问题3

在函数定义中,以 * 开头的参数只能作为最后一个位置参数出现,而以 ** 开头的参数只能作为最后一个参数的出现。在函数定义中存在一个很微妙的特性,那就是在 * 开头的参数后面仍然可以有其他的参数出现。

def a(x,*args,y)
	pass
	
def b(x,*args,y,**kwargs)
	pass

我们把这样的参数称之为 keyword-only参数(就是出现在*args之后的参数只能作为关键字参数使用)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值