如何在Python函数执行前后增加额外的行为
作者:瓜园耕读 发布时间:2023-05-27 17:35:20
标签:python,函数,上下文
首先来看一个小程序,这个是计量所花费时间的程序,以下是以往的解决示例
from functools import wraps, partial
from time import time
def timing(func=None, frequencies=1):
if func is None:
# print("+None")
return partial(timing, frequencies=frequencies)
# else:
# print("-None")
@wraps(func)
def _wrapper(*args, **kwargs):
start_time = time()
for t in range(frequencies):
result = func(*args, **kwargs)
end_time = time()
print('运行花费时间:{:.6f}s。'.format(end_time-start_time))
return result
return _wrapper
@timing
def run():
l = []
for i in range(5000000):
l.extend([i])
return len(l)
运行如下:
In [4]: run()
运行花费时间:2.383398s。
Out[4]: 5000000
(喜欢刨根问底的可以去掉注释,并思考预计会有什么样的输出)。
今天无意间看到了Python的上下文管理器(Context Manager
),发现也非常不错,其实这跟with
语句是息息相关的,竟然以前一直未在意。
from time import time
def run2():
l = []
for i in range(5000000):
l.extend([i])
return len(l)
class ElapsedTime():
def __enter__(self):
self.start_time = time()
return self
def __exit__(self, exception_type, exception_value, traceback):
self.end_time = time()
print('运行花费时间:{:.6f}s。'.format(self.end_time - self.start_time))
with ElapsedTime():
run2()
总结
初略看了一点官方文档,上下文管理还是有点多内容的。Python发展到现在,其实不简单了。说简单,只是你自己不够与时俱进,掌握的都是老式三板斧而已。所以,知识需要不断更新,才能弥补自己的盲点,以上就是本文的全部内容,希望能大家的学习或者工作带来一定的帮助。


猜你喜欢
- MySQL有时候忘记了root密码是一件伤感的事,这种情况下,如何重置root的密码呢?找到并编辑mysql的my.ini配置文件,在mys
- 带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个
- python代码 # -*- coding: utf-8 -*- import Image,ImageDraw,Imag
- 本文实例讲述了创建Django项目的方法。分享给大家供大家参考,具体如下:创建Django项目创建一个HelloDjango项目GitHub
- 1.前言选项(Options)模式是对配置(Configuration)的功能的延伸。在12章(ASP.NET Core中的配置二)Conf
- Python 变量类型 变量存储在内存中的值。这就意味着在创建变量时会
- 实现一个不规则窗体这里我们实现一个圆形窗体,实现其他形状的窗体与这个方法类似。首先,把窗口的高度(height)和宽度(width)值修改为
- Pycharm Python Console用法Pycharm的下方工具栏中有两个窗口:Python Console和Terminal(如下
- 本文实例讲述了Python原始字符串(raw strings)用法,分享给大家供大家参考。具体如下: Python原始字符串的产生
- 利用 vue+canvas 实现拼图小游戏,供大家参考,具体内容如下思路步骤一个拼图拼盘和一个原图参照对原图的切割以及随机排序通过W/A/D
- 无论使用int还是varchar,对于Status的多选查询都是不易应对的。举例,常规思维下对CustomerStatus的Enum设置如下
- 什么是TensorboardXTensorboard 是 TensorFlow 的一个附加工具,可以记录训练过程的数字、图像等内容,以方便研
- 获取数据(四种方式)1. url: 需要正则去匹配 url(r'^index/(num)/$
- 虚拟环境的搭建为什么要使用虚拟环境#1、使不同应用开发环境相互独立2、环境升级不影响其他应用,也不会影响全局的python环境3、防止出现包
- 如果要写一个程序,让x1为1,x2为2,然后直到x100为100,你会怎么做?在C这种静态语言里,变量名这个标识符实际上会被编译器直接翻译成
- 1.安装python windows版本好:python-2.5.1.msi2.安装pycrypto windows版本号:py
- 1 俄罗斯方块游戏《俄罗斯方块》原本是前苏联科学家阿列克谢·帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公
- 因为他的简单实用和数量庞大的插件,所以我们喜欢和使用jQuery,在jQuery数量庞大的插件中有很大的一部分是关于图片的,所以今天我们就整
- 采集中 或者 在线添加文章中 都可以用到此功能俺自己在baidu上搜索的保存远程图片到本地的代码 感觉比较难用点 而且没有现成的比较全的代码
- 总经一下前段时间用于的jQuery方法:find及children。需要的朋友可以参考下。首先看看英文解释吧: children方法:fin