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对象的深拷贝和浅拷贝详解
Aug 25 Python
Python中threading模块join函数用法实例分析
Jun 04 Python
Python操作串口的方法
Jun 17 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
浅谈Django REST Framework限速
Dec 12 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
Python数据分析之绘图和可视化详解
Jun 02 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 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
德劲1104的电路分析与改良
2021/03/01 无线电
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
PHP 断点续传实例详解
2017/11/11 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
canvas知识总结
2017/01/25 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
用Python编写一个国际象棋AI程序
2014/11/28 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python如何调用外部系统命令
2019/08/07 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
文秘大学生求职信
2014/02/25 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书