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排序搜索基本算法之选择排序实例分析
Dec 09 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
pycharm配置QtDesigner的超详细方法
Jan 25 Python
Python图片验证码降噪和8邻域降噪
Aug 30 Python
Python保存并浏览用户的历史记录
Apr 29 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方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
php实现源代码加密的方法
2015/07/11 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
document.write的几点使用心得
2014/05/14 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
详解Python中的日志模块logging
2015/06/19 Python
python之文件读取一行一行的方法
2018/07/12 Python
Python切片操作深入详解
2018/07/27 Python
Python实现登陆文件验证方法
2018/10/06 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Python列表(List)知识点总结
2019/02/18 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python标记语句块使用方法总结
2019/08/05 Python
对python中UDP,socket的使用详解
2019/08/22 Python
Python原始套接字编程实例解析
2020/01/29 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
学雷锋月活动总结
2014/04/25 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
爱护公共设施标语
2014/06/24 职场文书
2014年绿化工作总结
2014/12/09 职场文书
商场广播稿范文
2015/08/19 职场文书
信息技术课教学反思
2016/02/23 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
python中的plt.cm.Paired用法说明
2021/05/31 Python