当前位置:   article > 正文

可接受任意数量参数的函数_定义函数,可以接收任意个位置参数,统计参数中字符串类型的个数,

定义函数,可以接收任意个位置参数,统计参数中字符串类型的个数,

问题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
  • 1
  • 2
  • 3
  • 4
  • 5

在上面的代码中,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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

问题2:

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

下面是示例:

def fun(x,*args,**kwargs):
    print(x)
    print(args)
    print(kwargs)
    
fun(1,2,a=20,b=50,c=80)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出结果:

1
(2,)
{'a': 20, 'b': 50, 'c': 80}
  • 1
  • 2
  • 3

上面的示例中,涉及到参数的混合使用,*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>'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

运行结果:

<item size="large"quantity="6">Alia</item>
<p >&lt;span&gt;</p>
  • 1
  • 2

问题3

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

def a(x,*args,y)
	pass
	
def b(x,*args,y,**kwargs)
	pass
  • 1
  • 2
  • 3
  • 4
  • 5

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/71175
推荐阅读
相关标签
  

闽ICP备14008679号