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打包可执行文件的方法详解
Sep 19 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
Jun 13 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
python实现桌面壁纸切换功能
Jan 21 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
Python 学习教程之networkx
Apr 15 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
Python如何给函数库增加日志功能
Aug 04 Python
Python中的程序流程控制语句
Feb 24 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学习之字符串比较和查找
2011/04/17 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
koa-router源码学习小结
2018/09/07 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
解决python删除文件的权限错误问题
2018/04/24 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
5.12护士节演讲稿
2014/04/30 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server