如何在不使用全局变量的情况下完成同一件事?

时间:2019-04-21 19:13:32

标签: python

add_digits2(1)(3)(5)(6)(0)应该将所有数字加起来并在达到0时停止。 输出应为15

下面的代码有效,但是使用了全局变量。

total = 0
def add_digits2(num):
    global total
    if num == 0:
        print(total)
    else:
        total += num
        return add_digits2

结果是正确的,但是需要使用全局变量来做同样的事情。

4 个答案:

答案 0 :(得分:3)

您可以做的一件事是使用partial

from functools import partial

def add_digits2(num, total=0):
    if num == 0:
        print(total)
        return
    else:
        total += num
        return partial(add_digits2, total=total)

add_digits2(2)(4)(0)

答案 1 :(得分:1)

您只需传递*args作为参数并返回总和

def add_digits2(*args):
     return sum(args)

add_digits2(1, 3, 5 ,6)

答案 2 :(得分:1)

您还可以使用类,使用__call__方法来获得此行为:

class Add_digits:

    def __init__(self):
        self.total = 0

    def __call__(self, val):
        if val != 0:
            self.total += val
            return self
        else:
            print(self.total)
            self.total = 0


add_digits = Add_digits()

add_digits(4)(4)(0)
# 8
add_digits(4)(6)(0)
# 10 

尽管我仍然不明白为什么你要这么做...

答案 3 :(得分:0)

当问这样的问题时,真的很难说出他们是什么,但是总数可以存储在function属性中。像这样

header("Access-Control-Allow-Origin: *");