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学习笔记_数据排序方法
May 22 Python
python保存网页图片到本地的方法
Jul 24 Python
Django2.1.3 中间件使用详解
Nov 26 Python
python中比较两个列表的实例方法
Jul 04 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
django序列化serializers过程解析
Dec 14 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
python如何导入依赖包
Jul 13 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 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
Python中使用django form表单验证的方法
2017/01/16 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
10个示例带你掌握python中的元组
2020/11/23 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
哈弗商学院毕业生求职信
2014/02/26 职场文书
走群众路线剖析材料
2014/10/09 职场文书
保卫工作个人总结
2015/03/03 职场文书