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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
Python中的各种装饰器详解
Apr 11 Python
python实现报表自动化详解
Nov 16 Python
python 实现对文件夹中的图像连续重命名方法
Oct 25 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
python 实现aes256加密
Nov 27 Python
selenium如何定位span元素的实现
Jan 13 Python
python常量折叠基础知识点讲解
Feb 28 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 30 Python
在python中读取和写入CSV文件详情
Jun 28 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中使用Oracle数据库(1)
2006/10/09 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
php-msf源码详解
2017/12/25 PHP
Dom 结点创建 基础知识
2011/10/01 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
js实现右键菜单功能
2016/11/28 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
Python 字符串定义
2009/09/25 Python
简单学习Python time模块
2016/04/29 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
Python实现一个简单的验证码程序
2017/11/03 Python
Python简单读取json文件功能示例
2017/11/30 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
Tesserocr库的正确安装方式
2018/10/19 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
python如何读取bin文件并下发串口
2019/07/05 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
python能做哪方面的工作
2020/06/15 Python
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
单位消防安全制度
2014/01/12 职场文书
商超业务员岗位职责
2014/03/12 职场文书
社区国庆节活动总结
2015/03/23 职场文书
golang生成并解析JSON
2022/04/14 Golang