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编程入门之Hello World的三种实现方式
Nov 13 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
详解Python基础random模块随机数的生成
Mar 23 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
聊聊python中的循环遍历
Sep 07 Python
解析目标检测之IoU
Jun 26 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版(5)
2006/10/09 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
简单的php购物车代码
2020/06/05 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
numpy基础教程之np.linalg
2019/02/12 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
2020/04/25 Python
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
机械制造专业个人的自我评价
2013/12/28 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
记者岗位职责
2014/01/06 职场文书
元旦晚会感言
2014/03/12 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2014年电厂工作总结
2014/12/04 职场文书
匿名信格式范文
2015/05/27 职场文书
小组组名及励志口号
2015/12/24 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python