1,函数的有用信息

from functools import wraps#引用模块
def wrapper(f):  # f = func1
    @wraps(f)def inner(*args,**kwargs): #聚合#args (1,2,3)'''执行函数之前的相关操作'''ret = f(*args,**kwargs)  # 打散 1,2,3'''执行函数之后的相关操作'''return retreturn inner

2,装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。

def func1():"""此函数是什么功能,参数分别是什么作用。:return: 返回值是登录成功与否(True,False)"""print(999)return Truefunc1()
print(func1.__name__)
print(func1.__doc__)

def func1():"""此函数是完成什么的功能,参数分别是。。。作用。:return: 返回值是登录成功与否(True,False)"""print(666)print(func1.__name__)print(func1.__doc__)return True
func1()

3,装饰器带多个参数

import time
def timmer(*args,**kwargs):def wrapper(f):def inner(*args,**kwargs):if flag:start_time = time.time()ret = f(*args,**kwargs)time.sleep(0.3)end_time = time.time()print('此函数的执行效率%f' % (end_time-start_time))else:ret = f(*args, **kwargs)return retreturn innerreturn wrapperflag = True
@timmer(flag,2,3)  # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器
def func1():print(666)@timmer(flag)
def func2():print(777)
func1()
func2()

4,多个装饰器装饰一个参数

def wrapper1(func):  # func ==  f函数名def inner1():print('wrapper1 ,before func')  # 2
        func()print('wrapper1 ,after func')  # 4return inner1def wrapper2(func):  # func == inner1def inner2():print('wrapper2 ,before func')  # 1
        func()print('wrapper2 ,after func')  # 5return inner2
# @wrapper3
@wrapper2  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
@wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
def f():  # 3print('in f')f()  # inner2()

Python语言函数代码的执行流程,为了保证函数的定义先于其首次调用时执行,我们需要知道中语句的执行顺序。

执行总是从程序的第一行代码开始的,从上到下,从左到右,按顺序依次执行第一条语句。

函数定义并不会改变程序的执行流程,但应该注意函数代码块中的语句并不是立即就执行的,而是等到函数被程序调用时才会执行。

函数调用可以看作程序执行流程中的一个迂回路径,遇到函数调用时,并不会直接继续执行下一条语句,而是跳到函数体的第一行,继续执行完函数代码块的所有语句,再跳回到原来离开的地方。

看似比较简单,一会你会发现,函数代码块中可以调用其他函数,当程序流程运行到一个函数之中时,可能需要执行其他函数中的语句。但当执行那个函数中的语句时,又可能再需要调用执行另一个函数的语句。

幸好Python对于它运行到哪里有很好的记录,所以在每个函数执行结束之后,程序都能跳回到它离开的那个地方,直到执行到整个程序的结尾,才会结束程序。

当我们看别人的Python代码的时候,并不总是应该一行行的按照书写顺序来阅读,有时候,按照执行的流程来阅读代码,理解代码的含义才会更好一些。

转载于:https://www.cnblogs.com/yzxing/p/8692313.html

