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 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
详解Django之auth模块(用户认证)
Apr 17 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
python与js主要区别点总结
Sep 13 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
教你怎么用Python操作MySql数据库
May 31 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 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(三)
2012/03/22 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
详解jQuery中的事件
2016/12/14 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python时间获取及转换知识汇总
2017/01/11 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
用pycharm开发django项目示例代码
2019/06/13 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
审美与表现自我评价
2015/03/09 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL