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实现进程间通信简单实例
Jul 23 Python
跟老齐学Python之编写类之一创建实例
Oct 11 Python
深入浅析python继承问题
May 29 Python
python+pyqt实现右下角弹出框
Oct 26 Python
python生成ppt的方法
Jun 07 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
Python列表如何更新值
May 27 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
Jun 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
德生H-501的评价与改造
2021/03/02 无线电
一个php作的文本留言本的例子(三)
2006/10/09 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP最常用的正则表达式
2017/02/13 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
JavaScript中的this机制
2016/01/30 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
通过实例讲解JS如何防抖动
2019/06/15 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
编程语言Python的发展史
2014/09/26 Python
九步学会Python装饰器
2015/05/09 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
电子商务应届生自我鉴定
2014/01/13 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
四大名著读书笔记
2015/06/25 职场文书