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

Posted

技术标签:

【中文标题】在 Python 函数中使用可变函数参数来模仿类 C 的静态变量【英文标题】:Using mutable function arguments to imitate C-like static variables in Python functions 【发布时间】:2022-01-09 22:14:32 【问题描述】:

我想知道如何在 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 中使用这种方法是否会带来一些固有的危险 - 或者当您不知道可变参数时它是否只是危险?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于在 Python 函数中使用可变函数参数来模仿类 C 的静态变量的主要内容,如果未能解决你的问题,请参考以下文章

Python新手学习基础之函数-可变参数*

Python 可变类型作为函数默认参数时的副作用

python-函数可变参数类型

可变参数模板类:是不是可以为每个可变参数模板参数实现一个唯一的成员函数?

Python函数中的可变长参数_速记

Python3 函数基础2