如何在python中编程以在每次函数调用时自动递增一个数字

我定义了一个函数,其中有一个变量num赋值为 1000,increment变量用于将 num 增加 1。当它第一次被调用时,它会增加一并显示值 1001,但是当它再次被调用时,它会显示相同的值 1001,但它应该在每次调用时显示 1002、1003


def number():

    num = 1000

    increment = num +1

    return increment



print(number())


RISEBY
浏览 747回答 3
3回答

慕容3067478

除了已经发布的优秀答案外,您还可以使用闭包来做到这一点:def incrementor():    info = {"count": 999}    def number():        info["count"] += 1        return info["count"]    return numbernumber = incrementor()>>> number()1000>>> number()1001>>> number()1002(字典有点笨拙,但你不能用一个简单的变量名来做,至少不使用 Python 3 的nonlocal关键字,这对我来说更笨拙。我想这个特定的例子不会被认为是非常 Pythonic 的 -但这是一个选项,您将在其他 Python 代码中看到类似模式的真正用途。)

弑天下

Python 允许将属性附加到函数(毕竟它是 class 的对象function)。因此,您可以通过这种方式避免全局(或非局部)变量:def number():    if hasattr(number, "num"):        number.num += 1           # increment if not first call    else:        number.num = 1000         # initialize on first call    return number.num演示:>>> for i in range(10):        print(number())按预期显示:1000100110021003100410051006100710081009并且没有与全局变量的另一种使用发生冲突的风险......但要小心。一个晚上后,我意识到虽然这是你要求的,但这是一种反模式。这是 OOP 语言中的一个有状态函数,yerk ...状态应该保存在对象中,函数应该是无状态的。你可以打破这个规则,但它可能会混淆该代码的未来读者(甚至你......)。所以请不要。

幕布斯6054654

您应该num在number函数外部定义,并将其声明为函数内部的全局变量,以便您可以引用它并在递增后更新其值:num = 1000def number():    global num    num += 1    return numprint(number())print(number())print(number())这输出:100110021003或者,您可以定义一个具有保存当前值的实例变量和一个递增它的方法的类:class Number:    def __init__(self, value):        self.value = value    def increment(self):        self.value += 1        return self.value以便:number = Number(1000)print(number.increment())print(number.increment())print(number.increment())也会输出:100110021003然而,这使得用法有些冗长。一个更简单的方法是创建value一个类变量并覆盖该类的__new__方法:class number:    value = 1000    def __new__(cls):        cls.value += 1        return cls.value以便:print(number())print(number())print(number())会输出:100110021003
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python