python装饰器(一)闭包功能

闭包的功能和作用:

*闭包的作用是用来增强原有函数的功能
*在有些情况下,不能在原有的函数上增加内容,而闭包可以在外部函数中,定义一个内部函数,在内部函数引用原来的函数,并增加内容,随后返回这个内部函数(重点是这一句,外部函数返回的结果是内部函数)

举个例子,如下(要求不能改变sum函数,并增加功能):
sum函数(主函数)主要是将1到100的数都加起来。
show函数(辅助函数)中定义了一个show_in函数在里面写入增加的内容并引用sum函数,随后将show_in返回,返回后的函数是增强后的函数。
辅助函数中不能不定义内部函数,因为辅助函数的结果就是为了返回内部函数(新手会想着不定义内部函数,利用外部函数直接增强然后返回外部函数,这是错误的).

def sum():
    sumdate = 0
    for i in range(1,101):
        sumdate += i
    print(sumdate)

def show(fun):
    def show_in():   #定义了内部函数show_in
        print('1到100的和:')
        fun()
    return show_in

my_sum = show(sum)    #将返回的函数(show_in)给了my_sum,此时这里的my_sum就不是普通的变量了,而是一个函数(增强后的函数)
my_sum()        #调用my_sum

输出结果是:
1到100的和:
5050

*还能将两个函数合并在一起使用,并产生一个新函数

import time

def odd_sum():
    sumdate = 0
    for i in range(1,101):
        if i%2 == 1 :
            sumdate += i
    print(sumdate)

def even_sum():
    sumdate = 0
    for i in range(1,101):
        if i%2 == 0 :
            sumdate += i
    print(sumdate)

def show(fun1,fun2):
    def show_in():
        print('1到100的奇数和:')
        fun1()
        print('1到100的偶数和:')
        fun2()
    return show_in

sum = show(odd_sum,even_sum)    #将返回的函数(show_in)给了sum
sum()      #调用sum函数

输出结果是:
1到100的奇数和:
2500
1到100的偶数和:
2550

posted @ 2022-05-27 17:59  L_野心家  阅读(42)  评论(0编辑  收藏  举报