摘要:某公司的基础开发平台,有大概N多个函数,boss要求小A,为每个函数添加权限验证功能,而且要求不得修改函数内部结构,让小A尝试从代码外部入手,作为新手小A来讲,这无疑是一个巨大的工作量,难道TM的要一个一个加到里面不可么~~~~生无可恋的小A无奈的望着桌面,在扫过谷歌浏览器图标的那一刻,突然一紧,于是机智的打开谷歌搜索,欲寻到一个简单的方法,经过搜索在一个叫银角大王的lowB博客里面找到了一个叫做装饰器的东东,然后耐心的看了下去……

图解python装饰器的执行流程

 #装饰器的使用
# 自动执行outer函数并且将其下面的函数名f1当作参数传递
# 将outer函数的返回值,重新赋值给f1
# 1、遇到def outer(func) 加载到内存,跳过函数体
# 2、遇到@outer,将f1作为参数传入func中
# 3、遇到def inner():将函数加载到内存跳过函数体
# 4、遇到return inner,将inner函数作为整体,赋值给f1
# 5、遇到f1(),调用inner函数体,执行print(‘log’)
# 6、遇到return func() 执行作为参数传入func中的老的f1函数的函数体print('F1')
# 7、遇到return 'lululu'将lululu传回f1()中
def outer(func):
def inner():
print('log')
return func()
return inner
@outer
def f1():
print('F1')
return 'lululu'
print(f1())
>>>log
>>>F1
>>>lululu
#带参数的传递
def outer(func):
def inner(a):
print('before')
r=func(a)
print('after')
return r
return inner @outer
def f1(arg):
print(arg)
return 'lululu'
print(f1('huhuh'))
>>>before
>>>huhuh
>>>after
>>>lululu #万能参数传递
def outer(func):
def inner(*args,**kwargs):
print('before')
r=func(*args,**kwargs)
print('after')
return r
return inner
@outer
def f1(arg):
print('f1函数体',arg)
return 'lululu'
print('返回值',f1('huhuhu'))
>>>before
>>>f1函数体 huhuhu
>>>after
>>>返回值 lululu @outer
def f2(a1,a2):
print('f2函数体','F2')
return 'aa' 'bb'
print('返回值',f2('hu','lu'))
>>>before
>>>f2函数体 F2
>>>after
>>>返回值 aabb

python-day4-装饰器的使用的更多相关文章

  1. 小白的Python之路 day4 装饰器前奏

    装饰器前奏: 一.定义: 1.装饰器本质是函数,语法都是用def去定义的 (函数的目的:他需要完成特定的功能) 2.装饰器的功能:就是装饰其他函数(就是为其他函数添加附加功能) 二.原则: 1. 不能 ...

  2. 小白的Python之路 day4 装饰器高潮

    首先装饰器实现的条件: 高阶函数+嵌套函数 =>装饰器 1.首先,我们先定义一个高级函数,去装饰test1函数,得不到我们想要的操作方式 import time #定义高阶函数 def deco ...

  3. Python各式装饰器

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  4. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  5. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

  6. 【转】详解Python的装饰器

    原文链接:http://python.jobbole.com/86717/ Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现 ...

  7. 两个实用的Python的装饰器

    两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...

  8. python 基础——装饰器

    python 的装饰器,其实用到了以下几个语言特点: 1. 一切皆对象 2. 函数可以嵌套定义 3. 闭包,可以延长变量作用域 4. *args 和 **kwargs 可变参数 第1点,一切皆对象,包 ...

  9. 理解Python中的装饰器//这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 这篇文章将python的装饰器来龙去脉说的很清楚,故转过来存档 ...

  10. python基础—装饰器

    python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...

随机推荐

  1. freebsd开启root远程登陆

    i /etc/ssh/sshd_config 找到: #PermitRootLogin no改在: PermitRootLogin yes

  2. cms-帖子幻灯图片上传

    package com.open1111.controller.admin; import java.io.File;import java.util.Date;import java.util.Ha ...

  3. 允许被ping设置方法

    参考下图设置:

  4. HDU5124 lines

    离散化 + 树状数组. 这些东西自己都是刚接触不久的,所以需要多写点题练练手. 题目描述: 一维坐标中有N条线段,其中有一个点上面覆盖的线段数是最多的,求该点上面的线段数目. 这道题和HDU1556特 ...

  5. pat乙级1052

    输出“\”字符: cout << "\\"; 因为‘\’是转义字符,例如“\n”代表换行. 同理,printf输出“%”: printf("%%") ...

  6. IOS 获取文本焦点 主动召唤出键盘(becomeFirstResponder) and 失去焦点(退下键盘)

    主动召唤出键盘 - (void)viewDidAppear:(BOOL)animated { // 3.主动召唤出键盘 [self.nameField becomeFirstResponder]; / ...

  7. Java 使用正则表达式取出图片地址以及跳转的链接地址,来判断死链(一)

    任务:通过driver的getPageSource()获取网页的源码内容,在把网页中图片链接地址和跳转的url地址进行过滤,在get每个请求,来判断是否是死链 如图: 获取网页源码中所有的href,以 ...

  8. 复习C++_基础、函数、数组、字符串

    程序的开发过程 程序 源程序:用源语言写的,有待翻译的程序: 目标程序:源程序通过翻译程序加工以后生成的机器语言程序: 可执行程序:连接目标程序以及库中的某些文件,生成的一个可执行文件,例如Windo ...

  9. dom事件操作例题,电子时钟,验证码,随机事件

    dom事件操作 当事件发生时,可以执行js 例子: 当用户点击时,会改变<h1>的内容: <h1 onClick="this.innerHTML='文本更换'"& ...

  10. expect用法举例

    1 expect -c 'spawn su - oracle -s check_tablespace.shexpect "Password:"send "oracle\n ...