Am 14.04.2022 um 17:02 schrieb Cecil Westerhof via Python-list: > In C when you declare a variable static in a function, the variable > retains its value between function calls. > The first time the function is called it has the default value (0 for > an int). > But when the function changes the value in a call (for example to 43), > the next time the function is called the variable does not have the > default value, but the value it had when the function returned. > Does python has something like that? >
There are several ways to emulate that: ### With a mutable default argument In [1]: def func(var=[-1]): ...: var[0] += 1 ...: return var[0] ...: In [2]: func() Out[2]: 0 In [3]: func() Out[3]: 1 In [4]: func() Out[4]: 2 ### with a callable class In [12]: class Func(): ...: def __init__(self, var=-1): ...: self.var = var ...: ...: def __call__(self): ...: self.var += 1 ...: return self.var ...: In [13]: func = Func() In [14]: func() Out[14]: 0 In [15]: func() Out[15]: 1 In [16]: func() Out[16]: 2 ### with a closure In [29]: def outer(var=-1): ...: def inner(): ...: nonlocal var ...: var += 1 ...: return var ...: return inner ...: In [30]: func = outer() In [31]: func() Out[31]: 0 In [32]: func() Out[32]: 1 In [33]: func() Out[33]: 2 ### with a generator In [2]: def func(init=0, end=3): ...: for var in range(init, end): ...: yield var ...: In [3]: for i in func(): ...: print(i) ...: 0 1 2 HTH -- https://mail.python.org/mailman/listinfo/python-list