问答详情
源自:7-7 Python之定义可变参数

如果元组tuple为空,那么循环for x in args这个语句有效么?

求大神们帮忙看看,我这个哪里有问题。。 def average(*args):    i=0    sum=0.0    for x in *args:        sum=sum+x        i=i+1    if i==0:        return sum    else        return sum/i print average() print average(1, 2) print average(1, 2, 2, 3, 4)

提问者:飘神丶 2016-04-26 09:29

个回答

  • 清波
    2016-04-26 10:17:56
    已采纳

    def average(*args):
        sum = 0.0
        if len(args) == 0:
            return sum
        for x in args:
            sum = sum + x
        return sum / len(args)
        
    print average()
    print average(1, 2)
    print average(1, 2, 2, 3, 4)

    首先, *args 接受不定数量的参数, 在函数中调用的时候,不用星号(*)了, 在函数中调用的时候 args 就是传入的参数 组成的 元组(tuple).

    其次, 有了 len(args) , 就不用另外定义i 并且自加1 了。 

    最后,为了防止 发生 除0 的错误,进入函数后,第一时间判断参数长度。

    所以, 根据上面三条,理解下正确答案。

  • 岳阳白少
    2016-10-07 21:55:14

    有sum函数为什么不用,还非得循环?

    def average(*args):

    if len(args) == 0:

    return 0.0

    else:

    return sum(args)/len(args)

    print (average())

    print (average(1,2))

    print (average(1,2,2,3,4))


  • lhtfreedom
    2016-04-26 10:16:03

    你的代码在for循环那边,去掉*号

    def average(*args):

        i=0

        sum=0.0

        for x in args:

            sum=sum+x

            i=i+1

        if i==0:

            return sum

        else:

            return sum/i

    print average()

    print average(1,2)

    print average(1,2,2,3,4)


  • agusuyan57
    2016-04-26 10:04:09

    有点小毛病,看看我写的对不对

    def average(*args):

        i=0

        sum=0.0

        for x in args:

            sum=sum+x

            i=i+1

        if i==0:

            return sum

        else:

            return sum/i

    print average()

    print average(1, 2)

    print average(1, 2, 2, 3, 4)