4-2日装饰器,带参数的装饰器相关推荐

  1. 装饰器-带参数的装饰器动态传值

    带参数的装饰器动态传值 文章目录 带参数的装饰器动态传值 装饰器实现的简单实现 装饰器参数动态传入值 把装饰器实例方法 改成静态方法 装饰器函数写类的外面 总结一下 ​ 有一个函数,返回字符串类型, ...

  2. python 装饰器 参数-[Python]写个带参数的装饰器

    上篇文章 Python装饰器为什么难理解?从函数到装饰器一步一步介绍了Python装饰器的来由,不知你对装饰器理解了没有,强烈建议你自己动手写个装饰器应用到项目中加深理解.装饰器可以很简单,也可以很复 ...

  3. python全栈学习--day12(函数高级应用-带参数的装饰器,多个装饰器装饰一个函数)...

    函数的执行时,*打散 函数的定义时,*聚合 from functools import wrapsdef wrapper(f):@wraps(f)def inner(*args,**kwargs):' ...

  4. python装饰器传递参数_Python装饰器高级版—Python类内定义装饰器并传递self参数...

    本文重点:解决了类里面定义的装饰器,在同一个类里面使用的问题,并实现了装饰器的类属性参数传递 目录: 一.基本装饰器 二.在类里定义装饰器,装饰本类内函数 三.类装饰器 正文: 一.基本装饰器 装饰不 ...

  5. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

  6. python 装饰器 参数-Python装饰器(4)带参数的装饰器

    内容纯属个人理解,不对之处,欢迎指正. 之前说过,装饰器其实就是函数,既然是函数,那就可以有参数,装饰器也不例外,接下来我们来分析带参数的装饰器. 如何构造带参数 带参数倒是很简单,在装饰的时候给装饰 ...

  7. python装饰器函数-python函数装饰器之带参数的函数和带参数的装饰器用法示例

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

  8. python带参数的装饰器_Python-----带参数的装饰器以及补充

    带参数的装饰器 def wrapper_out(n): # def wrapper(f): # def inner(*args,**kwargs): # # if n == 'qq': # # use ...

  9. Python带参数的装饰器

    在装饰器函数里传入参数 # -*- coding: utf-8 -*- # 2017/12/2 21:38 # 这不是什么黑魔法,你只需要让包装器传递参数: def a_decorator_passi ...

  10. Python:闭包(简介、使用方法、nonlocal修改闭包内使用的外部变量)、装饰器(定义、作用、通用装饰器、多个装饰器、带参数的装饰器、类装饰器、装饰器方式添加WEB框架的路由)

    一.闭包的介绍 闭包可以保存函数内的变量 当闭包执行完毕,外部函数的变量才释放. # 闭包的作用:可以保存外部函数的变量 # 闭包的形成条件 # 1.函数嵌套 # 2.内部函数使用了外部函数的变量或者 ...

最新文章

  1. Response.Redirect 打开新窗体的两种方法
  2. python和c-C和Python我该先学什么?
  3. 【Groovy】Groovy 扩展方法 ( 静态扩展方法配置 | 扩展方法示例 | 编译静态扩展类 | 打包静态扩展类字节码到 jar 包中 | 测试使用 Thread 静态扩展类 )
  4. OSG模拟鼠标事件影响操纵器
  5. 百度知道回答的依赖注入
  6. eclipse 安装反编译软件jadclipse
  7. 单片机单口不可用或被占用_昆明工业控制单片机应用开发价格
  8. MYSQL IFNULL函数的使用
  9. SAP UI5 SmartForm 智能表单控件的使用方法介绍试读版
  10. 2007 Microsoft Office 加载项:Microsoft Save as PDF 或 XPS
  11. HTTP URL长度限制
  12. 12星座哪些人会重友轻爱?
  13. 管理信息系统MIS复习总结
  14. 视频处理VideoCapture类---OpenCV-Python开发指南(38)
  15. 【笔记】Stellarium怎么截图
  16. Android基于WIFI实现电脑和手机间数据传输的技术方案研究
  17. 【九校3D2T3】世界第一的猛汉王
  18. MFC——画笔和画刷
  19. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!
  20. 【c++面向过程实验6】函数

热门文章

  1. 内部收益率irr_介绍一个神器,内部收益率IRR
  2. pixel和毫米怎么换算_压力传感器相关压力单位换算
  3. 获取文件夹下的文件名并存入txt中
  4. java广度优先爬虫示例,【爬虫】广度优先遍历抓取数据概述
  5. java 类型不可视_jvm高级特性(5)(1)(原子性,可见性,有序性,volatile,概述)
  6. mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义
  7. voxelnet_ue4商城资源Voxel Sandbox Toolkit体素沙盒工具箱
  8. Ubunt中卸载protobuf与安装3.6.0版本步骤
  9. pat 乙级 1047 编程团体赛(C++)
  10. 同一交换机的不同VLAN如何隔离?