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 07 Python
Python中exit、return、sys.exit()等使用实例和区别
May 28 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
在Python的Django框架中为代码添加注释的方法
Jul 16 Python
深入解析Python中的线程同步方法
Jun 14 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
使用遗传算法求二元函数的最小值
Feb 11 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初学者头疼十四条问题大总结
2008/11/12 PHP
PHP安全下载文件的方法
2016/04/07 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
javascript标签在页面中的位置探讨
2013/04/11 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
String和StringBuffer的区别
2015/08/13 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
酒店个人培训自我鉴定
2013/12/11 职场文书
企业总经理职责
2014/02/02 职场文书
师范生见习报告
2014/10/31 职场文书
打架检讨书范文
2015/01/27 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书