python函数深入浅出 16.time.sleep()函数详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数深入浅出 16.time.sleep()函数详解相关的知识,希望对你有一定的参考价值。

参考技术A time.sleep() 函数命名来源于英文单词time(时间)和sleep(睡眠)。
time 是python带的非内置库,使用时需要import,主要用于处理和时间相关的操作。
time.sleep用于给定时间内挂起(等待)当前线程的执行。
time.sleep() 函数的例子:

可以注释掉time.sleep(2)再运行一次对比一下

可以看到虽然都是打印出一样的结果,但time.sleep()加入了等待时间

这里还要解释一下python中线程与进程的区别。

举个例子,厨房做菜看成是一个进程,那么这个进程下面就可能有多个人或一个人(cpu基本执行单元,即线程)来执行,多个人可以分别洗菜,刷碗,摆盘等等同时作业,他们又是共享这个厨房的资源的。每个人存在一定的资源竞争关系,比如炉火只有1个。

这里time.sleep是针对线程执行的,也就是其中一个人去sleep睡觉了,不影响其他人的继续工作。

参数

该函数没有返回值。

结果类似如下:

可以看到秒数相差了5



time.sleep()常用于推迟执行的场景

在python中,与时间相关的模块有:time,datetime以及calendar

对基础运行环境有疑问的,推荐参考: python函数深入浅出 0.基础篇

Python装饰器

一、装饰器的定义

装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。

装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。

简单版本的装饰器:

技术分享图片
#简单的装饰器
def func():
    print(小明)
def timmer(f):
    def inner():
        start_time = time.time()
        time.sleep(0.1)
        f()
        end_time = time.time()
        print(----> 执行效率%s % (end_time - start_time))
    return inner
func = timmer(func)  # inner
func() # inner()
简单版本的装饰器

带语法糖版本的装饰器:

技术分享图片
语法糖 @
def timmer(f):
    def inner():
        start_time = time.time()
        time.sleep(0.1)
        f()
        end_time = time.time()
        print(----> 执行效率%s % (end_time - start_time))
    return inner
@timmer  # func = timmer(func)
def func():
    print(小明)
func() # inner()
带语法糖的装饰器

带参数的装饰器:

技术分享图片
#带参数的装饰器
def timmer(f):
    def inner(*args,**kwargs):
        start_time = time.time()
        time.sleep(0.1)
        f(*args,**kwargs)
        end_time = time.time()
        print(----> 执行效率%s % (end_time - start_time))
    return inner
@timmer  # func = timmer(func)
def func(a):
    print(%s小明%a)
func(AAA)
带参数的装饰器

带返回值的装饰器:

技术分享图片
# 带返回值的装饰器
def timmer(f):
    def inner(*args,**kwargs):
        start_time = time.time()
        time.sleep(0.1)
        ret = f(*args,**kwargs)  # 222
        end_time = time.time()
        print(----> 执行效率%s % (end_time - start_time))
        return ret
    return inner
@timmer  # func = timmer(func)
def func(a):
    return 222
print(func(小明))
带返回值的装饰器

通用装饰器:

技术分享图片
#通用装饰器
def wrapper(func):
    def inner(*args,**kwargs):
        ‘‘‘执行函数前操作‘‘‘
        ret = func(*args,**kwargs)
        ‘‘‘执行函数后的操作‘‘‘
        return ret
    return inner

@wrapper
def func():
    print(66)
func()
通用装饰器

带开关的装饰器:

技术分享图片
import time
flag = False
def timmer_out(f):
    def timmer(func):
        def inner(*args,**kwargs):
            ‘‘‘执行函数前操作‘‘‘
            if f:
                start_time = time.time()
                time.sleep(0.3)
                ret = func(*args,**kwargs)
                ‘‘‘执行函数后操作‘‘‘
                end_time = time.time()
                print(执行效率%s%(end_time - start_time))
                return ret
            else:
                ret = func(*args,**kwargs)
                return ret
        return inner
    return timmer

@timmer_out(flag)  # 1, timmer_out(flag)  返回 timmer  --->
def f1():         # 2,  @timmer 就是你认识的装饰器 f1 = timmer(f1)
    print(666)
@timmer_out(flag)  # f2 = timmer(f2)
def f2():
    print(777)
f1()
f2()
带开关的装饰器

多个装饰器装饰一个函数:

技术分享图片
def wrapper1(func):  # func = f
    def inner1():
        print(wrapper1 ,before func)
        func()
        print(wrapper1 ,after func)
    return inner1

def wrapper2(func):  # func = inner1
    def inner2():
        print(wrapper2 ,before func)
        func()
        print(wrapper2 ,after func)
    return inner2

@wrapper2     # f = wrapper2(f)  里面的f == inner1   外面的f = inner2
@wrapper1     # f = wrapper1(f)  返回inner1    f = inner1
def f():
    print(in f)
f()  # inner2()
多个装饰器装饰一个函数

 

以上是关于python函数深入浅出 16.time.sleep()函数详解的主要内容,如果未能解决你的问题,请参考以下文章

Python基础(十七):函数的深入了解

10.python函数深入专题

python深入4内置函数

python基础—lambda内置函数三元函数(深入学习)

深入理解Python reduce函数

Python深入05 装饰器