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中使用item()方法遍历字典的例子
Aug 26 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
简单了解python关系(比较)运算符
Jul 08 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
Python 导入文件过程图解
Oct 15 Python
django admin后管定制-显示字段的实例
Mar 11 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
Python制作春联的示例代码
Jan 22 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中使用灵巧的体系结构
2006/10/09 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
Python递归函数实例讲解
2019/02/27 Python
python pandas模块基础学习详解
2019/07/03 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
什么是python的自省
2020/06/21 Python
Python 代码调试技巧示例代码
2020/08/11 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
银行见习期自我鉴定
2014/01/29 职场文书
承诺书怎么写
2014/03/26 职场文书
员工入职担保书范文
2014/04/01 职场文书
自查自纠整改报告
2014/11/06 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
优化Mysql查询的示例
2022/04/26 MySQL