Python学习笔记--装饰器的实验】的更多相关文章

装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢? 我们实验一下,先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2020-03-03 20:26:44 # @Author : Flyinghappy (671474@qq.com) # @Link : https://www.cnblogs.com/flyinghappy/ # @Version : $Id$ import time ''' 装饰器的实验…
1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来不这么单调: def showInfo(fun): def wrap(x,y): print "The function before" func(x,y) print "The function after" return wrap def f(x,y): print…
介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数func_biz_1(), func_biz_2()... 里面写的是业务逻辑代码.如果我们现在希望在每个函数里面增加一些辅助功能(比如打印日志,计算函数运行时间) 这些辅助功能的代码都是通用的.不使用decorator的情况下我们就要在业务函数里面增加这些辅助代码,缺点: 辅助功能的代码重复copy…
本篇内容为偷窃的~哈哈,借用一下,我就是放在自己这里好看. 引用地址:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 第一步:最简单的函数,准备附加额外功能 '''示例1: 最简单的函数,表示调用了两次''' def myfunc(): print("myfunc() called.") myfunc() myfunc() 第二步:使用装饰函数在函数执行前和执行后分别附加额外功能 def deco(func):…
python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer():    #函数名作为参数进行返回 print('hello world') def inner(): print('this is inner') return inner f=outer()   #这个时候f=inner f()   #这个好比执行了inner() def sum(n):    …
装饰器(二)&模块 #普通装饰器基本格式 def wrapper(func): def inner(): pass return func() return inner def func(): pass func = wrapper(func) func() #带参数装饰器基本格式 def w(counter): def wrapper(func): def inner(*args,**keargs): lis = [] for i in range(0,counter): a=func(*ar…
装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等. 装饰器,可以让我们抽离出大量与函数功能本身无关的相同代码并在装饰器函数中使用 装饰器的三个重要要素: 一.作用域 二.高阶函数 三.闭包 一.作用域 在上一节的函数中,我们详细介绍了函数的4种作用域: L.local,局部作用域:E.enclosing,嵌套作用域:G.global,全局作用域:…
高阶函数+嵌套函数 == 装饰器 什么是装饰器: 其实也是一个函数. 功能:为其他的函数添加附加功能 原则:不能修改被装饰的函数的源代码和调用方式 学习装饰器前首先要明白以下3条事项: 1:函数 即 “变量” (什么意思呢,就是说我们定义的一个函数,其中函数名就是一个变量,函数体就是存于内存的数据). def foo(): #函数名就相当于变量 print('test') #函数体就相当于内容 类似于:x(变量) = 1(内容) 内容实际存储于内存,变量相当于门牌号(映射内存内容). 实例 de…
1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本用法 def test(func): def warpper(*args,**kwargs): print("====start====") func(*args,**kwargs) print("=====end====") return warpper @test…
装饰器模式,最典型的例子. 工厂新开了流水线,生产了手机外壳,蓝天白云花色.刚准备出厂,客户说还要印奶牛在上面,WTF…… 时间上来不及,成本也不允许销毁了重来,怎么办?弄来一机器A,专门在蓝天白云的外壳再印奶牛. 最后通过机器A的装饰,得到了有奶牛的外壳. 装饰器中调用传递进来的Component的方法,同时再附加上新的方法,在保证外部接口一致的情况下,达到增加新行为的目的. 简单代码,仅包含父类和装饰器: class CComponent { public CComponent() { }…
装饰器&推导式 传参位置参数在前,关键词参数在后 函数不被调用内部代码不被执行 函数在被调用的时候,每次都会开辟一个新的内存地址,互不干扰 #经典案例 def func(num): def inner(): print(num) return inner result = [] for i in range(10): f = func(i) result.append(f) v1 = result[0]() v2 = result[9]() print(v1,v2) 1.装饰器 装饰器:在不改变…
函数知识回顾: 函数的参数分为:实参和形参. 实参:调用函数的时候传入的参数: 形参:分为3种(位置参数.默认参数.动态传参) 位置参数:必须传值 def aaa(a,b): print(a,b) aaa(1,2) 默认参数:不是必须传参数 def bbb(x=10): print(x) # bbb() #x = 10 # bbb(20) #x = 20 动态传参 def ccc(*args):#1,2,3,4,5 print(args) ccc(1,2,3,4,5)#按位置传参数 t = (1…
装饰器:本质就是函数.是为其他函数添加附加功能的. 原则:1.不修改被修饰函数的源代码2.不修改被修饰函数的调用方式 --- 装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 高阶函数 1.高阶函数的定义 ····函数接收的参数是一个函数名 ····函数的返回值是一个函数名 ····满足上述条件任意一个,都可称之为高阶函数 ········· def foo(): print('hello world') def test(func): print(func) func() test(foo)…
函数闭包举例: def father(name): print('hello world') def son(): print('儿子说:我的爸爸是%s' % name) def grandfson(): print('孙子说:我的爷爷是%s' % name) grandfson() son() father('小明') 运行结果: hello world 儿子说:我的爸爸是小明 孙子说:我的爷爷是小明 Process finished with exit code 0 函数的包: 就是嵌套里的…
由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25') ... >>> f = now >>> f() 2015-3-25 函数对象有一个__name__属性,可以拿到函数的名字: >>> now.__name__ 'now' >>> f.__name__ 'now' 现在,假设我们要增强now()函数的功能,比如…
函数闭包为函数加上认证功能 1.登陆账号 user_dic ={'username':None,'login':False} def auth_func(func): def wrapper(*args,**kwargs): if user_dic['username'] and user_dic['login']: res = func(*args,**kwargs) return res username = input('账号:').strip() passwd = input('密码:'…
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) 年前工作事务比较繁琐,我只能用零碎的时间继续学习Python,决定开一个系列的博文,作为自己深入学习Python的记录吧.名字也取好了,就叫<ZMAN的学习笔记之Python篇>~开篇是关于装饰器的,春节假期码的字哈哈~就让我们开始吧! 本文的例子都是自己想的,如果不是很合适,请大家提出宝贵意见…
Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已实现的功能代码块 开放:对扩展开发 装饰器是 Python 高阶函数的语法糖,可以为已经存在的对象添加额外的功能,比如: 引入日志 函数执行时间统计 执行函数前预备处理 执行函数后清理功能 权限校验等场景 缓存 Python 装饰器的基本实现 装饰器的例程: #!/usr/bin/env pytho…
这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 生成器(generator) 生成器最大的优点在于它支持延迟操作,所谓的延迟操作是指在需要的时候才进行运算产生结果 我们可以使用以下两种方法 创建生成器: 生成器表达式 类似于列表生成式,只需将列表生成式中的中括号替换成圆括号即可 >>> gen = (item for item in ra…
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho…
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python…
Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1[, module2[,... moduleN] # 当我们使用import语句的时候,Python解释器通过自己的搜索路径(存在sys.path里)进行搜索 from-import 语句 from modname import name1[, name2[, ... nameN]] # 这个声明不…
Python学习笔记(十): 装饰器的应用 列表生成式 生成器 迭代器 模块:time,random 1. 装饰器的应用-登陆练习 login_status = False # 定义登陆状态 def type(auth_type): # 装饰器传参函数 def login(fucn): # 装饰器函数 def inner(): # 附加功能 global login_status # 将登陆状态变量变为全局变量 if login_status == False: if auth_type ==…
Python学习笔记(九): 装饰器(函数) 内置函数 1. 装饰器 1. 作用域 2. 高阶函数 3. 闭包 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure). def outer(): x = 10 def inner(): # 条件一:inner是内部函数 print(x) # 条件二:外部环境的一个变量 return inner() # 结论:内部函数inner就是一个闭包 # 两种调用inner的方法 outer()…
本文链接地址 http://quqiuzhu.com/2016/python-multiprocessing/ Python 解释器有一个全局解释器锁(PIL),导致每个 Python 进程中最多同时运行一个线程,因此 Python 多线程程序并不能改善程序性能,不能发挥多核系统的优势,可以通过这篇文章了解. 但是多进程程序不受此影响, Python 2.6 引入了 multiprocessing 来解决这个问题.这里介绍 multiprocessing 模块下的进程,进程同步,进程间通信和进程…
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结构与算法week7 GUI编程week8 网络编程与并发编程(操作系统)week9 数据库入门week10 常用数据库week11 LINUX操作系统week12 - week16 前端学习week17 网络框架之入门week18 网络框架之django框架week19 网络框架之flask框架we…
原文:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意,这本学习笔记不适合Python新手学习. 从目录上看,并不能看出这本笔记有何特别之处,但看到里面的内容,感到非常惊喜.这本书更多的是关注一些底层的实现细节,以及更多的考虑性能方面(讲解内容很多会涉及到内存管理.缓存.垃圾回收.堆栈帧等方面的内容). 目前本笔记的最近更新时间为2013.03.30.大家可以到…
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 10 abs是函数本书,abs(-10)是函数调用 Input: 12 f = absf Output: 1 <function abs> 变量可以指向函数 Input: 1 f(-10) Output: 1 10 函数名也是变量 函数名其实就是指向函数的变量,对于abs()这个函数,完全可以把a…
Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 参数类型 默认值参数 关键参数 可变长度参数 参数传递时的序列解包 结束语句 变量作用域 lambda表达式 高级话题map, reduce等 面向对象程序设计 定义与使用 self 类成员与实例成员 私有成员与公有成员 方法 属性 特殊方法与运算符重载 继承 文件操作 文件对象 文本文件操作案例…
在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是这样,真佩服我当时厚着脸皮回答的那些问题... OK,先来张图看看装饰器内容: OK,我们留下一个印象,然后我们看实际的场景来操作. 我们先看一个方法: __author__ = 'bruce' def do_sth(): print 'some thing has been done' if __…