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实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
Python设计模式之代理模式简单示例
Jan 09 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
python读取几个G的csv文件方法
Jan 07 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
Python Process多进程实现过程
Oct 22 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
pytorch中图像的数据格式实例
Feb 11 Python
Python实现上下文管理器的方法
Aug 07 Python
Python3.10的一些新特性原理分析
Sep 15 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 SQL防注入代码集合
2008/04/25 PHP
Chrome Web App开发小结
2014/09/04 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
Prototype Function对象 学习
2009/07/12 Javascript
js Math 对象的方法
2013/09/01 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
JS中对象与字符串的互相转换详解
2016/05/20 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
Postman的下载及安装教程详解
2018/10/16 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
使用vue构建多页面应用的示例
2020/10/22 Javascript
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
python实现猜数游戏
2020/03/27 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
yy司仪主持词
2014/03/22 职场文书
法人委托书范本
2014/04/04 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
教师求职自荐书
2014/06/14 职场文书
先进典型发言材料
2014/12/30 职场文书
应聘教师自荐信
2015/03/26 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS