python 函数之day4
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章