首页 > 代码库 > python 函数之day4

python 函数之day4

一.装饰器

了解一点:写代码要遵循开发封闭原则,虽然这个原则是面向对象开发,但也适用于函数式编程,简单的来说,就是已经实现的功能代码不允许被修改但

             可以被扩展即: 

  • 封闭:已实现功能的代码块
  • 开发:对扩张开发
#需求对一个现有基础功能函数每个要加上打印一条日志

#用装饰器实现如下:

#def outer():              #通常的做法是在定义一个新的函数,将函数加入到需要调用的函数体内
# print (‘log‘)
def outer(func): #定义装饰器函数 def inter(): #定义内层函数 print(‘log‘) return func() return inter
@outer                            #使用装饰器
def f1():
    #outer()
    print(‘F1‘)

@outer
def f2():
    #outer()
    print("F2")


@outer
def f100():
    #outer()
    print(‘F100‘)

  装饰器的流程

# @ + 函数名
#功能:
#  1.自动执行outer函数并且将其下面的函数名f1当作参数传递
#  2.将outer函数的返回值,重新赋值f1

上段代码执行的过程

#定义函数,未调用,函数内部不执行
# 函数名 :代指函数

#下段代码执行过程
# 1->2->3->4
#  总结:执行完后的f1 函数体即为inter函数的内部代码

def outer(func):        # 1.有关键字def 将outer函数体内部放入内存
    def inter():            # 3.将 inter 函数体放入内存
        print(‘before‘)
        func()
    return inter        # 4.整体返回inter函数(注意没有括号),将返回值赋值给下面的f1函数


@outer              #  2.整体解释outer和f1函数,并且将下面的f1 函数当成outer函数的参数
def f1():              
    print(‘F1‘)

装饰器之返回值

如果上面原函数f1,f2有返回值,怎么办?
def outer(func):
    def inter():
        print(‘before‘)    #被装饰函数前做的操作
        ret = func()
        print(‘after‘)     #被装饰函数后做的操作
        return ret         # 返回原函数的返回值
    return inter


@outer
def f1():
    print(‘F1‘)
    return ‘我是返回值1‘


@outer
def f2():
    print(‘F2‘)
    return ‘我是返回值2‘

  

python 函数之day4