在 Python 函数中使用可变函数参数模仿类 C 的静态变量

Using mutable function arguments to imitate C-like static variables in Python functions

我想知道如何在 Python 中从 C 复制静态变量。我在 Python 中看到了很多与面向对象代码和可变默认参数的使用相关的帖子,但我只是想知道一个简单的过程示例。

这是我的 C 示例:

void static_variable(){
    static int x = 0;
    x++;
    printf("%d\n", x);
}

这是我的 Python 示例:

def static_variable(counter=[0]):
    counter[0] += 1
    print(counter[0])

这两个示例都有效,但是,我想知道在 Python 中使用这种方法是否会带来一些固有的危险 - 或者当您不知道可变参数时它是否只是危险?

在python中,函数是first-class对象。这意味着它们可以具有属性。您可以简单地使用一个属性作为您的“静态变量”。避免了可变默认值的陷阱,代码也更加清晰:

def static_variable():
    # define function attribute
    if hasattr(static_variable, 'counter'):
        static_variable.counter += 1
    else:
        static_variable.counter = 1
    print(static_variable.counter)


static_variable()
static_variable()
static_variable()

结果:

1
2
3