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自定义函数的创建、调用和函数的参数详解
Mar 11 Python
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
python创建一个最简单http webserver服务器的方法
May 08 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
Python class的继承方法代码实例
Feb 14 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
python自动生成sql语句的脚本
Feb 24 Python
Django框架模板用法详解
Jun 10 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 addslashes 函数详细分析说明
2009/06/23 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
初品cakephp 入门基础
2012/02/16 PHP
php实现快速排序法函数代码
2012/08/27 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
ES6新特性之解构、参数、模块和记号用法示例
2017/04/01 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
Python列表推导式的使用方法
2013/11/21 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
Python正则表达式指南 推荐
2018/10/09 Python
python如何通过twisted搭建socket服务
2020/02/03 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
校园网站的创业计划书范文
2013/12/30 职场文书
环保建议书作文
2014/03/12 职场文书
个人工作表现评语
2014/04/30 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
写得不错的求职信范文
2014/07/11 职场文书
解放思想演讲稿
2014/09/11 职场文书
会计求职自荐信范文
2015/03/04 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书