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中requests小技巧
May 10 Python
python调用OpenCV实现人脸识别功能
May 25 Python
python flask解析json数据不完整的解决方法
May 26 Python
Django model update的多种用法介绍
Mar 28 Python
简单了解django索引的相关知识
Jul 17 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
使用python求解二次规划的问题
Feb 29 Python
python微信公众号开发简单流程实现
Mar 09 Python
Python telnet登陆功能实现代码
Apr 16 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
python字典的元素访问实例详解
Jul 21 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
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
常用PHP框架功能对照表
2014/10/23 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
python中数字是否为可变类型
2020/07/08 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
自学考试自我鉴定范文
2013/09/26 职场文书
酒店管理毕业生自荐信
2013/10/24 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
搞笑获奖感言
2014/01/30 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
政风行风建设责任书
2014/07/23 职场文书
收款授权委托书
2014/10/02 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
会计求职简历自我评价
2015/03/10 职场文书
项目战略合作意向书
2015/05/08 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python