D20-05 函数闭包 装饰器 06 ..解压序列

Posted liupingtao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D20-05 函数闭包 装饰器 06 ..解压序列相关的知识,希望对你有一定的参考价值。

框架

#装饰器的框架
import time
def timmer(func):  #func=test
    def wrapper():
        start_time=time.time()
        func() #就是在运行test
        stop_time=time.time()
        print(‘运行时间是%s‘%(start_time-stop_time))
    return wrapper

def test():
    time.sleep(3)
    print(‘test函数运行完毕‘)

test = timmer(test) #返回的是wrapper的地址 另res=timmer(test)
test() #执行的是wrapper()

 但是以上方法需要给test做赋值工作,需要将所有的函数都一一赋值,所以有个小技巧。

#语法糖 @timmer 就相当于 test = timmer(test)

#装饰器的框架
import time
def timmer(func):  #func=test
    def wrapper():
        start_time=time.time()
        func() #就是在运行test
        stop_time=time.time()
        print(‘运行时间是%s‘%(start_time-stop_time))
    return wrapper
@timmer  #就相当于执行的执行的test=timmer(test)
def test():
    time.sleep(3)
    print(‘test函数运行完毕‘)

test() #执行的是wrapper()

  

返回值 将res赋值func()

#装饰器的框架
import time
def timmer(func):  #func=test
    def wrapper():
        start_time=time.time()
        res = func() #就是在运行test,有运行的结果
        stop_time=time.time()
        print(‘运行时间是%s‘%(start_time-stop_time))
        return res
    return wrapper
@timmer
def test():
    time.sleep(1)
    print(‘test函数运行完毕‘)
    return ‘这是test的返回值‘

test() #执行的是wrapper()

  

非固定参数

import time
def timmer(func):  #func=test
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res = func(*args,**kwargs) #就是在运行test,有运行的结果
        stop_time=time.time()
        print(‘运行时间是%s‘%(start_time-stop_time))
        return res
    return wrapper
@timmer
def test(name,age):
    time.sleep(1)
    print(‘test函数运行完毕,名字是%s,年龄是%s‘%(name,age))
    return ‘这是test的返回值‘

test(‘liu‘,18) #执行的是wrapper()

  

解压序列

假设有一个很长的序列 ,只想取第一个和最后一个值

1 >>> l=[10,3,2,3,5,1,2,3,5,8,9]
2 >>> a,*_,c=l   #取第一个值和最后一个值
3 >>> a
4 10
5 >>> c
6 9

  

值互换

1 #交换f1和f2的值
 2 
 3 >>> f1=1
 4 >>> f2=2
 5 
 6 
 7 >>> f1,f2=f2,f1
 8 >>> f1
 9 2
10 >>> f2
11 1

  



以上是关于D20-05 函数闭包 装饰器 06 ..解压序列的主要内容,如果未能解决你的问题,请参考以下文章

Python--高阶函数函数嵌套名称空间及变量作用域闭包装饰器

Python-22_装饰器-03_解压序列

闭包函数,装饰器

9.23闭包函数/装饰器/迭代器/生成器

Python闭包和装饰器

四 闭包函数装饰器