python 闭包与装饰器

Posted 山外云

tags:

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

1、闭包--返回子函数名

作用:使用子函数之外的父函数的变量

闭包就是你调用了一个函数a,这个函数a反悔了一个子函数名b,这个返回的函数b就叫做闭包

 

代码举例

def a():
    test = \'aa\'
    def b():
        print(test)
        return 1
    return b

c = a()
print(c)
print(c())

 

 

 

 统计做一件事情所需要的时间

 

 做一批事情都想统计时间,如何做  装饰器=闭包+函数式编程

import time

def deco(func):
    def _deco(*args,**kwargs):
        before = time.time()
        ret = func(*args,**kwargs)
        print(\'cost time : %s\' %(time.time() - before))
        return ret
    return _deco

@deco  @装饰器写法
def do_something():
    time.sleep(3)
    print(\'done\')

do_something()

 

装饰器就是把函数(类)包装一下,为函数(类)添加一些附加的功能

装饰器就是一个函数,参数为函数名(类),返回包装后的函数名

装饰就是参数为函数名字的闭包

装饰器 = 闭包 + 函数式编程

#coding:utf-8

def deco(func):
    def _deco():
        print(\'屌丝: 我有一辆法拉利跑车\')
        func()
        print(\'屌丝: 我北京有一套别墅\')
    return _deco

@deco
def confression():
    print(\'屌丝: 女神 I love you ,will you merry me?\')

def accept():
    print(\'女神: 讨厌,人家愿意了\')

confression()
accept()

 

 

#coding:gbk
import time
def calc_time(func):

    def calc(*args,**kwargs):
        begin_time = time.time()
        ret = func(*args,**kwargs)
        print(\'huafei time: % second\' %(time.time() - begin_time))
    return calc

@calc_time
def eat_bf():
    time.sleep(5)
# t = calc_time(eat_bf)
# t()
eat_bf()

def watch_movie(movie_name):
    print(\'movie name: %s\' % movie_name)
    time.sleep(4)
w = calc_time(watch_movie)
w(\'gumuliying\')

 

以上是关于python 闭包与装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 闭包与装饰器

Python闭包与装饰器

Python 简明教程 --- 22,Python 闭包与装饰器

python3命名空间与作用域,闭包函数,装饰器

Python高级--闭包与装饰器

python基础闭包与装饰器