python如何设置静态变量


Posted in Python onSeptember 07, 2020

众所周知,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可以添加任意类型,任意数目,实现起来相对简单。

实例扩展:

这里使用静态变量目的是在类中实现一个静态的队列,这里用数组实现,任何时候插入到队列中的数据不会和类的实例有直接关系

__author__ = 'Administrator'
class CaptchaImage:
 def queue(self,arr=list()):
  return arr
 def InsertCode(self,code):
  self.queue().append(code)
if __name__=='__main__':
 c = CaptchaImage()
 c.InsertCode(1)
 b=CaptchaImage()
 b.InsertCode(2)
 print(b.queue())
 print(c.queue())

代码执行输出结果为:

[1, 2]
[1, 2]

到此这篇关于python如何设置静态变量的文章就介绍到这了,更多相关python设置静态变量内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python多线程编程(五):死锁的形成
Apr 05 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
python str字符串转uuid实例
Mar 03 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
python爬虫请求头的使用
Dec 01 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 #Python
浅谈Python描述数据结构之KMP篇
Sep 06 #Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 #Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 #Python
Pytest单元测试框架如何实现参数化
Sep 05 #Python
Python实例方法、类方法、静态方法区别详解
Sep 05 #Python
Python装饰器如何实现修复过程解析
Sep 05 #Python
You might like
如何正确理解PHP的错误信息
2006/10/09 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
python django集成cas验证系统
2014/07/14 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
行政管理专业推荐信
2013/11/02 职场文书
大学生学业生涯规划
2014/01/05 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
志愿者宣传口号
2014/06/17 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
考试作弊检讨书
2015/01/27 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
银行工作心得体会范文
2016/01/23 职场文书