python 装饰器、内存占用及时间显示、新建文件、播放音乐

在这里插入图片描述

import functools
from functools import wraps
from functools import reduce
import sys
from memory_profiler import profile
from line_profiler import LineProfiler
from tqdm import tqdm
import os
import time
from playsound import playsound

路径检查,生成

#检查是否存在相应路径
def path_examine(path,func):
    @wraps(func)
    def wrapper(*args,**kwargs):
            if os.path.exists(path)==True:
                print("path already exists")
            else:
                os.mkdir(path)#生成的是文件夹
                #with open 的方式也可以
                print("creating the path")
            return func(*args,**kwargs)
    return wrapper

path="./store.txt"
path2="./ss.txt"
ex1=functools.partial(path_examine,path)
ex2=functools.partial(path_examine,path2)
@ex1
def pri(path):
    print(path)
pri(path)

@ex2
def pri(path):
    print(path)
pri(path2)

在这里插入图片描述

生成路径的方式采用这个更好

with open(path,"r") as f:
    pass

音乐通知程序运行,且返回的类型

#使用类来实现声音提醒代码处理
class Music:
    def __init__(self):
        pass
    def __call__(self, func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            a=func(*args, **kwargs)
            if isinstance(a,str):
                playsound('./str.mp3')
            elif isinstance(a,int):
                playsound('./num.mp3')
            else:
                playsound("./els.mp3")
        return wrapper

@Music()
def fun1():
    for i in range(4):
        print(i)
    print(type(i))
    return i
fun1()
time.sleep(5)

@Music()
def fun2():
    for i in 'abcdef':
        print(i)
    print(type(i))
    return i
fun2()
time.sleep(5)

@Music()
def fun3():
    dic={'1':1, '2':2, '3':3, '4':4}
    dic=zip(dic.keys(),dic.values())
    for i in dic:
        print(i)
    print(type(i))
    return i
fun3()
time.sleep(5)

在这里插入图片描述

保存结果

#保存打印结果的装饰器
class storage:
    def __init__(self,path):
        self.path=path
    def __call__(self,func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            __console=sys.stdout#保存屏幕的sys.out
            info='Info:'+func.__name__+" was called"
            with open(self.path,'a') as f:
                f.write(info+'\n')
                sys.stdout=f#将打印位置定位到文件中
                func(*args,**kwargs)
            sys.stdout=__console#还原位置
            return func(*args,**kwargs)
            ##如果需要使用func函数则返回函数即可,如果不需要使用则不返回也行
        return wrapper
@storage('./store.txt')
def myfunc():
    for i in range(100000):
        st=str(i)
        print(st)
#进行代码进度与时间的显示
myfunc()

在这里插入图片描述

时间、内存的测试

class Vis:
    def __init__(self):
        pass
    @profile#该方法使用的是命令行操作
    def test_time(self):
        for i in range(100):
            a=[1]*(10**6)
            b=[2]*(10**5)

    def sum(self,x,y):
        return x+y

    def mult(self,x,y):
        return x*y

    def ceshi(self):
        lis=[1]*(10**6)
        a=reduce(self.mult,lis)
        b=reduce(self.sum,lis)
        return a,b

    def jin_du(self):#显示进度条
        lis=[1]*(10**3)
        bar=tqdm(lis)#转化成进度条的形式,跑了多少将会返回在进度条中
        j = 1
        for i in bar:##遍历表示跑了多少进度条
            bar.set_description("Now get "+"No.".format(j))
            j=j+1
            time.sleep(0.001)

t=Vis()
t.jin_du()
a,b=t.ceshi()
print(a)
print(b)
lp = LineProfiler()
lp_wrapper = lp(t.ceshi)
lp_wrapper()#
lp.print_stats()

在这里插入图片描述

在这里插入图片描述

资源见主页的压缩包
``

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Python 的时间装饰器是一种特殊的装饰器,它可以在不改变代码逻辑的情况下,对代码的执行时间进行测量。 使用时间装饰器的方法是:首先创建一个装饰器函数,该函数接收一个函数作为参数,并在其内部实现对时间的测量。接着,使用 @ 语法将装饰器函数应用到被测函数上。 例如: ``` import time def timer(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"Executed in {end_time - start_time:.6f} seconds") return result return wrapper @timer def my_function(): print("Hello, World!") my_function() ``` 输出: ``` Hello, World! Executed in 0.000001 seconds ``` ### 回答2: Python时间装饰器是一种在函数执行前后记录函数执行时间的装饰器。通过使用时间装饰器,我们可以方便地监控函数的执行时间,以便于性能优化和调试。 以下是一个简单的示例代码,说明如何实现一个Python时间装饰器: ```python import time def timer_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() execution_time = end_time - start_time print(f"函数 {func.__name__} 的执行时间为: {execution_time} 秒") return result return wrapper @timer_decorator def my_function(): # 执行一些操作 pass my_function() ``` 在上述示例中,`timer_decorator` 是一个装饰器函数,它接受一个函数作为参数,并返回一个包装函数 `wrapper` 。`wrapper` 函数内部会记录函数执行前的时间点 `start_time`,并在函数执行完成后记录结束时间点 `end_time`,计算两者之差得到执行时间 `execution_time`。然后,它会打印出函数的执行时间。 在示例中,我们使用 `@timer_decorator` 将装饰器应用到 `my_function` 函数上,这样在调用 `my_function` 时会自动执行装饰器中的逻辑,记录函数的执行时间。 使用时间装饰器可以很方便地获得函数的执行时间,这对于性能优化和调试非常有用。我们可以在关键的函数上应用时间装饰器,以便找出哪些函数占用了大量的时间,并进行相应的优化。 ### 回答3: Python时间装饰器是一种可以用来测量函数执行时间的工具。使用时间装饰器可以在不修改原函数代码的情况下,通过在函数执行前后添加一些额外的代码,来统计函数执行的时间。 时间装饰器的实现方式有很多种,一种常见的方式是使用装饰器函数和`time`模块来实现。下面是一个示例: ```python import time def timer(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"函数 {func.__name__} 的执行时间为: {end_time - start_time} 秒") return result return wrapper @timer def my_func(): # 执行一些操作 time.sleep(1) my_func() ``` 在上面的示例中,我们定义了一个名为`timer`的装饰器函数,它接受一个函数作为参数,并返回一个内部函数`wrapper`。在`wrapper`函数中,我们使用`time`模块记录函数执行的开始时间和结束时间,并计算它们的差值,从而得到函数的执行时间。最后,我们通过打印这个执行时间来展示出来。 在使用装饰器时,我们只需要在需要计时的函数上加上装饰器`@timer`即可。当我们调用`my_func()`时,装饰器会自动将`my_func`作为参数传递给`timer`装饰器函数,并执行相应的计时操作。 通过使用时间装饰器,我们可以方便地对函数进行时间测量,从而优化性能或者进行统计分析。它是Python语言提供的一种灵活且实用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值