世间万物皆对象!

闭包就是内部函数中对enclosing作用域的变量进行引用。

装饰器

最开始就说,这篇博客始于闭包,终于闭包,所以装饰器不多说,只说四句话:
1.装饰器就是对闭包的使用;
2.装饰器用来装饰函数;
3.返回一个函数对象,被装饰的函数接收;
4.被装饰函数标识符指向返回的函数对象

多个装饰器,完成包裹数据

day_5.24py-LMLPHP

'''
2018-5-24 13:56:08
忘了关影子系统,本地代码丢失了一两天,
还好保存到博客园了,影子系统桌面没提示 草WIn10
继续代码走起
装饰器!!
@ python特有的
'''
# python不告诉你有重名函数
# def test1():
# print("test1")
# def test1():
# print("test2")
# 只要是名都可以被改,名字仅仅是引用 # def w1(func):
# #定义一个闭包
# def inner():
# print("---正在验证权限---")
# func()
# return inner
# @w1 #f1 = w1(f1)
# #等价于给人一种感觉,在没有修改f1()的前提下完成验证,这就是装饰器
# def f1():
# print("----f1---")
# @w1
# def f2():
# print("----f2----")
#
# f1()
# f2()
# # 多个装饰器,定义函数,完成包裹数据
# def makeBold(fn):
# def wrapped():
# print("---1--")
# return "<b>" +fn()+ "</b>"
# return wrapped
# #定义函数:完成包裹数据
# def makeItalic(fn):
# def wrapped():
# print("--2--")
# return "<i>" + fn() +"</i>"
# return wrapped
# ''' 装饰器什么时候进行装饰'''
# #只要python解释器执行到这行代码时候就已经装饰完了
# @makeBold
# @makeItalic
# def test3():
# print("----3----")
# return "hello world-3"
# ret = test3()
# #在调用f1之前,已经进行装饰了
# print(ret)
'''带参数的装饰器'''
# def func(functionName):
# print("---func--1---")
# def func_in(*args,**kwargs):#如果a,b没有定义,那么会到导致16行的调用失败
# print("----func_in--1-")
# functionName(*args,**kwargs)#如果没有把a,b当做实参进行传递,那么会导致调用12行的函数失败
# print("---func_in--2-")
# print("----func-2-")
# return func_in
# @func
# def test(a,b,c):
# print("-----test-a=%d,b=%d,c=%c---"%(a,b,c))
#
# @func
# def test2(a,b,c,d):
# print("------test-a =%d,b=%d,c%d,d=%d----"%(d,b,c,d))
#
# test(11,22,33)
# test2(44,55,66,77)
'''装饰器对有返回值得函数'''
def func(functionName):
print("--func_in--1------")
def func_in():
print("--func_in--1------")
#保存返回的"haha"
xxxx = functionName() #z增加了一个变量存方法引用就可以解决返回值问题
print("-----func_in---2")
return xxxx
print("--func_in--2------")
return func_in
@func
def test():
print("----test----")
return "haha"
ret = test()
print("test return value is%s"%ret)
05-11 18:14