Python借助with语句实现代码段只执行有限次


Posted in Python onMarch 23, 2022

debug的时候,有时希望打印某些东西,但是如果代码段刚好在一个循环或者是其他会被执行很多次的部分,那么用来print的语句也会被执行很多次,看起来就不美观。

例如:

a = 0
for i in range(3):
    a += 1
print(a)

这里在中间希望确认一下a的类型,debug的时候改成:

a = 0
for i in range(3):
    print(type(a))
    a += 1
print(a)
''' 打印结果:
<class 'int'>
<class 'int'>
<class 'int'>
3
'''

有3个 <class ‘int’>,很不好看。

为了解决这个问题,可以借助with语句实现,首先要定义一个能够在with语句中使用的类(实现了__enter__和__exit__):

from typing import Any


class LimitedRun(object):
    run_dict = {}

    def __init__(self,
                 tag: Any = 'default',
                 limit: int = 1):
        self.tag = tag
        self.limit = limit

    def __enter__(self):
        if self.tag in LimitedRun.run_dict.keys():
            LimitedRun.run_dict[self.tag] += 1
        else:
            LimitedRun.run_dict[self.tag] = 1
        return LimitedRun.run_dict[self.tag] <= self.limit

    def __exit__(self, exc_type, exc_value, traceback):
        return

tag是标签,相同标签共用执行次数计数器;limit是限制执行的次数。例子如下:

a = 0
for i in range(3):
    with LimitedRun('print_1', 1) as limited_run:
        if limited_run:
            print(type(a))
    a += 1
print(a)

打印结果:

<class 'int'>
3

a = 0
for i in range(3):
    with LimitedRun('print_1', 4) as limited_run:
        if limited_run:
            print(1, type(a))
    a += 1
for i in range(3):
    with LimitedRun('print_1', 4) as limited_run:
        if limited_run:
            print(2, type(a))
    a += 1
print(a)

 打印结果:(相同tag共用了计数器,因此总共只会执行4次)

1 <class 'int'>
1 <class 'int'>
1 <class 'int'>
2 <class 'int'>
6

a = 0
for i in range(3):
    with LimitedRun('print_1', 4) as limited_run:
        if limited_run:
            print(1, type(a))
    a += 1
for i in range(3):
    with LimitedRun('print_2', 4) as limited_run:
        if limited_run:
            print(2, type(a))
    a += 1
print(a)

打印结果:(不同tag不共用计数器)

1 <class 'int'>
1 <class 'int'>
1 <class 'int'>
2 <class 'int'>
2 <class 'int'>
2 <class 'int'>
6

到此这篇关于Python借助with语句实现代码段只执行有限次的文章就介绍到这了,更多相关Python代码段执行有限次内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python深入学习之上下文管理器
Aug 31 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Python脚本处理空格的方法
Aug 08 Python
Python实现读取并保存文件的类
May 11 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
django进阶之cookie和session的使用示例
Aug 17 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
python django 原生sql 获取数据的例子
Aug 14 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
tensorflow之变量初始化(tf.Variable)使用详解
Feb 06 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
python3 字符串str和bytes相互转换
Mar 23 #Python
对象析构函数__del__在Python中何时使用
详解Python内置模块Collections
Mar 22 #Python
Python中 range | np.arange | np.linspace三者的区别
Python中非常使用的6种基本变量的操作与技巧
python使用torch随机初始化参数
Mar 22 #Python
Django基础CBV装饰器和中间件
You might like
递归列出所有文件和目录
2006/10/09 PHP
phpinfo 系统查看参数函数代码
2009/06/05 PHP
php 正确解码javascript中通过escape编码后的字符
2010/01/28 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php 购物车完整实现代码
2014/06/05 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
php实现文件预览功能
2017/05/23 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
js查找父节点的简单方法
2008/06/28 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
python区块及区块链的开发详解
2019/07/03 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
人力资源部工作计划
2019/05/14 职场文书