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 相关文章推荐
记录Django开发心得
Jul 16 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
利用Python的Django框架中的ORM建立查询API
Apr 20 Python
Python二叉搜索树与双向链表转换实现方法
Apr 29 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
使用python生成目录树
Mar 29 Python
详解python3中tkinter知识点
Jun 21 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
Python 数据可视化之Bokeh详解
Nov 02 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.MVC的模板标签系统(三)
2006/09/05 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
python实现微信小程序自动回复
2018/09/10 Python
python 产生token及token验证的方法
2018/12/26 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
python实现从ftp服务器下载文件
2020/03/03 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
八项规定整改方案
2014/02/21 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
史上最牛辞职信
2015/05/13 职场文书
个人更名证明
2015/06/23 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python