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抢过年的火车票附源码
Dec 07 Python
深入了解Python数据类型之列表
Jun 24 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Django保护敏感信息的方法示例
May 09 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
Sep 21 Python
python中函数返回多个结果的实例方法
Dec 16 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 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
咖啡的传说和历史
2021/03/03 新手入门
php学习笔记之 函数声明(二)
2011/06/09 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
HTML颜色选择器实现代码
2010/11/23 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
python3爬取数据至mysql的方法
2018/06/26 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
境外导游求职信
2014/02/27 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
同学聚会通知短信
2015/04/20 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书