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程序与服务器连接的WSGI接口
Apr 29 Python
python调用staf自动化框架的方法
Dec 26 Python
Python3模拟curl发送post请求操作示例
May 03 Python
Python基础知识点 初识Python.md
May 14 Python
python中比较两个列表的实例方法
Jul 04 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
python中对_init_的理解及实例解析
Oct 11 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
python程序如何进行保存
Jul 03 Python
如何用python绘制雷达图
Apr 24 Python
python脚本框架webpy模板控制结构
Nov 20 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中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php中namespace use用法实例分析
2016/01/22 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
Python中 map()函数的用法详解
2018/07/10 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
解决Python安装cryptography报错问题
2020/09/03 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
个人找工作自荐信格式
2013/09/21 职场文书
出纳的岗位职责
2013/11/09 职场文书
迟到检讨书大全
2014/01/25 职场文书
小学教师评语大全
2014/04/23 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
校运会通讯稿
2015/07/18 职场文书
JS 基本概念详细介绍
2021/10/16 Javascript
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