章节
问答
课签
笔记
评论
占位
占位

Python函数使用可变参数

除了默认参数,Python函数还接收一种参数叫做可变参数,可变参数即任意个参数的意思,可变参数通常使用*args来表示。

def func(*args):
    print('args length = {}, args = {}'.format(len(args), args))

func('a') # ==> args length = 1, args = ('a',)
func('a', 'b') # ==> args length = 2, args = ('a', 'b')
func('a', 'b', 'c') # ==> args length = 3, args = ('a', 'b', 'c')

注意,在使用上,Python会把可变参数定义为一个tuple,所以在函数内部,把可变参数当作tuple来使用就可以了,比如可以通过位置下标取出对应的元素等。
定义可变参数的目的也是为了简化调用。假设我们要计算任意个数的平均值,就可以定义一个可变参数:

def average(*args):
    sum = 0
    for item in args:
        sum += item
    avg = sum / len(args)
    return avg

这样,在调用的时候,我们就可以这样写:

average(1, 2) # ==> 1.5
average(1, 2, 2, 3, 4) # ==> 2.4
average()
# 报错
Traceback (most recent call last):
ZeroDivisionError: division by zero

在执行average()的时候,却报错了,这是因为在使用可变参数时,没有考虑周全导致的,因为可变参数的长度可能是0,当长度为0的时候,就会出现除0错误。因此需要添加保护的逻辑,这是同学在使用过程中需要特别注意的。

任务

请完善average()函数,使得当可变参数长度为0的时候,也能正确返回结果。

?不会了怎么办

参考答案:

def average(*args):
    sum = 0
    if len(args) == 0:
        return sum
    for item in args:
        sum += item
    avg = sum / len(args)
    return avg
||
1
2
# Enter a code
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最新回答 / 勇往直前3
def average(*args):    sum = 0.0    if len(args)==0:        return None    for item in args:        sum += item    avg = sum / len(args)    return avg        print(average(1, 2))print(average(1, 2, 2, 3, 4))print(average())<...code...>

最新回答 / lucasj
sum+=item跟sum=sum+item是一样的,只是写法不同

最赞回答 / weixin_慕田峪3431918
python3之前的版本中整型除整型得到的依然是整型,即省略小数,之后的版本整型除整型得到的的是浮点数

已采纳回答 / 程序猿_郭文超
== 是用于做判断的,判断前面的值是否等于后面的值,= 是赋值,是将后面的值赋值给前面的变量

最赞回答 / 慕先生1285327
def average(*args):
    b = 0    
    if len(args) == 0:
        return b    
    else:
        for i in args:
            b += i
    avg = b / len(args)
    return avg
a=[1, 2, 3, 4, 5]
print(average(*a))  <-----需要在前面加* 才會接受tuple/list用法

最新回答 / TiAmoeckc
应该改为if len(args)==0:

最新回答 / 程少爱珍
def func(*args):
    print('第一个参数是:{}'.format(args[0]))
func('wc','cw')
print('**************')
<...code...>

已采纳回答 / minzeOK
很简单啊,只打印不返回,那就会继续执行下去。那到了用len(args)时len(args)=0为除数就报错了。我记得前面的章节9-2有讲:return表示返回的意思,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。所以懂了么

已采纳回答 / 小白兔cai
print(round(average(1,2,2,3,4),2))你可以把打印结果改成这样,就会出现2.4,有可能你使用的编辑器版本问题,默认打印结果为整型,不保留小数点。

已采纳回答 / weibo_N哦7788_0
你输入  
print(average("a", "b"))
它会当作数组类型,而不是字符串,变成一个字符串应该就对了。
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言