python装饰器

python的装饰器

↘锁芯ラ 提交于 2020-01-19 09:13:01
#### 装饰器 把一个函数当作参数传递给另一个函数 返回一个替代版的函数 本质上 就是一个返回函数的函数 在不改变原函数的基础上 给函数增加功能 练习一 # 输入一个数字,输出与 1 相加的结果 def add_one ( number ) : return number + 1 a = add_one ( 2 ) #调用函数 print ( a ) 练习二 函数可以作为参数被传递 def say_hello ( name ) : return f "Hello {name}" def be_some ( name ) : return f "Your {name}" def greet_bob ( func ) : return func ( "Bob" ) print ( greet_bob ( say_hello ) ) print ( greet_bob ( be_some ) ) 练习三 使用装饰器 def say ( ) : print ( 'hello' ) def fun ( ) : print ( '**********' ) say ( ) # 先调用 fun ( ) 函数 , 打印出 * ,然后执行fun函数里的 say ( ) 函数,打印出hello fun ( ) 练习四 def say ( ) : print ( 'hello' ) def hello

python 内建函数专题

ε祈祈猫儿з 提交于 2020-01-18 11:19:39
all 用来控制 import , 甚至可以改变 _private 为 public enter , exit 用于上下文管理器 iter 用于迭代器 repr 给计算机读, str ==》 str 给人读 len ==》 len obj: ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] 重写 + >>> class Number(object): ... def __init__(self,value): ... self.value = value ... def __add__(self,other): ... return self.value+other.value ... >>> Number(3)+Number(4) 7 实现类似字典操作 >>> class

Python装饰器学习笔记

China☆狼群 提交于 2020-01-18 11:16:16
装饰器(Decorators) 装饰器是 Python 的一个重要部分。它是修改其他函数的功能的函数,有助于让我们的代码更简短 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。 概括的讲,装饰器的作用就是 为已经存在的函数或对象添加额外的功能 。 为什么需要装饰器 我们假设你的程序实现了 func_enter() 和 func_quit() 两个函数。 def func_enter(): print "enter!"def func_quit(): print "enter!" # bug hereif __name__ == '__main__': func_enter() func_quit() 运行结果: enter! enter! (wda_python) bash-3.2$ 但是在实际调用中, 我们发现程序出错了, 上面打印了2个enter。经过调试我们发现是func_quit()出错了 现在假如要求调用每个方法前都要记录进入函数的名称, 比如这样: [DEBUG]: enter func_enter()

12步轻松搞定python装饰器

情到浓时终转凉″ 提交于 2020-01-18 10:40:14
12步轻松搞定python装饰器 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂。搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数相关语法的一些特点。 我没法让装饰器变得简单,但是通过一步步的剖析,我也许能够让你在理解装饰器的时候更自信一点。因为装饰器很复杂,这篇文章将会很长(自己都说很长,还敢这么多废话blablabla...前戏就不继续翻译直接省略了) 1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: >>> def foo(): ... return 1 >>> foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: >>> a_string = "This is a global variable" >>> def foo(): ... print

python 装饰器

浪子不回头ぞ 提交于 2020-01-18 10:38:09
[译] 12步轻松搞定python装饰器 字数6504 阅读7477 评论12 喜欢49 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂。搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数相关语法的一些特点。 我没法让装饰器变得简单,但是通过一步步的剖析,我也许能够让你在理解装饰器的时候更自信一点。因为装饰器很复杂,这篇文章将会很长(自己都说很长,还敢这么多废话blablabla...前戏就不继续翻译直接省略了) 1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: >>> def foo(): ... return 1 >>> foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: >>> a_string = "This is a global

python文章装饰器理解12步

感情迁移 提交于 2020-01-18 10:36:01
1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: def foo(): return 1 foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: a_string = "This is a global variable" def foo(): print locals() print globals() # doctest: +ELLIPSIS {, 'a_string': 'This is a global variable'} foo() # 2 {} 内置的函数globals返回一个包含所有python解释器知道的变量名称的字典(为了干净和洗的白白的,我省略了python自行创建的一些变量)。在#2我调用了函数 foo 把函数内部本地作用域里面的内容打印出来。我们能够看到,函数foo有自己独立的命名空间,虽然暂时命名空间里面什么都还没有。 3.

python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)

谁说我不能喝 提交于 2020-01-18 10:34:32
转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂。搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数相关语法的一些特点。 我没法让装饰器变得简单,但是通过一步步的剖析,我也许能够让你在理解装饰器的时候更自信一点。因为装饰器很复杂,这篇文章将会很长(自己都说很长,还敢这么多废话blablabla前戏就不继续翻译直接省略了) 1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: def foo(): return 1 foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够调用函数 2. 作用域 在python中,函数会创建一个新的作用域。python开发者可能会说函数有自己的命名空间,差不多一个意思。这意味着在函数内部碰到一个变量的时候函数会优先在自己的命名空间里面去寻找。让我们写一个简单的函数看一下 本地作用域 和 全局作用域有什么不同: 1 a_string = "This is a global variable" 2 def foo(): 3 print

Python中的闭包和装饰器

非 Y 不嫁゛ 提交于 2020-01-18 10:30:46
1.闭包 专业解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。 通俗解释:简单说,闭包就是根据不同的配置信息得到不同的结果 例子: def make_adder(addend): def adder(augend): return augend + addend return adder p = make_adder(23) q = make_adder(44) print p(100) print q(100) 执行结果: 123 144 2.装饰器 概念:对函数(参数,返回值等)进行加工处理,生成一个功能增强版的一个函数。 例子: def log(text): def decorator(func): def wrapper(*args, **kw): print '%s %s():' % (text, func.__name__) return func(*args, **kw) return wrapper return decorator @log('execute') def now(): print '2013-12-25' 执行结果: >>> now()

python面试准备(1)

两盒软妹~` 提交于 2020-01-18 09:41:44
python基础知识 1.装饰器 python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。 这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数。 举例,用deco(f)做装饰器,计算程序运算时间 import time def deco(f): def wrapper(*args, **kwargs): start_time = time.time() f(*args, **kwargs) end_time = time.time() execution_time_ = (end_time - start_time)*1000 print("time is %d ms" %execution_time) return wrapper @deco def f(a,b): print("be on") time.sleep(1) print("result is %d" %(a+b)) if __name__ == '__main__': f2(3,4,5) f(3,4) 装饰器调用顺序 装饰器是可以叠加使用的,那么使用装饰器以后代码是啥顺序呢? 对于Python中的”@”语法糖,装饰器的调用顺序与使用 @ 语法糖声明的顺序相反。越靠近方法的修饰器越早调用

python的装饰器 --函数计算器

女生的网名这么多〃 提交于 2020-01-18 09:36:21
题目 装饰器实现一个函数计时器 1.被装饰的函数有返回值怎么办 2.如何保留被装饰函数的函数名和帮助信息文档 编程 import time import random import string import functools li = [ random . choice ( string . ascii_letters ) for i in range ( 100 ) ] def timeit ( func ) : @functools . wraps ( func ) def wrapper ( * args , * * kwargs ) : # 接收可变参数 和关键字参数 "" "这是一个装饰器timeit" "" # 在函数运行只前 start_time = time . time ( ) # 执行函数 res = func ( * args , * * kwargs ) # 在函数运行之后 end_time = time . time ( ) print ( '运行时间为:%.6f' % ( end_time - start_time ) ) return res return wrapper @timeit def con_add ( ) : s = '' for i in li : s + = ( i + ',' ) print ( s ) @timeit def