'''
闭包:在函数体重定义内部函数,并且使用了外部函数的变量,然后把内部函数给返回
那么这个内部函数就是闭包
优点:避免污染全局环境,这样就可以在函数体外使用函数体中定义的变量
缺点:长期占用内存,造成内存浪费
'''
a =10
def fun1():
b = 20
def fun2():
c=30
return b
return fun2
f2 = fun1()
print(f2())
'''
装饰器:把一个函数作为参数返回一个替代版函数,本质上就是一个返回函数的函数
'''
#在不修改原函数的前提下增加函数的功能,最好的方式是使用装饰器
def func():
print("sunck is a good man")
def wrapper(f):
def inner():
print("***********")
f()
return inner
#d = wrapper(func)
#d()
func = wrapper(func)
func()
def say(name,age):
return "%s is good man!he is %d years old"%(name,age)
print(say("sumck",18))
def wrapper2(f):
def inner2(name,age):
if age<=0:
age = 0
return f(name,age)
return inner2
print(say("sunck",-18))