如何在Python中定义静态变量

作者: fromradio | 来源:发表于2016-07-21 10:06 被阅读4529次

众所周知,Python语言并不支持静态变量,比如下面这样一个应用场景

void foo() {
    static int count = 0;
    count ++;
}

在Python中无法自然实现这个功能。换个角度来看这个问题,函数中的静态变量其实可以看做是函数的一个内部变量,而不是调用期间生成的局部变量。所以这里介绍一种使用装饰器的方法给函数添加这样的内部变量。

def static_vars(**kwargs):
    def decorate(func):
        for k in kwargs:
            setattr(func, k, kwargs[k])
        return func
    return decorate

这是一个Python装饰器,通过@语法调用,在一个函数外层再包裹一层,这里相当于给函数添加内部变量。可以这样来使用这个装饰器,比如我们想实现上面的想法,在foo函数中添加一个计数器,有

@static_vars(counter = 0)
def foo():
    foo.counter += 1

其实如果一定要通过内部变量来实现静态的效果,可以直接定义类来达到,但是装饰器将很多细节略去,而且通过**kwargs可以添加任意类型,任意数目,实现起来相对简单。

相关文章

  • 如何在Python中定义静态变量

    众所周知,Python语言并不支持静态变量,比如下面这样一个应用场景 在Python中无法自然实现这个功能。换个角...

  • Python中的静态成员变量

    python 也可以定义静态成员变量,就是类的变量。 注意python的静态成员变量只能通过 类.变量名 的形式获...

  • static 与extern

    static: 一、在C或OC中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。 1、定义全局...

  • python基础 python类的成员和装饰器

    Python和c++一样,可以定义类,可以继承,类中又包含了类变量、实例变量(私有变量和公有变量)、方法(包括静态...

  • Python学习笔记(一)

    python基础须知 python中变量的定义不需要输入变量的类型,直接赋值就行,如:name = "张三" 打印...

  • Objective-C添加类属性

    先回顾一下静态变量与全局变量的一些知识。 头文件中定义全局变量和静态变量的区别。 源文件中定义全局变量和静态变量的...

  • 2018-05-03 Java全局变量

    Java中没有传统意义上的全局变量,但并不代表没有全局可见的成员。如,定义一个公共静态变量或静态属性,这个变量或属...

  • static有什么用途

    在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。 static 属于静态变量,使用它...

  • static的作用

    在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。static属于静态变量,使用它修饰...

  • 打卡7.21

    static定义静态变量和auto定义变量 静态局部变量属于静态存储方式,它具有以下特点: (1)静态局部变量在函...

网友评论

  • Absolute273:这个装饰器写得有点意思啊,很少见到这么写,一般带参装饰器我都写3层def
  • 555a39e148ca:算是动态添加函数属性成员变量吧
    fromradio:@流浪的流浪的流星 嗯,是的,但是目的是想引入函数的静态变量

本文标题:如何在Python中定义静态变量

本文链接:https://www.haomeiwen.com/subject/sramjttx.html